加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

数据包如何穿越各层协议

发布时间:2021-04-22 10:19:41 所属栏目:外闻 来源:互联网
导读:们把上述处理过程的区域大致分为: User区域 Kernel 区域 Device区域 在user和kernel区域的任务都是由本机cpu执行,这两个区域合并称为host区域,以区分device区域(网络接口卡上有单独的cpu)。device是接收和发送数据包的网络接口卡(Network Interface Card)

们把上述处理过程的区域大致分为:

  • User区域
  • Kernel 区域
  • Device区域

在user和kernel区域的任务都是由本机cpu执行,这两个区域合并称为host区域,以区分device区域(网络接口卡上有单独的cpu)。device是接收和发送数据包的网络接口卡(Network Interface Card),一般也称为LAN card。

当应用程序调用write(fd, buf, len)来发送数据时,用户态区域会进入内核态区域,建立这个关系的纽带是socket fd和系统调用write。

在内核态的socket有两个buffer:

  • send socket buffer,用于发送数据
  • receive socket buffer,用于接收数据

当write系统调用被执行,用户态的数据(buf,长度)会被拷贝到内核区域的内存,并被放入到send socket buffer的末尾(见下图,发送是按照顺序发送的),然后TCP就会被调用执行路由之前会去检查Netfilter LOCAL_OUT钩子,看是否需要执行iptables相关配置。之后执行IP路由。IP路由主要功能是寻找下一跳(例如网关或路由器)的IP地址,而路由的目的是到达目的地IP地址所在的机器。

IP执行路由之后,检查Netfilter POST_ROUTING钩子,如果有iptables在这方面的配置,就会去执行相关操作。委托给数据链路层之前,IP层还会执行ARP(网络地址转换),通过下一跳IP地址来查找目的MAC地址,并把Ethernet头部添加到IP数据包,如下图。层同时还给用户提供了raw socket接口,即发送数据包的接口。raw socket发送的数据包与正常流程的数据包不一样,在执行Netfilter的时候,会跳过这些钩子。

IP层做完工作以后,会把数据包(上图中的数据包,一般称frame)委托给数据链路层。

由于ARP已经把目的MAC地址写入到数据包头部,这样就减轻了驱动driver的工作。进入数据链路层后,内核会去检测是否有抓包工具在监听抓包(例如tcpdump),如果有,内核会拷贝数据包信息到抓包工具的内存地址空间。

之后,根据一定的协议规则,驱动driver会要求NIC传递这个数据包。当NIC收到这个请求后,NIC复制数据包到自己的内存里,并且发送给网络。当NIC发送完一个数据包,会产生一个中断, 主机 cpu去执行中断处理程序,完成后续工作。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读