当前位置: 移动技术网 > IT编程>脚本编程>Python > tcp协议的三次握手和四次挥手

tcp协议的三次握手和四次挥手

2019年06月10日  | 移动技术网IT编程  | 我要评论

永隆体育,沙铁希,宜丰天气

先来解释下为什么连接的时候是三次握手,而关闭的时候却是四次挥手呢?

  答 : 这是因为服务端在listen状态下,收到建立连接请求的syn报文后,把ack和syn放在一个报文里发送给客户端。而关闭连接时,当收到对方的fin报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送fin报文给对方来表示同意现在关闭连接,因此,己方ack和fin一般都会分开发送。

 

三次握手的过程:

有点类似于两个人之间的电话通信

 

对应客户端和服务端之间的通信:

 

 step1:

  建立连接时,客户端发送syn包到服务器,其中包含客户端的初始序号seq = x ,进入syn_sent状态,等待服务器确认.  

step2:

  服务器收到请求后,必须确认客户的数据包. 同时自己也发送一个syn包,即syn+ack包,此时服务器进入syn_recv状态

step3:

  客户端收到服务器的syn+ack包,向服务器发送一个序列号(seq = x + 1),确认号为ack(客户端) = y + 1,此包发送完毕,客户单和服务器进入estab_lished(tcp连接成功)状态,完成三次握手.

 

四次挥手过程(关闭客户端到服务器的连接):

 

 step1:

  client发送一个fin,用来关闭client到server的数据传送,client进入fin_wait_1状态。

step2:

  server收到fin后,发送一个ack给client,确认序号为收到序号+1(与syn相同,一个fin占用一个序号),server进入close_wait状态。

step3:

  server发送一个fin,用来关闭server到client的数据传送,server进入last_ack状态。

step4:

  client收到fin后,client进入time_wait状态,接着发送一个ack给server,确认序号为收到序号+1,server进入closed状态,完成四次挥手。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网