TCP/IP:三次握手和四次挥手(包含部分异常处理机制)

首先呢!TCP是一种传输层协议,,就不用过多介绍。

整个通讯流程:

其中涉及到的标示:

  • SYN(synchronous建立联机)
  • ACK(acknowledgement 确认)
  • PSH(push传送)
  • FIN(finish结束)
  • RST(reset重置)
  • URG(urgent紧急)
  • Sequence number(seq 顺序号码)
  • Acknowledge number(ack 确认号码)
那么在这里第三次握手server端未收到ack会怎么做呢?
  server端发送了SYN+ACK(第二次握手)报文后就会启动一个定时器,等待client返回的ACK报文。如果第三次握手失败的话(也就是说client给server返回了ACK报文,server并不能收到这个ACK报文)。那么server端就会启动超时重传机制;
 
TCP超时与重传机制 
  TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制。其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号(RST)。 
 
至于第四次挥手失败,则有以下考虑:
  根据server端是否收到最后的ACK包分为两种情况:
  1. server端发送FIN,进入LAST_ACK状态,client收到这个FIN包后发送ACK包,server端收到这个ACK包,然后进入CLOSED状态
  2. server端发送FIN,进入LAST_ACK状态,client收到这个FIN包后发送ACK包,由于某种原因,这个ACK包丢失了,server端没有收到ACK包,然后server端等待ACK包超时,又向server端发送了一个FIN包
    a) 假如这个时候,client还是处于TIME_WAIT状态(也就是TIME_WAIT持续的时间在2MSL内)
    client收到这个FIN包后向server端发送了一个ACK包,server端收到这个ACK包进入CLOSED状态
    b) 假如这个时候,client已经从TIME_WAIT状态变成了CLOSED状态
    client收到这个FIN包后,认为这是一个错误的连接,向server端发送一个RST包,当server端收到这个RST包,进入CLOSED状态
    c) 假如这个时候,client挂了(假如这台机器炸掉了)【第四种情况,不在参考链接里】
    server端没有收到client的回应,那么会继续发送FIN包,也就是触发了TCP的重传机制,如果client还是没有回应,server端还会继续发送FIN包,直到重传超时(至于这个时间是多长需要仔细研究),server端重置这个连接,进入CLOSED状态,参考链接看这里

参考文档:

https://www.jianshu.com/p/29868fb82890

https://www.cnblogs.com/taoshihan/p/11215289.html 

https://www.zhihu.com/question/27564314/answer/162476313

扫描二维码关注公众号,回复: 10486314 查看本文章

猜你喜欢

转载自www.cnblogs.com/zou-yang/p/12635138.html