作家
登录

Linux网络 - 数据包的发送过程

作者: 来源: 2017-04-07 11:02:06 阅读 我要评论

  •                +-----------+ 
  •                | UDP layer | 
  •                +-----------+  
    • 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层

    1.      | 
    2.             | 
    3.             ↓ 
    4.      +-------------+ 
    5.      | udp_sendmsg | 
    6.      +-------------+ 
    7.             | 
    8.             | 
    9.             ↓ 
    10.  +----------------------+ 
    11.  | ip_route_output_flow | 
    12.  +----------------------+ 
    13.             | 
    14.             | 
    15.             ↓ 
    16.      +-------------+ 
    17.      | ip_make_skb | 
    18.      +-------------+ 
    19.             | 
    20.             | 
    21.             ↓ 
    22. +------------------------+ 
    23. | udp_send_skb(skb, fl4) | 
    24. +------------------------+ 
    25.             | 
    26.             | 
    27.             ↓ 
    28.        +----------+ 
    29.        | IP layer | 
    30.        +----------+  

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)