1. 网络模型剖析
OSI 网络模型
1. 什么是OSI网络模型
为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是 OSI 网络模型
2. OSI网络模型是如何组成的

OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层,从下到上分别是接口层、网络层、传输层和应用层,形成常用的 TCP/IP 模型。
3. OSI网络模型每一层的作用
- 应用层,负责给应用程序提供统一的接口;
- 表示层,负责把数据转换成兼容另一个系统能识别的格式;
- 会话层,负责建立、管理和终止表示层实体之间的通信会话;
- 传输层,负责端到端的数据传输;
- 网络层,负责数据的路由、转发、分片;
- 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
- 物理层,负责在物理网络中传输数据帧;
TCP/IP 网络模型
1.什么是 TCP/IP 网络模型
对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就需要有一套通用的网络协议。
2. TCP/IP 网络模型是如何组成的

3.TCP/IP 网络模型每一层的作用
1. 应用层(负责向用户提供一组应用程序,比如 HTTP、DNS、FTP 等)-> 数据分片
最上层,我们能直接接触的就是应用层(Application Layer),像电脑或手机软件都是在应用层上实现的,所有应用层只需要专注为用户提供应用功能,如: HTTP,FTP,DNS 等,应用层是不关注数据是如何去运输的,而且应用层是工作在操作系统的用户态,运输层及以下则工作在内核态。
2. 运输层 (负责端到端的通信,比如 TCP、UDP 等)-> tcp|udp header+上层数据 -> 数据包
第二层,应用层的数据包会传给运输层,运输层(Transport Layer)是为应用层提供网络支持的,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是运输层,运输层有两个协议TCP和UDP,当设备作为接收方时,传输层则要负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口
TCP的全程叫运输控制协议,大部分的应用都是使用的TCP运输协议如:HTTP,TCP相对于UDP多了很多特性,如流量控制,超时重传,拥塞控制等,这些特性都是为了能保证数据包能可靠的运输给对方,当应用中需要传输的数据非常大,如果直接传输就不好控制,因此传输层的数据包大小超过MSS(TCP最大报文长度),就会将数据包分块,这样就算其中一个分块传输丢失或损坏只需重新发送这一个,而不是整个数据包,在TCP协议中,把每一个分块称为TCP段(TCP Segment)。
UDP相对TCP要简单很多,只负责发送数据包,不保证数据包能否抵达对方,这样运输会提高运输效率,如果把TCP的特性在应用层实现也可以让UDP实现可靠运输。
3. 网络层 (负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等) -> ip报头+tcp|udp header+上层数据 -> 数据段
第三层,传输层只负责服务好应用,作为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下一层,也就是网络层(Internet Layer),网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文。
4. 网络接口层 (负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;)-> Mac地址+ip报头+tcp|udp header+上层数据 -> 数据帧
生成了 IP 头部之后,接下来要交给网络接口层(Link Layer)在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上,MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息,我们可以通过 ARP 协议获取对方的 MAC 地址,所以说,网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。
总结
由于 OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。比较常见,也比较实用的是四层模型,即 TCP/IP 网络模型
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。