首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定套接字是否可以确保其端口始终相同?

绑定套接字是否可以确保其端口始终相同?
EN

Stack Overflow用户
提问于 2012-01-31 02:42:04
回答 2查看 748关注 0票数 1

我在互联网上找到的关于套接字的信息令人惊讶地很少。也许是因为我的搜索策略。

是否将套接字绑定到由操作系统/NAT选择的端点(它实际上是由什么选择的?)确保使用它发送的数据包始终具有相同的源端口?

例如,如果我创建socket并将其绑定到Windows选择的端口(即传递新的IPEndPoint(IPAddress.Any,0)),然后将两个数据包发送到不同的主机,那么这两个数据包的源端口是否相同?

如果是,什么是"NAT端口随机化“?我听说它会让NAT为你要发送数据的每个主机选择一个新的端口...真的是这样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-31 04:10:20

例如,如果我创建

并将其绑定到Windows选择的端口(即传递新的IPEndPoint(IPAddress.Any,0)),然后将两个数据包发送到不同的主机,那么这两个数据包的源端口是否相同?

比方说,在您的本地PC计算机上,您绑定了一个特定的端口(甚至是端口0-这样操作系统就会为您挑选一个端口)。所有离开PC的数据包都具有相同的源端口。有保证。

但NAT -可能会做一些完全不同的事情。NAT肯定会将IP地址转换为分配给它的外部IP地址。并且“源端口”将经历“映射”转换。

大多数(但不是全部)行为良好的 not将尝试执行以下操作。这不包括通过用户手动或通过UPNP设置的端口转发规则设置的行为。

当重传

  • 或建立连接时,某些NAT会尝试将内部主机的源端口映射到相同的端口值。如果同一NAT后面的另一台主机已经在使用该端口,这并不总是可能的。对于出站
  1. 连接,端口映射将在出站

数据包离开NAT时发生。源端口映射将在TCP连接的生命周期内保持一致。

  1. 如果NAT后面的主机连续向给定内部内的相同的远程IP:端口对发送UDP数据包,则行为良好的NAT将保持相同的端口映射。也就是说,源端口保持不变。无论目标IP或目标端口是什么,
  2. 和大多数行为良好的NAT都将维护相同的源端口映射。也就是说,如果NAT后的PC将UDP数据包从本地端口3000发送到两个不同的IP端口地址,则NAT将转换相同的源端口。这称为“地址独立映射”,这是与可能位于NAT后面的其他主机建立P2P连接时的一个重要特征。

如果是,什么是"NAT端口随机化“?我听说它会让NAT为你要发送数据的每个主机选择一个新的端口...真的是这样吗?

有些not的行为不是很好。他们的主要缺点是:

当NAT保持“地址和端口相关”映射(也称为“对称NAT")时。在这里,NAT为NAT后的主机与之通信的每个唯一的IP:端口对挑选一个随机的源端口。因此,两个主机(都在不同的对称NAT之后)在没有中继服务的情况下相互通信变得非常困难。有人告诉我,大多数通过3G通信的移动设备都表现出这种行为。

一些表现不佳的NAT甚至会嗅探数据包的数据,寻找可能包含内部IP地址的协议,然后尝试“修复”数据包,使得在数据包数据中传送的内部IP地址现在是外部IP地址。这解决了FTP等遗留协议的问题。但对于其他应用程序,这可能会产生更多问题。

有一套穿越NAT的技术。请阅读有关STUNTURNICE的内容。

票数 2
EN

Stack Overflow用户

发布于 2012-01-31 02:48:10

绑定用于打开端口,以便在计算机上进行侦听。例如,for服务器绑定到端口80,因此所有到端口80的传入数据包都访问该服务。它本质上是一种为操作系统中的服务保留端口的方式。因此,在这种意义上,您的源端口将是您绑定到的端口。如果你是访问服务的人,你通常根本不需要绑定,因为你使用哪个端口并不重要,只需要你连接到哪个端口即可。

希望这能回答你的问题。如果不是,我认为我没有像我应该理解的那样理解这篇文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9069014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档