TCP三次握手四次挥手

三次握手:

给个小例子(拨打电话):

A:喂,您好,请问能听到吗?

B:可以,你呢?

A:可以。

...

第一次握手:客户端发送 “同步位SYN=1、初始序号seq=x” 给服务器服务器后,进入 “同步发送状态SYN-SEND”;

(服务器知道:客户端发送、服务器接收 均正常)

第二次握手:服务器接收到客户端请求后,发送 “同步位SYN=1、初始序号seq=y、确认报文ACK=1、确认号ack=x+1” 给客户端,进入 “同步收到状态SYN-RCVD”;

(客户端知道:客户端发送、服务器接收、客户端接收、服务端发送 均正常)

第三次握手:客户端接收到服务器确认后,发送 “序号seq=x+1、确认报文ACK=1、确认号ack=x+1” 给服务器,双方进入 “已建立连接状态ESTABLISHED”;

(服务器知道:客户接收、服务器发送 均正常)

总结:所以只有三次握手才能保证双方的发送和接收功能都是正常的。

 

四次挥手:

第一次挥手:客户端发出 “释放信号FIN=1、初始序号seq=u” 给服务器后,进入 “终止等待1状态FIN-WAIT-1”;

第二次挥手:服务器接收到客户端释放请求后,发出 “初始序号seq=v、确认报文ACK=1、确认号ack=u+1” 给客户端后,进入 “关闭状态CLOSE-WAIT”;

第三次挥手:客户端接收服务器确认后,进入 “终止等待2状态FIN-WAIT-2”,待服务器已经没有要向客户端发送的数据后,再次向客户端发送 “初始序号seq=w、确认报文ACK=1、确认号ack=u+1、释放信号FIN”,而后进入 “最后确认状态LAST-ACK”。

第四次挥手:客户端接收回复后,向服务器发送 “序号seq=u+1、确认报文ACK=1、确认号ack=w+1”。客户端先进入 “时间等待状态TIME-WAIT”,经过2个最长报文段寿命后才进入到 “关闭状态CLOSE”,而服务器收到确认后立刻进入 “关闭状态CLIOSE”。

 

 

客户端经过2个最长报文段寿命后才能进入关闭状态:为了保证客户端最后一次发送的确认报文丢失后,服务器超时重传,客户端能再次接收,再次重传确认报文。

连接的时候只需要三次握手而关闭却要四次挥手:这是因为当服务器收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文(其中ACK报文是用来应答的,SYN报文是用来同步的)。但是关闭连接时,当客户端发送FIN报文仅仅表示它不再发送数据了但是还能接收数据,服务器收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。只有等到我服务器端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值