ICMP实验二:ICMP时间戳请求与应答

2015年11月08日

一、实验目的

通过简单的实验来了解ICMP时间戳请求与应答

二、ICMP时间戳请求与应答简介

  • 数据报格式

图片失效

  • 字段说明
    • 类型和代码:类型13,代码0,代表ICMP时间戳请求;类型14,代码0,代表ICMP时间戳应答
    • 检验和:整个报文的检验和
    • 标识符与序列号:由发送端设定,在应答中被返回,这样发送端就能把应答和请求进行匹配
    • 发起时间戳:发送端填写,然后发送报文
    • 接收时间戳:应答端填写,接收报文时填写
    • 传送时间戳:应答端填写,发送应答时填写(一般与接收时间戳一致)

三、实验环境

表1 ICMP实验环境
机器名称 网卡名称 IP地址 MAC地址
FreeBSD V1 em0 192.168.146.141 00:0c:29:4b:8e:c3
FreeBSD V2 em0 192.168.146.142 00:0c:29:c7:9f:61

四、实验步骤

  • 在FreeBSD V1和FreeBSD V2上监听局域网内所有ICMP数据包
1
2
# 命令
tcpdump -nex -ttt -vnn icmp
  • FreeBSD V1对FreeBSD V1发送ICMP时间戳请求,代码为icmptime.c
1
2
3
4
5
6
7
8
# 命令
cc icmptime.c -o icmptime
icmptime 192.168.146.142

# 结果
orig = 44698320, recv = 44704347
adjustment = 6027 ms
correction = 6 sec, 27000 usec
  • FreeBSD V1和FreeBSD V2监听到的网络内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# FreeBSD V1 上监听到的网络内容
00:00:00.000000 00:0c:29:4b:8e:c3 > 00:0c:29:c7:9f:61, ethertype IPv4 (0x0800), length 54: (tos 0x0, ttl 64, id 9963, offset 0, flags [none], proto ICMP (1), length 40)
    192.168.146.141 > 192.168.146.142: ICMP time stamp query id 41273 seq 14640, length 20
	0x0000:  4500 0028 26eb 0000 4001 ad7d c0a8 928d
	0x0010:  c0a8 928e 0d00 0b1c a139 3930 02aa 0ad0
	0x0020:  0000 0000 0000 0000
00:00:00.000154 00:0c:29:c7:9f:61 > 00:0c:29:4b:8e:c3, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 8448, offset 0, flags [none], proto ICMP (1), length 40)
    192.168.146.142 > 192.168.146.141: ICMP time stamp reply id 41273 seq 14640: org 12:24:58.320, recv 12:25:04.347, xmit 12:25:04.347, length 20
	0x0000:  4500 0028 2100 0000 4001 b368 c0a8 928e
	0x0010:  c0a8 928d 0e00 c011 a139 3930 02aa 0ad0
	0x0020:  02aa 225b 02aa 225b 0000 0000 0000


# FreeBSD V2 上监听到的网络内容
00:00:00.000000 00:0c:29:4b:8e:c3 > 00:0c:29:c7:9f:61, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 9963, offset 0, flags [none], proto ICMP (1), length 40)
    192.168.146.141 > 192.168.146.142: ICMP time stamp query id 41273 seq 14640, length 20
	0x0000:  4500 0028 26eb 0000 4001 ad7d c0a8 928d
	0x0010:  c0a8 928e 0d00 0b1c a139 3930 02aa 0ad0
	0x0020:  0000 0000 0000 0000 0000 0000 0000
00:00:00.000044 00:0c:29:c7:9f:61 > 00:0c:29:4b:8e:c3, ethertype IPv4 (0x0800), length 54: (tos 0x0, ttl 64, id 8448, offset 0, flags [none], proto ICMP (1), length 40)
    192.168.146.142 > 192.168.146.141: ICMP time stamp reply id 41273 seq 14640: org 12:24:58.320, recv 12:25:04.347, xmit 12:25:04.347, length 20
	0x0000:  4500 0028 2100 0000 4001 b368 c0a8 928e
	0x0010:  c0a8 928d 0e00 c011 a139 3930 02aa 0ad0
	0x0020:  02aa 225b 02aa 225b

五、实验结果分析

  • 分析FreeBSD V1监听到的数据报,易得:
表2 IP数据报首部解析
版本 首部长度 服务类型 总长度 标识 标志 片偏移 TTL 协议 首部校验和 源IP地址 目的IP地址
0x4 0x5 0x00 0x0028 0x26eb 0x0 0x0 0x40 0x01 0xad7d 0xc0a8928d 0xc0a8928e
IPV4 20 Bytes 一般服务 40Bytes(20Bytes IP首部 + 20Bytes ICMP报文) 9963 64 ICMP 置为0x0000 192.1658.146.141 192.1658.146.142


表3 ICMP时间戳请求数据报解析
类型 代码 检验和 标识符 序列号 发起时间戳(org) 接收时间戳(recv) 传送时间戳(xmit)
0x0d 0x0 0x0b1c 0xa139 0x3930 0x02aa0ad0 0x0 0x0
13 0 置为0x0000 44698320 0 0


表3 ICMP时间戳请求数据报解析
类型 代码 检验和 标识符 序列号 发起时间戳(org) 接收时间戳(recv) 传送时间戳(xmit)
0x0e 0x0 0xc011 0xa139 0x3930 0x02aa0ad0 0x02aa225b 0x02aa225b
14 0 置为0x0000 44698320 44704347 44704347


  • 精度问题

    • tcpdump时间戳的精度是us
    • ICMP时间戳请求与应答的精度是ms,受限于时间戳字段只有32位(
  • 网络传输时间计算

    • 总耗时(FreeBSD V1上tcpdump记录):154us
    • 中途响应耗时(FreeBSD V2上tcpdump记录):44us
    • 网络传输时间:110us(154us - 44us)

六、参考内容