UDP是一个无连接的协议,在实现上比TCP简单的多。
1、创建socket
无论是TCP还是UDP,底层都是一个socket对应。socket中有着接收队列、等待队列、发送队列三个队列。
接收队列:
用来存放对应的数据
等待队列:
当线程调用recv_msg()的时候,如果接收队列为空,就阻塞,将其加入到等待队列中。如果接收队列不为空,就直接读取对应的数据
发送队列:
当线程调用send_msg()的时候,就将数据挂到发送队列中,对应的内核线程会将其写入网卡中
2、接收数据
当数据到达网卡后,会一层一层的调用到udp_recv(),里面会根据源IP地址、源端口号来找到对应的socket,然后将数据包挂到socket的接收队列中,接着将等待队列中的线程唤醒,线程会继续执行recv_msg(),读取接收队列中的数据。