摘要
- 网络模型
- 网络协议栈
- 网络包接收流程
- 网络包发送流程
- OSI模型
- TCP/IP模型
- 应用层:负责给应用程序提供统一的接口
- 表示层:负责把数据转换成兼容另一个系统能识别的格式
- 会话层:负责建立、管理和终止表示层实体之间的通信会话
- 传输层:负责端到端的数据传输
- 网络层:负责数据的路由、转发、分片
- 数据链路层:负责数据的封帧和差错检测,以及mac寻址
- 物理层:负责在物理链路中传输数据帧
OSI模型过于复杂,只是概念理论上的分层,没有具体的实现方案 。
TCP/IP模型的分层?
- 应用层:负责向用户提供一组应用程序,比如HTTP、DNS、FTP等
- 传输层:负责端到端的数据传输,比如TCP、UDP等
- 网络层:负责网路包封装、分片、路由、转发,比如IP、ICMP等
- 网络接口层:负责网络包在物理网络中的传输,比如网络包的封帧、MAC寻址、差错检测以及通过网卡传输网络帧等
文章插图
网络协议栈网络通信的主机间必须要遵从一定的网络协议 。我们的网络包每经过一层,都会被当前层进行一定的包装,当到达目的主机时,也会进行拆包装操作 。
每一层给数据包做了哪些包装?
文章插图
- 传输层:在数据包前面增加了TCP头
- 网络层:在传输层数据包的基础上增加了IP头
- 网络接口层:在网络层数据包的基础上增加了帧头帧尾
在以太网中规定,最大传输单元(MTU)是1500字节,即网络层IP包的最大值 。当IP数据包超过MTU时,就需要在网络层对其进行分片传输 。
linux中网络协议栈大体组成
文章插图
- 应用程序需要通过系统调用,来跟Socket层交互
- Socket层的下面就是传输层、网络层和网络接口层
- 最下面的一层则是网卡驱动程序和网卡硬件设备
网卡,专门负责接收和发送网络包,网卡接收到一个网络包以后,会通过DMA技术,将网络包放入到Ring Buffer(环形缓冲区) 。
操作系统是如何判断一个网络包到达?
- 中断:如果网络包过多,CPU会被频繁中断,影响系统效率
- NAPI机制
混合中断和轮询的方式来接收网络包,核心就是首先采用中断唤醒数据接收的服务程序,然后通过poll方法来轮询数据 。
网络包到达时,网卡发起硬件中断,执行网卡驱动程序中的中断处理函数,中断处理函数完成以后需要暂时屏蔽中断,然后通过唤醒软中断来轮询处理数据,直到没有新数据时才恢复中断,这样一次中断可以处理若干个网络包 。
软中断如何处理网络包?
- 从Ring Buffer中拷贝数据到内核缓冲区中,从而把网络包交给网络协议栈处理
- 网络包首先进入网络接口层,在这一层会检查报文的合法性,如果不合法则丢弃,合法则会找出该网络包的上层协议类型,比如是IPv4还是IPv6,接着去掉帧头帧尾,交给网络层
- 在网络层,会取出IP包,判断网络包下一步走向,比如交给上层处理还是转发出去 。当确认这个网络包是要发送给本机以后,就会从IP头分析上一层的协议是TCP还是UDP,接着去掉IP头,然后交给传输层 。
- 传输层会取出TCP头或UDP头,根据四元组(源IP、源端口、目的IP、目的端口)作为标识,找出对应的Socket,并把数据拷贝到Socket的接收缓冲区
- 最后,应用层程序调用Sokcet接口,从内核的Socket接收缓冲区读取新的数据到应用层 。
推荐阅读
- 路由器有线桥接教程,这样拓展WIFI网络,信号更稳定
- C# 获取网络路径文件大小信息的方法
- 网络推广泛滥,B2B平台运营应该怎么做?
- 网络攻击者最有可能攻击的IT资产列表
- 从AD域安全防护痛点看安全可信网络体系搭建
- 作为一个男人,就应该赚钱,努力,奋斗?作为一个男人的责任和担当的说说
- 三国演义中的孔明是诸葛亮吗?诸葛和孔明是一个人吗_2
- 有哪些购物返利网络
- 春砂仁茶包,春砂仁鸡汤
- NAS到底是啥?看这一篇就够了