OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。
每一层负责的职能不同:
- 应用层:负责给应用程序提供统一的接口
- 表示层:负责把数据转换成兼容另一个系统能识别的格式
- 会话层:负责建立、管理和终止表示出实体之间的通信回话
- 传输层:负责端到端的数据传输
- 网络层:负责数据的路由、转发、分片
- 数据链路层:负责数据的封帧和差错检测,以及MAC寻址
- 物理层:负责在物理网络中传输数据帧
由于 OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。
事实上,我们比较常见,也比较实用的是四层模型,即 TCP/IP 网络模型,Linux 系统正是按照这套网络模型来实现网络协议栈的。
TCP/IP网络模型共4层,分别是应用层、传输层、网络层和网络接口层,每层的职能如下:
- 应用层:负责向用户提供一组应用程序,比如:HTTP、DNS、FTP等
- 传输层:负责端到端的通信,比如TCP、UDP等
- 网络层:负责网络包的封装、分片、路由、转发,比如IP、ICMP(Internet控制消息协议)等
- 网络接口层:负责网络包在屋里网络中的传输,比如网络包的封装、MAC寻址、差错检测,以及通过网卡传输网络帧等
我们可以把自己的身体比作应用层中的数据,打底衣服比作传输层中的 TCP 头,外套比作网络层中 IP 头,帽子和鞋子分别比作网络接口层的帧头和帧尾。
Linux 接收/发送网络包的流程