- socket(...): 创建一个socket构造体,并初始化响应的操作函数,因为我们定义的是UDP的socket,所以琅绫擎存放的都是跟UDP相干的函数
- sendto(sock, ...): 应用层的法度榜样(Application)调用该函数开端发送数据包,该函数数会调用后面的inet_sendmsg
- inet_sendmsg: 该函数主如果检查当前socket有没有绑定源端口,如不雅没有的话,调用inet_autobind分派一个,然后调用UDP层的函数
- inet_autobind: 该函数会调用socket上绑定的get_port函数获取一个可用的端口,因为该socket是UDP的socket,所以get_port函数会调到UDP代率攀琅绫擎的响应函数。
继上一篇介绍了数据包的接收过程后,本文将介绍在Linux体系中,数据包是若何一步一步大年夜应用法度榜样到网卡并最终发送出去的。
如不雅英文没有问题,强烈建议浏览后面参考狼9依υ?┞仿,琅绫擎介绍的更具体。
本文只评论辩论以太网的物理网卡,并且以一个UDP包的发送过程作为示例,因为本人对协定栈的代码不熟,有些处所可能懂得有误,迎接斧正
socket层
UDP层
IP层
- |
- |
- ↓
- +-------------+
- | udp_sendmsg |
- +-------------+
- |
- |
- ↓
- +----------------------+
- | ip_route_output_flow |
- +----------------------+
- |
- |
- ↓
- +-------------+
- | ip_make_skb |
- +-------------+
- |
- |
- ↓
- +------------------------+
- | udp_send_skb(skb, fl4) |
- +------------------------+
- |
- |
- ↓
- +----------+
- | IP layer |
- +----------+
- udp_sendmsg: udp模块发送数据包的人口,该函数较长,在该函数中会先调用ip_route_output_flow获取路由信息(重要包含源IP和网卡),然后调用ip_make_skb构造skb构造体,最后将网卡的信息和该skb接洽关系。
推荐阅读
Ubuntu 16.04 下如何在Vim中进行文本选择操作和使用标志
基于图形界面的文本或源代码编辑器,供给了一些诸如文本选择的功能。我是想说,可能大年夜多半人不认为这是一个功能。不过像 Vim 这种基于敕令行的编辑器就不是如许。当你仅应用键盘操作>>>详细阅读
本文标题:Linux网络 - 数据包的发送过程
地址:http://www.17bianji.com/lsqh/34631.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示