【问题标题】:How can ICMP not use a port, but TCP/IP does?ICMP 怎么能不使用端口,而 TCP/IP 呢?
【发布时间】:2019-10-27 22:44:08
【问题描述】:

对于 ICMP 等协议,它不需要端口。那么,为什么各种 TCP 和 UDP 应用程序都需要分配一个端口呢?只有一个端口,然后将应用程序名称之类的东西路由到正确的位置会有什么缺点——例如,它会转到一个端口并具有application="mysql" 标签,而不是“3306”?

【问题讨论】:

  • "类似于应用程序名称的东西,可以路由到正确的位置" 所以,你的意思是类似于端口的东西?
  • 因此,您希望拥有一个可变长度字段,而不是 TCP 或 UDP 协议标头中的一个小的 16 位无符号整数(想想校验和) 并且会改变最大有效负载大小,具体取决于标头中标签的长度?您的mysql 标记使用 ASCII 的五个字节(使用 unicode 的更多)与端口号的两个字节。与使用 Chrome (GoogChrome) 或 Firefox (MozillaFirefox) 相比,使用 Edge (MSEdge) 可以获得更大的有效负载。我相信微软会认可这一点。

标签: networking port icmp


【解决方案1】:

端口是一些传输层协议的地址,具体来说,TCP 和 UDP 使用端口号。 TCP 和 UDP 都使用相同范围的端口号(0 到 65535),因为它们都使用 16 位无符号整数作为端口号,但它们是相同的端口; TCP 端口 12345 与 UDP 端口 12345 相同。其他传输协议使用其他地址,或者根本没有地址。

例如,RFC 793, Transmission Control Protocol 是这样定义端口的:

允许单个主机内的多个进程使用 TCP 通信设施同时,TCP提供了一套 每个主机内的地址或端口。

ICMP 不是传输协议,它是 IP 的组成部分。这就是 RFC 792, Internet Message Control Protocol 的陈述方式:

ICMP,使用IP的基本支持,就好像它是更高级别一样 但是,ICMP 实际上是 IP 的一个组成部分,必须 由每个 IP 模块实现。

它回到网络层以及每一层如何选择将层数据报的有效负载发送到哪里。例如,以太网报头具有以太网类型字段,该字段告诉以太网将以太网帧的有效负载发送到何处。不同的协议将注册到以太网模块。 IPv4 使用以太网类型 0x800,而 IPv6 使用以太网类型 0x86DD。 Here is the list of registered Ether Types.

IPv4 有 Protocol 字段(IPv6 使用 Next Header 字段来做同样的事情)告诉它将数据包有效负载发送到哪里。 ICMP 是第 1 号协议,UDP 是第 17 号协议,而 TCP 是第 6 号协议。协议将向 IP 模块注册,以告诉它将数据包的有效负载发送到哪里。 Here is the list of registered protocol numbers.

同样,一些传输协议允许应用程序向传输协议注册,以便传输协议知道将传输数据报的有效负载发送到哪里。例如,默认情况下,HTTP 服务器将使用 TCP 注册其端口 80,但可以修改。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多