通过检查ICMP time-exceeded
数据包的有效负载,我注意到有时是最后一个路由器(ttl=2
在返回数据包中时)甚至前一个路由器(最多 5 跳之前ttl=5
)丢弃数据包并生成 ICMP 消息。
为何如此?这背后有什么原因吗?
你如何在思科路由器中设置它?
编辑:
请注意,所有这些数据包都是 ICMP 类型 11 代码 0,这意味着:
类型 = 超时,代码 = ttl-0-during-transit
Edit2:以下是此类 ICMP 数据包的两个示例。
###[ IP ]###
version = 4L
ihl = 5L
tos = 0x0
len = 168
id = 9969
flags =
frag = 0L
ttl = 243
proto = icmp
chksum = 0x19ea
src = 193.51.189.25
dst = 134.59.129.241
\options \
###[ ICMP ]###
type = time-exceeded
code = ttl-zero-during-transit
chksum = 0xbf6e
unused = 0
###[ IP in ICMP ]###
version = 4L
ihl = 5L
tos = 0x0
len = 52
id = 57161
flags = DF
frag = 0L
ttl = 2
proto = tcp
chksum = 0xcf32
src = 134.59.129.241
dst = 173.194.20.89
\options \
###[ TCP in ICMP ]###
sport = 43843
dport = http
seq = 3927922380L
ack = 3188073609L
dataofs = 8L
reserved = 0L
flags = A
window = 14165
chksum = 0x51f9
urgptr = 0
options = [('NOP', None), ('NOP', None), ('Timestamp', (5088093, 1579045454))]
###[ Padding ]###
load = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x9d\xeb\x00\x08\x01\x01\x00\nA\x01'
###[ IP ]###
version = 4L
ihl = 5L
tos = 0x0
len = 168
id = 37758
flags =
frag = 0L
ttl = 246
proto = icmp
chksum = 0xaa73
src = 193.51.189.2
dst = 134.59.129.241
\options \
###[ ICMP ]###
type = time-exceeded
code = ttl-zero-during-transit
chksum = 0x2e1c
unused = 4
###[ IP in ICMP ]###
version = 4L
ihl = 5L
tos = 0x0
len = 60
id = 53079
flags = DF
frag = 0L
ttl = 5
proto = tcp
chksum = 0x6d73
src = 134.59.129.241
dst = 74.125.230.71
\options \
###[ TCP in ICMP ]###
sport = 45799
dport = http
seq = 2382327024L
ack = 0
dataofs = 10L
reserved = 0L
flags = S
window = 14600
chksum = 0x83ed
urgptr = 0
options = [('MSS', 1460), ('SAckOK', ''), ('Timestamp', (5088167, 0)), ('NOP', None), ('WScale', 4)]
###[ Padding ]###
load = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00X\xf6\x00\x08\x01\x01\x04\x01\x81\xff'
Run Code Online (Sandbox Code Playgroud)
http://packetlife.net/blog/2008/dec/22/disabling-mpls-ttl-propagation/
http://www.ciscopress.com/articles/article.asp?p=680824&seqNum=4
当外部标签的 TTL 递减为 0 时,您的数据包是 MPLS 封装的,但内部数据包 TTL 未更新,因此转发 TTL 过期的标记数据包,并将内部 IP 数据包(具有明显有效的 TTL)返回到你被最终的 MPLS 路由器过期了。
============================
当标记的数据包 TTL 到期时,该数据包实际上会继续转发,直到它开启的“隧道”结束,因为将 TTL 字段递减为 0 的路由器可能没有返回原始发送者的有效路由。因此,MPLS 标签被编辑以指示 TTL 过期,最终最终隧道路由器解封装“有效但标签过期”的数据包,并将其与 TTL 失败消息一起发回。
免责声明:我通读了几个 RFC 的与 TTL 相关的部分,但没有关于这种处理的确定,所以我想说这种行为可能因供应商而异。
来自捕获数据包的证据:
Internet Control Message Protocol
Type: 11 (Time-to-live exceeded)
Code: 0 (Time to live exceeded in transit)
Checksum: 0xf4df [correct]
Internet Protocol, Src: 192.168.1.x (192.168.1.x), Dst: 8.8.8.8 (8.8.8.8)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x80 (DSCP 0x20: Class Selector 4; ECN: 0x00)
Total Length: 92
Identification: 0x6b56 (27478)
Flags: 0x00
Fragment offset: 0
Time to live: 2 <===== payload of packet entering MPLS tunnel
Protocol: ICMP (1)
Header checksum: 0x7abb [correct]
Source: 192.168.1.x (192.168.1.x)
Destination: 8.8.8.8 (8.8.8.8)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xf78f [correct]
Identifier: 0x0001
Sequence number: 111 (0x006f)
Sequence number (LE): 28416 (0x6f00)
Data (64 bytes)
MPLS Extensions
Version: 2
Reserved: 0x000
Checksum: 0x5581 [correct]
MPLS Stack Entry
Length: 0x0008
Class: 1
C-Type: 1
Label: 1864, Exp: 4, S: 1, TTL: 1
0000 0000 0111 0100 1000 .... = Label: 1864
.... .... .... .... .... 100. = Experimental: 4
.... .... .... .... .... ...1 = Stack bit: Set
Time to live: 1 <========== MPLS TTL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1493 次 |
最近记录: |