TCP协议

TCP协议详解:https://www.cnblogs.com/qdhxhz/p/10267932.html

TCP协议的三次握手和四次挥手:https://www.cnblogs.com/qdhxhz/p/8470997.html

相关面试题: https://www.cnblogs.com/huajiezh/p/7492416.html

为什么不进行两次握手:

  如果只有两次握手:客户端向服务端发送一个请求报文,但是在网络三种滞留一段时间,很长时间才会到达服务端,在客户端看来这是一个失效报文。一段时间以后服务端接收到这个请求报文,并发送一个确认报文,,但是在这个时候,客户端不会理睬这个确认报文,然后服务端还在一直等待客户端发送数据,这样就会造成服务端的浪费。

  如果只有两次握手:客户端发送请求报文,服务端发出确认后,就向客户端发送消息,客户端可能接收不到。

为什么不进行四次握手:

  在进行三次握手之后,双发就已经确认对方能过接收到自己的信息了,第四次就已经没有必要了。

TIME-WAIT存在的原因: --> 实现TCP全双工连接的可靠释放

  客户端发送在收到FIN时,就会发送ACK确认,然后就会进入TIME-WAIT。

  客户端发送的ACK可能会丢失,由于TCP协议的重传机制,服务器会重传FIN,直到在2*MSL(最长报文的寿命) 的周期里面没有再收到FIN。

  就是要确保在2MSL时间里,即使ACK的确认包丢失,也还能收到服务器重传的FIN。

服务端设置保活计时器:

  没接到客户端的信息,计时器复位,一般2小时,若超过2小时就发送探测报文,发送n个,若客户端没有响应,则认为客户端down掉了,终止连接

重传:

  超时重传:发送方在发送一个数据后,就开启一个定时器,若在规定时间没有收到接收方的ACK确认包,则重传。若到达一定次数后依然没有收到接收方的确认包就放弃,并发送一个复位信号(RST)。RTO:超时重传时间

  快速重传:接收方收到序号为1, 2, 4 的包,未收到 3 ,就会发送ack=2的确认报文,请求重传,如果发送方收到相同序号的ack,就会重传。

 

posted @ 2019-06-01 13:41  DDiamondd  阅读(214)  评论(0编辑  收藏  举报
TOP