socket通信

TCP状态流转

2018-11-12  本文已影响87人  番茄树叶

本篇主要说说TCP的状态流转。本篇图片摘自《计算机网络 自顶向下方法》。

基础

在说TCP状态流转之前,需要先说一下TCP的连接与断开过程。

三次握手

TCP在连接的时候客户端与服务端连接的过程如下图:


三次握手.png

主要过程:

经过上述三个步骤,TCP连接建立。

补充一下,SYN包是发起连接的报文,ACK是答复报文(TCP的报文发出去是需要收到答复的,但不一定是每个包都答,而是一种累计确认的方式)。其他有关报文中的SYN、ACK标志位,seq序列号等内容,需详细看TCP报文结构,在此不赘述。

四次挥手

TCP是双工的协议,可以双向收发,单向关闭,所以TCP连接需要分别关闭两个方向,关闭每个方向均需FIN+ACK两次握手,共计四次。 TCP连接的关闭过程如下图:


四次挥手.png

主要过程

经过上述四个步骤,TCP连接全部断开

上图中有个定时等待过程,会等待2MSL时间(Maximum Segment Lifetime,报文最大生存时间,任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃),TCP占用的端口才会被释放,所以大家有时会发现,TCP连接断开后,端口需要过一会才会释放。2MSL时间具体根据TCP的不同实现大概是1-4分钟。

等待2MSL的作用

状态流转

客户端状态流转

image.png

服务端状态流转

image.png
上一篇下一篇

猜你喜欢

热点阅读