返回顶部

Linux 网络基础与性能优化

[复制链接]
诸葛钢铁Lv.9 显示全部楼层 发表于 2022-7-15 17:36:32 |阅读模式 打印 上一主题 下一主题
常见的有 OSI 网络模型、TCP/IP 网络模型、五层协议网络模型:OSI 七层网络模型:将传统的五层 TCP 模型中的应用层分为应用层、表示层、会话层

应用层:负责为应用程序提供统一的接口
表示层:负责把数据转换成兼容接收系统的格式
会话层:负责维护计算机之间的通信连接,即负责在网络中的两节点之间建立、维持和终止通信
传输层:负责为数据加上传输表头,形成数据包
网络层:负责数据的路由和转发
数据链路层:负责 MAC 寻址、错误侦测和改错
物理层:负责在物理网络中传输数据帧

Linux 上使用的是 TCP/IP 网络模型,即四层网络模型:

应用层,负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等
传输层,负责端到端的通信,比如 TCP、UDP 等
网络层,负责网络包的封装、寻址和路由,比如 IP、ICMP 等
网络接口层,负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网卡传输网络帧等
在 TCP/IP 模型下,网络数据将逐层传递并处理:

对于发送方发送数据包而言,数据包由顶向下,逐层增大:

应用层:应用程序调用 Socket API 发送网络包,把数据包放到 Socket 发送缓冲区中
网络协议栈从 Socket 发送缓冲区中,取出数据包;再按照 TCP/IP 栈,从上到下逐层处理
传输层:增加 TCP 头
网络层:增加 IP 头和执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片
数据链路层:分片后的网络包,再送到数据链路层,进行物理地址寻址,以找到下一跳的 MAC 地址,并且添加帧头和帧尾,放到发包队列中驱动程序通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去

对于接收方接收数据包而言:

当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;然后通过硬中断,告诉中断处理程序已经收到了网络包.
网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧.
内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧.

数据链路层:在数据链路层检查报文的合法性,找出上层协议的类型,去掉帧头、帧尾,然后交给上一层网络层
网络层:网络层取出 IP 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理
传输层:传输层取出 TCP 头或者 UDP 头后,根据 源 IP、源端口、目的 IP、目的端口 四元组作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓存中。
应用层:应用程序就可以使用 Socket 接口,读取到新接收到的数据

【免责声明】本文系转载,文章来源于公众号Linux爱好者,作者Linux爱好者。转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

达内教育:成立于2002年。致力于面向IT互联网行业,培养软件开发工程师、测试工程师、系统管理员、智能硬件工程师、UI设计师、网络营销、会计等职场人才 达内使命:缔造年轻人的中国梦、缔造达内员工的中国梦 达内愿景:做管理一流的教育公司
  • 商务合作

  • Powered by Discuz! X3.4 | Copyright © 2002-2024, 达内教育 Tedu.cn
  • 京ICP备08000853号-56 |网站地图