网络层协议IP/ICMP/DHCP/ARP/TCP数据的捕获与分析

来源:互联网 发布:知已知彼百战不殆 编辑:程序博客网 时间:2024/05/25 21:34

计算机网络实验二实验报告

网络层协议数据的捕获与分析

  • 计算机网络实验二实验报告
    • 实验任务内容环境
      • 实验任务
      • 实验环境
    • 实验步骤
    • IP协议分析
      • 找出IP包头个字段并分析
      • 描述IP包校验原理并对上述IP包头进行校验
      • 描述IP包分段原理并验证
    • ICMP协议分析
      • 理解ICMP协议的功能
      • 记录各字段的格式
    • DHCP协议分析
      • DHCP协议的功能
      • DHCP ACK消息
      • DHCP提供的额外配置参数
      • DHCP分配过程示意图
      • DHCP服务器与路由器
      • DHCP服务消息序列
    • ARP协议分析
      • ARP功能和原理
      • ARP包格式
    • TCP协议分析
      • TCP协议各字段功能
      • 分析连接建立与释放过程
        • 连接的建立
        • 正常建立连接的时序图
        • 连接的释放
        • 正常释放连接的时序图
      • 分析TCP数据传输的过程分析其他字段的作用
        • 发送序号和应答序号
        • 应答标志位
        • 窗口大小
        • 数据长度与MSS
        • 消息序列图
    • 实验问题与心得

实验任务、内容、环境

实验任务

本次实验主要包含下列内容:

  • 使用Wireshark 软件捕获在使用ping 命令时产生的ICMP 消息;
  • 分析网络层IP 包头格式,理解各字段的作用,对于分段和校验和进行验证;
  • 使用Wireshark 软件捕获在使用ARP 消息,分析其消息格式,理解其工作原理;
  • 使用Wireshark 捕获DHCP 消息,分析其消息序列,理解DHCP 的功能和操作原理;
  • 使用Wireshark 捕获TCP 消息,分析TCP 报文段头格式,理解连接建立和释放的原理,差错控制原理、序号和窗口管理的原理。

通过本实验学生可以深入理解分层体系结构,理解和掌握TCP/IP 协议栈的代表协议——IP、TCP、
UDP、ICMP、ARP 和DHCP 协议的要点。

实验环境

本次实验在Windows10平台下,使用Wireshark-win64-2.2.7进行协议的捕获与分析。

实验步骤

  1. CMD使用ipconfig\all命令,获取本机ipmac地址。本机情况如下:

    以太网适配器 以太网:

    连接特定的 DNS 后缀 … … . :
    描述… … … … … : Realtek PCIe GBE Family Controller
    物理地址… … … … . : 50-7B-9D-78-A7-84
    DHCP 已启用 … … … . . : 是
    自动配置已启用… … … . : 是
    IPv6 地址 … … … … : 2001:da8:215:81f4:f859:d651:c5dd:16cb(首选)
    临时 IPv6 地址… … … . : 2001:da8:215:81f4:8889:7f1f:8074:748a(受到抨击)
    临时 IPv6 地址… … … . : 2001:da8:215:81f4:acf4:c8d7:cce0:6944(首选)
    本地链接 IPv6 地址… … . . : fe80::f859:d651:c5dd:16cb%10(首选)
    IPv4 地址 … … … … : 10.120.10.49(首选)
    子网掩码 … … … … : 255.255.255.192
    获得租约的时间 … … … : 2017年6月6日 20:50:39
    租约过期的时间 … … … : 2017年6月8日 20:50:46
    默认网关… … … … . : fe80::761f:4aff:fe28:4b8b%10
    默认网关… … … … . : 10.120.10.1
    DHCP 服务器 … … … . . : 10.120.10.1
    DHCPv6 IAID … … … . . : 55606173
    DHCPv6 客户端 DUID … … . : 00-01-00-01-20-47-F1-BC-50-7B-9D-78-A7-84
    DNS 服务器 … … … . . : 10.3.9.4
    DNS 服务器 … … … . . : 10.3.9.5
    TCPIP 上的 NetBIOS … … . : 已启用

  2. 下载wireshark并进行设置。

    启动Wireshark,设置捕获接口(Interface)为本机网卡,选中混杂模式(promiscuous mode
    捕获选项,设置合适的捕获过滤器(Capture Filter):

    • 对于 ping 命令,设置过滤器为icmp
    • 对于 DHCP 消息,设置过滤器为udp port 67
    • 对于 ARP 消息,设置过滤器为arp
    • 对于通过网页浏览应用来捕获TCP消息,设置过滤器为tcp port 80

    开始捕获。

  3. 捕获数据。

    • 捕获ICMP协议数据
      • 运行ping命令(例如:ping 192.168.0.1),远程主机地址可以是本机地址、网关路由器地址,也可以是域名。将捕获到的数据保存为文件。
      • 使用Windowsping命令的-l选项(例如:ping -l 8000 192.168.0.1),生成大于8000字节的IP包并发送,捕获后分析其分段传输的包结构。
    • 捕获 DHCP 协议数据
      • 使用 ipconfig 命令释放计算机的IP 地址(ipconfig -release);
      • 使用 ipconfig 命令重新申请IP 地址(ipconfig -renew)。
      • 此时 wireshark 窗口中可以捕获到完整的DHCP 地址分配的流程,将捕获到的数据保存为文件。
    • 捕获ARP协议数据
      • 采用与上一段相同的方法释放IP地址并重新申请,在wireshark窗口中可以捕获到ARP请求和响应消息,保存为文件。
    • 捕获TCP协议数据
      • 打开浏览器,输入一个页面内容较简单的网页的URL,如www.baidu.com;网页全部显示后关闭浏览器。
  4. 进行协议数据的分析

IP协议分析

这里写图片描述

这里写图片描述

  1. 找出IP包头个字段并分析

    IP 包头分析:对于采用ping-l 命令选项捕获的ICMP 消息,对承载ICMP消息的IP 包进行分析。

    取了某次ping的第三个包,对于包头各字段,列表如下:

    字段 报文(16进制) 内容 版本 4 表示报文是IPv4报文 首部长度 5 首部长度为5*4字节=20字节 服务类型 00 表示普通服务,无特殊需求 总长度 05dc 总长度1500字节 标识 7604 数据报标号为30212 标志 001(二进制) 表示可以分片,且该片后面还有其他片 片偏移 2172(二进制下高三位不计算) 片偏移370*8=2960字节 生存时间 80 生存时间是128跳 协议类型 01 协议01,表示由ICMP协议处理 首部校验和 7489 校验和0x7489 源地址 0a 78 0a 31 源地址:10.120.10.49 目的地址 0a 78 0a 01 目的地址:10.120.10.1
  2. 描述IP包校验原理,并对上述IP包头进行校验。

    发送方将校验字段置为全0,然后对包头所有字段计算反码算数求和,结果即为校验码部分。

    反码求和:将待运算数作为16bit二进制数,然后做带进位加法,将进位作为一个16bit二进制数,加在结果的低位上,重复运算直到没有进位,最后将结果取反。

    接收方将每一个16bit二进制数做同上的反码相加,得到结果若是FFFF,则校验通过。

    4500+05dc+7604+2172+80017489+0a78+0a31+0a78+0a010001+fffe+=0001fffe=ffff

    校验通过。

  3. 描述IP包分段原理,并验证。

    • 当一个较大的数据包通过一个支持最大数据包长度较小的网络时,会被分段,每一段单独生成一个数据包。
    • 分段中的每一段都具有相同的标识,使用MF与DF以及偏移来确定该包的相对位置。
    • MF表示当前包是否是最后一个包(MF=1表示还有分片,MF=0表示已是最后一个分片),DF表示是否允许分片,DF=0表示允许分片。
    • 分段中除了最后一段,每一段长度必须是8的整数倍。
    • 片偏移k表示这个分片的第一字节是原始数据包的第8*k字节。

    在本次实验,网络环境是以太网,支持的最大帧长度为1514字节。

    分析后,发现第一个包偏移量为0,第二个包偏移量1480字节,第三个包偏移量2960字节。而一个数据链路层的帧长1514字节,去掉数据链路层的目的地址6字节,源地址6字节,2字节类型,剩余留给IP数据报的长度为1500字节,再去掉20字节的IP头,每个包实际包含数据1480字节,所以第三个包正好偏移2960字节。后面的包以此类推,略去。因为ping包长度8000字节,所以每一次ping有6个分片片段。

    同时也可知道,数据链路层使用以太网V2 MAC帧

ICMP协议分析

这里写图片描述

这里写图片描述

  1. 理解ICMP协议的功能

    为了提高 IP 数据报交付成功的机会,在网际层使用了因特网控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。

    ICMP是一个工作在网络层,使用IP数据报封装自己的协议,主要为主机报告差错与异常使用。ICMP报文分为差错报告报文和询问报文。

    ICMP 差错报告报文共有 5 种
    • 终点不可达
    • 源站抑制
    • 时间超过
    • 参数问题
    • 改变路由(重定向)

    ICMP 询问报文有四种
    • 回送请求和回答报文
    • 时间戳请求和回答报文
    • 掩码地址请求和回答报文
    • 路由器询问和通告报文

    ICMP可以应用在ping上,检查目的主机是否联通;可以用来测试到达目的主机的路径和跳数等。

  2. 记录各字段的格式

    选取了上图的1号包和2号包进行分析。

    这里写图片描述

    字段 报文(十六进制) 内容 类型 08/00 08表示是一个回显请求报文,00表示回显回复报文 代码 00/00 表示是一个回显报文 校验和 4d42/5542 整个ICMP部分的校验和 标识符 0001/0001 表示上层进程ID号 序列号 0019/0019 包的序列号,该包是25号
    • ICMP不同的报文类型号不同,比如08代表回显请求,00代表回显应答等。

      这里写图片描述

    • 校验和做的是整个ICMP部分的校验,采用与IP数据报一样的反码求和运算,以1号包为例:

      0800+4d42+0001+0019+61626364+6566+6768+696a+6b6c6d6e+6f70+7172+7374+75767761+6263+6465+6667+68690006fff90006+fff9+++==ffff

      可见校验成功。

    • ID与序列号部分,一次PING命令会发送4个包,观察发现他们的ID是相同的,序号是递增的。

      这里写图片描述

DHCP协议分析

这里写图片描述

  1. DHCP协议的功能

    DHCP,又称动态主机分配协议,通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。

    DHCP有三种机制分配IP地址:

    • 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
    • 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
    • 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

    三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。

  2. DHCP ACK消息

    DHCP消息是承载在UDP数据报上的,运行在传输层的协议。所以完整的DHCP数据报结构由:数据链路层头以太网V2 MAC帧,网络层头IPv4,传输层头UDPBootstarp Protocol组成。

    下面只分析DHCP ACK包的Bootstarp Protocol部分。

    字段 报文(十六进制) 功能 消息类型 02 1表示请求报文,2表示回应报文 硬件地址类型 01 1表示以太网硬件地址 硬件地址长度 06 以太网硬件地址长度为6 跳数 00 默认0 事物ID 51fc5c30 客户端选择的随机数,用于本次通信 超时时间 0000 不设置 标志字段 0000 0表示单播 客户端IP地址 00000000 表示客户端当前IP地址 个人IP地址 0a780a31 填写分配给client的ip地址 下一阶段地址 00000000 若 client 需要透过网络开机,此栏填写开机程序代码所在 server 之地址 中继器地址 00000000 若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为0 客户端MAC地址 507b9d78a784 客户端的硬件地址 客户端MAC地址填充字段 00000000000000000000 可选服务器主机名 64字节全0 服务器主机名称 启动文件名 128字节全0 若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。 magic cookie 63825363 为了保证兼容性使用 可选字段 允许厂商自定义字段,提供更多功能

    对于选项字段,是客户端与主机协商使用的字段,在DHCP Request中,客户端发送一个表,指明自己想要获得的字段:

    这里写图片描述

    DHCP ACK中,服务器回应客户端它所提供的字段:

    这里写图片描述

    详细配置参数见下一节。

  3. DHCP提供的额外配置参数

    可选字段的格式为:序号(1字节)+长度(1字节)+内容(长度字节)

    选项代号 含义 1 设置子网掩码选项 3 设置网关地址选项 6 设置DNS服务器地址选项 12 设置DHCP客户端的主机名选项 15 设置域名后缀选项 33 设置静态路由选项 44 设置NetBios服务器选项 46 设置NetBios节点类型选项 50 设置请求IP选项 51 设置IP地址租约时间选项 52 设置Option附加选项 53 设置DHCP消息类型 54 设置服务器标识 55 设置请求参数列表选项。客户端利用该选项指明需要从服务器获取哪些网络配置参数。该选项内容为客户端请求的参数对应的选项值 58 设置续约T1时间,一般是租期时间的50% 59 设置续约T2时间。一般是租期时间的87.5% 60 设置厂商分类信息选项,用于标识DHCP客户端的类型和配置 61 设置客户端标识选项 66 设置TFTP服务器名选项,用来指定为客户端分配的TFTP服务器的域名 67 设置启动文件名选项,用来指定为客户端分配的启动文件名 77 设置用户类型标识 121 设置无分类路由选项
  4. DHCP分配过程示意图

    分析四次握手过程。

    • DHCP discover

      这里写图片描述

      discover包是客户端发送的广播包,数据链路层的mac地址也是广播地址,UDP数据包报中的源端口68,目的端口67。客户端简要汇报自己的网络信息,并在可选字段中附加DHCP type为discover,表示申请一个IP地址。

    • DHCP offer

      这里写图片描述

      因为DHCP服务器会保存一定时间的IP与MAC绑定的信息,所以申请ip时在第二阶段DHCP服务器就分配了该客户端上次的IP地址,并填入目的地址处发回。

      这里写图片描述

      可以看到服务器分配的IP地址以及客户端的mac地址。

      这里写图片描述

      在可选字段中可以看到DHCP服务器IP地址,租期时间,路由器信息,子网掩码,域名服务器等。

    • DHCP request

      这里写图片描述

      可以看到,第三次,客户端发给服务器的包也是广播包,因为可能有多个DHCP服务器都给客户端发送了可用IP地址,而客户端需要让所有的DHCP服务器知道它接受哪个DHCP服务器停工的IP地址。

      这里写图片描述

      在可选字段中,客户端确认了他的mac地址,将接受的IP地址,接受的DHCP服务器,以便DHCP服务器在IP与mac表中记录。最后客户端请求了一个参数表,要求DHCP服务器提供一些详细参数。

      上图表示,客户端mac50:7b:9d:78:a7:84接受DHCP服务器10.120.10.1提供的IP地址10.120.10.49

      使用ipconfig\all命令查看本机信息,如图:

      这里写图片描述

      与上述分析对应。

    • DHCP ack

      这里写图片描述

      最后一次确认,服务器主要回复上一次中客户端要求的额外信息。至此,租期生效。

  5. DHCP服务器与路由器

    当前网络环境下,路由器与DHCP服务器是同一设备。

    这里写图片描述

    因为他们IP地址相同。本机的路由详细信息也表明了这一点,即:

    这里写图片描述

    路由器IP与DHCP服务器都是10.120.10.1,可能为实验室机房的总路由器顺便充当了DHCP服务器。

  6. DHCP服务消息序列

    Created with Raphaël 2.1.0ClientClientDHCP ServerDHCP ServerDHCP discoverDHCP offerDHCP requestDHCP ACKDHCP分配过程结束

ARP协议分析

  1. ARP功能和原理

    地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

    ARP的原理就是对于不知道物理地址的IP地址,主机发送一个广播包,内容就是询问IP地址对应的主机。若该IP对应的主机存在,那对应主机就回复一个包,包内包含自己的MAC地址。如果主机问了三遍还是没人回复,呢么他就认为这个IP地址没人使用。

  2. ARP包格式

    数据链路层帧头部分源地址是本机mac,目的地址是广播地址全f,表格列出了ARP协议的数据内容。

    这里写图片描述

    这里写图片描述

    字段 报文(十六进制) 功能 硬件地址 0001 硬件地址表示硬件接口类型,1表示以太网 协议种类 0800 指明协议种类,ip是0800 硬件地址长度 06 指明硬件地址长度,单位为比特 协议长度 04 指明协议长度 操作码 0001 操作类型:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4 发送方MAC地址 507b9b78a784 发送方MAC地址 发送方IP地址 0a780a31 发送方IP地址 目的地MAC地址 000000000000 目的地MAC地址 目的地IP地址 0a780a01 目的地IP地址

    这个询问表明是一个ARP请求,询问目的地10.120.10.1的mac地址。

    而收到的回复包如下图:

    这里写图片描述

    表明10.120.10.1的mac地址为74:1f:4a:28:4b:8b

TCP协议分析

  1. TCP协议各字段功能

    TCP首部如图:

    这里写图片描述

    字段名称 长度 功能 源端口 2字节 发送方端口 目的端口 2字节 接收方端口 序号 4字节 本段发送的第一字节的序号 确认号 4字节 期望收到对方的下一字节序号 数据偏移 4bit 指出 TCP 报文段的数据起始处距离 TCP报文段的起始处有多远,以4字节为单位 保留 6bit 保留为今后使用,目前应置为全0 URG 1bit 紧急指针有效位,1有效 ACK 1bit 确认号有效位,1有效 PSH 1bit 接收方收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付 RST 1bit RST=1 时,表明 TCP 连接中出现严重差错,必须释放连接,然后再重新建立连接 SYN 1bit 同步比特SYN置为1,就表示这是一个连接请求或连接接受报文 FIN 1bit 终止比特FIN置为1,就表示这个报文用于释放链接 窗口 2字节 接收方为对方设置的发送窗口大小 校验和 2字节 校验和,计算时包含伪首部 紧急指针 2字节 紧急指针指出在本报文段中的紧急数据的最后一个字节 选项 长度可变 提供更多可选功能 填充 不定 填充使得首部长度是4字节的整数倍
  2. 分析连接建立与释放过程

    • 连接的建立

      TCP连接的建立需要三次握手:

      这里写图片描述

      第一次握手:

      这里写图片描述

      客户端发给服务器,可见源端口5060,目的端口80,相对序号0(实际序号值2145050),ACK序号全0,首部长度32字节,标志字段只有SYN为1,表示这是一个申请建立连接的包,窗口大小8192,校验和0x96c1,但是未经核对。

      第二次握手:

      这里写图片描述

      服务器发回客户端,源端口80,目的端口5060,相对序号0,ACK序号1。标志字段SYN与ACK为1,表示确认了客户端发过来的0号包,回复了一个同意申请建立连接的包。校验和同样未经核对。

      第三次握手:

      这里写图片描述

      客户端发给服务器,序号增长为1,确认了服务器发来的0号包,第三次握手表明连接的确立。

      关于第三次握手,主要是为了防止延期的包干扰服务器:

      客户端发送了一个连接请求报文段到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文段该服务端,而后正常建立连接,数据传输完毕,并释放了连接。

      如果这时候第一次发送的请求报文段延迟了一段时间后,又到了服务端,很显然,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。

      假设不采用三次握手,这时服务端只要发送了确认,新的连接就建立了,但由于客户端比你更没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据,而服务端却认为新的连接已经建立了,并在一直等待客户端发送数据,这样服务端就会一直等待下去,直到超出保活计数器的设定值,而将客户端判定为出了问题,才会关闭这个连接。

      这样就浪费了很多服务器的资源。而如果采用三次握手,客户端就不会向服务端发出确认,服务端由于收不到确认,就知道客户端没有要求建立连接,从而不建立该连接。

      若双方同时发起建立连接请求,这两个连接都会成功建立,但实际每台主机竹有一个连接,因为连接双方相同的连接会被认为是一个连接。

    • 正常建立连接的时序图:

      Created with Raphaël 2.1.0ClientClientServerServerSYN:seq=0,ack=0SYN+ACK:seq=0,ack=1ACK:seq=1,ack=1连接此时已建立

    • 连接的释放

      TCP连接的释放需要4次挥手加定时器:

      这里写图片描述

      第一次挥手:

      这里写图片描述

      服务端发送给客户端,序号为上次需要加1(114),ACK为祈祷收到的包序号(760),标志位置FIN为1,表示请求释放连接。

      第二次挥手:

      这里写图片描述

      客户端回复服务器,确认收到114号包,本次包序号760,同意释放连接。此时TCP协议在单方向(服务器至客户端)的连接已经关闭,即服务器不给客户端发消息,但可以接受客户端的消息。

      第三次挥手:

      这里写图片描述

      客户端发给服务器,置FIN位为1,表示客户端申请释放连接。注意本次包确认序号与上次一样,因为服务器不可能主动给客户端发送消息了;而序号为第二次挥手与第三次挥手期间最后发的包序号加1,如果这期间没发送消息,那么与第二次挥手包序号相等。客户端第三次挥手完毕后等待服务器的确认。

      第四次挥手:

      这里写图片描述

      服务器发送给客户端的确认消息。双方释放连接。

      若一开始是客户端主动释放的连接,最后第四次握手是客户端发送给服务器的确认消息,那么此时服务器立即释放连接,客户端等待两倍数据包最长生存周期,在释放连接。原因:

      为了保证客户端发送的最后一个ACK报文段能够到达服务器。

      该ACK报文段很有可能丢失,因而服务器重发第三次挥手报文。若客户端不等待,那么服务器无法释放连接。故客户端等待,若在等待过程中收到新的第三次挥手,那么客户端回复后将重启定时器。

      此举为了保证服务器尽可能不浪费时间,保证服务器正常释放连接。

      参考资料

      然而,TCP的释放连接,没有完美的机制。在实际使用中,出错时可以重传,重传几次扔没有收到期待的回应,则可以主动释放连接,让对方等待超时无数据发送,强行关闭连接。

    • 正常释放连接的时序图

      Created with Raphaël 2.1.0ServerServerClientClientFIN+ACK:seq=114,ack=760ACK:seq=760,ack=115此时单方向连接已释放FIN+ACK:seq=760,ack=115ACK:seq=115,ack=761连接双方向连接已释放
  3. 分析TCP数据传输的过程,分析其他字段的作用

    • 发送序号和应答序号

      每一个发送方的初始发送序号由通信双方商定,以后按发送字节数递增。接收序号为接收方期待接收的字节,即发送方下一个应发过来的字节号。发生校验错误、乱序导致重传的情况下,要求重传的一方将想要重传的序号置于ACK中,对方会按ACK给的序号重传特定序号。

    • 应答标志位

      字段名称 长度 功能 URG 1bit 紧急指针有效位,1有效 ACK 1bit 确认号有效位,1有效 PSH 1bit 接收方收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付 RST 1bit RST=1 时,表明 TCP 连接中出现严重差错,必须释放连接,然后再重新建立连接 SYN 1bit 同步比特SYN置为1,就表示这是一个连接请求或连接接受报文 FIN 1bit 终止比特FIN置为1,就表示这个报文用于释放链接
    • 窗口大小

      TCP的流量控制由连接的每一端通过声明窗口的大小来提供。窗口大小字段用来控制对方发送的数据量,单位为字节。窗口大小用数据包来表示,例如Windows size=3, 表示一次可以发送三个数据包。窗口大小起始于确认字段指明的值,是一个16bits字段。窗口大小可以调节。

      窗口大小有一个调节因子,一般在建立连接的时候协商确定。

      这里写图片描述

      这里写图片描述

      所以服务器窗口乘积因子256,客户端窗口乘积因子512。

    • 数据长度与MSS

      用于标识该报文段中的数据长度。

      MSS指明本端所能够接收的最大长度的报文段。当一个TCP连接建立时,连接的双方都要通告各自的MSS协商可以传输的最大报文长度。我们常见的MSS如以太网可达1440字节。

      比如这次通信:

      这里写图片描述

      这里写图片描述

      表明MSS为1440字节。

    • 消息序列图

      乱序到达情况:

      这里写图片描述

      345号包序号是6749,下一个应收序号是8189。

      这里写图片描述

      而实际346号包:

      这里写图片描述

      序号为9629。说明中间包没有到达,可能是丢了,可能是延迟了。347号包序号接346。而348号包正式此前缺失的:

      这里写图片描述

      说明包乱序到达。此后的350,351类似。

      Created with Raphaël 2.1.0ServerServerClientClient345号:seq=6749(next:8189),ack=2947,win=69*512=35328346号:seq=9629(next:11069),ack=2947,win=69*512=35328发现序号不连续,产生丢包347号:seq=11069(next:12509),ack=2947,win=69*512=35328348号:seq=8189(next:9629),ack=2947,win=69*512=35328发现包是因为延迟,收到包

      快重传:

      这里写图片描述

      TCP规定,连续收到三次个重复的ACK重传包就要立刻重传,所以服务器在收到213,214,215三个重复的ACK后,快重传了218号包。

      Created with Raphaël 2.1.0ServerServerClientClient213号:seq=580,ack=43201,win=258*256=66048214号:seq=580,ack=43201,win=258*256=66048215号:seq=580,ack=43201,win=258*256=66048Server收到三个相同的ACK,开始快重传218号:seq=43201(next:44641),ack=580,win=60*512=30720

      重传:

      网络较好情况下,重传多由于不正常释放连接导致,比如客户端强行关闭了程序,导致服务器没有收到ACK而不断超时重传。

      这里写图片描述

      可见seq=1与seq=1441在被反复重传,可能由于客户端程序已经强行结束导致。

      参考资料

实验问题与心得

  • 本子实验主要遇到的问题是对协议理解不透彻

    之前虽然在课堂上跟随老师初步学习了这些协议,但由于缺乏实践,认识不足,导致分析包的时候一头雾水。我将包内容与老师讲义上一一对照,结合教材与网络资料,才弄懂每个字段含义。

    • 比如IP包首部长度以4字节为单位;
    • IP片偏移以8字节为单位;
    • TCP片偏移以4字节为单位;
    • IP校验和只计算首部;
    • ICMP校验和计算整个报文;
    • TCP校验和需加上伪首部计算;
    • 校验和计算采用反码加法
  • 本次实验遇到的问题还有wireshark软件使用问题

    对wireshark的使用,因为没有接触过,使用起来不太流畅。许多功能比如筛选,标记,分组等最开始也不会用。不过后来到TCP时就会用了。

  • 本次实验最大的收获在于学会了各种协议的每个字段的用处,理解了协议设计者这么设计每个字段的目的。

    重点理解了TCP协议建立连接与释放连接的过程,知道了对于没有完美方案的问题该如何尽可能的解决。

    还理解了各种辅助协议比如ARP,ICMP等在网络通信中的作用。

阅读全文
0 0