1.TCP连接管理

1.TCP连接管理

Posted by ZhaoLe on January 6, 2021

TCP状态模型

1

TCP状态模型

TCP连接建立与断开

2

3

普通TCP连接的建立和终止 (《 TCP/IP详解》)

三次握手

三次握手能完成一个TCP连接的建立,主要是利用数据包选项来承载特殊信息和交换初始序列号(ISN)来进行通信。 一般以主动发的一方为客户端,发送SYN和客户端ISN到服务端。服务端接受后,发送下一个SYN和服务端的ISN,再当客户端接收到来自服务端的信息后反馈个ACK,这样一个TCP连接就建立了。

建立连接超时

如果客户端连接的过程发生了超时,一般情况下,客户端会在一定时间内重新发送。linux系统中默认是重发5次,并且重发时间满足指数回退,如果重发完后还是没有建立连接,则TCP断开连接。

四次挥手

主动发关闭者发送FIN,被动关闭者收到后返回ACK,上层应用程序发起自己的关闭操作,被动关闭者变成主动方并且发送FIN。最后发送方收到FIN后反馈个ACK。如果中途FIN丢失,发送方将重新传输。

TIME_WAIT状态

TIME_WAIT也被称为2* MSL(最大段生存期),在RFC0793中设置为2分钟,linux系统中是30s,通过TIME_WAIT再到CLOSE状态是有原因的: 一是确保有足够的时间让对端收到了ACK,如果被动关闭的那方没有收到ACK,就会触发被动端重发FIN。二是为关闭连接和后续连接之间提供一个“缓冲期”,如果没有这个缓冲区,来自不同连接的数据包可能混在一起。(有些自做主张的路由器会缓存IP数据包,如果连接被重用了,那么这些延迟收到的包就有可能会跟新连接混在一起)

资料引用