TCP简介

来源:互联网 发布:下颌关节紊乱 知乎 编辑:程序博客网 时间:2024/05/16 15:38

一.TCP 报头格式

  

16位源端口地址

16位目的端口地址

32位序号

32位确认号

4位首部长度

6位保留

URG

ACK

PSH

RST

SYN

FIN

16位窗口大小

16位校检和

16位紧急指针

选项及填充

 URG 紧急指针的值有效 1时,紧急指针字段生效

 ACK 确认字段的值有效 为1时,确认字段的值生效

 PSH 将数据推向前面

 RST 连接必须复位

 SYN 在连接时对序号进行同步

 FIN 终止连接


二.TCP 连接三次握手

 


                  Seq+SYN

 

 

                ACK+SYN+Seq

 

 

 

                  ACK+seq

 

1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,

 

三.TCP 断开四次握手

                FIN+seq

 

 


                  ACK

 

                FIN+Seq

 

 


                 ACk

 

 


由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
 (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
 (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
 (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
 (4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1

四.TCP 状态

CLOSED 没有连接 tcp初始状态

LISTEN 表示socket处于监听状态

SYN-SENT  客户端请求连接SYN报文发送后,客户端变为该状态,等待服务端的ACK

SYN-RECV 客户端接收到服务端的SYN后变为该状态,之后发送ACK

ESTABLISHED 连接建立

FIN-WAIT-1 应用程序已请求关闭该链接,即客户端发送FIN之后变为该状态

FIN-WAIT-2 另一端已接受关闭该链接,即服务端在接收到客户端的FIN,发送ACK滞后的状态

CLOSING 两端都已经决定关闭连接,即双方都发送了FIN

TIME-WAIT表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSE-WAIT 即在接受了第一次FIN并发送ACK之后,被动段可能还有事情要处理并没有发送FIN的状态

LAST-ACK 被动端在发送了FIN等待对方ACK的状态


0 0
原创粉丝点击