一、常见网络编程面试题目
1. 简述 OSI 七层协议。
答: OSI是一个开放性的通信系统互连参考模型,它是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。
2. 简述 TCP/IP 四层协议。
答: TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:链路层、网络层、传输层(主机到主机)、和应用层。它们的含义分别是:
- 链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
- 网络层(互联网层):处理分组在网络中的活动,比如分组的选路。
- 传输层:主要为两台主机上的应用提供端到端的通信。
- 应用层:负责处理特定的应用程序细节。
3.TCP 和 UDP 的区别是什么?
答:
1) TCP 是面向连接的,UDP 是面向无连接的
2) UDP程序结构较简单
3) TCP 是面向字节流的,UDP 是基于数据报的
4) TCP 保证数据正确性,UDP 可能丢包
5) TCP 保证数据顺序,UDP 不保证
4. TCP 连接建立的时候 3 次握手的具体过程,以及其中的每一步是为什么?
答: 在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。具体解释如下:
第一次握手:当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为x,等待服务器确认,这时客户端的状态为SYN_SENT。
第二次握手:当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,这里的ACK为x+1,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包,这里我们设SYN为y。这时服务器的状态为SYN_RECV。 一句话,服务器端发送SYN和ACK两个包。
第三次握手:客户端收到服务器发送的SYN和ACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们即能合体了”,这里的ACK为y+1,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接成功。 在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。
5. TCP 断开连接的具体过程,其中每一步是为什么那么做?
答: TCP断开连接一共需要4步,称为四次挥手,具体如下:
第一次挥手:A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段,这里的FIN是Finish的意思。
第二次挥手:B端收到A发送的FIN后,B段现在可能现在还有数据没有传完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下呗”。
第三次挥手:当B端的事情忙完了,那么此时B端就可以断开连接了&#