TCP协议Wireshack分析

(2019-11-15)

TCP协议Wireshack分析

wireshack分析TCP协议

TCP协议特点

TCP协议是传输层协议

  1. 可靠的数据传输
  2. 面向连接
  3. 全双工

TCP协议数据包首部格式

TCP协议Wireshack分析
源端口/目的端口(Source point/Destination point):用来寻找发送端和接收端应用程序,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接,其中在网络编程中一个IP地址和一个端口号组合成为一个套接字(socket)。
序号(Sequence number):用来标识从TCP发送端向TCP接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。在TCP中TCP用序号来对每一个字节进行计数。
确认序号(Acknowledgment number):包含发送确认的一端所期望收到的下一个序号,因此,确认序号应该是上次已成功收到数据字节序号加1(不是单纯的加1,还包括数据字节数)。
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接受方应该尽快将这个报文交给应用层。
RST:重建连接。
SYN:同步序号来发起一个连接。
FIN:发端完成发送任务。
窗口大小(Windows size value):用于流量控制。
检验和(Checksum):检验和覆盖整个的TCP报文段:TCP首部和TCP数据,需要计算伪首部。

TCP数据连接建立

TCP协议Wireshack分析
TCP三次握手

  • 主机A发送位码为SYN=1,随机产生seq number=1234567的数据包到服务器,主机A进入SYN_SEND状态,主机B由SYN=1得知A要求建立联机
  • 主机B接收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),SYN=1,ACK=1,随机产生seq=7654321的包,服务器进入SYN_RECV状态
  • 主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ACK是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ACK=1,主机B收到后确认seq值与ack=1,此包发送完毕,主机A和主机B进入ESTABLISHED状态,完成三次握手

完成三次握手,主机A和主机B开始传输数据

Wireshack分析

ping www.baidu.com

  1. 主机发起一个TCP连接(SYN+seq)
    TCP协议Wireshack分析
    帧号:13
    Sequence number:0 c7 d1 02 54(随机产生)
    Acknowledgment number:0 00 00 00 00
    Flags:0x002 (SYN=1)

  2. 服务器响应连接请求(ACK+SYN+ack+seq)
    TCP协议Wireshack分析
    帧号:15
    Sequence number:0 77 b5 ae bd(随机产生)
    Acknowkedgment number:1 c7 d1 02 55(第一次握手seq+1)
    Flags:0x012 (ACK=1,SYN=1)

  3. 主机返回ACK完成三次握手成功建立连接(ACK+ack)
    TCP协议Wireshack分析
    帧号:16
    Sequence number:1 c7 d1 02 55(第二次握手ack)
    Acknownledgment number:1 77 b5 ae be(第二次握手seq+1)
    Flags:0x010 (ACK=1)

  4. 主机发送一个http网页请求(HTTP)
    TCP协议Wireshack分析
    总帧长度:273字节
    Source port:52048
    Destination port:80
    Sequence number:1 (说明还没有收到字节流) c7 d1 02 55
    Acknowledgment number:1 77 b5 ae be
    Header length:20 (头部长20个字节)
    Flags:0x018 (PSH=1,ACK=1)

  5. 服务器收到返回一个ACK帧
    TCP协议Wireshack分析
    Sequence number:1 (服务器还没有给主机发送数据) 77 b5 ae be
    Acknowledgment number:184 (说明收到上一个帧的183个数据字节)
    C7 d1 03 0c
    Flags:0x010 (ACK=1)
    注:这是一个确认收到http请求的帧,在TCP中每收到一个数据,都要返回一个确认帧,从而使数据的可靠到达

  6. 服务器根据请求返货数据到主机(HTTP)
    TCP协议Wireshack分析
    Sequence number:1 77 b5 ae be
    Acknowledgment number:184 c7 d1 03 0c
    Flags:0x018 (ACK=1,PUSH=1)
    注:这个帧是服务器收到主机请求后,发送给主机的请求数据

TCP连接的释放

四次握手:当通信双方完成数据传输,进行TCP连接的释放,由于TCP是全双工的,因此每一个方向都要单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到FIN只意味这一个方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。正常关闭需要4个TCP帧,因此这个过程称为4次握手。
TCP协议Wireshack分析
实现过程:默认客户端发起关闭

  1. TCP客户端发送一个FIN,关闭客户端到服务器端的数据传送(客户端不再发送报文给服务器端,但是可以接受服务器端报文)
    TCP协议Wireshack分析
  2. 服务器端收到这个FIN,它发回一个ACK,确认序号为收到的序号+1
  3. 服务器关闭客户端的连接,发送一个FIN给客户端
    TCP协议Wireshack分析
  4. 客户端发回一个ACK报文确认,并将确认序号设置为收到序号加1
    TCP协议Wireshack分析