软件环境:
win10家庭版 wireshark12中文版
网络环境
自家wifi
正文:
     TCP属于传输层协议,面向连接的,可靠的,支持差错检查,流量控制;既然TCP是面向连接的传输协议,那在传输前必不可少的需要需要建立一个虚电路的方式保证传输的经过的传输通道了;本文也是着重介绍在wireshark抓抱下的TCP在建立连接时,网络数据包里到底包含什么;

    在抓包分析前,先来看两个图:

wireshark 解密tcpdata数据 wireshark tcp分析_传输层

图1:tcp三次握手

wireshark 解密tcpdata数据 wireshark tcp分析_tcp三次握手_02

图2:tcp首部

此时应先介绍一下tcp头部各个字段的含义:
    1. 源端口号:16bit数据发起者的端口号;
    2. 目的端口号:16bit数据接收者的端口号;
    3. 序号:32bit的序列号,由发送方使用;
    4. 确认序号:32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认 序号应当是上次已成功收到数据字节序号加1;
    5. 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。
    6. 保留:6bit, 均为0;
    7. 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送;
    8. 确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包;
    9. 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程;
    10. 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接;
    11. 同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接;
    12. 终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接;
    13. 窗口大小:16bit用来控制对方发送的数据量,通知发放已确定的发送窗口上限;
    14. 检验和:16bit该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证;
    15. 紧急指针:16bit紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数;
    16. 选项:长度可变,最长可达40字节;
    下面来启动wireshark抓一个tcps三次握手的数据包来瞅瞅

wireshark 解密tcpdata数据 wireshark tcp分析_传输层_03

图3:三次握手数据包

 如上图所示,被标记成黑的的三个数据包,编号分别为:21、104、105就是本次需要介绍的数据包;
    下面来展开第一个第21个数据包的传输层首部:

wireshark 解密tcpdata数据 wireshark tcp分析_tcp三次握手_04

wireshark 解密tcpdata数据 wireshark tcp分析_数据_05

结合图2,可以看到传输层首部的信息如下:
           源端口:45616
           目的端口:443
           序号:0
           确认号:0
           标志:SYN
           窗口大小:65535
           校验和:0x0a67
   下面来展开第一个第104个数据包的传输层首部:

wireshark 解密tcpdata数据 wireshark tcp分析_tcp三次握手_06

wireshark 解密tcpdata数据 wireshark tcp分析_首部_07

   结合图2,可以看到传输层首部的信息如下:
           源端口:45616
           目的端口:443
           序号:0
           确认号:1
           标志:SYN+ACK
           窗口大小:7300
           校验和:0xc640
下面来展开第一个第105个数据包的传输层首部:

wireshark 解密tcpdata数据 wireshark tcp分析_tcp三次握手_08

  结合图2, 可以看到传输层首部的信息如下:
           源端口:45616
           目的端口:443
           序号:1
           确认号:1
           标志:ACK
           窗口大小:1024
           校验和:0x1f86
    结合图1中的数值,再来看下图:

wireshark 解密tcpdata数据 wireshark tcp分析_首部_09

 此时,你便发现,在本次实验的数据包中,图1中第一握手时seq=x=0,图1中第二次握手时seq=y=0并且ack= x+1=1,图1中第三次握手时seq=y+1=1并且ack=x+1=1;很明显实验中的三次握手的数据包x=0,y=0;
    至于图1中第一次握手SYN=1,第二次握手SYN=1并且ACK=1,第三次握手ACK=1,又是怎么回事呢?不要急请细看一下三个图:



wireshark 解密tcpdata数据 wireshark tcp分析_tcp三次握手_10


图4:第一次握手时的标志位flags

wireshark 解密tcpdata数据 wireshark tcp分析_tcp三次握手_11

图5:第二次握手时的标志位flags

wireshark 解密tcpdata数据 wireshark tcp分析_首部_12

图6:第三次握手时的标志位flags

 SYN、ACK、FIN、URG、PSH、RST六种标志位,当这些标志位置1时,互相组合代表的是tcp连接此时所处的不同状态而已,但也并未所有的这六种状态都能相互之间进行组合,具体的就靠自己去继续钻研了!
    到此,不需要讲太多,拜了个白!