计算机网络面试题总结
Ox01. TCP 与 UDP 区别?
TCP | UDP |
---|---|
面向连接 | 无连接 |
可靠的服务(无差错,不丢失,不重复,且按序到达) | 尽最大努力交付,可靠性由应用层保证 |
面向字节流(提供流量控制/重传等功能) | 面向报文(IP+端口) |
点对点 | 一对一、多对多 |
首部开销20字节 | 首部8字节 |
全双工的可靠信道 | 不可靠信道 |
拥塞控制、流量控制 | 仅仅是对IP数据报加上端口 |
视频通信、实时通信 | |
FTP、Telnet、SMTP、POP3、HTTP | TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS |
Ox02. OSI 七层模型和 TCP/IP 四层模型?
OSI七层模型和TCP/IP四层模型,每层列举2个协议
Ox03. TCP三次握手建立连接?为什么需要3次?
TCP的连接建立过程
第一次握手:客户端发送SYN包(SYN=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
为什么要三次握手?
谢希仁著《计算机网络》第四版中讲 “三次握手” 的目的是 “为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
所谓“已失效的连接请求报文段”是这样产生的,A发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了。于是A再重传一次连接请求,后来收到了B的确认,建立了连接。此时A,一共发送了两个连接请求的报文段,其中第一个丢失,第二个到达B。
现假定出现一种异常一块,即A发出的第一个连接请求报文段没有丢失,而是在某些网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但 B 收到此失效的连接请求报文段后,就误认为是 A 再次发出的一个新的连接请求。于是就向A发出确认报文段,同意建立连接。
假设不采用“三次握手”,那么只要 B 发出确认,新的连接就建立了。由于现在 A 并没有发出建立连接的请求,因此不会理睬 B 的确认,也不会向 B 发送数据。但 B 却以为新的连接已经建立,并一直等待 A 发来数据。这样,B 的很多资源就白白浪费掉了。
采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,A 不会向 B 的确认发出确认。B 由于收不到确认,就知道 A 并没有要求建立连接。”
主要的目的就是防止服务端的“死锁”,因为一直等待而浪费资源。