用户数据报协议,即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作只产生一个UDP数据报,从而发送
一个IP数据报。
进程通过创建一个Internet域内的SOCK_DGRAM类型的插口,来访问UDP。该类型插口默认地称为无连接的。每次进程发送
数据时,必须指定目的IP地址和端口号。每次从插口上接收数据报时,进程可以从数据报中收到源IP地址和端口号。
UDP插口也可以被连接到一个特殊的IP地址和端口,这样,所有写到该插口的数据报都被发往该目的地,而且只有来自该IP
地址和端口号的数据才被传给该进程。
1.UDP的protosw结构
下图显示了UDP的协议交换入口
2.UDP的首部
UDP首部定义成一个udphdr结构,下图是UDP首部的数据结构和图。
在代码中,通常把udp首部作为一个紧跟着UDP首部的IP首部来引用。这就是udp_input如何处理收到的ip数据报,以及
udp_output如何构造外出的ip数据报,这种联合的ip/udp首部是一个udpiphdr结构,如下图所示:
20个字节的ip首部定义成一个ipovly结构,如下图所示。不幸的是,这个结构并不是一个真正的ip首部,大小虽然相同,但是
字段不同。