据我了解,从技术上讲,在 TCP/IP 数据包中使用端口 0 是没有限制的,它通常只是简单地保留为临时端口。我通过编写一个绑定到端口 0 的简单 C 应用程序对此进行了测试,实际上netstat
发现它已绑定到一个临时端口 50252。
如果我编写了一个应用程序,并且明确地对我的网络库、操作系统和其他任何在我的控制下的东西进行了(可能)必要的修改,而不是将端口 0(零)解释为字面上的端口 0 并且没有什么特别的,它会不会通过公共互联网路由?或者甚至可能通过公共互联网可靠地路由?
据我了解,从技术上讲,在 TCP/IP 数据包中使用端口 0 是没有限制的,它通常只是简单地保留为临时端口。我通过编写一个绑定到端口 0 的简单 C 应用程序对此进行了测试,实际上netstat
发现它已绑定到一个临时端口 50252。
如果我编写了一个应用程序,并且明确地对我的网络库、操作系统和其他任何在我的控制下的东西进行了(可能)必要的修改,而不是将端口 0(零)解释为字面上的端口 0 并且没有什么特别的,它会不会通过公共互联网路由?或者甚至可能通过公共互联网可靠地路由?
端口是某些第 4 层协议的第 4 层地址(您无需指定哪个第 4 层协议)。路由是使用第 3 层地址完成的。路由查看第 3 层数据包,而不是第 4 层段。这是因为第 3 层协议可以封装许多第 4 层协议中的任何一种,其中一些甚至不使用端口。
将端口0
用于临时端口只是一种 API 约定(即,应用程序和操作系统的 IP 堆栈之间的某种东西)。
从技术上讲,它没有理由不能工作,但实际上,因为它没有在任何地方使用,并且可能触发实现弱点,它不太可能被过滤。
为了在端口 0 上实际创建一个套接字,可能需要生成“原始”IP 数据包并编写您自己的 TCP 处理程序。
Comcast 阻塞了端口 0,我们在一定程度上进行了深度数据包检查。