互联网大厂面试题之深入剖析TCP四次挥手

1、为什么要学习?——市场动向分析

  1. 市场背景:
    对于这几年的互联网市场,越来越多的市场需求导致人才输出渠道更加丰富,五花八门的教育机构培训班, 学校对互联网人才的培养同样会显得越来越重视

  2. 问题分析:

    那么,越来越多的人才的出现必将给我们学员带来更大的挑战,怎么增大在互联网市场的竞争力

  3. 解决方案: 从宏观的角度来讲我们首先必须增加自我个体的价值和特色

  4. 总结:

    在学习框架知识的同时,我们应该注重高级知识的学习,让高级篇幅成为自己的特色,从而在压力巨大的 市场中脱颖而出。作为网络知识的一大环节,TCP知识的学习将会给你的知识体系带来特色。显然,TCP知识以及成为大厂选拔人才中常常会涉猎到的加分项。

三次握手讲解地址:https://blog.csdn.net/weixin_42083036/article/details/103349451

2、TCP 状态码分析

  1. SYN 请求同步码 由请求端发出
  2. ACK 状态确认码 一般由请求接收端发出
  3. FIN 结束码 两者都能

3、四次挥手图解
在这里插入图片描述
四次挥手过程分析

        A:“喂,我不说了 (FIN)。”A->FIN_WAIT1
        
        B:“我知道了(ACK)。等下,上一句还没说完。Balabala…..(传输数据)”B->CLOSE_WAIT | A->FIN_WAIT2
        
        B:”好了,说完了,我也不说了(FIN)。”B->LAST_ACK
        
        A:”我知道了(ACK)。”A->TIME_WAIT | B->CLOSED
        
        A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

4、TCP 三次握手、四次挥手十一种状态

  1. CLOSED
  2. LISTEN
  3. SYN-SENT
  4. SYN-RCVD
  5. ESTAB-LISTEN
  6. FIN_WAIT1
  7. CLOSE_WAIT
  8. FIN_WAIT2
  9. LAST_ACK
  10. TIME-WAIT

第十一种特殊状态:CLOSING

    这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。

常见面试题
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

发布了47 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42083036/article/details/103350477