【问题标题】:How does the server know whether it's a UDP or a TCP segment?服务器如何知道它是 UDP 段还是 TCP 段?
【发布时间】:2015-05-11 06:59:44
【问题描述】:

我只是好奇服务器如何知道接收到的段是 UDP 还是 TCP 段,尤其是当侦听端口可以同时侦听 UDP 和 TCP 时。

我知道客户端可以使用SOCK_DGRAM生成UDP段,使用SOCK_STREAM生成TCP段,但是传输的段仍然是一堆比特。服务器如何知道它应该将这些位解释为 UDP 段还是 TCP 段?如果这些位是 UDP 段,但如果它们被解释为 TCP 段,却意外地表示“太奇怪”了怎么办?

【问题讨论】:

  • 因为每个段总是以标题开头?
  • 我不认为标题总是可以帮助区分类型。服务器很有可能将从第 32 位开始的 TCP 段的内容解释为“长度”、“校验和”和有效负载。除非客户端和服务器都同意 UDP 段必须以 100 个零开头,否则为 TCP 段。
  • @WanxinGao 这就是标头 的用途, 以及诸如端口号之类的其他内容。客户端和服务器不必就任何事情达成一致。数据由 UDP 或 TCP 套接字发送,并以相同的方式接收。问题是 kernel 中的 TCP/IP stack 是如何区分的,因此它知道是将其提供给 TCP 套接字还是 UDP 套接字。

标签: networking tcp udp


【解决方案1】:

它首先是一个IP 数据包, 包含IP 标头中的协议。 IP 数据包内部是一个有效负载,其中包含 TCP 段或 UDP 数据报。

【讨论】:

  • 哦,我明白了。根据 Wiki,6 是 TCP,17 是 UDP。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多