TCP包在经过路由的时候有什么变化?
最近在看一些关于TCP协议方面的文章,有一点比较困惑,如果两个机器都在公网还好说,A和B之间都是透明的,但如果A在某个内网里面,是通过路由连接上公网的。那么A在跟B握手的时候告诉它的那个自己的地址岂不是一个内网地址,或者这个包在经过路由的时候被更改了?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
NAT
http://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2
按照我的理解,变动的应该是TCP包的IP头,TCP包作为IP包的body是不会变化的。因为TCP在传输层,经过路由器是经过网络层,IP包在网络上传输要经过好多路由器,就像是好多跳(TTL减1)。
参考 《计算机网络》 谢希仁 第五版
在网络上,每个设备其实并不需要在意网络环境如何,之需要照规矩发包就行了。
在A发给B的包中,确实缘地址是一个内网地址,而目标地址是一个公网地址。
而实际上B收到的包,源地址是A上游网关的公网地址,目标地址是自己。
这中间有一个NAT的概念。
因为网络飞速发展,而ipv4又过于老旧,人们发明IPv4的时候并没有想到现在一个人会有一个,几个,甚至e十几个可以联网的设备,导致IP地址枯竭。而我们不对外提供服务的设备实际上并不需要独占的公网地址。所以实际上我们在和别人共用一个公网的ip地址。这个将我们的内网地址转化为公网地址的过程就叫NAT。
当A源地址是一个内网ip的包发送至运营商的网关时,会被网关的NAT将源地址转换为该网关的公网ip,你的源tcp端口可能会被换掉,但是网关会维护一个转换表,当受到B的回包时,网关会将来自B包的目标tcp端口再转化回来。
当然,这一切对内网内的设备来说都是封装的。结果就是大家都能正常上网。
可见这实际上也是对内网设备的一种保护措施,即如果不存在网关维护的这个转换表,外网的设备就无法和内网进行通讯,但是外网设备是可以和网关通信的,所以一般这个网关会是防火墙一类的设备。
每个内网都会有一个或多个出口的,数据包到达了出口路由后,ip报头会被改成出口的公网ip(这个过程一般用到NAPT)