linux网络系统

网络模型

OSI模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
应用层:负责给应用程序提供统一的接口
表示层:负责把数据转换成兼容另一个系统能识别的格式
会话层:负责建立、管理和终止表示层实体之间的通信会话
传输层:负责端到端的数据传输
网络层:负责数据的路由、转发、分片
数据链路层:负责数据的封帧和差错检测,以及MAC寻址
物理层:负责在物理网络中传输数据帧

TCP/IP:应用层、传输层、网络层、网络接口
应用层:负责向用户提供一组应用程序,HTTP、DNS、FTP等
传输层:负责端到端的通信,比如TCP、UDP等
网络层:负责网络包的封装、分片、路由、转发,比如IP,ICMP等
网络接口层:负责网络包在物理网络中的传输、比如网络包的封帧、MAC寻址、差错检测、以及通过网卡传输网络帧等

Linux网络协议栈

【数据在每一层的封装格式】

在以太网中,规定的最大传输单元MTU是1500字节,就是单次传输的最大IP包大小。

【协议栈】

  1. 应用程序通过系统调用来跟Socket层进行数据交互。
  2. Socket层的下面就是传输层、网络层和网络接口层。
  3. 最下面的一层就是网卡驱动程序和硬件网卡设备。

Linux接收包的过程

  1. 网卡收到网络包,通过DMA技术将网络包放入到Ring Buffer中。通过中断或者NAPI机制(中断+轮询poll)来通知操作系统。【网卡硬件中断+软中断处理】
  2. 将数据从Ring Buffer中拷贝到内核struct sk_buff缓冲区中,准备交给协议栈处理。
  3. 先进入网络接口层,若报文合法,找出上层的协议,是IP4或者IP6,去除帧头和帧尾,交给网络层。
  4. 网络层取出IP包,判断网络下一步的走向(是交给上层处理还是转发出去),如果是给本机,查看IP头中的协议类型是TCP还是UDP,取出IP头,交给传输层。
  5. 传输层,取出TCP或者UDP头,根据四元组找到对应的socket,并把数据拷贝到socket的接收缓存区。
  6. 应用层程序调用socket接口,从内核的socket接收缓冲区中读取新到来的数据到应用层数据缓冲区。

发送包过程与接收包过程相反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值