IP 头里面的 Identification 字段

某次和一个兄弟吃饭,他问了我这么一个问题: 一个 NAT 路由器,LAN 口地址为192.168.1.1/24,接了三台电脑PC1、PC2、PC3;WAN 口地址为192.168.2.1/24,接了一台电脑PC4,已知 WAN 口出去的报文,源 IP 地址都被转换为192.168.2.1。若 PC1-3 同时 ping PC4,在 WAN 口上(或者 PC4上)抓取 ICMP 报文,怎么确定某个 ICMP 报文究竟属于是 LAN 口哪个电脑发出的?

久了未学习网络的相关知识,当时确实没想起怎么确定。后来兄弟给出了答案:ICMP 包含在 IP 数据报中,网络传输过程中, IP 头里面的 Identification 字段不会发生变化,因此可以通过该字段确定 ICMP 报文是哪个电脑发出来的,在 PC1-3 上也同时抓取 ICMP 报文,然后使用 Identification 字段对比即可。

关于  Identification 字段。该字段占 16 bit,IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为 IP 是无连接服务,因此数据报不存在按序接收的问题。那么该字段究竟有什么用?当一个数据报长度过长,超过网络 MTU 而需要分片时,则把标识字段的值复制到所有分片数据报中,最后在目的设备才能依据标志字段而正确的重组数据报,因此该字段可以唯一标识某个 IP 报文。

亲自尝试了一下:

1、路由器: LAN 口(IP地址/掩码:192.168.66.1/24)、WAN 口(IP地址/掩码:192.168.0.222/24),NAT 模式;

2、路由器接了 PC1(IP地址/掩码:192.168.66.5/24,网关:192.168.66.1)、PC2(IP地址/掩码:192.168.66.6/24,网关:192.168.66.1);WAN 口接了 PC3(IP地址/掩码:192.168.0.223/24,无网关)

3、PC1 和 PC2 同时 ping PC3,且同时在 PC1、PC2、PC3 上抓包

结果:pic1.png 和 pic2.png 是在 PC3 上抓的 ICMP 包,pic3.png 是在 PC1 上抓的 ICMP 包,pic4.png 是在 PC2 上抓的 ICMP 包。PC3 上收到的 ICMP 包,源地址都是路由器 WAN 口的 IP 地址,源 MAC 地址也是 路由器 WAN 口的 MAC 地址,怎么区别哪个 ICMP 包是来自于 PC1 还是 PC2?仔细看,IP 头的 Identification 字段,pic1.png 中的 Identification 字段 和 pic3.png 中的 Identification 相同,说明 pic1.png 中第一个 ICMP 请求是 PC1 发出的 ICMP 请求,同理,pic2.png 中第二个 ICMP 请求是 PC2 发出的 ICMP 请求。

pic1.png

   

pic2.png

 

pic3.png

    

pic4.png

原文地址:https://www.cnblogs.com/lipx9527/p/14260381.html