目录
一、引言
下图主机1和互联网上的服务器通讯,各级路由器如何转发IP数据报呢?
(注意主机1、主机2、主机3的IP地址一样的)
二、以太网帧及IP数据报格式回顾
下图来自《TCP/IP详解,卷1:协议》。
三、路由器对ICMP、TCP、UDP报文处理
3.1、路由器对ICMP报文处理
下面以 PING 程序发送ICMP回显请求为例;
子网主机发送给外网主机,路由器对IP数据报处理:
输入(处理前) | 输出(处理后) | ||
源IP | ICMP标识符 | 源IP | ICMP标识符 |
IP1 | x1 | 路由器IP | y1 |
IP2 | x2 | 路由器IP | y2 |
... | ... | ... | ... |
IPn | xn | 路由器IP | yn |
同时将对应关系(IPn、xn<——>yn)缓存起来,待外网主机回复时,找到子网目标主机;
外网主机回复子网主机,路由器对IP数据报处理:
输入(处理前) | 输出(处理后) | ||
目的IP | ICMP标识符 | 目的IP | ICMP标识符 |
路由器IP | y1 | IP1 | x1 |
路由器IP | y2 | IP2 | x2 |
... | ... | ... | ... |
路由器IP | yn | IPn | xn |
将对应关系(IPn、xn<——>yn)缓存删除,释放资源。
PS:上文 “一、引言” 图中的路由器2,需要转发多个子网的数据包,16位的“标识符”长度可能不够用,此时需要路由器具备多个外网的 IP 地址。
3.2、路由器对UDP报文处理
子网主机发送给外网主机,路由器对IP数据报处理:
输入(处理前) | 输出(处理后) | ||
源IP | UDP端口 | 源IP | UDP端口 |
IP1 | xx1 | 路由器IP | yy1 |
IP2 | xx2 | 路由器IP | yy2 |
... | ... | ... | ... |
IPn | xxn | 路由器IP | yyn |
同时将对应关系(IPn、xxn<——>yyn)缓存起来,待外网主机回复时,找到子网目标主机;
外网主机回复子网主机,路由器对IP数据报处理:
输入(处理前) | 输出(处理后) | ||
目的IP | UDP端口 | 目的IP | UDP端口 |
路由器IP | yy1 | IP1 | xx1 |
路由器IP | yy2 | IP2 | xx2 |
... | ... | ... | ... |
路由器IP | yyn | IPn | xxn |
3.3、路由器对TCP报文处理
子网主机发送给外网主机,路由器对IP数据报处理:
输入(处理前) | 输出(处理后) | ||
源IP | TCP端口 | 源IP | TCP端口 |
IP1 | xxx1 | 路由器IP | yyy1 |
IP2 | xxx2 | 路由器IP | yyy2 |
... | ... | ... | ... |
IPn | xxxn | 路由器IP | yyyn |
同时将对应关系(IPn、xxxn<——>yyyn)缓存起来,待外网主机回复时,找到子网目标主机;
外网主机回复子网主机,路由器对IP数据报处理:
输入(处理前) | 输出(处理后) | ||
目的IP | TCP端口 | 目的IP | TCP端口 |
路由器IP | yyy1 | IP1 | xxx1 |
路由器IP | yyy2 | IP2 | xxx2 |
路由器IP | ... | ... | ... |
路由器IP | yyyn | IPn | xxxn |
四、遗留问题
上文“二、路由器对ICMP、TCP、UDP报文处理”中,未说明路由器对 UDP、TCP 数据包处理过程中,缓存的对应关系(IPn、xxxn<——>yyyn),何时删除。
参考:
Nat 对 tcp , udp , icmp 报文的处理 _卧龙小学堂-优快云博客_icmp nat
五、参考文章
P2P学习(一)NAT的四种类型以及类型探测 - 山上有风景 - 博客园
路由器处理icmp包的想法_wuxinyanzi的专栏-优快云博客
六、其他
本文见解来自《TCP/IP详解,卷1:协议》、《计算机网络》(第7版,谢希仁),以及网络资源,若有不对之处请留言交流。
--以下空白--