计算机网络技术(三)——网络协议和体系结构

2020-04-28  本文已影响0人  badlogic

摘要

  1. 网络协议和体系结构概述
  2. OSI参考模型
  3. TCP/IP参考模型
  4. TCP和UDP

一、网络协议和体系结构概述

二、OSI参考模型

OSI模型(Open System Interconnection)—— 1984年,负责制定国际标准的国际标准化组织ISO吸取了IBM的SNA和其他计算机厂商的网络体系结构,提出了开放系统互联OSI参考模型。开放指的是数据通信中的设备都可以互相通信。

2.1 OSI参考模型各层的功能

OSI参考模型采用分层结构化技术,将整个网络的通信功能分为7层,由低层到高层分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。如下图所示,各层的数据并不是从一端的第N层直接送到另一端的对应层,第N层接收第N+1层的协议数据单元(PDU),按第N层协议进行封装,构成第N层PDU,再通过层间接口传递给第N-1层,……,最后,数据链路层PDU(通常称为数据帧)传递给最底层的物理层。

OSI参考模型

OSI参考模型的7层中,1-3(自底向上)层主要完成数据交换和数据传输,称为网络低层,即通信子网;5-7层主要完成信息处理服务,称为网络高层;低层与高层之间由第4层的传输层衔接。

2.2 OSI参考模型的有关术语

实体——网络中的每个层中都有产生和接受数据的元素,称为实体(可以是软件或硬件)。
对等实体——不同通信结点上的同一层次中的实体构成了通信的双方,称为对等实体。除了最底层的物理介质,其他层次的对等实体无法直接通信,必须将数据一层层向下传递,直到物理传输介质,才能实现对等实体间的通信。

OSI参考模型中每一层的真正功能是为其上一层提供服务。例如,N层的实体为(N+1)层的实体提供服务,N层的服务则需使用(N-1)层及更低层提供的功能服务。下面介绍OSI中常用的几个术语。

层间数据单元的传送

图中PDU是协议数据单元;SDU是服务数据单元;PCI是协议控制信息,通常作为PDU的首部。(N+1)PDU在越过N+1和N层的边界后,变换为N-SDU [N层把(N+1)-PDU看成为N-SDU]。N层在N-SDU上加上N-PCI,则成为N-PDU。在N-PDU和(N+1)-PDU之间并非是一一对应的关系。如果N层认为有必要,可以把(N+1)-PDU拆成几个单元,加上PCI后成为多个N-PDU,或者把多个(N+1)-PDU连接起来,形成一个N-PDU。
到达目的站的N-PDU,在送往(N+1)层之前要把N-PCI去掉。在层间通信中PCI相当于报头,即首部。在源点逐层增加新的PCI,到达目的地后则逐层去掉,恢复原来的信息。

下图为原语的图解形式:

原语的图解形式

上图为系统A中N+1层用户和系统B中N+1层用户之间建立通信联系时4种原语的应用。首先,系统A中N+1用户发出请求原语,调用本系统N服务提供者的一些程序,于是N服务提供者向对方发送了一个或一组N-PDU。当系统B的N服务提供者收到N-PDU后,向本系统的N+1用户发出指示原语,说明本系统的N+1用户需要调用一些程序,或者N服务提供者已经在同级服务访问点调用了一个程序。响应原语是由系统B的N+1用户发出的,这个响应原语是对N层协议的一个指令,以完成原来由指示原语调用的程序。N层协议产生一个PDU,传送至系统A的N层。系统A的N服务提供者发出证实原语,表示在服务访问点已经完成了由请求原语调用的程序。证实和响应可以是确认也可以是否认,这取决于具体情况。

三、TCP/IP参考模型

TCP/IP参考模型包括4层,通常每一层封装的数据包采用不同的名称,如下图:

TCP/IP参考模型

下面介绍TCP/IP参考模型各层的主要功能及协议。

在实际的数据通信过程中,用户的数据在应用层以报文的形式开始向下一层进行封装,形成段、数据报、帧,最后以比特流的形式进行传输。在中间结点处,例如路由器、交换机等,分别从对应的数据报、帧中取出并对相应的路由、地址信息进行处理,送达目的主机后由下层到上层开始逐层处理,并去掉相应的头部信息,最终还原为最初的报文。整个数据封装和传输流程如下图:

TCP/IP参考模型封装和传输示意图

TCP/IP参考模型与OSI参考模型的区别:

四、TCP和UDP

4.1 TCP/IP参考模型中的传输层
4.2 UDP

UDP(User Datagram Protocol,用户数据报协议),是一种无连接的传输层协议。

UDP数据报结构

其中源端口号、目的端口号、长度和检验和字段构成了UDP首部。

源/目的端口:数据发送方将UDP数据报通过源端口发送出去,而数据接收方则通过目的端口接收数据。源端口号和目的端口号都是两个字节长度,端口范围是0~65535。

数据报的长度:是首部和数据部分的总字节数。因首部长度是固定的,所以该字段常用来计算可变长度的数据部分。理论上数据报的最大长度为65535B,一些实际应用往往会限制数据报大小,降低到8192B。

检验和:用来保证数据的安全。该值是数据发送方通过特殊算法计算得出,接收方收到后,还需要再重新计算。如果数据报在传输过程中被修改或损坏,发送方与接收方的检验和计算值将不同,因此可用于检测数据是否出错。

虽然UDP是个不可靠的协议,但它非常适合对于速率要求高、而对精确度要求相对较低的网络应用,比如视频会议、视频点播和网络电话等。

4.3 TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。由于IP不提供可靠的通信服务,因此主机之间要实现可靠的数据传输,需要使用TCP的传输控制。为了防止数据报丢失,TCP给每个数据报添加一个序号,同时序号也保证了接收端的按序接收。接收端会对成功收到的数据报发回相应的确认(ACK);如果发送端在合理的往返时延(RTT)内未收到确认,则认为数据被丢失,需要重传。TCP使用一个检验和函数来检验数据是否有错误。

4.3.1 TCP数据报的首部结构
TCP数据报首部结构

各字段的说明:
1)源端口与目的端口:分别占16位,标识发送该数据报的源端口和目的端口。
2)序号:分别占32位。TCP的序号是对每个应用层数据的每个字节进行编号,因此每个TCP段的序号是该段所封装的应用层数据的第一个字节的序号。
3)确认序号:期望从对方接收数据的字节序号,即该序号对应的字节尚未收到,该序号之前的字节已被全部接收,也就是说,TCP采用累积确认机制。
4)首部长度:占4位,指出TCP段的首部长度,以4B为计算单位。
5)保留:占6位,保留为今后使用,目前值为0。
6)URG、ACK、PSH、RST、SYN、FIN:各占1位,共占6位。各字段具体含义:URG = 1 时,表明紧急指针字段有效,通知系统此报文段中有紧急数据,应尽快传送(相当于高优先级数据);ACK = 1 时,标识确认号字段有效,当ACK = 0 时,确认号无效;收到PSH = 1 时,尽快把缓存数据交给应用进程;RST = 1 时,表明TCP连接出现差错,需要释放并重新连接;SYN = 1 时,表示这是一个建立新连接请求控制段或者同意建立新连接的确认段;FIN = 1 时,请求释放TCP连接。
7)窗口:占16位,用于向对方通告接收窗口大小(单位为字节),其值是本端接收对方数据的缓存剩余空间,用于实现TCP流量控制。
8)检验和:通过特殊算法计算得出,检验TCP首部和应用数据。
9)紧急指针:占16位,指出在本报文段中紧急数据共有多少字节(紧急数据放在本报文段数据的最前面)。
10)选项:最大段长度MSS选项——告知对方本地缓存能接收的数据段最大长度是MSS个字节;窗口扩大选项;时间戳选项;选择确认选项。
11)填充:长度为0~3个字节,取值全为0,目的是使整个首部长度是4B的整数倍。

4.3.2 TCP连接管理

TCP是面向连接的传输协议,其连接功能是通过TCP的连接管理实现的,TCP连接管理包括连接建立、数据传输和连接拆除3个阶段。
TCP连接建立过程要解决以下3个问题:
1)要使通信双方能够确知对方的存在。
2)要允许双方协商通信过程中的相关参数(如最大窗口值、是否使用窗口扩大选项等)。
3)能够对传输实体的资源进行分配(如缓存大小)。

4.3.3 TCP连接建立

TCP的建立采用客户/服务器方式。主动发起连接建立的应用进程为客户,被动等待连接建立的应用进程为服务器。TCP的建立过程可以形象的描述为”三次报文握手“。
假设A主机运行TCP客户程序,B主机运行TCP服务器程序,则A与B建立TCP连接的过程如下图所示:

TCP连接建立过程

1)A的TCP向B发出连接请求报文段,其首部中的同步位SYN = 1,并选择初始序号seq = x,表明传送数据的第一个字节的序号是x。(第一次报文握手)

2)B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中使SYN = 1,ACK = 1,确认序号ack = x + 1,初始序号 seq = y。(第二次报文握手)

3)A收到此确认报文段后向B给出确认,其中ACK = 1,SYN = 0,seq = x+1,ack = y + 1。(第三次报文握手)

SYN = 1的字段不能携带数据,但是要消耗一个序号,ACK = 1的字段可以携带数据,如果不携带数据则不消耗序号。

4.3.4 TCP连接释放

TCP连接建立后,就可以进行数据传送,数据传送结束后,还需要进行连接释放,TCP的连接释放需要经过4次报文握手过程。如下图所示:

TCP连接释放过程

1)TCP通信双方都可以释放连接,假设由A发起释放,则A向B发送释放连接控制报文段,并停止再发送数据。报文段首部中的终止控制位FIN = 1,其序号seq = u,然后A等待B的确认。

2)B收到A发出的释放连接控制报文后,立即向A发送确认报文段,确认报文段的ACK = 1,ack = u + 1,seq = v。A收到B的确认后,进入等待状态,等待B发出的释放连接控制报文段。

3)如果B已经没有要向A发送的数据,则B向A发送释放连接控制报文段,其中FIN = 1,seq = w,ack = u + 1。

4)A收到B的释放连接控制报文段后,要向B发送确认报文段,其中ACK = 1,seq = u + 1,ack = w+ 1,B收到该确认报文段后,可以马上释放连接;A在发出该确认段后,延迟一段时间再释放连接。

常见问题:

4.3.5 TCP可靠数据传输的工作机制

1)应用数据被分割成TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段(Segment)。

2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,则认为该报文段被丢失,将重发这个报文段。

3)TCP首部中设有检验和字段,用于检测数据在传输中是否发生变化。如果有变化,TCP将丢弃此报文段,发送端会超时重发。

4)由于IP层是无连接的,数据报的到达可能会经过不同的路径,因此数据到达顺序也不同,需要将收到的数据重新排序。

5)由于网络延迟和重传机制,接收端可能会收到重复数据,这时需要对重复数据进行丢弃。

6)TCP能够提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。

流量控制(Flow Control)是TCP的重要功能,流量控制的目的是使发送端的数据发送速率不要太快,确保接收端能够来得及接收,即接收端的数据缓存不会溢出。为此,接收端在给发送端发送数据段(ACK=1)或单纯确认段时,通知剩余接收缓存空间作为接收窗口,发送端在接下来发送数据段时,控制未确认段的应用层数据总量不超过最近一次接收端告知的接收窗口的大小,从而确保接收端不会发生缓存溢出。

4.3.6 拥塞控制

拥塞控制(Congestion Control)是从端到端的角度推测网络是否发生了拥塞,如果推断网络发生了拥塞,则立即将数据发生速率降下来,以便缓解网络拥塞。

1)慢启动算法:作用在TCP数据传输的开始阶段,当主机开始发送数据时,因为不知大网络中的负荷情况,如果立即发送大量的数据,有可能会引起网络的拥塞。因此,TCP采用试探的方法,逐渐增大拥塞窗口。

2)拥塞避免算法:如果定义从发送端发出一个数据报文段到收到这个数据报文段的确认的时间间隔为往返时间RTT,则在慢启动阶段,每经过一个RTT,cwnd的值就加倍。为了防止拥塞窗口增长过快而引起网络拥塞,TCP还设置了一个慢启动阈值ssthresh,当拥塞窗口的值增加到ssthresh时,就要减缓拥塞窗口的增长速度,具体做法时每经过一个RTT,拥塞窗口cwnd的值加1(单位为MSS),这样就可以使cwnd按线性缓慢增长,这个过程称为”加性增加(Additive Increase)“算法。当发生网络拥塞时,发送端首先将ssthresh的值变为发生超时时cwnd值的一半,同时将cwnd设为1,重新执行慢启动算法,这个过程称为”乘性减小“(Multiplicative Decrease)算法。”加性增加“和"乘性减小"算法合起来称为AIMD算法。

3)快速重传算法:接收端每收到一个失序的数据报文段后就立即发出重复确认,如果发送端收到某个数据报文段的3个重复确认,则立即重传下一个数据报文段。

4)快速恢复算法:是配合快速重传使用的算法,当发送端连续收到3个重复确认时,就将慢启动阈值ssthresh减半,以预防网络拥塞的发生,并且将拥塞窗口cwnd的值置为减半后的ssthresh,然后开始执行拥塞避免算法,使得cwnd缓慢地加性增大。

总结

luck

上一篇 下一篇

猜你喜欢

热点阅读