武汉金信润天
免费服务热线:15271882667
微信在线咨询:15271882667
武汉金信润天:027-87532688
北京金信润天:010-88134881
扫一扫
关注我们
TCP谈三次恋爱、分手四次是个渣男么?
时间:2018-08-30 15:41    浏览次数:     发布者:runtimewh    来源:未知    
0

TCP三次握手和四次断开不管是在开发还是面试中都是一个非常重要的知识点,它是我们优化web程序性能的基础。

 

但是大部分教材都对这部分解释的比较抽象,本文我们就通俗易懂的讲清楚这一重要的知识点

 

每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。三次握手就发生在连接建立阶段。

 

TCP三次握手的目的是为了解决网络中存在延迟的重复分组的问题。

TCP 三次握手

 


TCP 三次握手就好比于男生开始告白女生,但女生又不敢完全确认,这是朋友之间闹着玩,还是认真的,所以需要相互确认来确定恋爱关系。

 

 

1、男生首先向女生告白(syn),女生收到后露出惊讶的表情,然后向对方点头示意(ack)

2、男生看到对方点头后,确定自己的告白被同意进入恋爱状态(Estalished)

3、但是此时女生还是有点质疑,这是不是跟自己闹着玩的,所以女生反问一句,你真的喜欢我吗(syn)

4、此时,男生向对方做出肯定的回答(ack),女生收到后同时进入恋爱状态(Estalished)

5、于是两人拥抱在了一起

 

总结过程

其实是分了四步完成

1.男生告白(syn)

2.女生确认(ack)

3.女生反问(syn)

4.男生确认(ack)

图一

 

而大家需要注意的是,在该过程中,其实女生执行的两次动作,是一次一起完成的,于是四个动作简化分三步完成。

 

男生告白--女生同意并同时反问对方--男生确认

 

如图一,出现两个状态 syn_sent 与 syn_rcvd 这是用来标识建立 TCP 连接的两端的建立过程的


syn_sent 是主动打开方,syn_rcvd 是被动打开方

 

建立 TCP 连接状态切换

 

初始阶段,建立 TCP 连接的两端进程都处于CLOSED 状态。

 

服务器端的 TCP 服务器进程先创建传输控制模块 TCB,准备接受客户进程的连接请求,然后服务器进程就处于 LISTEN (监听)状态,等待客户的连接请求

客户端向服务端发出连接请求报文段,这时首部中的请求位 SYN=1,同时选择一个初始序号 seq=a。

 

TCP规定,SYN 报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号。这时,客户端进程就进入 SYN-SENT(同步已发送)状态。

 

服务端收到连接请求报文段后,向客户端发送确认。在确认报文段中把 SYN 和 ACK 位都置为 1,确认号是ack=a+1,同时也为自己选择一个初始序号 seq=b。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时服务端进程就进入 SYN-RCVD(同步已收到)状态。

 

客户端进程收到服务端确认后,还要向服务端给出确认。确认报文段的 ACK 置为 1,确认号 ack=b+1,而自己的序号seq=a+1。这时,TCP连接已经建立,客户端进入 ESTABLISHED(已建立连接)状态,当服务端收到客户端的确认后,也会进入ESTABLISHED状态。

 

TCP 四次断开

TCP 断开连接与建立连接过程类似,但并不是把中间两步合为一步

分手过程

所以分为如下四步完成
1.男生提分手
2.女生同意
3.女生接着说是我甩的你
4.男生同意 


之所以中间两个动作没有合为一个动作,是因为 TCP 存在半关闭状态

图二

 

如图二:有一个非常特殊的状态 time_wait,该状态是主动提分手一方在确认对方的分手之后的进入的一个状态,该状态标准的持续时间是 4 分钟,4 分钟后才会进入到 Closed 状态,释放端口。

 

它就好比主动分手方要承担的责任,是你提出的要分手,你得付出代价。这个后果就是持续 4 分钟的 time_wait 状态,不能释放套接字资源(端口),就好比守寡期,这段时间内套接字资源(端口)不得回收利用。

 

断开 TCP 连接状态切换

客户端发送断开连接报文,其中 FIN 置位,携带序列号为 a 后,进入 fin_wait_1 状态(终止等待状态)
 

服务器收到客户端连接断开报文段后,就立即给客户端发送确认,其中 ACK 置位,携带序列号 a+1,然后服务器就进入到 close-wait 状态,此时服务器进程就通知高层应用进程,因而从服务器到客户端的连接就释放了。此时是“半关闭”状态。即客户端不可以发送给服务端,但是服务端可以发送给客户端。


此时,若服务端没有数据报要发送给客户端了,其应用进程就通知 TCP 释放连接,然后给客户端发送连接断开报文段,并等待确认。客户端发送确认后,进入 time-wait,注意,此时 TCP 连接还没有释放掉,然后经过时间等待计时器设置的2MSL后,客户端才进入到 close 状态,服务端收到客户端的确认断开报文后,就进入 close 状态。

 

TCP谈恋爱和分手都是日常状态,为的是提供可靠的连接服务。

 

 

本文作者:小王SIR

Double HCIE(R&S\Storage)
湖北省职业院校计算机网络赛项获奖指导老师
新华三杯大学生网络技术大赛获奖指导老师

中国联通武汉高校网络项目实施与管理
湖北青年职业学院信息工程系网络课程教学

相关推荐

总公司地址:北京市海淀区阜外亮甲店1号恩济西园产业园15号楼B座303
武汉分公司地址:湖北省武汉市洪山区虎泉街凯乐桂园A座9层(虎泉地铁站A出口右手边)
咨询报名电话:15271882667(微信同号)   武汉金信润天:027-87532688   北京金信润天:010-88134881
教学就业监督电话:027-87538125    网站地图   备案号:鄂ICP备15010789号-2
姓名
手机
电话咨询 在线咨询 QQ客服