加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

LINUX实操:TCP三次握手和四次挥手

发布时间:2020-12-13 17:46:25 所属栏目:Linux 来源:网络整理
导读:《LINUX实操:TCP三次握手和四次挥手》要点: 本文介绍了LINUX实操:TCP三次握手和四次挥手,希望对您有用。如果有疑问,可以联系我们。 TCP衔接是通过三次握手来衔接的. 第一次握手 当客户端向服务器发起连接哀求时,客户端会发送同步序列标号 SYN 到服务器,

《LINUX实操:TCP三次握手和四次挥手》要点:
本文介绍了LINUX实操:TCP三次握手和四次挥手,希望对您有用。如果有疑问,可以联系我们。

TCP衔接是通过三次握手来衔接的.

第一次握手

当客户端向服务器发起连接哀求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为m,等待服务器确认,这时客户端的状态为SYN_SENT.

第二次握手

当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,这里的ACK为m+1,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包,这里我们设SYN为n.这时服务器的状态为SYN_RECV.

一句话,服务器端发送SYNACK两个包.

第三次握手

客户端收到服务器发送的SYNACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们即能合体了”,这里的ACK为n+1,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接胜利.

在三次握手中,客户端和服务器端都发送两个包SYNACK,只不外服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的.

三次握手示意图如下(纯手绘,见谅见谅):

在TCP连接中,服务器端的SYNACK向客户端发送是一次性发送的,而在断开连接的过程中,B端向A端发送的ACKFIN是是分两次发送的.因为在B端接收到A端的FIN后,B端可能还有数据要传输,所以先发送ACK,等B端处理完本身的事情后就可以发送FIN断开连接了.

为什么在第四次挥手后会有2个MSL的延时?

前文说到

MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间.

假定网络不可靠,那么第四次发送的ACK可能丢失,即B端无法收到这个ACK,如果B端收不到这个确认ACK,B端会定时向A端重复发送FIN,直到B端收到A的确认ACK.所以这个2MSL便是用来处理这个可能丢失的ACK的.

本文永远更新链接地址

更多LINUX教程,尽在编程之家PHP学院专栏。欢迎交流《LINUX实操:TCP三次握手和四次挥手》!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读