我在互联网上找到的关于套接字的信息令人惊讶地很少。也许是因为我的搜索策略。
是否将套接字绑定到由操作系统/NAT选择的端点(它实际上是由什么选择的?)确保使用它发送的数据包始终具有相同的源端口?
例如,如果我创建socket并将其绑定到Windows选择的端口(即传递新的IPEndPoint(IPAddress.Any,0)),然后将两个数据包发送到不同的主机,那么这两个数据包的源端口是否相同?
如果是,什么是"NAT端口随机化“?我听说它会让NAT为你要发送数据的每个主机选择一个新的端口...真的是这样吗?
发布于 2012-01-31 04:10:20
例如,如果我创建
并将其绑定到Windows选择的端口(即传递新的IPEndPoint(IPAddress.Any,0)),然后将两个数据包发送到不同的主机,那么这两个数据包的源端口是否相同?
比方说,在您的本地PC计算机上,您绑定了一个特定的端口(甚至是端口0-这样操作系统就会为您挑选一个端口)。所有离开PC的数据包都具有相同的源端口。有保证。
但NAT -可能会做一些完全不同的事情。NAT肯定会将IP地址转换为分配给它的外部IP地址。并且“源端口”将经历“映射”转换。
大多数(但不是全部)行为良好的 not将尝试执行以下操作。这不包括通过用户手动或通过UPNP设置的端口转发规则设置的行为。
当重传
数据包离开NAT时发生。源端口映射将在TCP连接的生命周期内保持一致。
如果是,什么是"NAT端口随机化“?我听说它会让NAT为你要发送数据的每个主机选择一个新的端口...真的是这样吗?
有些not的行为不是很好。他们的主要缺点是:
当NAT保持“地址和端口相关”映射(也称为“对称NAT")时。在这里,NAT为NAT后的主机与之通信的每个唯一的IP:端口对挑选一个随机的源端口。因此,两个主机(都在不同的对称NAT之后)在没有中继服务的情况下相互通信变得非常困难。有人告诉我,大多数通过3G通信的移动设备都表现出这种行为。
一些表现不佳的NAT甚至会嗅探数据包的数据,寻找可能包含内部IP地址的协议,然后尝试“修复”数据包,使得在数据包数据中传送的内部IP地址现在是外部IP地址。这解决了FTP等遗留协议的问题。但对于其他应用程序,这可能会产生更多问题。
有一套穿越NAT的技术。请阅读有关STUN、TURN和ICE的内容。
发布于 2012-01-31 02:48:10
绑定用于打开端口,以便在计算机上进行侦听。例如,for服务器绑定到端口80,因此所有到端口80的传入数据包都访问该服务。它本质上是一种为操作系统中的服务保留端口的方式。因此,在这种意义上,您的源端口将是您绑定到的端口。如果你是访问服务的人,你通常根本不需要绑定,因为你使用哪个端口并不重要,只需要你连接到哪个端口即可。
希望这能回答你的问题。如果不是,我认为我没有像我应该理解的那样理解这篇文章。
https://stackoverflow.com/questions/9069014
复制相似问题