UDP header 是16位但实际上是24位

UDP header is 16 bit but there's actually 24bits

我想了解 UDP header,我发现它实际上是 24 位

struct sockaddr_in {
   short            sin_family;   // e.g. AF_INET      //4 bytes
   unsigned short   sin_port;     // e.g. htons(3490)  //4 bytes
   struct in_addr   sin_addr;     // see struct in_addr, below //8 bytes
   char             sin_zero[8];  // zero this if you want to  //8 bytes
};

struct in_addr {
    unsigned long s_addr;  // load with inet_aton()
};

根据this explanation it's 16 bytes. Since sin_zero[8] isn't used anywhere it is 16 bytes ? UDP HEADER结构大小仍然是24字节。我错过了什么吗?

谢谢!

你的问题是表示套接字地址的C结构。

它与实际通过 UDP 网络发送的内容不同 header。

基本上 IPv4 header 是 20 个字节,其上的 UDP header 是 8 个字节,正如您的问题中的极客对极客参考所解释的那样。

我建议查看 https://en.wikipedia.org/wiki/User_Datagram_Protocol,或者安装 Wireshark 并捕获 UDP 数据包以查看其外观。