AIOT人人都是极客

文章数:1086 被阅读:1552441

账号入驻

Linux BSP实战课(网络篇):数据包的接收过程

最新更新时间:2023-09-25
    阅读数:
  • Linux 网络架构

  • Linux 网络初始化

    • 网络设备子系统初始化

    • 网卡驱动初始化

    • 协议栈初始化

  • 数据包的接收过程

  • 总结

这里深度理解一下在Linux下网络包的接收过程,为了简单起见,我们用udp来举例,如下:

int main(){
    int serverSocketFd = socket(AF_INET, SOCK_DGRAM, 0);
    bind(serverSocketFd, ...);

    char buff[BUFFSIZE];
    int readCount = recvfrom(serverSocketFd, buff, BUFFSIZE, 0, ...);
    buff[readCount] = '\0';
    printf("Receive from client:%s\n", buff);

}

上面代码是一段udp server接收收据的逻辑。只要客户端有对应的数据发送过来,服务器端执行recv_from后就能收到它,并把它打印出来。那么当网络包达到网卡,直到recvfrom收到数据,这中间究竟都发生过什么?

Linux 网络架构

在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层传输层。内核对更上层的应用层提供socket接口来供用户进程访问。我们用Linux的视角来看到的TCP/IP网络分层模型应该是下面这个样子的。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved