zoukankan      html  css  js  c++  java
  • [国嵌攻略][135][网络子系统深度分析]

    网络发包模型

    1.选择路由

    2.交给邻居子系统(路由中紧挨着发送方的网关)。如果没有邻居信息,那么由Linux中的邻居子系统来建立邻居信息。

    发送数据过程

    //系统调用层和协议无关层

    1.发送入口sock_aio_write

    2.调用do_sock_write

    3.调用__sock_sendmsg

    //网络协议栈

    4.调用udp_sendmsg

    5.调用ip_route_output_flow(选择路由)

    6.调用udp_push_pending_frames

    7.调用ip_push_pending_frames(IP协议入口)

    8.调用ip_local_out

    9.调用dst_output

    10.调用ip_finish_output

    11.调用ip_finish_output2(建立邻居信息)

    12.调用arp_generic_ops下面的neigh_resolve_output

    13.调用queue_xmit

    //设备无关接口

    14.调用dev_queue_xmit

    15.调用dev_hard_start_xmit

    //设备驱动

    16.调用ndo_start_xmit

    接收数据过程

    //设备驱动

    1.产生接收中断:从硬件读取数据放到skb中;调用netif_rx,并产生一次软中断

    //设备无关接口

    2.调用net_rx_action处理软中断

    3.调用netif_recevie_skb

    4.调用deliver_skb

    //网络协议栈

    5.调用ip_rcv

    6.调用udp_rcv

    //系统调用层和协议无关层

    7.调用sock->ops->recvmsg

  • 相关阅读:
    sed 命令
    find命令详解
    texlive、
    linux source命令与export命令的区别
    vscode浏览器打开html vscode修改默认浏览器
    npm install说明
    有关必须组件化的需求
    日志文件上传的时机
    TypeScript vs. C#: LINQ
    JavaScript 运行机制详解:再谈Event Loop
  • 原文地址:https://www.cnblogs.com/d442130165/p/5267962.html
Copyright © 2011-2022 走看看