TCP连接及11种状态总结

一、什么是TCP:

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内 [1] 另一个重要的传输协议。

 

 二、什么是TCP连接:

为实现数据的可靠传输,TCP要在应用进程间建立传输连接。它是在两个传输用户之间建立一种逻辑联系,使得通信双方都确认对方为自己的传输连接端点。

两个序号和六个标志位:

  (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
  (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
      (A)URG:紧急指针(urgent pointer)有效。
      (B)ACK:确认序号有效。
      (C)PSH:接收方应该尽快将这个报文交给应用层。
      (D)RST:重置连接。
      (E)SYN:发起一个新连接。
      (F)FIN:释放一个连接。

 三、TCP建立连接(一般称为三次握手)

过程描述总结:

第一次握手:client端向server端发送一个请求为,SYN=1,并随机生成一个序列号作为自己的初始序号发送server,seq=x,

第二次握手:server对client的数据包确认,SYN=1,ACK=1,收到序列号为x的数据包为ack=x+1,同时回复自己的初始序列号,seq=y

第三次握手:client收到server的确认信息并建立连接,ACK=1,这次消息的序列号为seq=x+1,client收到server的序列号为seq=y,则ack=y+1

然后client和server进去established状态,进行数据传输

解释:SYN =1      发起一个新连接请求

   seq=x      序列号对数据进行标记,(x为随机号)

   ACK=1    确认对方的序号有效

   ack =x+1   server端收到client的序列号的确认回复

   seq = y    server端的初始序列号(y为随机号)

     seq =x+1      client第二发送的消息的序列号(x+1)

   ack=y+1      client收到server序列号的确认回复

 四、TCP释放连接(一般称为四次挥手)

由于TCP连接是是全双工的,因此,每个方向都必须要单独关闭,client端和server端都要发送FIN=1 来终止连接

过程描述总结:

第一次挥手:client向server发送连接释放,即FIN=1,并生成消息序列号seq=u,client进去了FIN_WAIT-状态;

第二次挥手:server收到client发送的FIN,发送ACK=1,确认序号为ack=u+1,并生成server序列号seq=v ,server进入CLOSE_WAIT状态;

第三次挥手:server发送一个FIN,用来关闭client到server数据传输,Server进入LAST_ACK 状态;

第四次挥手:client收到FIN,进入TIME_WAIT状态, 等待 2MSL 时间,发送ACK=1,确认序号ack=w+1, 完成四次挥手

五、TCP连接11种状态

解释

CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。

LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。

SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。

 ESTABLISHED :表示TCP连接已经成功建立。

 FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

 FIN_WAIT_2:等待远端TCP 的连接终止请求。

 CLOSE_WAIT:等待本地用户的连接终止请求。

LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

 TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

CLOSING:等待远端TCP 的连接终止请求确认。

 

posted @ 2018-06-10 13:37  Damien1  阅读(1090)  评论(0编辑  收藏  举报