现代通信网络-LC2-基本通信协议及其应用
本节对应参考书章节CH2
通信协议
通信协议的功能和结构
通信协议的多层级化
通信协议倾向于分为很多层,每层分管不同功能。这样每次需要升级时,只需要在单独的层上做改变,保证层对外暴露的接口不变即可。我们把这样很多层的协议系统称为”纵向栈(vertical stack)”。
通信协议的定义
什么是通信协议(Protocol)?协议是允许对等层(peer layer)进行通信的一组规则或约定。
如何理解这个对等层呢?例如我们通过QQ互相发送消息,那人与人就是对等层,QQ与QQ就是对等层。我发送消息你看到消息是人与人这个对等层的通信。我们通过软件界面与QQ交互,QQ拿到要发送的消息并显示接收到的消息,这是QQ这一对等层。
协议必须包含(重点!):
五星级
- 语法(Syntax) - 即,数据块由哪些组成,由什么开始,由什么结束,有效载荷如何解析等等。
- 语义(Semantics)- 即,数据帧内的控制信息,纠错Header等。包含
- 时序(Timing) - 即,事件顺序的详细说明
其中这个Timing 单独强调一下:
在电信传输理论与工程一课中,在中继时提到了“retiming”, 这里的timing强调时间上“同步”,要在接收信号的允许抖动范围内进行采样,否则会产生滑码。而本课程(现代通信网络)中,这里的timing强调的是事件的先后顺序。
通常来说,一个协议规定的一帧数据由如下结构组成:
Header | Payload | Trailer(footer) |
---|---|---|
通常包含控制信息、地址信息等 | 有效数据载荷 | 对于精简的协议来说,可以省去Trailer。包含校验信息,纠错信息等 |
层
前面提到,通信协议倾向于分为很多层,总体而言,通信这个动作可以被大体抽象为以下三个相互独立的层(划分为3层是非常粗糙的):
网络接入层(Network access layer):专注于数据的交换:其提供目的地地址;特定服务,例如优先级;使网络中的终端互通并路由其数据;连接到同一网络的两个终端系统跨网络访问和路由数据
传输层(Transport layer): 物理路径上的传输:这一层级只负责把收到的比特一个一个发出去,通过握手,流控,校验等,控制其传输可靠性,并不需要理解其中意义。
应用层(Application layer):对交由应用程序理解信息意义,并呈现的层。例如QQ显示消息,或者网页浏览器将收到的HMTL文件数据以HTML格式解析后显示成网页。
![]() |
![]() |
上面两张图很好的阐释了这三个抽象的层,首先应用层想要发送数据“data”,传输层收到信息并将其打包,添加上来自哪里,去往哪里的信息等信息的“头”,并携带data本身,传给网络接入层。网络接入层再根据自己的网络协议,添加上路由,链接等信息的“头”,从网络上发出去。
层间寻址(Addressing)
在网络上的每一个终端设备,都应当有一个唯一的网络地址
同时,终端上的每一个应用又有一个它自己的唯一地址
↑用人话解释就是:不同层之间可以有自己的地址。这也就是说,不同层可以有自己的地址信息,他们以套娃的形式包裹在一次。在接收时一层协议一层协议解析时,一层一层解读出最终地址。
如何理解这个呢?你的电脑上同时装了QQ,你的QQ和微信都收到了一条消息,那么会先根据你的终端唯一网络地址,送到你的电脑上(这是传输层),然后再在你的电脑上分捡,QQ的消息QQ显示,微信的消息微信显示(这是应用层)。
举个例子:我们是重庆|邮电大学|国际学院|通信工程|3409210x班|的学生Z*,你的6级考了329分,那么你的成绩单会先分到重庆,忽略后续的地址,然后下一层交换再分给虫游,忽略后续;以此类推,最后给到Z同学手机里面,手机分析出这个是要交给浏览器的,最后通过浏览器显示在屏幕上。这由粗到细的分拣就对应不同层间的数据传输。(理解到了,让我们说谢谢Z同学)
协议数据单元(Protocol Data Unit, PDU)
通信协议中的不同“层”之间是服务与被服务的关系。在发送时,本层协议服务其上层协议,将上层协议传入的内容加上自己的header,传入下层,同时本层的下层协议服务本层协议。在接收时,对应层的header被对应层解析,并将其内含的data传给上一层,上一层又剥离出上一层的header,解析后传入给上二层。因此在逻辑层面而言,通信是层与层之间对等的。
协议数据单元PDU(Protocol Data Unit)就是指对等层之间传递的数据单位,通常包含:控制讯息,地址讯息,或者数据。其中,header部分通常包括:源端口、目标端口、序列号和错误检测代码。这些控制信息将会由接受端的对等协议层理解解析。
用信封的例子来解释这个套娃关系:
不同层各有一个信封,信封上写得有不同的内容,在传递给下一层封装时,会把上一层的信封塞到下一层内,并在下一层的信封上贴上这一层所需信息。
因此,每一层包好的这一封信,就是这一层的PDU。这一层会抱着这个信封发送,接受时打开这一层信封,并将该信封内套娃的信封交给它的上层。
服务数据单元(Service Data Unit, SDU)
PDU是拿到要传输的数据再套上本层信息之后的数据单元。SDU就是指的一坨传输数据。传送到接收方的时候同一协议层时数据没有发生变化。在N层和N-1层间传递的数据单元,记为(N)SDU。
TCP/IP 协议栈
TCP/IP 五层协议栈
通常TCP/IP模型有以下五层,但也有部分参考文献将网络接入层和物理层和在一起,说其为4层。TCP/IP只是一个笼统的协议栈,还可以细分出很多的协议,TCP/IP是利用 IP 进行通信时所必须用到的协议群的统称,其主要是传输层使用TCP协议,网络层使用IP协议。
不同层的功能
这些层的功能不需要死记硬背,结合后面实际的协议进行理解即可。
物理层(Physical) | 负责信号的调制,编码方式(例如高电平还是低电平表达1),传输速率,物理接头,带宽指定等与电磁波在物理介质中传播相关的部分。该层只管比特的透明传输,负责保证二进制比特的正确传输。 |
---|---|
数据链路层(Network Access) | 负责规定比特流的格式,头部通常带有地址及纠错信息。(MAC层属于该层的子层,有部分文献会用MAC层代替该层)(注:这一层的一个数据单位通常被成为“帧”,也被说成MAC帧) |
网络层(Internet) | 负责为两个网络中的节点选择一条传输通路。这一层可提供路由,网络接入,Qos控制(优先级控制)等服务。在数据链路层,数据开始有格式有地址了,而网络层让信息能送到指定的地址去。 |
传输层(Transport) | 负责两个节点间数据的传输,确保数据正确地传递。提供流控,错误控制等功能。在一层中,最常用的是协议是Transmission Control Protocol(TCP) |
应用层(Application) | 负责最后应用程序层面,打开信封看里面的信纸,解析其信息的含义的操作 |
每一层都有自己层对应的控制信息,也就是每一层自己的header,如下图所示。每一层负责解读自己的header,并将灰色部分传给其上层。
上图中,对某一层而言,某一层的一整条数据(灰的加白的)就是前面介绍的PDU,而灰色部分就是SDU。
TCP协议
在协议栈中扮演的角色
TCP是一种面向连接的协议,适合可靠性要求高,长时间连续的通信业务。TCP协议在通信协议中的位置如下图所示,是位于传输层的协议。
在这里涉及传输层有点抽象,但是这门课没有成体系的教案,知识都是这样零零散散的。个人建议最后再来看这里,把网络层看完之后。(这里也不是很重要
TCP Header
TCP协议规定的Header如下图所示
上图中,octets表示8bit。
Source Port:16bit源端口号
Destination Port: 16位接收方端口号
Sequence Number:帧的序列号,用于数据包重新组装。在接收端,根据这个序列号将拆分的数据重新组装在一起。
Acknowledgement Number:应答序列号。
Header Length:TCP Header的长度
Reserved:保留位,不使用
Flags:标志位,用于通信双方维护一些控制信息,例如是否启用Acknowledgement Number,是否为连接请求报文等等。有URG、ACK、PSH、RST、SYN、FI六种。详细功能就不介绍了。
Windows:接收机窗口大小,参见滑窗流控。
Checksum:校验和,差错控制使用
Urgent Pointer:紧急指针,是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号
Options+Padding:可变长可选信息的预留位。总共有7种kind,内涵不同的控制信息,如下图所示。
为什么用octet不用byte?
Octet 总是表达8个bit ,当我们在谈论网络通信上的问题时,更喜欢使用这个词而不是Byte。
Byte 通常情况下也表示8个bit,但是准确的说,Byte表示的是CPU可以独立的寻址的最小内存单位(不过通过移位和逻辑运算,CPU也可以寻址到某一个单独的bit)。曾几何时,有些电脑的寻址单位不是8Bit的。而现在,大多数情况下byte可以和octet等价。但是如果你想要强调准确的8bit时,你就应该使用octet而不是byte。
TCP的三次握手
例子:理解TCP面向连接——握手过程
有A和B两军在打仗,A占领了两边的山峰,想要明天早上6点两边同时下去把B干掉。因此排出一个传信员,左边将这个消息告诉右边,也就就是路径1。但是传信员存在穿越B时被噶掉的风险,因此右边的A收到后,让传信员再返回左边的A去告诉左边的司令管他们收到了,这也就是路径2。但是此次穿越B还有被噶掉的风险,如果传信员此时被噶掉,右A收并不能确定左A是否收到了“右A已收到”的消息,因此当传信员成功回到左A时,左A的司令管让它再回到右A去告诉:“我们收到了‘你们收到我们的消息’的消息了”,这也就是路径3
在TCP中也是一样,假设有A和B两台机器,A先朝B发送数据请求建立连接。B再朝A发送ACK进行回应。A收到B的回应时,A知道它与B之间收发数据均可达,A再朝B发送一次回应,此时B知道它和A之间的收发也是正常的。
说TCP是面向连接的,就是因为它规定了三次这样的握手过程。
UDP
UDP是面向无连接的协议,也就是管发但不管收没收到那种,适用于“突然来一下”的通信,简短,即时性高的通信。
UDP Header
UDP协议的头如下图所示,可见,其相对于TCP简短很多。只包含了发送站端口号,接收机端口号,帧长度,和校验和。
OSI模型
OSI的全称是:Open System Interconnection (开放系统互联模型)。OSI定义了网络互连的七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),如下图所示:
不同层的功能
层 | 关键词 | 描述 |
---|---|---|
应用层 | 被应用程序调用 | 为应用程序提供网络服务接口。与TCP/IP五层协议中同义。 |
表示层 | 数据编码、格式转换、数据加密。 | 提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一 |
会话层 | 创建、管理和维护会话 | 接收来自传输层的数据,负责建立、管理和终止表示层实体之间的通信会话,支持它们之间的数据交换。 |
传输层 | 传输数据 | 提供可靠的数据传输,流控等。与TCP/IP五层协议中同义。 |
网络层 | 路由、寻址 | 负责终端之间建立,保持,挂断通信。 |
数据链路层 | 封装为待发送“帧” | 将网络层的数据帧,拆装为位流形式的数据转发到物理层;负责建立和管理节点间的链路,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。 |
物理层 | 电磁波发送 | 传输介质为数据链路层提供物理连接,实现比特流的透明传输。与TCP/IP五层协议中同义。 |
其中,在真正的协议中,很少有协议会单独定义会话层和表示层的,其功能多并入上层和下层。因此这两层独立存在情况极少。
(其实没有协议会完整地遵照OSI这个模型去设计,经常都是几层协议和在一起或者一层协议剥开几层。TCP/IP更好理解一些。)