Wireshark与对应的OSI七层模型

TCP三次握手

TCP三次握手的理论知识

wireshark三次握手对应的报文情况


图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

第一次握手数据包:

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图:

点评:报文中有2个序列号,上面截图中写着是Seq=0,表示是相对的relative sequence number,其实真实的序列号Sequence Number(raw): 2176491452,这样写是方便阅读,后面的seq number都是基于这次的seq number来增加的。

第二次握手的数据包:

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即0+1=1, 如下图:

第三次握手的数据包:

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

三次握手总结

第一次握手报文大小:78bytes,624bits
第二次握手报文大小:74bytes,592bits
第三次握手报文大小:66bytes,528bits

物理链路层,占用14bytes
网络层,占用20bytes
传输层,剩下的便是传输层,所以可以得到结论,第一、二、三次握手传输层占用的报文大小分别是:44bytes,40bytes,32bytes,传输层占用的报文大小是不一样的,那么该怎么知道解析到什么位置结束呢,看客有继续阅读便可知晓

TCP报文格式

如下2个图源自互联网,表示的含义相同

0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|          Source Port          |       Destination Port        |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                        Sequence Number                        |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    Acknowledgment Number                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Data |       |C|E|U|A|P|R|S|F|                               || Offset| Rsrvd |W|C|R|C|S|S|Y|I|            Window             ||       |       |R|E|G|K|H|T|N|N|                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|           Checksum            |         Urgent Pointer        |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    Options                    |    Padding    |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                             data                              |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+TCP Header FormatNote that one tick mark represents one bit position.

上图中 TCP 报文中每个字段的含义如下:

  • 源端口和目的端口字段
    – TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。
    – TCP目的端口(Destination Port):目标计算机的应用程序端口号,占 16 位。
  • 序列号字段
    – CP序列号(Sequence Number):占 32 位。它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。
    – 确认号字段
    TCP 确认号(Acknowledgment Number,ACK Number):占 32 位。它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。
  • 数据偏移字段
    – TCP 首部长度(Header Length):标识该TCP头部有多少个32bit(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。
    – 保留字段
    保留(Reserved):占 4 位。为 TCP 将来的发展预留空间,目前必须全部为 0。
    – 标志位字段
    — CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
    — ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
    — URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
    — ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
    — PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
    — RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
    — SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
    — FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
    – 窗口大小字段
  • 窗口大小(Window Size):占 16 位。它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。
  • TCP 校验和字段
    校验位(TCP Checksum):占 16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum 是根据伪头 + TCP 头 + TCP 数据三部分进行计算的。
  • 紧急指针字段
    紧急指针(Urgent Pointer):仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数,占 16 位。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。
  • 可选项字段
    – 选项(Option):长度不定,但长度必须是 32bits 的整数倍。

总结:

  • 上面2张图片中第3行开始的第一部分,分别描述成了“Header Length(4bytes)” 和“Data Offset”,含义是相同的,都是占用4个字节,存储的值X就是对本次报文接下来长度的一个说明,这样就知道读取X字节后结束了(这里就回答了上面的问题啦)。

第一次握手数据包数据包详解

这里以上面截图的数据包(第一次握手)进行详细讲解

dc a6 32 23 35 d4 a4 83 e7 3c 3f 3d 08 00 45 00
00 40 00 00 40 00 40 06 97 e2 c0 a8 10 bf c0 a8
10 c6 f6 58 1f 91 81 ba 9f bc 00 00 00 00 b0 02
ff ff a2 0e 00 00 02 04 05 b4 01 03 03 06 01 01
08 0a 3c dc 7d da 00 00 00 00 04 02 00 00------------------------------------------------------------------------
Ethernet Header
------------------------------------------------------------------------
dc a6 32 23 35 d4  | dst. MAC address = dc:a6:32:23:35:d4
a4 83 e7 3c 3f 3d  | src. MAC address = a4:83:e7:3c:3f:3d
08 00              | network protocol = 0x0800 (IP)
------------------------------------------------------------------------
IP Header
------------------------------------------------------------------------
4                  | IP version = 4
5                  | header length = 5
00                 | type of service = 0 (normal)
00 40              | length = 0x40 (decimal = 64)
00 00              | datagram identification
40 00              | don't fragment
40                 | TTL = 64
06                 | transport protocol type = 6 (TCP)
97 e2              | header checksum
c0 a8 10 bf        | source IP address = 192.168.16.191
c0 a8 10 c6        | dst IP address = 192.168.16.198
------------------------------------------------------------------------
TCP Header
------------------------------------------------------------------------
f6 58              | source port = 0xf658 ( decimal = 63064)
1f 91              | dst port = 0x1f91 ( decimal = 8081)
81 ba 9f bc        | source seqno = 0x81ba9fbc (decimal = 2176491452)
00 00 00 00        | acknowledgment seqno = 0x00000000 (decimal = 0)
b                  | header length =0xb (decimal = 11) , 11*4=44bytes
0                  | reserved = 0x0 (reserved data,it's must 0 now)
02                 | tcp flag = 02 (SYN)
ff ff              | window size = 0xffffff (decimal = 65535 (64kb))
a2 0e              | tcp checknum
00 00              | urgent pointer = 0x0000
02 04 05 b4 01 03  | option length = 24 bytes
03 06 01 01 08 0a  |
3c dc 7d da 00 00  |
00 00 04 02 00 00  |
------------------------------------------------------------------------

参考文章
https://blog.csdn.net/hebbely/article/details/54136475
https://www.cnblogs.com/ajanuw/p/13675113.html

Wireshark抓包解释说明相关推荐

  1. Wireshark抓包工具使用教程以及常用抓包规则

    Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析,不过要说明的是,这只是一个工具,用法是非常灵活的,所以今天讲述的内容可能无法直接帮你解决问题,但 ...

  2. 计算机网络【wireshark抓包分析】

    一个完整的三次握手就是:请求(SYN) - 应答(SYN+ACK) - 再次确认(SYN).完成三次握手,客户端与服务器开始传送数据. 实验流程: 1.首先我们打开wireshark软件的主界面,在主 ...

  3. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  4. 通过wireshark抓包对nmap一些原理分析

    对目标主机的扫描是渗透过程中信息收集阶段的重要组成部分,由于现在大部分的网络都是基于TCP/IP协议栈的,所以根据TCP/IP协议栈的特性进行的扫描往往十分实用,nmap就是众多扫描工具中的佼佼者. ...

  5. 用wireshark抓包疯狂聊天实验

    文章目录 实验目的 实验环境 软件获取 实验过程 禁用其他网卡 启动疯狂聊天 启动WireShark 数据查看 分析 分析此程序网络连接采用的是哪种协议(TCP.UDP)和什么端口号 解释该程序为何能 ...

  6. TCP-IP详解:SACK选项(wireshark抓包有SLE和SRE的SACK包)

    目录 1. 前言 2. 名词解释 3. TCP SACK选项 3.1 SACK option格式 3.2 SACK(RFC2018) 3.3 D-SACK(RFC2883) 3.4 举例说明 4. w ...

  7. 【计算机网络】 课程大作业:利用Wireshark抓包并进行分析

    目录 一:任务目的 二:任务内容 三:提交形式及时间 四:步骤 五.感悟 一:任务目的 (1)了解计算机网络TCP/IP的分层实现过程,了解不同层次PDU的逐层封装与解封过程: (2)熟悉网络通信的实 ...

  8. Wireshark 抓包分析 HTTP 请求、响应报文格式

    文章目录 报文结构 HTTP 请求报文的请求行 请求方法 GET/HEAD POST/PUT 其他方法 URI URI 的格式 URI 的编码 HTTP 响应报文的状态行 状态码 HTTP 请求.响应 ...

  9. Wireshark抓包分析结果中的LG bit和IG bit

    Wireshark抓包分析结果中的LG bit和IG bit Wireshark抓包结果中常出现LG bit和IG bit的字段,几乎每个协议包里都能找到,如图下这样: 点击通常会对应6个16进制数( ...

最新文章

  1. java webproject中logback换配置文件的路径
  2. SoapUI工具中的用户名和密码如何用net代码实现传入
  3. C语言实现臭皮匠排序stooge sort 算法(附完整源码)
  4. 引用:编写高性能Web应用程序的10个技巧(一)
  5. Snipaste截图
  6. leetcode 567. 字符串的排列(滑动窗口)
  7. Android横竖屏切换View设置不同尺寸或等比例缩放的自定义View的onMeasure解决方案(2)...
  8. html 右边是iframe 左右结构_站点的内链优化和一些常用的结构优化方法
  9. oracle大于或等于,如何用SQL实现最接近某一个值且大于等于这个值的一条记录
  10. PHP EOF使用方法
  11. Python 爬虫入门(二)—— IP代理使用
  12. 测试工具apipost postman jmeter
  13. 七种寻址方式(立即寻址、寄存器寻址)
  14. TCP/IP重传超时--RTO - SRTT (Smoothed Round Trip Time)
  15. 最简单直接粗暴的Mothur分析OTU教程
  16. linux文件扫描并打印,Linux办公一条龙—Linux中扫描、打印的实现
  17. java容器doc_java容器组件
  18. 团员大会如何写组织学习计算机知识,团支部召开接收新团员的支部大会的会议记录怎么写?...
  19. CTF竞赛实战 中国菜刀与一句话木马
  20. 华为5g鸿蒙系统手机多少钱,华为Mate30Pro或成今年机皇:鸿蒙系统+麒麟985+5G基带,价格感人...

热门文章

  1. 游戏陪玩平台系统中iOS 采集音视频及写入文件的实现
  2. 夸克两年SVIP试水
  3. “2017中国海度日”成功举办,海度生态共迎日本大数据物联网解决方案的中国机会
  4. VB编程操作AutoCAD多行文字
  5. C# winfrom美化提示框,顶部弹出提示框
  6. POJ 1873 The Fortified Forest(枚举+凸包+剪枝)
  7. 日常Linux命令--vi/vim复制一行,粘贴
  8. WC Day1 第一课堂 随机算法
  9. DuplicateHandle 函数的使用----翻译
  10. Swing的魅力——三号管家