OSI 和 TCP/IP 网络分层模型详解(基础)
OSI 和 TCP/IP 网络分层模型详解(基础)
导读:计算机网络是现代信息技术的基础,而网络分层模型则是理解计算机网络的关键。本文将详细介绍OSI七层模型和TCP/IP四层模型,帮助读者掌握网络通信的基本原理。
OSI七层模型
OSI(Open Systems Interconnection)七层模型是由国际标准化组织(ISO)提出的一个网络分层模型。其大体结构以及每一层提供的功能如下图所示:
每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能。比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去。
虽然OSI七层模型理论完整,但实际应用中存在一些问题:
- OSI的专家缺乏实际经验,他们在完成OSI标准时缺乏商业驱动力
- OSI的协议实现起来过分复杂,而且运行效率很低
- OSI制定标准的周期太长,使得按OSI标准生产的设备无法及时进入市场
- OSI的层次划分不太合理,有些功能在多个层次中重复出现
尽管OSI七层模型最终没有成为主流,但它为网络通信理论提供了重要参考。
TCP/IP四层模型
TCP/IP(Transmission Control Protocol/Internet Protocol)四层模型是目前被广泛采用的一种模型,可以看作是OSI七层模型的精简版本,由以下4层组成:
- 应用层
- 传输层
- 网络层
- 网络接口层
虽然TCP/IP四层模型和OSI七层模型不能完全精确匹配,但可以简单对应如下:
应用层(Application layer)
应用层位于传输层之上,主要提供两个终端设备上的应用程序之间信息交换的服务。它定义了信息交换的格式,消息会交给下一层传输层来传输。应用层交互的数据单元称为报文。
应用层协议定义了网络通信规则,对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如支持Web应用的HTTP协议,支持电子邮件的SMTP协议等。
- HTTP(Hypertext Transfer Protocol,超文本传输协议):基于TCP协议,是一种用于传输超文本和多媒体内容的协议,主要是为Web浏览器与Web服务器之间的通信而设计的。
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议):基于TCP协议,是一种用于发送电子邮件的协议。注意⚠️:SMTP协议只负责邮件的发送,而不是接收。要从邮件服务器接收邮件,需要使用POP3或IMAP协议。
- POP3/IMAP(邮件接收协议):基于TCP协议,两者都是负责邮件接收的协议。IMAP协议是比POP3更新的协议,它在功能和性能上都更加强大。IMAP支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎所有现代电子邮件客户端和服务器都支持IMAP。
- FTP(File Transfer Protocol,文件传输协议):基于TCP协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。注意⚠️:FTP是一种不安全的协议,因为它在传输过程中不会对数据进行加密。建议在传输敏感数据时使用更安全的协议,如SFTP。
- Telnet(远程登陆协议):基于TCP协议,用于通过一个终端登陆到其他服务器。Telnet协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用Telnet,而是使用一种称为SSH的非常安全的网络传输协议的主要原因。
- SSH(Secure Shell Protocol,安全的网络传输协议):基于TCP协议,通过加密和认证机制实现安全的访问和文件传输等业务
- RTP(Real-time Transport Protocol,实时传输协议):通常基于UDP协议,但也支持TCP协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能由WebRTC实现。
- DNS(Domain Name System,域名管理系统):基于UDP协议,用于解决域名和IP地址的映射问题。
传输层(Transport layer)
传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。
传输层常见协议:
- TCP(Transmission Control Protocol,传输控制协议):提供面向连接的,可靠的数据传输服务。
- UDP(User Datagram Protocol,用户数据协议):提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性),简单高效。
网络层(Network layer)
网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。
⚠️注意:不要把运输层的“用户数据报UDP”和网络层的“IP数据报”弄混。
网络层的还有一个任务就是选择合适的路由,使源主机运输层所传下来的分组,能通过网络层中的路由器找到目的主机。
这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称。
互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Internet Protocol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。
网络层常见协议:
- IP(Internet Protocol,网际协议):TCP/IP协议中最重要的协议之一,主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。目前IP协议主要分为两种,一种是过去的IPv4,另一种是较新的IPv6,目前这两种协议都在使用,但后者已经被提议来取代前者。
- ARP(Address Resolution Protocol,地址解析协议):ARP协议解决的是网络层地址和链路层地址之间的转换问题。因为一个IP数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但IP地址属于逻辑地址,而MAC地址才是物理地址,ARP协议解决了IP地址转MAC地址的一些问题。
- ICMP(Internet Control Message Protocol,互联网控制报文协议):一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。例如,Ping工具就使用了ICMP协议来测试网络连通性。
- NAT(Network Address Translation,网络地址转换协议):NAT协议的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个LAN下的IP地址,但在该LAN以外,在广域网(WAN)中,需要一个统一的IP地址来标识该LAN在整个Internet上的位置。
- OSPF(Open Shortest Path First,开放式最短路径优先):一种内部网关协议(Interior Gateway Protocol,IGP),也是广泛使用的一种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。
- RIP(Routing Information Protocol,路由信息协议):一种内部网关协议(Interior Gateway Protocol,IGP),也是一种动态路由协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。
- BGP(Border Gateway Protocol,边界网关协议):一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议,具有高度的灵活性和可扩展性。
网络接口层(Network interface layer)
我们可以把网络接口层看作是数据链路层和物理层的合体。
数据链路层(data link layer)通常简称为链路层(两台主机之间的数据传输,总是在一段一段的链路上传送的)。数据链路层的作用是将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异
网络接口层重要功能和协议如下图所示:
总结
简单总结一下每一层包含的协议和核心技术:
应用层协议:
- HTTP(Hypertext Transfer Protocol,超文本传输协议)
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议)
- POP3/IMAP(邮件接收协议)
- FTP(File Transfer Protocol,文件传输协议)
- Telnet(远程登陆协议)
- SSH(Secure Shell Protocol,安全的网络传输协议)
- RTP(Real-time Transport Protocol,实时传输协议)
- DNS(Domain Name System,域名管理系统)
传输层协议:
- TCP协议
- 报文段结构
- 可靠数据传输
- 流量控制
- 拥塞控制
- UDP协议
- 报文段结构
- RDT(可靠数据传输协议)
网络层协议:
- IP(Internet Protocol,网际协议)
- ARP(Address Resolution Protocol,地址解析协议)
- ICMP协议(控制报文协议,用于发送控制消息)
- NAT(Network Address Translation,网络地址转换协议)
- OSPF(Open Shortest Path First,开放式最短路径优先)
- RIP(Routing Information Protocol,路由信息协议)
- BGP(Border Gateway Protocol,边界网关协议)
网络接口层:
- 差错检测技术
- 多路访问协议(信道复用技术)
- CSMA/CD协议
- MAC协议
- 以太网技术
网络分层的原因
在这篇文章的最后,我想聊聊:“为什么网络要分层?”。说到分层,我们先从我们平时使用框架开发一个后台程序来说,我们往往会按照每一层做不同的事情的原则将系统分为三层(复杂的系统分层会更多):
- Repository(数据库操作)
- Service(业务操作)
- Controller(前后端数据交互)
复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。
好了,再来说回:“为什么网络要分层?”。我觉得主要有3方面的原因:
- 各层之间相互独立:各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了(可以简单理解为接口调用)。这个和我们对开发时系统进行分层是一个道理。
- 提高了整体灵活性:每一层都可以使用最适合的技术来实现,你只需要保证你提供的功能以及暴露的接口的规则没有改变就行了。这个和我们平时开发系统的时候要求的高内聚、低耦合的原则也是可以对应上的。
- 大问题化小:分层可以将复杂的网络问题分解为许多比较小的、界线比较清晰简单的小问题来处理和解决。这样使得复杂的计算机网络系统变得易于设计,实现和标准化。这个和我们平时开发的时候,一般会将系统功能分解,然后将复杂的问题分解为容易理解的更小的问题是相对应的,这些较小的问题具有更好的边界(目标和接口)定义。
我想到了计算机世界非常非常有名的一句话,这里分享一下:计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,计算机整个体系从上到下都是按照严格的层次结构设计的。