
2.1 协议概述
学习计算机网络最重要的就是掌握和理解计算机通信使用的协议。对很多学习计算机网络的人来说,计算机通信使用的协议是很不好理解的概念。为此,在讲计算机通信使用的协议之前,先看一份租房协议。
2.1.1 协议简介
大家对于协议并不陌生,大学生走出校门参加工作就要和用人单位签署就业协议,工作后还有可能要租房,需要和房东签署租房协议。下面就通过一个租房协议来介绍签协议的意义以及协议包含的内容,进而介绍计算机通信使用的协议。
如果出租方和承租方不签协议,只是口头约定房租多少、每个月几号交房租、押金多少、家具家电设施损坏谁负责维修,时间一长这些约定双方就可能记不清了,一旦出现某种情况,出租方和承租方认识不一致,就容易产生误解和矛盾。
为了避免纠纷,出租方和承租方就需要签一份租房协议,将双方关心的事情协商一致,写到协议中,双方确认后签字,协议一式两份,双方都要遵守。如果出租方和承租方对签署租房协议没有经验,担心漏掉一些重要的事项,可以从网上找一个公认的标准化的租房协议模板。图2-1所示是一份租房协议模板,约定事项已经定义好,出租方和承租方只需按模板填写指定内容即可。

图2-1 租房协议模板
为了简化填写,租房协议模板还定义了一个表格,如图2-2所示。出租房和承租方在签订租房协议时,只需将信息填写在表格规定的位置,协议的详细条款就不用再填写了。表格中“出租方姓名”“承租方姓名”“身份证”“房屋位置”等称为字段,这些字段可以是定长,也可以是变长。如果是变长,则要定义字段间的分界符。
图2-3所示是根据租房协议模板定义的表格填写的一份具体的租房协议,根据该协议即可知道出租方和承租方、房屋位置、租金、押金等信息,甲乙双方遵循的协议约定事项无须填写,但双方都须遵守租房协议模板的约定事项。

图2-2 租房协议模板定义的需要填写的表格

图2-3 具体的租房协议
与租房协议模板一样,计算机通信使用的协议也都进行了标准化,即形成了通用模板,有甲方和乙方。计算机通信协议除了定义甲方和乙方需要遵循的约定,还会定义甲方和乙方交互信息时的报文(报文是应用程序通信交换的信息)格式,通常包括请求报文和响应报文的格式。报文格式与图2-2所示格式类似。
在数据通信过程中,使用抓包工具分析数据包时,协议规定的需要通信双方填写的表格和每个字段的值,就类似于图2-3所示的租房协议中填写的各个字段的值。图2-4所示是IPv4协议定义的通信双方需要填写的表格,称其为IPv4首部。网络中的计算机在通信时只需要按照规定填写IPv4首部的内容,通信双方的计算机和途经的网络设备就能够按照IP进行工作。

图2-4 IPv4首部
2.1.2 计算机通信协议
1.协议分层概述
现在互联网中计算机通信使用的协议是一组协议,即TCP/IPv4协议栈。TCP/IPv4协议栈是目前结构最完整、使用最广泛的通信协议。如图2-5所示,TCP/IPv4协议栈中每一个协议都是独立的,每个协议都包含甲方、乙方、目的和协议条款。这一组协议按功能可分为应用层、传输层、网络层、网络接口层,它们共同工作才能实现网络中计算机之间的通信。
TCP/IPv4协议栈既可用于广域网,又可用于局域网,它是Internet/Intranet的基石,其魅力在于可使不同硬件结构、不同操作系统的计算机相互通信。如图2-5所示,其主要协议有传输控制协议(TCP)和网际协议(IPv4)。

图2-5 TCP/IPv4协议栈
2.协议分层的缘由
为什么说计算机通信需要这一组协议呢?怎么来理解分层呢?各层之间又具有怎样的关系呢?下面以网上购物为例进行类比说明。
在网上购物的过程中,商家和顾客之间需要有购物协议,双方需要一直按照购物平台规定的流程完成交易,即商家提供商品;顾客浏览商品,选定商品款式,网上付款;商家发货;顾客收到货后确认收货,货款最终打到商家账户上;顾客如果对收到的商品不满意,还可以退货;购买了商品的顾客可以评价该商品。这就是购物的流程,也可以被认为是网络购物所使用的协议。购物协议的甲方、乙方分别是商家和顾客,购物协议规定了购物流程,即商家能做什么、顾客能做什么、操作顺序是什么。例如,商家不能在付款前发货,顾客不能在未购物的情况下对商品做出评价。这样的“网购协议”就相当于计算机通信使用的一个应用层协议。类似的还有网上订餐、访问网站、收发电子邮件、远程登录等,每一种应用都需要一个应用层协议。
那么,只有购物协议(这一层协议)就能实现网上购物了吗?众所周知,购买的商品还需要快递送货到顾客家中,如果顾客不满意,退货也需要快递给商家。也就是说网上购物还需要快递公司提供物流功能。顺丰快递、圆通快递、中通快递等快递公司实现的均是此类功能,即为网上购物提供物流服务。
值得注意的是,快递公司投递快件也需要有一层协议,即快递协议。快递协议规定了快件投送的流程以及投送快件需要填写的快递单。客户按照快递单的格式,在指定的地方填写收件人和发件人等信息。快递单规定了为实现物流功能需要填写的表格,表格规定了要填写的内容以及位置。快递公司根据收件人所在的城市分拣快递,选择托运路线,到达目标城市后,快递人员根据快递单上的具体地址信息投送快件给收件人。如图2-6所示,IP定义的IP首部就相当于快递公司的快递单,其目的就是把数据包发送到目标地址。
快递公司为网上购物提供物流服务,类似地,TCP/IPv4所包含的4层协议间也有“服务”关系存在,即下层协议为它的上层协议提供服务,具体而言,传输层为应用层提供服务,网络层为传输层提供服务,网络接口层为网络层提供服务。

图2-6 快递单
图2-7描述了TCP/IPv4协议栈的分层和每层协议的作用范围。应用层协议的甲方、乙方是服务端程序和客户端程序,实现应用程序的功能。传输层协议的甲方、乙方分别位于通信的两个计算机中,TCP为应用层协议实现可靠传输,UDP为应用层协议提供报文转发服务。网络层协议中的IP为数据包跨网段转发选择路径,IP是多方协议,包括通信的两台计算机和沿途经过的路由器。数据链路层负责将网络层的数据包从链路的一端发送到另一端,同一链路上的设备是数据链路层协议的对等实体,数据链路层协议的作用范围是一段链路,不同类型的链路有不同的数据链路层协议。如图2-7所示,以太网使用CSMA/CD协议,点到点链路使用点到点协议(Point to Point Protocol,PPP)。

图2-7 协议的分层和作用范围
3.协议分层的好处
下面介绍将计算机通信协议分层的好处。
(1)各层之间是独立的。某一层并不需要知道它的下一层如何实现,而仅需知道该层通过层间接口所提供的服务。上层对下层来说就是要处理的数据,如图2-8所示。
(2)灵活性好。每一层有所改进和变化,不会影响其他层。比如IPv4实现的是网络层功能,现在升级为IPv6,实现的仍然是网络层功能,传输层的TCP和UDP不用做任何变动,数据链路层使用的协议也不用做任何变动。如图2-9所示,计算机可以使用TCP/IPv4和TCP/IPv6进行通信。
(3)各层都可以采用最合适的技术来实现。比如适合布线的就使用双绞线连接网络,有障碍物的就使用无线覆盖。

图2-8 各层之间的关系

图2-9 IPv4和IPv6实现的功能一样
(4)促进标准化工作。路由器实现网络层功能,交换机实现数据链路层功能,不同厂商的路由器和交换机能够相互连接实现计算机通信,就是因为有了网络层标准和数据链路层标准。
(5)分层后有助于将复杂的计算机通信问题拆分成多个简单的问题,有助于排除网络故障。比如,计算机没有设置网关造成网络故障属于网络层问题,MAC地址冲突造成的网络故障属于数据链路层问题,IE浏览器设置了错误的代理服务器访问不了网站,属于应用层问题。
2.1.3 OSI 7层模型与TCP/IPv4协议栈之间的关系
前面给大家讲的TCP/IPv4协议栈是互联网通信的工业标准。网络刚开始出现时,典型情况下只能在同一制造商制造的计算机产品之间进行通信。20世纪70年代后期,ISO创建了开放系统互连(Open Systems Interconnection,OSI)参考模型(本书称其为OSI 7层模型),从而打破了这一壁垒。
OSI 7层模型将计算机通信过程按功能划分为7层,并规定了每一层实现的功能。这样互联网设备的厂商以及软件公司就能参照OSI参考模型来设计自己的硬件和软件,不同供应商的网络设备之间就能够互相协同工作。
OSI 7层模型不是具体的协议,TCP/IPv4协议栈才是具体的协议。那么怎么理解它们之间的关系呢?例如,国际标准组织定义了汽车参考模型,规定汽车要有动力系统、转向系统、制动系统、变速系统,这就相当于OSI 7层模型定义的计算机通信每一层所要实现的功能。汽车厂商,如奥迪汽车,参照这个汽车参考模型研发自己的汽车,实现了汽车参考模型的全部功能,那么此时的奥迪汽车就相当于TCP/IPv4协议。如果奥迪汽车的动力系统有的使用汽油、有的使用天然气,发动机有的是8缸、有的是10缸,那么实现的功能就都是汽车参考模型的动力系统功能。同样,OSI参考模型只定义了计算机通信每层要实现的功能,而没有规定如何实现以及实现的细节,不同的协议栈实现方法可以不同。
国际标准化组织制定的OSI参考模型中,计算机通信过程被分成了7层,具体介绍如下。
(1)应用层:应用层协议用于实现应用程序的功能,将实现方法标准化就可以形成应用层协议。互联网中的应用有很多,比如访问网站、收发电子邮件、访问文件服务器等,因此,应用层协议也很多。应用层协议应该包含的内容有客户端能够向服务器发送哪些请求(命令)、服务器能够向客户端返回哪些响应、用到的报文格式、命令的交互顺序等。
(2)表示层:表示层为应用层传送的信息提供表示方法。如果应用层传输的是字符文件,则要使用字符集将其转换成数据。如果是图片文件或是应用程序的二进制文件,则要通过编码将其转换成数据。数据在传输前是否压缩、是否加密处理都是表示层要解决的问题。发送端的表示层和接收端的表示层是协议的双方,加密和解密、压缩和解压缩、将字符文件编码和解码都要遵循表示层协议的规范。
(3)会话层:会话层为通信的客户端和服务端程序建立会话、保持会话和断开会话。建立会话:A、B两台计算机之间要通信,就要建立一条会话供它们使用;在建立会话的过程中会有身份验证、权限鉴定等环节。保持会话:会话建立后,通信双方开始传递数据,当数据传递完成后,会话层不一定会立即将这条通信会话断开,它会根据应用程序和应用层的设置对会话进行维护,在会话维持期间,通信双方可以随时使用会话传输数据。断开会话:当应用程序或应用层规定的超时时间到期,或A/B重启、关机,或手动断开会话时,即会断开A、B之间的会话。
(4)传输层:传输层主要为主机之间通信的进程提供端到端(End to End)服务,处理数据报错误、数据报次序错误等传输问题。传输层是计算机通信体系结构中关键的一层,使用了网络层提供的数据转发服务,可以向高层屏蔽下层数据的通信细节,使用户完全不用考虑物理层、数据链路层和网络层工作的详细情况。
(5)网络层:网络层负责数据包从源网络传输到目标网络过程中的路由选择工作。互联网是由多个网络组成的一个集合,正是借助了网络层的路由路径选择功能,才使多个网络之间得以畅通,信息得以共享。
(6)数据链路层:数据链路层负责将数据从链路的一端传到另一端,传输的基本单位为“帧”,并为网络层提供差错控制和流量控制服务。
(7)物理层:物理层是OSI参考模型中的最底层,主要定义了系统的电气、机械、过程和功能标准,如电压、带宽、最大传输距离和其他的类似特性。物理层的主要功能是利用传输介质为数据链路层提供物理传输工作。物理层传输的基本单位是比特流,即0和1,也就是最基本的电信号或光信号。
TCP/IPv4协议栈对OSI参考模型进行了合并简化,其应用层实现了OSI参考模型的应用层、表示层和会话层的功能,并将数据链路层和物理层合并成网络接口层,如图2-10所示。

图2-10 OSI参考模型和TCP/IP分层