Networking 服务器如何知道它是否';是UDP还是TCP段?

Networking 服务器如何知道它是否';是UDP还是TCP段?,networking,tcp,udp,Networking,Tcp,Udp,我只是好奇服务器如何知道接收的段是UDP还是TCP段,特别是当侦听端口可以同时侦听UDP和TCP时 我知道客户端可以使用SOCK_DGRAM为TCP段生成UDP段和SOCK_流,但传输的段仍然是一堆位。服务器如何知道应该将这些位解释为UDP段还是TCP段?如果这些位是UDP段,但如果它们被解释为TCP段,则无意中并不意味着“太奇怪”?它首先是一个IP数据包,在IP报头中包含协议。IP数据包内部是一个有效负载,它包含TCP段或UDP数据报。因为每个段总是以头开始?我不认为头总能帮助区分类型。很可能

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


我知道客户端可以使用
SOCK_DGRAM
为TCP段生成UDP段和
SOCK_流
,但传输的段仍然是一堆位。服务器如何知道应该将这些位解释为UDP段还是TCP段?如果这些位是UDP段,但如果它们被解释为TCP段,则无意中并不意味着“太奇怪”?

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

因为每个段总是以头开始?我不认为头总能帮助区分类型。很可能服务器将从第32位开始的TCP段的内容解释为“长度”、“校验和”和有效负载。除非客户机和服务器都同意UDP段必须以100个零开头,否则必须以TCP段开头。@WanxinGao头就是为了这个,还有端口号等。客户机和服务器不必在任何问题上达成一致。数据通过UDP或TCP套接字发送,并以相同的方式接收。问题是内核中的TCP/IP堆栈如何区分,因此它知道是将其提供给TCP套接字还是UDP套接字。哦,我明白了。根据Wiki,6是TCP,17是UDP。谢谢!