到了不用进行分片就能通过这条路径的最大的最

作者: 操作系统  发布:2019-09-11

通讯术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通讯公约的某一层上边所能通过的最大数量包大小(以字节为单位)。最大传输单元这一个参数常常与通讯接口有关(网络接口卡、串口等)。

详见说明因特网球组织议允许IP分片,那样就能够将数据包分成足够小的局地以通过那么些最大传输单元小于该数据包原始大小的链路了。这一分片进度产生在互联网层(OSI 模型的第三层),第四层为传输层,传输层是 OSI 模型中最关键的一层,这里是基于窗口调整传输,而非MTU。传输公约同一时候实行流量调节或是基于接收方可接收数据的快慢程度规定适用的出殡和埋葬速率。除了那几个之外,传输层依照网络能管理的最大尺寸将较长的多寡包进行强制分割。举例,以太网不可能接收大于1500字节的数据包。发送方节点的传输层将数据分割成十分小的数据片,同期对每一数据片计划一种类号,以便数据到达接收方节点的传输层时,能以科学的逐个重组,该进程即被喻为排序。它选拔的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被抬高了符号,那样目标主机的TCP层就能够将分组重组成原始的数量包了。 在因特网球组织议中,一条因特网传输路线的“路线最大传输单元”被定义为从源地址到目标地址所通过“路线”上的具备IP跳的最大传输单元的细小值。或许从别的三个角度来看,就是无需进一步分片就能够穿过这条“路线”的传导单元的最大值。 奥迪Q5FC 1191陈诉了“路线最大传输单元开掘方法”,那是一种鲜明多少个IP主机之间路线最大传输单元的工夫,其指标是为了制止IP分片。在那项技能中,源地址将数据报的DF(Don't Fragment,不要分片)地点位,再逐级增大发送的数据报的分寸——路径上别的需求将分组举办分片的装置都会将这种多少报舍弃并回到一个“数据报过大”的ICMP响应到源地址——那样,源主机就“学习”到了不用实行分片就能够通过那条门路的最大的最大传输单元了。 不幸的是,越多的网络封闭扼杀了ICMP的传导(举例说为了幸免DDOS攻击)——那使得路线最大传输单元发掘方法不可能平常干活,其周围表现便是二个一连在低数据流量的情状下得以平常办事,但一旦有雅量多少同期发送,就能够立刻挂起(比如在选取IRC的时候,客商会发觉在出殡和埋葬了多个取缔IP诈欺的ping之后就得不到别的响应了,那是因为该连接被大批量的应接消息堵塞了)。何况,在七个接纳因特网球组织议的网络中,从源地址到指标地址的“路线”日常会为了响应有滋有味的平地风波(负载均衡、拥塞、断电等等)而被动态地修改——那只怕引致路线最大传输单元在传输进度中产生改造——有时依然是一再的转移。其结果是,在主机寻觅新的能够安全工作的最大传输单元的还要,更加多的分组被错失掉了。 对于最近大好些个选用以太网的局域网来讲,最大传输单元的值是1500字节。可是像PPPoE那样的系统会减小这一个数值,那就使得在选拔最大传输单元开掘方法时可能会生出这么的结果:一些高居配置失当的防火墙之后的站点变得不行达了。对于这种气象,照旧大概找到变化的秘诀的,但那有赖于你说了算的是网络的哪部分。那么些点子包蕴更改用来在防火墙一端创设TCP连接的率先个分组的MSS(马克西姆um Segment Size,最大分段大小)。 对于一些支撑老版本以太网球组织议的IBM系统(比如XSeries),也许唯有在把最大传输单元设为1492事后工夫在当下广大的局域互连网海展览中心开运作。 怎样检测网关的MTU 在本机展开dos窗口,实行: ping -f -l 1472 192.168.0.1 在那之中192.168.0.1是网关IP地址,1472是数据包的长短。请留意,上边的参数是“-l”(小写的L),并不是“-1”。 要是能ping通,表示数据包不须求拆包,能够由此网关发送出去。 假诺出现: Packet needs to be fragmented but DF set. 代表数据包须求拆开来发送。此时,收缩数额包长度,再实施上边的ping命令。从1400到1472之内多试五回,就能够找到确切的多少包长度了。把数量包长度加上数量岳阳28字节,就收获MTU的值。 假若检查测试到网关的MTU值是1500,无需修改。 固然网关有防火墙ping不通,可以尝试直接把MTU设为1400。   怎么着修改本机的MTU 修章如下: Windows平台下 1、运营regedit 2、张开:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfaces 3、Interfaces下有多少个子项,种种子项对应贰个网卡。请按如下方法选拔网卡: A、分明本机用来接二连三Internet的网卡或拨号连接的IP,如192.168.0.19; B、用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项; C、假如IPAddress的键值与A中的IP同样,即192.168.0.19,则该子项就是要找的网卡。 4、走入该子项,在左边的窗口里按鼠标右键,选拔“新建”->“DWO奇骏D 值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口,填入MTU的值(一般为十进制的1480)。 填写前请先把基数设为十进制。 设置好后,须求重启机器才具奏效。 Windows 7(XP、Vista未实地度量) 1、使用管理员权限运维cmd 2、使用netsh interface ipv4 show subinterfaces发令看看MTU以及本地连接名称。 3、使用netsh interface ipv4 set subinterface "本地连接" mtu=1000 store=persistent (注:这里的连天名是你采纳方面命令看到的MTU值对应的那几个接二连三名,他在右两臂展开的长度现。) 附:1、此办法毫无重启;2、如是ipv6就将地点的ipv4改成ipv6 Linux下可选择如下命令修改 要求root权限 ifconfig网卡MTU值 如 ifconfig eth0 mtu 1460 马克斯MTU是最大的TCP/IP传输单元,在TCP/IP公约中,将在传输的数额分为非常的小的组开展传输,各样组的轻重缓急为576字节。Windows暗许的字节为1500,那是以太网的分组标准。ADSL使用的 PPPoE略小于那几个数值,一般为1492。而某个网址选拔的马克斯MTU大于1492,所以,恐怕形成一些网页不能够访谈。修改Windows暗许的马克斯MTU能够解决那几个题目。不论是 PC机上安装的PPPoE软件依然是内置在Modem的 PPPoE软件,在动用中都有非常的大概率遇到这几个主题素材。 借使应用路由器出现此种情状, 请在防火墙配置 => 基本设定 里, 将MTU改为手工业, 设置为 1492 就可以. 那什么明显路由器从ISP获得的 MTU 为 1500, 请见附属类小部件圈出的地方. 互连网中一些广阔链路层左券MTU的缺省数值如下: FDDI会谈:4352字节 以太网(Ethernet)协议:1500字节 PPPoE(ADSL)协议:1492字节 X.25协议(Dial Up/Modem):576字节 Point-to-Point:4470字节 假设在IP层要传输一个数量报比链路层的MTU还大,那么IP层就能对这一个数据报开展分片。叁个数目报会被分成若干片,每种分片的分寸都自愧不比可能等于链路层的MTU值。当同一互连网上的主机相互开展通讯时,该网络的MTU对通讯双方丰盛关键。但当主机间要通过广大互联网工夫通讯时,对通信双方最根本的是通信路线中幽微的MTU,因为在通讯路径上不一致网络的链路层MTU分歧。通讯路线中细小的MTU被称作路线MTU。   ------------------------
The ipv6 mtu of interface 0 is 3100:
[email protected]:/tmp$ sudo tcpdump -ni eth0 -evvv icmp6

09:22:22.394905 f0:de:f1:fb:98:8b > 00:21:27:ac:f1:53, ethertype IPv6 (0x86dd), length 3110: (hlim 64, next-header Fragment (44) payload length: 3056) 1234::60ef:4cde:b1a1:d87e > 1234::2: frag (0xe5fc7cc4:0|3048) ICMP6, echo request, length 3048, seq 1
09:22:22.394934 f0:de:f1:fb:98:8b > 00:21:27:ac:f1:53, ethertype IPv6 (0x86dd), length 2022: (hlim 64, next-header Fragment (44) payload length: 1968) 1234::60ef:4cde:b1a1:d87e > 1234::2: frag (0xe5fc7cc4:3048|1960)

09:22:22.396538 00:21:27:ac:f1:53 > f0:de:f1:fb:98:8b, ethertype IPv6 (0x86dd), length 3110: (hlim 64, next-header Fragment (44) payload length: 3056) 1234::2 > 1234::60ef:4cde:b1a1:d87e: frag (0x249da4f6:0|3048) ICMP6, echo reply, length 3048, seq 1
09:22:22.396544 00:21:27:ac:f1:53 > f0:de:f1:fb:98:8b, ethertype IPv6 (0x86dd), length 2022: (hlim 64, next-header Fragment (44) payload length: 1968) 1234::2 > 1234::60ef:4cde:b1a1:d87e: frag (0x249da4f6:3048|1960)

1.  Algorithm:

1>  Is the biggest integer which is smaller than 3100.
2>  could be devided by 8.
Since "3096" match the rule, so use it in IP layer to fragment.  

2.  Then use the "3096" to caculate other length:
3>  Ethernet layer length : add the ethernet header length "14", the total length which is printed in ethernet layer is "3110".
4>  IP layber payload: Since the IP layber of IPV4 is 40, so the printed payload is 3056.  
5>  ICMP length : And the ICMP tyoe of IPV6 is 8, so the printed ICMP payload is 3048.


ipv4 mtu:

If set the ipv4 mtu of interface 0 to "1500", then ping an IP address whihc is directlly connected, then use tcpdump:

[email protected]:/tmp$ sudo tcpdump -ni eth0 -evvv icmp

09:39:53.721760 00:21:9b:58:ca:8f > 00:90:7f:95:70:98, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 8113, offset 0, flags [ ], proto ICMP (1), length 1500)
    172.26.0.183 > 172.26.0.1: ICMP echo request, id 4321, seq 1, length 1480
09:39:53.721778 00:21:9b:58:ca:8f > 00:90:7f:95:70:98, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 8113, offset 1480, flags [ ], proto ICMP (1), length 1500)
    172.26.0.183 > 172.26.0.1: icmp
09:39:53.721781 00:21:9b:58:ca:8f > 00:90:7f:95:70:98, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 8113, offset 2960, flags [ ], proto ICMP (1), length 1500)
    172.26.0.183 > 172.26.0.1: icmp
09:39:53.721784 00:21:9b:58:ca:8f > 00:90:7f:95:70:98, ethertype IPv4 (0x0800), length 602: (tos 0x0, ttl 64, id 8113, offset 4440, flags [none], proto ICMP (1), length 588)
    172.26.0.183 > 172.26.0.1: icmp

09:39:53.722909 00:90:7f:95:70:98 > 00:21:9b:58:ca:8f, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 10621, offset 0, flags [ ], proto ICMP (1), length 1500)
    172.26.0.1 > 172.26.0.183: ICMP echo reply, id 4321, seq 1, length 1480
09:39:53.723153 00:90:7f:95:70:98 > 00:21:9b:58:ca:8f, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 10621, offset 1480, flags [ ], proto ICMP (1), length 1500)
    172.26.0.1 > 172.26.0.183: icmp
09:39:53.723161 00:90:7f:95:70:98 > 00:21:9b:58:ca:8f, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 10621, offset 2960, flags [ ], proto ICMP (1), length 1500)
    172.26.0.1 > 172.26.0.183: icmp
09:39:53.723402 00:90:7f:95:70:98 > 00:21:9b:58:ca:8f, ethertype IPv4 (0x0800), length 602: (tos 0x0, ttl 64, id 10621, offset 4440, flags [none], proto ICMP (1), length 588)
    172.26.0.1 > 172.26.0.183: icmp

1.  Algorithm:
1>  Is the biggest integer which is smaller than 1500.
2>  could be devided by 4.
Since "1500" match the rule, so use it in IP layer to fragment.

2.  Then use the "3096" to caculate other length:
Ethernet layer length : Add the ethernet header length "14", the total length which is printed in ethernet layer is "1514".  

最大传输单元(马克西姆um Transmission Unit,MTU)是指一种通讯协议的某一层上边所能通过的最大数量包大小(以字节为单位)。最大传...

9159金沙官网 1

Traceroute是多少个丰盛低价的网络会诊工具。它能够出口以下八个内容:

ip尾部最长是60字节,前边的20字节是稳定的,选项可拉长40字节

1 网络数据包的从源地址到指标地址的全部传输路线。

4位版本号--- 对于ipv4来讲呢,就是4

2 传输路线上的路由设备的新闻(IP地址可能hostname)

4位底院长度 ---  表示 有多小个32bit(4字节),4位最大表示数是15呐,也正是最大正是15啊,所以底部最长就是60啦

3 网络数据包在路由道具间的延时(Latency)

8位服务类型 --- 已经毫无了

从这个功效能够见到,traceroute平时可以用于判别网络故障,检查实验网络传输路线等场所。Traceroute今后着力随Linux系统一发布行,所以选取起来十一分有助于。在Windows系统下,对应的工具是TRACERT.

16总省长度---ip数据报长度 所以最大尺寸为 65535啊

Traceroute的三个优点是,它不必要你发送实际的数码到指标地址,就能够帮您输出整个互联网路径(实际上照旧要发送数据,只是发送的不是您的实在多少)。

13个人标记-- 分片的时候用的

在基于OpenFlow的SDN中,要促成traceroute功效,实际上固然要在SDN中落到实处traceroute所依赖的互联网功效。那么接下去看看traceroute所正视的网络成效有何?

3位标记 --- 第二其中国人民保险公司留 第多少人 禁止分片 第肆位 表示越多分片

TTL(hop limit)

16人偏移 --- 相对ip数据报的始发处

在IP左券(Internet Protocol)中,TTL(Time To Live)是二个8bit的字段,IPv4协商业中学,协议头有拾柒个8bit的字段,TTL占第9个8bit;IPv6磋商业中学,合同头有肆十一个8bit的字段,TTL占第8个8bit。因而,TTL在IP合同中,最大值是255,平常的暗中同意值是64。下图是IPv4合同的字段。

8位生存时间 ---ttl 当变为0的时候放任

9159金沙官网 2

8 位左券 ---- 指应用层公约,区分上层左券

TTL存在的含义是什么样?大家即使大家的互连网体系中,每一个路由设备都有默许路由,大家发出二个以不设有的地点作为指标地址的IP数据包,那么那些数据包将恒久在我们的互联网种类中间转播发。把互连网体系作为Internet,那么随着时间推移,Internet必然会被大批量如此的“永生”IP数据包淹没。正是为了幸免那一个标题,IP左券中提议了TTL,当TTL为0,IP数据包会被屏弃。

十五人校验和 ---- 数据的hash值啦

TTL被规划为IP数据包在Internet中最长的依存时间。然则事实上,每种转载了IP数据包的设施,都需求将TTL减1,也便是说TTL等于IP数据包能经历的最大跳(hop)数,并非光阴(秒数)。所以,为了制止误解,在IPv6中,将TTL改名字为hop limit。为了便利,大家依旧叫它TTL吧。

32 位 原端 和指标端ip地址

回过来看眼下的描述,有七个难点:

选项 包括有

什么是hop?

1 记录路由

Hop是指IP数据包传输进程中的一段路线。当IP数据包从三个互联网设施传输至另一个网络设施,那足以感到是二个hop(跳)。

2 时间戳

IP数据包被何人扬弃了?

3 松散路由

被路由器具抛弃了,依据RFC1812,路由器材在转载IP数据包的时候,会将TTL减1,假设减完现在的结果是0,那么IP数据包会被丢掉。所以说,在IP互连网中,路由器械亟需舍弃TTL为1的数据包。

4 严谨 路由

路由设备在撤除TTL为1的数据包之后,还可能会向数据包的源地址发送二个ICMP Time exceeded message(ICMP type 11),在那条音讯中,路由器材会将团结的IP地址作为源地址。

上边来剖判一下

如上所述traceroute正是依赖TTL和路由设备的特征来贯彻的。

9159金沙官网 ,tcpdump -i eth0:1 -ent '(dst 192.168.5.190 and src 192.168.5.109)or( dst 192.168.5.109 and src 192.168.5.190)' –X

Traceroute原理

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 74: 192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 72, length 40

主干完毕原理

0x0000:  4500 003c 7da4 0000 4001 70a1 c0a8 056d  E..<}...@.p....m
0x0010:  c0a8 05be 0800 4d13 0001 0048 6162 6364  ......M....Habcd
0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi

据书上说前面包车型客车描述,只要发送一个IP数据包,将TTL设为1,就会选用第一个路由道具重回的ICMP TTL exceeded message。将TTL设为2,就会收到第贰个路由道具的。由此及彼,当TTL大到一定数的时候……,IP数据包就被目标设备收到,并且目标设备会做出响应。所以traceroute的规律,轻巧的话,如下图所示:

0x4 代表ip版本号

9159金沙官网 3

0x5  尾局长度为 5个叁拾四位(十八个字节)

探测包(UDP)

0x00 表明tos未有开启

Traceroute会发送什么样的IP数据包?暗中同意是UDP数据包。除了前方说过的TTL,那个UDP数据包会富含:

0x003c  表达 数据报总厅长度 60字节

源地址

0x7da4 数据报标示

目标地址

0x0 未有安装标记位

二个UDP端口,端口号在33434和33534里边,那个区间的端口号对UDP来讲是船到江心补漏迟的端口号。因而指标地址收到了那一个UDP数据包,会回来ICMP UDP Port Unreachable(ICMP type 3)的信息。这么四个别致的回到音讯,traceroute在接到了它未来,就知晓网络路径探测该终结了。

0x000 分片偏移

实际上的数据流

0x40 ttl设置为64

陈说的几近了,大家来看一个简便拓扑下traceroute背后的多少流吧。互联网拓扑:

0x01 表示上层协议 为 icmp    1    ICMP        # internet control message protocol (能够查找linux的/etc/protocols )

9159金沙官网 4

0x70a1 校验值

tcpdump抓包:

0xc0a8 056d 源ip

http://paste.ubuntu.com/23803412/

0xc0a8 05be 目标ip

而外前边已经描述过的,有三点供给留神。

 

种种TTL都发了几个探测包出来,那是为了对同贰个hop获得一遍的延时数据,使得结果更是客观。

IP分片

怎么时候会分片呢,就是数额包大的时候啊

9159金沙官网 5

参照下图就最明白啊

9159金沙官网 6

下边来做个试验

ping 192.168.5.190 -l 1473

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 20425, offset 0, flags [ ], proto ICMP (1), length 1500)

192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 92, length 1480

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 20425, offset 1480, flags [none], proto ICMP (1), length 21)

192.168.5.109 > 192.168.5.190: icmp

从id能够观察

他俩多个包都是同一个包的

率先个包偏移为0 ,flag[ ] 表示MF标志啦

其次个包偏移为1480 flag[none]表示已经无下三个

从上个大家可以驾驭,第一个包是尚未包括icmp尾部,因为专门的学问说第贰次发了后一次就不发啊

老是发生的探测包,UDP端口都分裂等。这是为了将回来的音讯跟发出的消息实行相称。以总括IP数据包从爆发到收到的延时(Latency)。在下面的示范中,那就好像不需求,因为探测包都以一发一收,串行实践。那是因为作者用的是简版的traceroute,在高版本的traceroute中,暗中同意是相互发送17个探测包。来感受一下并行发送的凌乱感吧。

https://paste.ubuntu.com/23791252/

Traceroute收到了ICMP消息,都包括有内层信息,内层音信就像是有探测包的大好多新闻。

探测包:IP (tos 0x0, ttl 1, id 2143, offset 0, flags [DF], proto UDP (17), length 46)10.0.0.10.33875 > 10.0.1.10.33435: UDP, length 18回复包:IP (tos 0xc0, ttl 64, id 15477, offset 0, flags [none], proto ICMP (1), length 74)10.0.0.1 > 10.0.0.10: ICMP time exceeded in-transit, length 54    IP (tos 0x0, ttl 1, id 2143, offset 0, flags [DF], proto UDP (17), length 46)    10.0.0.10.33875 > 10.0.1.10.33435: UDP, length 18

根据RFC777,ICMP左券要求将发出ICMP error的原数据包的至少前28字节拷贝至ICMP error message的payload,所以大家能看出探测包的始末。二十六个字节包括了十八个字节的IP报头,和8个字节的UDP报头。

三种traceroute的兑现格局

后面介绍的都以基于UDP公约的traceroute完结,而实质上中traceroute还是能依照ICMP和TCP左券。首先要说的是,那二种办法的为主落到实处原理是同等的,都以遵照TTL和路由设备再次回到的消息。分化是探测包不均等。为啥会有三种完结方式?因为您的防火墙大概阻碍了UDP,为了让traceroute在这么的景况下也能办事,才有了其他完毕。

ICMP traceroute

与UDP traceroute的分别就在于:

探测包正是ICMP echo request

目标设备再次回到的便是ICMP echo reply

linux下的traceroute能够透过点名参数来用ICMP做traceroute,而windows下的tracert暗中认可便是用ICMP来做traceroute。

TCP traceroute

与UDP traceroute的分化在于:

探测方式是与tcp 80(默许)端口创立连接

目标设备的回来时总是成功,恐怕80端口关闭

就算指标设备重临连接成功,traceroute程序会立时断开连接,因为从没供给。

Traceroute with NAT

问题

那是个相比较风趣的趋向。前边说过,路由道具重返的ICMP time exceeded message会将探测包的前二十几个字节拷贝至ICMP的payload。那借使路由设备做了NAT(network address translation),会时有爆发什么样结果?为了把标题陈说清楚,笔者搭了贰个之类的互联网拓扑:

9159金沙官网 7

大家来拜候TTL=2的探测包是怎么发送的:

先是个路由器上考查到的数码:

IP (tos 0x0, ttl 2, id 6596, offset 0, flags [DF], proto UDP (17), length 46)20.0.0.12.51016 > 192.168.31.94.33438: UDP, length 18

其次个路由器上观看到的多少:

IP (tos 0x0, ttl 1, id 6596, offset 0, flags [DF], proto UDP (17), length 46)172.24.4.3.51016 > 192.168.31.94.33438: UDP, length 18

能够见到,同二个探测包(端口号,ID一致),在首先个路由器,TTL=2,第一个路由器TTL=1,那前面边的叙说一致。而且在其次个路由器上,探测包改成了由172.24.4.3出殡和埋葬了。这是因为第二个路由器对探测包做了源地址NAT。

那第4个路由器怎么样晓得将ICMP time exceeded message重临给20.0.0.12?

外层NAT

笔者们来探视首个路由器(上边十分)再次回到的ICMP time exceeded message。

IP (tos 0xc0, ttl 64, id 55039, offset 0, flags [none], proto ICMP (1), length 74)172.24.4.1 > 172.24.4.3: ICMP time exceeded in-transit, length 54    IP (tos 0x0, ttl 1, id 6596, offset 0, flags[DF], proto UDP (17), length 46)    172.24.4.3.51016 > 192.168.31.94.33438: UDP, length 18

第二个路由器不关切数据包从哪来,只是将前段时间它接受的数据包的前28字节拷贝到了ICMP payload。所以ICMP内层数据是从172.24.4.3到192.168.31.94。

率先个路由器(下边那么些),自然会对数码包做反向NAT,将要外层的目标地址转换到20.0.0.12。所以,第多少个路由器做完外层NAT之后,数据包应该是那样的:

IP (tos 0xc0, ttl 63, id 55039, offset 0, flags [none], proto ICMP (1), length 74)172.24.4.1 > 20.0.0.12: ICMP time exceeded in-transit, length 54    IP (tos 0x0, ttl 1, id 6596, offset 0, flags[DF], proto UDP (17), length 46)    172.24.4.3.51016 > 192.168.31.94.33438: UDP,length 18

内层NAT

但是事实上,第2个路由器收到的ICMP time exceeded message是那样的:

IP (tos 0xc0, ttl 63, id 55039, offset 0, flags [none], proto ICMP (1), length 74)172.24.4.1 > 20.0.0.12: ICMP time exceeded in-transit, length 54    IP (tos 0x0, ttl 1, id 6596, offset 0, flags[DF], proto UDP (17), length 46)    20.0.0.12.51016 > 192.168.31.94.33438: UDP,length 18

内层的地点也被反向NAT了。也正是说对于ICMP time exceeded message,帮助NAT的路由器必要同期对外层包和内层包做反向NAT。那样,对于源器材20.0.0.12,它认为不到外围爆发了如何,但是同期又能取得各类路由设备的音信。

LANDFC5508对此作了斐然的定义:

NAT Behavioral Requirements for ICMP

完整的tcpdump记录在:

http://paste.ubuntu.com/23803870/

能够看来ICMP包在通过NAT设备后,内层数据也做了NAT转变。若是不对内层数据做NAT,ICMP包将会是个空头的数据包。

OpenFlow based SDN

眼下说的全数的都以基于IP左券栈,而OpenFlow未有这几个东西。那就表示,固然要对依赖OpenFlow的router达成traceroute,必要手动达成后面谈起的效果。那满含:

路由转载时对IP数据包的TTL减1

路由转载时,对TTL=1的数据包扬弃

屏弃了TTL=1的数目包时,重回ICMP time exceeded message。

由于SDN中的虚构路由器端口恐怕是虚拟的,所以要求SDN中的虚构路由器响应UDP和TCP乞求,重返ICMP Port Unreachable。

若是router匡助NAT作用,还索要对ICMP error message做内层数据包NAT。

TTL减1

其一在OpenFlow中一度支撑那样的action,能够在路由的时候对TTL举行减1。

丢弃invalid TTL packet,并返回ICMP time exceeded message

从OpenFlow 1.2起,援助将TTL invalid packet上送至OpenFlow调控器,在调节器内,能够生成ICMP time exceeded message,并赶回给送入端口。

设想路由器响应UDP和TCP须求,再次来到ICMP Port Unreachable

相配虚构路由器的端口上的UDP和TCP恳求,上送OpenFlow调整器,在调整器内,能够生成ICMP Port Unreachable message,并重临给送入端口。

对ICMP error message做内层数据包NAT

匹配NAT央求中的ICMP error message,上送OpenFlow调节器,在调整器内对内层数据包做NAT,再送到相应的输出端口。

地点有关实现的汇报相比轻巧,具体的贯彻能够参谋到自己在Dragonflow项目标代码。

Support traceroute in dragonflow network

正文转发自:

本文由9159.com发布于操作系统,转载请注明出处:到了不用进行分片就能通过这条路径的最大的最

关键词: 9159.com 9159金沙官网