本文于2019年10月首发于公众号“码农的修炼之道”上,本文来源于本人多次实际面试总结,希望对各位准备面试者有帮助。
在创作本文的时候,本人前前后后差不多面试了10家大型企业。由于简历上写着熟悉TCP/IP协议,而且投递的岗位都是后台研发,因此关于TCP/IP协议的问题必不可少。下面就总结一波问题,也算是一个阶段性的记录。
1、TCP协议三次握手,四次挥手都很熟悉了,那么为什么需要三次握手呢?
这是AB面试的时候问的,我首先介绍了一下三次握手的过程(包括发送包),他说这个大家都知道,问为什么需要三次握手的根本目的。
-
第一层理解,三次握手的目的是确认双方数据包发送和接收的能力。首先假设客户端发送一个SYN包给服务端,这是第一次握手。假如此时服务端收到了该报文,说明服务端知道客户端“发送消息”没有问题。此时,服务端发送SYN+ACK消息给客户端,这是第二次握手。假如此时客户端收到了该报文,说明客户端知道服务端“发送消息”和“接收消息”没有问题。但是此时服务端只知道客户端“发送消息”没有问题,不知道它“接收能力”怎么样。此时,客户端再次发送新的ACK给服务端,这是第三次握手。假如服务端收到了,说明客户端“发送”和“接收”都没有问题。此后,可以正常通信。
-
第二层次理解,刚开始客户端处于close状态,服务端处于listen状态(因为服务端会listen本地端口,然后accept连接,客户端发起connect)。第一次握手,客户端给服务端发送SYN,且指明了客户端初始化序列ISN,