目录
一、引言
下图主机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 报文的处理 _卧龙小学堂-CSDN博客_icmp nat
五、参考文章
P2P学习(一)NAT的四种类型以及类型探测 - 山上有风景 - 博客园
路由器处理icmp包的想法_wuxinyanzi的专栏-CSDN博客
六、其他
本文见解来自《TCP/IP详解,卷1:协议》、《计算机网络》(第7版,谢希仁),以及网络资源,若有不对之处请留言交流。
--以下空白--