我有几个问题我发现以下端口的解释。
应用层通过端口与传输层通信。端口是有编号的,标准应用程序始终使用相同的端口。
端口号的使用可以让传输协议(通常是 TCP)知道数据包内包含哪种内容,从而让它在接收端知道应该将接收到的数据传送给哪个应用协议。
当没有绝对的保证时,为什么要使用端口号来判断内部驻留着哪种应用数据协议?
据我所知,对于通过端口发送的应用程序数据的类型没有任何限制(这只是一个建议)。另外,协议数据是否已经包含在数据包中的某个位置以用于此目的?
另外,如果将 HTTP 或其他类型的协议发送到端口 25(需要 SMTP)的目标,数据会发生什么情况?
第三,如果将数据发送到未与任何程序绑定的端口,并且因此不会被监听,那么数据会发生什么?
**最后,如果一个端口只能绑定到一个程序,那么依赖于传入 HTTP 数据的多个程序怎么能同时在我的计算机上运行呢?****
提前致谢!
答案1
当没有绝对的保证时,为什么要使用端口号来判断内部驻留着哪种应用数据协议?
因为猜测是一种糟糕的做事方式,而且无论如何你都无法阻止,例如,某个心怀恶意的人发送错误信息。所以,在大家都表现良好的情况下,猜测是有帮助的,而且不会让事情变得更糟。
据我了解,对于通过端口发送什么样的应用程序数据没有限制(这只是一个建议)。
是的。事实上,这甚至不是一个建议,只是许多人碰巧达成的一个共识。
另外,为了这个目的,协议数据不是已经包含在数据包的某个地方了吗?
不,至少不是在端口通常指示的级别上:您知道正在发送哪种更高级别的 IP 协议(例如:TCP、UDP),但不知道其内容是什么(例如:HTTP、SMTP)。
另外,如果将 HTTP 或其他类型的协议发送到端口 25(需要 SMTP)的目标,数据会发生什么情况?
TCP 只是将数据传递给应用层,应用层可以对数据做任何想做的事情。大多数情况下,你只会得到错误。有时你会得到可利用的安全漏洞。
有时,对于不正确的客户端,您会得到良好的行为,例如当您没有对端口使用 SSL 时某些 HTTPS 服务器会给出的纯文本 HTTP 错误。
第三,如果将数据发送到未与任何程序绑定的端口,并且因此不会被监听,那么数据会发生什么?
您从接收系统收到 ICMP 错误消息。从技术上讲,接收方可以做任何想做的事情,但实际上,情况就是这样的。
最后,如果一个端口只能绑定到一个程序,那么依赖于传入 HTTP 数据的多个程序如何能同时在我的计算机上运行呢?
当您的浏览器与远程服务器建立 HTTP 连接时,它会使用随机本地端口,并与远程服务器上的知名端口(80 或 443)进行通信。在这种情况下,对于每个不同的出站连接,都是唯一的。(不过,从技术上讲,它不必如此,就像服务器的情况一样。)
在服务器端,监听时,只有一个进程可以在一个端口上接受新连接(在 Unix/BSD 套接字中),但它可以将已建立的连接传递给其他进程来提供服务。由于设置是唯一的,因此流量可以路由到正确的连接。