TCP四次挥手
一—导读
接着上一篇我们说到的日本和韩国做贸易。几周后,韩国方面和日本起了一些小矛盾,于是两国准备断交。韩国总统说:“安倍啊,我们们经过商量确认,决定和你们断交,501台三星我已经发出去了,你的51辆汽车我们已收到。不知你收到没有”,同时韩国方取关安倍 的推特账号。安倍收到后回复:“小文啊,确认收到你要断交的消息了,51辆汽车我们已经发出,你的501台三星我也收到了”。话毕,安倍电话通知有关部门,终止和韩国的贸易往来。这时日本方面的对韩港口已经关闭,韩国想要再发送什么东西到日本就不可能了,但因为韩国方面的对日港口还没有关闭,于是日本方还是可以运输东西到韩国。
二—图解TCP四次挥手
上图中:FIN是终止位,设置为1表面是一个确认终止位,ACK,seq,ack上文已经介绍过。FIN=1相当于韩国总统说的“决定和你们断交”。
MSL(Maximum Segment Lifetime)最长报文段寿命,RFC793建议为2分钟。
三—思考
假如客户进程在收到服务器方的终止信号后不是进入时间等待状态而是直接进入关闭状态,会产生什么问题?
如图:如果收到接收方的请求断开连接报文段,在发送确认之后就进入关闭状态,但是发送的确认报文段在路上丢失了。于是服务器方就没有收到,就一直重发一直重发。无法进入关闭状态。
继续思考这样一个问题:假如有一方出现故障了怎么办?
保活计时器的介绍:当服务器进程每次收到客户发送的数据后,就重新设置并启动保活计时器(2小时定时),如果超过2小时了,服务器端还是没有收到消息,就发送一个探测报文段,以后每隔75秒发送一次,如果一连发送10个探测报文段后依然没有回应的话,那TCP服务器进程就认为客户进程所在主机挂掉了,接着关闭连接。