提交响应后无法转发_网络协议|OSI模型第四层传输层中的NAT和端口转发

314d7397302fbe167335cc3ef7a79759.png

NAT

我们知道,用私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)向互联网发送数据包是得不到响应的。

但是全球IP地址的数量又有限(2的32次方),如何使私有网络中的应用程序能和互联网进行通信,同时又不会占用太多 IP 地址,这就需要用到 NAT。

NAT(Network Address Translation)表示网络地址转换,是一种技术,也是一种协议。

如果没有使用 NAT 技术,一个局域网中的一台机器在发出数据帧后,该帧在返回的时候包含的目标 IP 地址是一个私有地址,就会被路由器阻止,所以该机器接收不到返回信息。NAT 技术的原理就是用公有地址代替私有的源 IP 地址。

NAT 有两种不同类型,动态和静态:

①动态 NAT:多个私有地址和一个公有地址关联,因此仅使用一个公有地址就可以连接多台机器,这样就节约了 IP 地址。

②静态 NAT:一个私有地址关联一个公有地址,这种目前已经很少使用了。

动态 NAT 的工作原理

907a4e103f7837c082052721c92169e3.png

比如在上面这个网络图中 10.0.1.1 和 10.0.1.2 都是私有地址,包含在10.0.1.0/24这个网络中,117.148.64.237 是路由器的公有 IP 地址。

机器1(10.0.1.1)请求知乎网(103.41.167.234),发送的以太网帧是以下内容

6443fab824c4748a81060c54f423f0bf.png

路由器对数据包使用 NAT 技术后,发出的以太网帧是以下内容

6f848d697efb80401879512afe61428d.png

可以看到,源 IP 地址已经被更改为本地路由器的 IP 地址,这样数据包到达知乎网站的服务器后,它将向本地路由器的 IP 地址 117.148.64.237 发送响应,但是目前路由器还不知道要将数据包转发给哪台机器

事实上,无论使用 TCP 协议还是 UDP 协议,发出请求的机器都会选择一个源端口,来标识发出请求的机器,所以机器1(10.0.1.1)发出的以太网帧是以下内容(假设源端口号是12345,目标端口号是80)

c353083cd7309e952f428bc8262088e8.png

路由器上有一个 NAT 表,会记录源 IP 地址、目标 IP 地址、源端口号、目标端口号之间的关系,路由器发送到互联网中的帧是以下内容

09d16bc7a7e83ab925348ff293d58b1d.png

知乎服务器将响应此请求,发送回来的数据帧是一下内容

22b8a1c011154888d6b54882f5cb105b.png

本地路由器收到知乎网站的服务器发送回来的帧,就会在自己的 NAT 表中查找 12345 源端口号对应的信息,就可以将帧发送给 10.0.1.1 这台机器了。

但是如果局域网上的两台机器分别使用相同的源端口向知乎发出请求,那么数据帧在返回的时候,由于源端口号完全一样,所以路由器不知道将帧返回给哪台机器,这就需要用路由器自己来确定源端口号,路由器会在发送帧的时候同时修改源 IP 地址和源端口号,这样就能确保请求不会具有相同的源端口。

所以使用动态 NAT,拥有私有 IP 地址的机器借助路由器的公有 IP 地址访问互联网,仅使用了一个公有 IP 地址,就服务了多台机器,这样就大量节省的 IP地址。

端口转发

动态 NAT 有一个问题是,局域网中的机器可以访问互联网,但是互联网上的机器却无法访问局域网中的机器,因为当连接的第一个帧是从外部到达时,路由器不知道是将这个帧发送给局域网中的哪一台机器,这个时候,就需要用到端口转发技术。

端口转发,就是将本地路由器的一个端口,重定向到局域网中指定机器上的指定端口,端口转发有一个端口转发表,它会告诉路由器将到达指定端口的数据包转发到指定机器的指定端口

861f1e0e0e0e2ee1404c444e4c8e103b.png

上面这个表就表示任何发送到本地路由器公有 IP 地址 80 端口的数据包,都将自动重定向到 10.0.1.1 这台机器的 80 端口,通过端口转发,外界就可以访问局域网中的机器了。

上一篇:OSI模型第四层传输层中的UDP和TCP协议

下一篇:OSI模型第七层应用层中的DHCP与DNS协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值