NAT设备对数据包的影响 [ 网站地图 ]

发表于:2009-11-5 浏览:66 作者: 来源:互联网

关键字:NAT,设备,数据

描述:NAT是干什么的我就不多说废话了,免得大家拿砖头拍我,现在我就拿自己前几天做过的实验(实验中NAT设备的地址为192.168.11.250,PC的地址为192.168.0.2)向大家展示一下数据包在NAT前后的变化,以了解NAT的

NAT是干什么的我就不多说废话了,免得大家拿砖头拍我,现在我就拿自己前几天做过的实验(实验中NAT设备的地址为192.168.11.250,PC的地址为192.168.0.2)向大家展示一下数据包在NAT前后的变化,以了解NAT的原理

    首先我们查看一下NAT对TCP数据包的操作

    下图是一个TCP包在NAT之前的样子

   

    大家可以看到这个数据包的IP标识是15862(标识是用来分辨数据包的,一台主机发的包的标识依次递增),TTL是128 ,不分片,头部检验码为0x0702,源地址为192.168.0.2,目标地址为61.152.183..141   OK这是IP头部的信息!

    对于TCP头部的信息,源端口1815,目标端口80,序列号是2856985904,确认号是0

  

    这是NAT之后的同一个数据包,大家看出变化了吗?源IP地址是不是变成192.168.11.250了,同时因为更改了IP头部的数据,是不是IP的检验码也变化了!对于TCP来说,源端口是不是也变化了,由1815变为2121,同时TCP的检验码也变了!

    但是其它的选项值是不变的,如IP的标识号,前几次看到有人的文章说IP标识号也会被修改,很奇怪,是不是与NAT设备的厂商有关就不得而知了

    以下是UDP的前后(UDP的包我选择了DNS报文)

 

    下图(UDP  NAT后)

   

    呵呵,对比前面发现什么了吗?

{[csc:pagelist]}

 对于UDP的处理,与前面的TCP的报文一样,只是改变了源地址,源端口及相应的校验码

    对ICMP的处理,可能大家没有想过这个问题,这个也是在网络协议分析论坛上有前辈指出的, ICMP可不像TCP,UDP有端口,NAT设备是如何保证建立对应的NAT表呢?以下是我用最常的两种ICMP报文的演示,其中一个是请求报文,一个是响应报文

    NAT之前的ICMP请求报文

   

    ICMP NAT之前的响应报文

   

    可以看到ICMP的请求与响应报文中有一个字段identifier 它们都是0300,这个值代表唯一主机,意思是同一台主机发出的所有的ICMP报文,它的identifier值都是一样的,不同主机的值不一样.

    在identifier下面有一个序列号,这个是所发出的ICMP报文顺序的唯一标识

    如 你执行一个PING命令,发出四个请求包,这四个请求包每个都应有一个回应包,可是TCP/IP是一种非实时性的协议,不一定发出的第一个请求包所对应的响应包也能第一个回来,那么如何实现一对一对应呢,就是靠这个序列号,每一个请求包和它所对应的回应包的序列号是一样的

    下图是NAT后的ICMP请求包

  

    下图是NAT之后的ICMP回应包

   

    从上图可以看到,NAT对ICMP报文做了以下改动

{[csc:pagelist]}

  首先在IP层改动了源IP,及相应的校验码

    在ICMP中,将identifier及相应的序列号都更改了,当然,更改后的idenfifier仍然标识唯一一主机,序列号仍然是一对一的关系,最后ICMP的校验码也更改了!

    NAT对IP分片的影响

    这个实验我用PING WWW.BAIDU.COM -l 3000 -t

    -l代表是产生多大的PING包,现在我这边是3000byte的包(注意,这次我的本机IP为192.168.100.222 NAT设备地址为192.168.100.250)

    NAT前的IP分片

  

    OK,大家看到这个是NAT前的ICMP分片包,可以看到FLAG字段的more Fragments标志位为1,代表这是个分片包,IP的标识为11080

 

    OK,源地址已经被转换了,所以对应的校验码也变了,其它什么也没变
    好,现在我们明白了,NAT设备对分片仅仅起一个源地址转换作用!


站长资讯网 做中国最丰富的资讯网站 沪ICP备05004089号