Linux中UDP接收流程详解_张孟浩_jay的博客

UDP是一个无连接的协议,在实现上比TCP简单的多。

1、创建socket

无论是TCP还是UDP,底层都是一个socket对应。socket中有着接收队列、等待队列、发送队列三个队列。

接收队列:
用来存放对应的数据

等待队列:
当线程调用recv_msg()的时候,如果接收队列为空,就阻塞,将其加入到等待队列中。如果接收队列不为空,就直接读取对应的数据

发送队列:
当线程调用send_msg()的时候,就将数据挂到发送队列中,对应的内核线程会将其写入网卡中

2、接收数据

当数据到达网卡后,会一层一层的调用到udp_recv(),里面会根据源IP地址、源端口号来找到对应的socket,然后将数据包挂到socket的接收队列中,接着将等待队列中的线程唤醒,线程会继续执行recv_msg(),读取接收队列中的数据。

评论
暂无评论

登录后可发表评论

点击登录