WireShark—TCP解析

三次握手详解

WireShark—TCP解析

利用WireShark抓包,追踪流,抓取到一个会话的数据包。前三个TCP数据包对应了TCP建立连接的三次握手

WireShark—TCP解析

上图为TCP的报文段格式

SYN字段

SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

ACK字段

ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

WireShark—TCP解析

wireshark抓取的包中637号包对应图中的x号包,638对应y号包,639对应x+1。

第一次握手

637号包中分别发送了如下信息

WireShark—TCP解析

MSS

最大报文段长度(MSS)是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)。

在此处IP为192.X的主机告知了IP为182.X的主机期望收到的数据的最大长度为1460。

Win和WS(window scale 窗口缩放因子)

因为窗口字段大小仅为16bit,ws字段主要是实现在不改变窗口字段大小的前提下,可以表示更大的窗口空间。

实际接收窗口大小为Win * WS
WireShark—TCP解析

此处可知实际的接收窗口大小为64240*256

SACK_PERM

允许选择确认

第二次第三次握手

略,知识点与第一次握手中的相同。要注意的是虽然数据包Len=0,但Seq仍需要+1

数据传输过程

WireShark—TCP解析

注意图中“TCP segment of a reassembled PDU”,说明上层要传输的数据超过了一个TCP数据包最大的数据长度(此处为14400,因为在三次握手的阶段,IP为182就已告知MSS为1440),所以数据被分段,拆分为几个TCP数据包进行传输。

662数据包对之前所接收的数据进行累计确认,661数据包Seq为2944173087,Len = 1440,故662数据包的ACK = 2944174527

四次挥手

WireShark—TCP解析

WireShark—TCP解析