网络参考模型及协议族介绍
1. 前言
对于现代人来说,大家对计算机网络、Internet、因特网这些术语都很熟悉。计算机网络就是由能够相互通信的终端和其他通信子网中的通信设备连接在一起,而组成的计算机系统。通常把网络中的设备叫做节点,包括:PC、打印机、手机,路由器、交换机、网关等。在网络发展的早期,计算机网络仅仅是由科研院所、大学等研究机构的计算机组成。今天看来,组成计算机网络的终端系统不仅仅是计算机了,还包括手机、汽车、家用电器、摄像头等很多类型的终端。Internet 是指世界范围内的计算机网络互连在一起形成的系统,中文叫做互联网。
随着技术的发展,计算机网络的信号传输方式也在不断的变化,从同轴电缆到光纤,从有线到无线。通常来讲,计算机网络是通过有线连接或者无线连接进行信号传输的。在短距离传输信号通常是通过有线或者无线传输,比如通过双绞线线或者 WIFI 传输。在长距离传输信号是通过光纤传输。
计算机网络各节点之间的通信就是进行数据包的传输,然而计算机不像人可以独立思考,需要程序员为它们设计一组通信协议,它们彼此才能正常收发数据包。所以学习计算机网络,一定是离不开学习各种通信协议的。那么什么是协议呢?
2. 什么是协议
我们知道人类是通过语言进行沟通的。比如,帅哥 A 说:“慕课网的课程都很棒!”。而美女 B 是 imooc 迷,随声附和道:“嗯,确实!”。然而美女 C 完全不了解 imooc, 她可能默不作声,或者反问:“慕课网是什么?”。这意味着,人们的沟通是基于一定的前提假设的,是基于一些大家都能理解的、约定俗成的规定的。我们把这些约定或者规则叫做协议(Protocol)。
两台计算机之间的通信也是模拟人类交流的,通信之前也需要有一些约定,也就是说要提前设计好协议。
计算机网络协议的规模非常庞大,数据包的收发过程也非常复杂。为了使计算机网络容易理解、传播和实现,科学家们对网络进行了分层设计,并对其进行了标准化,最终形成了经典的 ISO/OSI 参考模型和 TCP/IP 参考模型。
3. ISO/OSI 七层模型和 TCP/IP 四层模型
网络分层的主要是采取分治策略,使得复杂问题简单化,网络模块组件化。每一层都有自己的职责,每一层对上一层提供服务,这样实现了职责单一,进而提高了组件的复用性。。在网络标准化过程中,国际标准化组织(ISO)把计算机网络分为 7 层,叫做开放系统互联模型(OSI)。同时,TCP/IP 四层模型正处于开发阶段。最终,OSI 模型和 TCP/IP 模型有一些差异,对比图如下:
从图中可以看出,ISO/OSI 七层模型和 TCP/IP 四层模型之间存在两个差异:
- TCP/IP 参四层模型没有表示层和会话层。那么,TCP/IP 参考模型不需要表示层和会话层吗?答案是:“如果需要这两层,就由应用程序员来实现”。经过这么多年发展来看,需要表示层和会话层的场景并不多。
- TCP/IP 模型好像没有链路层,其实在网络协议实现过程中,链路层包含了网卡驱动部分和物理介质部分,所以通常把二者统一叫做链路层。
各层具体功能解释如下:
- 应用层(Application Layer) 是由应用程序自定义的协议格式。不同的领域,对网络应用程序的需求是不同的,必须给用户自定义协议格式的权利。最广泛的应用层协议应该是 HTTP 了吧,几乎每个人都在用。
- 表示层(Presentation)主要是定义数据格式。比如,加密和解密、压缩和解压缩。在 TCP/IP 模型中,表示层协议包含在应用层里。比如 SSL/TLS 协议。
- 会话层(Session Layer)用于在两个通信实体之间建立会话、维护会话、终止会话。设置检查点,当系统出现崩溃拉起后,通过寻找检查点恢复运行。在 TCP/IP 模型中,会话层协议包含在应用层里。比如 NetBIOS 协议。
- 传输层(Transport Layer) 是在两个通信主机之间进行报文传送。在 TCP/IP 模型中最重要的两个传输协议就是 TCP 和 UDP,前者是可靠的、面向字节流的传输;后者是不可靠的、面向数据报(Datagram)的传输。
提示:
通常把 TCP 传输的报文称作报文段(Segment)。
通常把 UDP 传输的报文称作消息(Message)或者是数据报(Datagram)。
- 网络层(Network Layer)是将 IP 分组从源端路由到目的端。网络层是为传输层服务的,在发送端的网络层收到传输层的数据后,必要时会对数据切片以后再封包发送。实现网络层协议是路由器的主要职责,是构建通信子网的基础。比如, RIP、OSPF 就是最基础的路由协议。路由器是通过 IP 分组的目的 IP 地址查找本地路由表,寻找转发的目标端。所以路由器的主要工作就是路由选择和转发,IP 分组是逐跳(hop)转发的。
提示:
通常把网络层传输的报文叫做 IP 分组(Packet)。
- 链路层(Data Link Layer)是为网络层服务的。发送的时候将网络层的数据分片,封装成帧(Frame),然后顺序发送。与网络层实现端到端的路由不同,链路层是实现节点之间的数据传送。常用的链路层协议就是以太网(Ethernet)协议。
提示:
通常把链路层传输的报文叫做帧(Frame)。
- 物理层(Physical Layer)是描述如何在物理介质中传输 bit 位。比如,用多少伏电压表示“1”,用多少伏电压表示“0”等。
我们把分层的网络参考模型叫做协议栈(Protocol Stack)。目前所有网络协议栈的实现都采用了 TCP/IP 参考模型。协议栈的实现是包含在操作系统内核中的,比如 Windows 和 Unix-like 系统。
4. TCP/IP 协议族
TCP/IP 协议族包含了很多协议,一些比较重要的、常用的协议展现如下:
依据 TCP/IP 参考模型,我们把协议栈从上到下分为 4 层,每一层都有相应的协议。
- 应用层
- HTTP(Hypertext Transfer Protocol)超文本传输协议,只要你浏览页面就会用到此协议。
- SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,用于电子邮件传输。
- FTP(File Transfer Protocol)文件传输协议,用于文件的上传和下载。现在 FTP 貌似用的不多了,早期主要是在公司内部、大学等研究机构用的比较多。
- RTMP(Real-Time Messaging Protocol)实时消息协议,用于实时流媒体传输,主要用在音视频直播领域,属于 Adobe 公司出品。不过,从 2020 年开始,Adobe 就不再支持 RTMP 协议了。
- SNMP(Simple Network Management Protocol)简单网络管理协议,用于电信网络设备的管理。比如,监控设备告警,对设备进行业务配置等。主要是在思科、华为等电信网络设备上用的比较多。
其实,应用层除了以上诸多知名协议外,也可以是用户自定义协议。
- 传输层
- TCP(Transmission Control Protocol)传输控制协议,是面向连接的、可靠的、面向字节流的传输协议。TCP 应用非常广泛,是端到端传输的基石。
- UDP(User Datagram Protocol)用户数据报协议,是无连接的、不可靠的、面向消息的传输协议。UDP 实时性好,效率高,在音视频传输中有着广泛的应用。
- 网络层
- IPv4 (Internet Protocol version 4)此协议主要是用于 IP 分组的路由转发,是路由器主要实现的协议。我们经常说的 IP 地址是指 IPv4 地址,用 32 bit 来表示。
- IPv6 (Internet Protocol version 6)此协议工作原理类似 IPv4。之所以设计 IPv6 的目的是因为上世纪 90 年代中期,因特网爆炸式的增长,32 位 IPv4 地址不够用了,为此才设计了 128 位的 IPv6 地址。
- ICMP(Internet Control Message Protocol)因特网控制消息协议,主要是用于显示网络错误。比如,我们用 ping 的时候,有时会显示“网络不可达”的错误。
- ICMPv6 (Internet Control Message Protocol Version 6)整合了 ICMP 协议,针对 IPv6 开发的协议。
- IGMP(Internet Group Management Protocol)因特网组管理协议,主要是用于 IP Multicast 的场景,比如观看 IP 电视节目。
- 链路层
- ARP(Address Resolution Protocol)地址解析协议,主要是用于生成 IP 地址和物理地址(比如以太网 MAC 地址)的映射表,用于数据包的快速转发。
- RARP(Reverse Address Resolution Protocol)反向地址解析协议,主要是用于生成物理地址和 IP 地址的映射。
以上这些协议属于计算机网络的基础协议,需要很好的掌握其工作原理。
5. 小结
本文开篇简单介绍了网络的基本概念,重点介绍了 ISO/OSI 参考模型和 TCP/IP 参考模型的结构,各层的基本功能,以及二者的对比。其实,ISO/OSI 参考模型只是一个用于教学的理想模型,并没有产品实现。而目前的网络协议栈都是采用 TCP/IP 参考模型。
关于 TCP/IP 参考模型中的协议有很多,我们重点介绍了常用的几个协议,这些协议是日常工作中必不可少的,需要重点掌握。尤其是以太网数据帧节点转发原理,IP 分组的存储转发原理,可靠性 TCP 的工作原理和不可靠性 UDP 的工作原理,建议重点学习。