step11: 注意 , 之前我们都是用的UDP数据包 , 目的只是为了在两个局域网的NAT上打个洞出来 , 实际上大部分应用用的都是TCP连接 , 所以 , 这时候我们还需要在A主动向B发起TCP连接 。 到此 , 我们就完成了两端之间的通信 。
这里估计大家会有疑惑 。
端口已经被udp用过了 , TCP再用 , 那岂不是端口重复占用(address already in use)?
其实并不会 , 端口重复占用的报错常见于两个TCP连接在不使用SO_REUSEADDR的情况下 , 重复使用了某个IP端口 。 而UDP和TCP之间却不会报这个错 。 之所以会有这个错 , 主要是因为在一个linux内核中 , 内核收到网络数据时 , 会通过五元组(传输协议 , 源IP , 目的IP , 源端口 , 目的端口)去唯一确定数据接受者 。 当五元组都一模一样的时候 , 内核就不知道该把数据发给谁 。 而UDP和TCP之间\"传输协议\"不同 , 因此五元组也不同 , 所以也就不会有上面的问题 。
NAPT还分为好多种类型 , 上面的nat打洞方案 , 都能成功吗?
关于NAPT , 确实还细分为好几种类型 , 比如完全锥形NAT和限制型NAT啥的 , 但这并不是本文的重点 。 所以我就略过了 。 我们现在常见的都是锥形NAT 。 上面的打洞方案适用于大部分场景 , 这其中包括限制最多的端口受限锥形NAT 。
总结
- IPV4地址有限 , 但通过NAT路由器 , 可以使得整个内网N多台机器 , 对外只使用一个公网IP , 大大节省了IP资源 。
- 内网机子主动连接公网IP , 中间的NAT会将内网机子的内网IP转换为公网IP , 从而实现内网和外网的数据交互 。
- 普通的NAT技术 , 只会修改网络包中的发送端和接收端IP地址 , 当内网设备较多时 , 将有可能导致冲突 。 因此一般都会使用NAPT技术 , 同时修改发送端和接收端的IP地址和端口 。
- 由于NAT的存在 , 公网IP是无法访问内网服务的 , 但通过内网穿透技术 , 就可以让公网IP访问内网服务 。 一波操作下来 , 就可以在公司的网络里访问家里的电脑 。
那我们为什么还需要IPv6?
另外IPv6号称地址多到每粒沙子都能拥有自己的IP地址 , 那我们还需要NAT吗?
- 输入法|为什么,我们讨厌别人借用我的电脑?
- 三年前称“我会摧毁人类”的机器人,拥有公民身份后,如今怎样了
- 旗舰机|真我10 Pro+上手体验,不吹不黑,聊一聊优缺点
- 华为|原来华为的创新如此超前,我愿将其称为“融合”天花板
- 算法|真我10Pro,拥有的两大卖点,直击用户使用手机的痛点
- |号称4年不卡顿的Reno9 Pro+,上手后我有话要说
- 软件|让视频展示的门槛大大降低,入手成者FancyS后我有这几点要说
- 航天新征程 | 神舟十五号飞行乘组:我们准备好了
- thread|Mini LED为什么这么香?从参数科普到型号推荐,一篇文章给你搞定
- iPhone|为什么iPhone比安卓机更耐用?我总结出7大理由