tcp三次握手与四次挥手深入浅出

tcp三次握手与四次挥手深入浅出

看过网上很多关于TCP的文章,大部分都以“三次最为稳定可靠”为观点进行解释,但均未真正深入
到代码的实现细节、硬件等方面去做解释。

TCP是传输层上的全双工的通信协议(全双工的支持在硬件层面完成的)。

这里“全双工”、“单工”、“半双工”等硬件概念不再赘述,如想深入了解,可自行百度,比较好懂。

  1. 三次握手
    服务发起方称为client,服务接收方称为server
    client发起要开启上行通道的请求,server接收到请求,同时,server回应client,接收到请求,并附加开启下行通道的请求,client接收到回应&请求,开启上行通道,并回应server开启下行通道的请求,服务器接收到之后开启下行通道。对于client来说,第三次时便可以进行数据传输,因为此时上行通道已打开。
    client简称c,server简称s:
    1)c发送,SYN=1,seq=j
    2)s发送,SYN=1,seq=k;ACK=1,ack=j+1
    3)c发送,ACK=1,ack=k+1
  2. 四次挥手
    关闭方称为client,被关闭方称为server
    client发起要关闭上行通道的请求,server接收到请求,回应client,可以关闭,client接收到之后,关闭上行通道。等待一段时间后,server发送关闭下行通道的请求,client接收到请求,回应server,可以关闭,server接收到之后,关闭下行通道,至此,一次tcp连接关闭完成。

思考总结:
从全双工角度进行考虑,tcp的建立或关闭,都是分为上行通道和下行通道的开启/关闭为主要目的,每一次往返代表一个通道的开启/关闭。
这样考虑,很容易想清楚四次挥手,两个通道关闭便是2*2=4次,但是建立为何是三次,因为建立时,中间两次合二为一,回复可以和请求一起,节省一次ttl,再反观四次挥手,为何挥手就不能合二为一,因为,关闭是有一方主动进行,被关闭方接收到请求后,仍有一部分数据待发送,因此,下行通道不能立即请求关闭,通知对应cgi不做处理,同时将已处理完但未发送的数据发送完毕后,再进行下行通道的关闭请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值