服务器如何知道它是 UDP 还是 TCP 段?

How does the server know whether it's a UDP or a TCP segment?

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

我知道客户端可以用SOCK_DGRAM生成UDP段,SOCK_STREAM生成TCP段,但是传输的段还是一堆bit。服务器如何知道它应该将这些位解释为 UDP 段还是 TCP 段?如果这些位是一个 UDP 段,但意外地不意味着 "too weird" 如果它们被解释为 TCP 段怎么办?

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