当前位置:首页 » 网络连接 » 计算机网络里的rtt是什么
扩展阅读
流量卡网络设置cmiot 2025-09-23 23:45:25
怎么进入粘贴的网站 2025-09-23 23:43:03

计算机网络里的rtt是什么

发布时间: 2023-02-14 10:38:23

1. 计算机网络第三章(数据链路层)

3.1、数据链路层概述

概述

链路 是从一个结点到相邻结点的一段物理线路, 数据链路 则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)

网络中的主机、路由器等都必须实现数据链路层

局域网中的主机、交换机等都必须实现数据链路层

从层次上来看数据的流动

仅从数据链路层观察帧的流动

主机H1 到主机H2 所经过的网络可以是多种不同类型的

注意:不同的链路层可能采用不同的数据链路层协议

数据链路层使用的信道

数据链路层属于计算机网路的低层。 数据链路层使用的信道主要有以下两种类型:

点对点信道

广播信道

局域网属于数据链路层

局域网虽然是个网络。但我们并不把局域网放在网络层中讨论。这是因为在网络层要讨论的是多个网络互连的问题,是讨论分组怎么从一个网络,通过路由器,转发到另一个网络。

而在同一个局域网中,分组怎么从一台主机传送到另一台主机,但并不经过路由器转发。从整个互联网来看, 局域网仍属于数据链路层 的范围

三个重要问题

数据链路层传送的协议数据单元是 帧

封装成帧

封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。

首部和尾部的一个重要作用就是进行 帧定界 。

差错控制

在传输过程中可能会产生 比特差错 :1 可能会变成 0, 而 0 也可能变成 1。

可靠传输

接收方主机收到有误码的帧后,是不会接受该帧的,会将它丢弃

如果数据链路层向其上层提供的是不可靠服务,那么丢弃就丢弃了,不会再有更多措施

如果数据链路层向其上层提供的是可靠服务,那就还需要其他措施,来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本

以上三个问题都是使用 点对点信道的数据链路层 来举例的

如果使用广播信道的数据链路层除了包含上面三个问题外,还有一些问题要解决

如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其他各主机,那么主机B,D,E如何知道所收到的帧不是发送给她们的,主机C如何知道发送的帧是发送给自己的

可以用编址(地址)的来解决

将帧的目的地址添加在帧中一起传输

还有数据碰撞问题

随着技术的发展,交换技术的成熟,

在 有线(局域网)领域 使用 点对点链路 和 链路层交换机 的 交换式局域网 取代了 共享式局域网

在无线局域网中仍然使用的是共享信道技术

3.2、封装成帧

介绍

封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧

帧头和帧尾中包含有重要的控制信息

发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层,将构成帧的各比特,转换成电信号交给传输媒体,那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?

答:需要帧头和帧尾来做 帧定界

但比不是每一种数据链路层协议的帧都包含有帧定界标志,例如下面例子

前导码

前同步码:作用是使接收方的时钟同步

帧开始定界符:表明其后面紧跟着的就是MAC帧

另外以太网还规定了帧间间隔为96比特时间,因此,MAC帧不需要帧结束定界符

透明传输

透明

指某一个实际存在的事物看起来却好像不存在一样。

透明传输是指 数据链路层对上层交付的传输数据没有任何限制 ,好像数据链路层不存在一样

帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收

所以数据链路层应该对上层交付的数据有限制,其内容不能包含帧定界符的值

解决透明传输问题

解决方法 :面向字节的物理链路使用 字节填充 (byte stuffing) 或 字符填充 (character stuffing),面向比特的物理链路使用比特填充的方法实现透明传输

发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面 插入一个转义字符“ESC” (其十六进制编码是1B)。

接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。

如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

帧的数据部分长度

总结

3.3、差错检测

介绍

奇偶校验

循环冗余校验CRC(Cyclic Rendancy Check)

例题

总结

循环冗余校验 CRC 是一种检错方法,而帧校验序列 FCS 是添加在数据后面的冗余码

3.4、可靠传输

基本概念

下面是比特差错

其他传输差错

分组丢失

路由器输入队列快满了,主动丢弃收到的分组

分组失序

数据并未按照发送顺序依次到达接收端

分组重复

由于某些原因,有些分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成 分组重复 的传输差错

三种可靠协议

停止-等待协议SW

回退N帧协议GBN

选择重传协议SR

这三种可靠传输实现机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中

停止-等待协议

停止-等待协议可能遇到的四个问题

确认与否认

超时重传

确认丢失

既然数据分组需要编号,确认分组是否需要编号?

要。如下图所示

确认迟到

注意,图中最下面那个数据分组与之前序号为0的那个数据分组不是同一个数据分组

注意事项

停止-等待协议的信道利用率

假设收发双方之间是一条直通的信道

TD :是发送方发送数据分组所耗费的发送时延

RTT :是收发双方之间的往返时间

TA :是接收方发送确认分组所耗费的发送时延

TA一般都远小于TD,可以忽略,当RTT远大于TD时,信道利用率会非常低

像停止-等待协议这样通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ( A utomatic R epeat re Q uest),意思是重传的请求是自动进行,因为不需要接收方显式地请求,发送方重传某个发送的分组

回退N帧协议GBN

什么用回退N帧协议

在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组

回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数

无差错情况流程

发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去

他们经过互联网传输正确到达接收方,就是没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方

发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理

累计确认

累计确认

优点:

即使确认分组丢失,发送方也可能不必重传

减小接收方的开销

减小对网络资源的占用

缺点:

不能向发送方及时反映出接收方已经正确接收的数据分组信息

有差错情况

例如

在传输数据分组时,5号数据分组出现误码,接收方通过数据分组中的检错码发现了错误

于是丢弃该分组,而后续到达的这剩下四个分组与接收窗口的序号不匹配

接收同样也不能接收它们,讲它们丢弃,并对之前按序接收的最后一个数据分组进行确认,发送ACK4, 每丢弃一个数据分组,就发送一个ACK4

当收到重复的ACK4时,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传,具体收到几个重复确认就立刻重传,根据具体实现决定

如果收到这4个重复的确认并不会触发发送立刻重传,一段时间后。超时计时器超时,也会将发送窗口内以发送过的这些数据分组全部重传

若WT超过取值范围,例如WT=8,会出现什么情况?

习题

总结

回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议

在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议

由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高

选择重传协议SR

具体流程请看视频

习题

总结

3.5、点对点协议PPP

点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议

PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]

数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议

PPPoE 是为宽带上网的主机使用的链路层协议

帧格式

必须规定特殊的字符作为帧定界符

透明传输

必须保证数据传输的透明性

实现透明传输的方法

面向字节的异步链路:字节填充法(插入“转义字符”)

面向比特的同步链路:比特填充法(插入“比特0”)

差错检测

能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。

工作状态

当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。

PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。

这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机

分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。

通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。

可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

3.6、媒体接入控制(介质访问控制)——广播信道

媒体接入控制(介质访问控制)使用一对多的广播通信方式

Medium Access Control 翻译成媒体接入控制,有些翻译成介质访问控制

局域网的数据链路层

局域网最主要的 特点 是:

网络为一个单位所拥有;

地理范围和站点数目均有限。

局域网具有如下 主要优点 :

具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。

便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。

提高了系统的可靠性、可用性和残存性。

数据链路层的两个子层

为了使数据链路层能更好地适应多种局域网标准,IEEE 802 委员会就将局域网的数据链路层拆成 两个子层 :

逻辑链路控制 LLC (Logical Link Control)子层;

媒体接入控制 MAC (Medium Access Control)子层。

与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。 不管采用何种协议的局域网,对 LLC 子层来说都是透明的。

基本概念

为什么要媒体接入控制(介质访问控制)?

共享信道带来的问题

若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败。

随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术

静态划分信道

信道复用

频分复用FDM (Frequency Division Multiplexing)

将整个带宽分为多份,用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。

频分复用 的所有用户在同样的时间 占用不同的带宽资源 (请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。

2. RTT是什么

这要看是在哪种场合了。
RTT(Real-Time Tactics):即时战术游戏又称“实时战术”游戏。
RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
RTT(Render to Texture):渲染到纹理。普通的图形渲染流程中,最终结果是渲染到帧缓存中,最后显示到屏幕上,然后可以把纹理继续应用到场景绘制中。
RTT(RT-Thread):国产开源实时操作系统。
RTT(Radio Transmission Technology):无线传输技术。参考CDMA2000词条中的CDMA2000 1xRTT。
RTT(Radiation Tracking Transcer): 红外线跟踪系统, 辐射跟踪换能器。
RTT(Radio Teletype (-writer)): 无线电电传打字电报机。
RTT(Radioteletype Transmitter): 无线电电传打字电报发射机。

3. 计算机网络主要的两个性能指标是什么啊

速率、带宽、吞吐量、时延、时延带宽积、往返时间rtt、利用率
计算机发送出的信号都是数字形式的。比特(bit)是计算机中的数据量的单位,也是信息论中使用的信息量单位。英文字bit来源binary
digit(一个二进制数字),因此一个比特就是二进制数字中的一个1或0。网络技术中的速率指的是链接在计算机网络上的主机在数字信道上传送数据的速率,也称为数据率(data
rate)或者比特率(bit
rate)。速率的单位是b/s(比特每秒)或者bit/s,也可以写为bps,即bit
per
second。当数据率较高时,可以使用kb/s(k=10^3=千)、mb/s(m=10^6=兆)、gb/s(g=10^9=吉)或者tb/s(t=10^12=太)。现在一般常用更简单并不是很严格的记法来描述网络的速率,如100m以太网,而省略了b/s,意思为数据率为100mb/s的以太网。这里的数据率通常指额定速率。

4. 网络中的RTT是什么意思

RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。 RTT(Radio Transmission Technology): 无线传输技术。参考CDMA2000词条中的CDMA2000 1xRTT。 RTT(Radiation Tracking Transcer): 红外线跟踪系统, 辐射跟踪换能器。 RTT(Radio Teletype (-writer)): 无线电电传打字电报机。 RTT(Radioteletype Transmitter): 无线电电传打字电报发射机。 RTT(Real-Time Tactics):即时战术游戏又称“实时战术”游戏。它与即时战略(RTS:Real-Time Strategy)相类似,但缺少必要的战略要素,如资源采集、建造、发展等。一种常见的误解是认为“只要是即时进行的战争游戏就是即时战略游戏”。其实即时战略游戏的定义是很严格的,即时战略的“战略(Strategy)”的谋定过程必须是即时的,如果只有战斗是即时的,而采集、建造、发展等战略元素却以回合制进行,则该游戏不能归为即时战略游戏。如果该游戏完全没有上述战略元素,则只能归为即时战术(RTT:Real-Time Tactics)游戏。

5. [计算机网络之一] 网络基础知识

  协议就是计算机与计算机之间通过网络实现通信时事先达成的一种 “约定”。这种 “约定” 使那些由不同的厂商、不同的 CPU 以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能够实现通信。

  TCP/IP、AppleTalk(仅限苹果计算机使用)、SNA(IBM)、DECnet(DEC)、IPX/SPX(Novell)

  分组交换是指将大数据分割为一个个叫做包的较小单位进行传输的方法。

   ISO (International Organization for Stardards,国际标准化组织)制定了国际标准 OSI (Open System Interconnection,开放系统互联参考模型),但是没有得到普及,反而是随 Apanet 而生的 TCP/IP 协议在大学研究机构和计算机行业的推动下成为实际的业界标准。

  每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定服务。上下层之间进行交互所遵循的约定叫做 “接口” ,同一层之间交互所遵循的约定叫做 “协议”

  协议分层参考了计算机软件中的模块化开发。

  单播、广播、多播、任播。

  一个地址必须明确地表示一个主体对象,在同一个通信网络中不允许有两个相同地址的通信主体存在。

  有层次性的地址方便高效地找到通讯目标(eg: 快递地址国家、省市区)

  MAC地址有唯一性但没有层次性。

  以太网、无线、帧中继、ATM、FDDI、ISDN。

  NIC(Network Interface Card,网络接口卡),计算机必须有网卡才能接入网络。

  物理层面上延长网络的设备。将电缆传递过来的光电信号经过波形调整和放大之后传递给另一个电缆。

集线器 :提供多个端口的中继器。

  数据链路层面连接两个网络的设备。 不同网络可能采用了不同的数据链路,数据传输的速率可能完全不一样 ,网桥会缓存一个网段传输到另一个网段的数据帧,再重新生成信号作为全新的帧转发给另一个网段(这里我理解不同数据链路帧的格式不一样,所以网桥需要缓存数据并转换位另一个数据链路中的帧格式)。

  网桥的其他作用:

① 根据数据帧中的 FCS 检查数据帧是否已损坏,是则不转发;

② 自学习MAC设备来自哪些网络,并记录在地址转发表中(地址转发表记录硬件地址与网络的映射关系);

③ 过滤功能控制网络流量。

交换集线器 :每个端口都相当于一个网桥。

  网络层面上连接两个网络、并对分组报文进行转发的设备。

应用场景:广域网加速器、特殊应用访问加速、防火墙。

  将传输层到应用层的数据进行转发和翻译的设备。

代理服务器 :控制流量和出于安全考虑,客户端和服务端无需在网络上直接通信,而是从传输层到应用层对数据和访问进行各种控制和处理。

  研发基于分组交换技术的 ARPANET,取代容灾性差的中央集中式网络。

  单个网络无法解决所有通信问题,开始研究网络互连技术,出现了 TCP/IP,并首先被 BSD UNIX 采用,随之被广泛使用变得流程,所有使用 TCP/IP 协议的计算机都能利用互连网相互通信。

  围绕大型计算机中心建设计算机网络,即 NSFNET(国家科学基金网),它是一个三级网络,分为主干网、地区网和校园网。这种三级计算机网络覆盖了全美主要的大学和研究所,并成为互联网中的主要组成部分。

  NSFNET 逐渐被商用的互联网主干网替代,政府机构不再负责互联网的运营。用户接入互联网需要通过 ISP(Internet Service Provider:互联网服务提供商)。

   IXP(Internet eXchange Point)互联网交换点 的作用是允许两个网络直接相连并交换分组,而不需要再通过第三个网络(如上图中的主干 ISP)来转发分组。

  所有的互联网标准都是以 RFC 的形式在互联网上发表的,但并非所有的 RFC 文档都是互联网标准。

  制定互联网的正式标准要经过以下三个阶段

(1)互联网草案

(2)建议标准

(3)互联网标准

  由所有连接在互联网上的主机组成。这部分是用户直接使用的额,用来进行通信和资源共享。

  由大量网络和连接这些网络的路由器组成。这部分视为边缘部分提供服务的(提供连通性和交换)。

① 电路交换的起源

② 电路交换的特点

  在使用信道时,信道两端的两个用户始终占用端到端的通信资源,线路上真正传送数据的时间比例很小,传输效率很低。

③ 电路交换的步骤

   建立连接 (占用通信资源)→ 通话 (一直占用通信资源)→ 释放连接 (归还通信资源)

  电报通信采用基于存储转发原理的报文交换,整个报文被发送到相邻结点,存储下来,再转发到下一个结点。

① 分组交换的特点

  把一个完整的报文划分为一个个分组,每个分组传送到相邻结点后,存在下来查找转发表,在转发到下一个结点。

② 分组交换的优缺点

优点:每个分组可以经过不同的路由,使得有更好的可靠性,也能充分利用网络性能。

缺点:分组控制信息有一定开销,路由器存储转发时需要排队导致产生时延,无法确保通信时端到端所需的宽带。

① 广域网 WAN(Wide Area Network) 广域网的作用范围通常为几十到几千公里,是互联网的核心,其任务是通过长距离运送主机锁发送的数据。连接广域网各结点交换机的链路一般都是高速链路,具有较大的通信量。

② 城域网 MAN(Metropolotan Area Network) 城域网的作用范围一般是一个城市,作用距离约为 5 ~ 50 km。可以为一个或几个单位所用欧,也可以是一种公用设置,用来将多个局域网进行互联。目前很多城域网采用的是以太网技术。

③ 局域网 LAN(Local Area Network) 局域网一般用微型计算机或工作站通过高速通信链路相连(速率通常在 10 Mbit/s 以上),但地理上则局限在较小的范围(如 1 km 左右)。在局域网发展的初期,一个学校或工厂往往只拥有有个局域网,但现在局域网已非常广泛地使用,学校或企业大都拥有多个互连的局域网(这样的网络常称为 校园网 企业网 )。

④ 个人局域网 PAN(Personal Area Network) 个人局域网就是在个人工作的地方把属于个人使用的电子设备用无线技术连接起来的网络,因此也常称为 无线个人局域网 WPAN(Wireless PAN) ,其范围很小,大约在 10 m 左右。

① 公用网(pulic network) 电信公司出资建造的大型网络。

② 专用网(private network) 某个部门为满足本单位的特殊业务工作的需要而建造的网络。这种网络不向本单位以外的人提供服务,例如,军队、铁路、银行、电力等系统均有本系统的专用网。

   接入网(Access Network) ,又称为本地接入网或居民接入网。

  数据的传输速率,也称为数据率或比特率,单位为 bit/s(比特每秒)(或 b/s,有时也写为 bps,即 bit per second)。

  1 kbit/s = 1 × 10³ bit/s,1 Mbit/s = 1 × 10^6 bit/s,1 Gbit/s = 1 × 10^9 bit/s,1 Tbit/s = 1 × 10^12 bit/s

  吞吐量表示在单位时间内通过某个网络的实际的数据量,单位同速率带宽。

  时延是指数据从网络的一端传送到另一端所需的时间,网络时延由几个部分组成:

               网络总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延

[误区] 光纤的传播速率实际上比铜线要慢,但是光纤的带宽却比普通的双绞线要快,这是因为光信号的抗干扰性强,并且可以通过波分复用的信道复用技术,达到一路光纤传输多路信号的效果。

  时延带宽积表示信道中可以容纳多少比特。

  在计算机网络中,往返时间 RTT(Round-Trip Time)是一个重要的性能指标,因为在许多情况下,互联网上的信息不仅仅单方向传输而是双向交互的。

  使用卫星通信时,发送时延很短,主要消耗在来回传播时延上,即往返时间相对较长。

  利用率有信道利用率和网络利用率两种。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率为零。网络利用率则是全网络的信道利用率的加权平均值。

  D0 表示网络空闲时的时延,D 表示网络当前的时延,U 表示利用率,则

  U = 1 - D0/D,变形一下,有

  信道利用率不是越高越好,因为信道利用率增大时,网络时延也会增加,因为排队时延增大。所以当 U 趋于 1 时,D 会趋于无限大,所以 信道或网络的利用率过高会产生非常大的时延

  费用、质量、标准化、可靠性、可扩展性和可升级性、易于管理和维护。

① 语法,即数据与控制信息的结构或格式;

② 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应;

③ 同步,即时间实现顺序的详细说明。

① 各层独立;

② 灵活性好;

③ 结构上可分割开;

④ 易于实现和维护;

⑤ 能促进标准化工作。

   计算机网络的各层及其协议的集合就是网络的体系结构。

实体 :表示任何可发送或接收信息的硬件或软件进程。

协议 :协议是水平的,控制两个对等实体进行通信的规则的集合。

服务 :服务是垂直的,下层通过接口向上层提供服务。

服务访问点 :SAP(Service Access Point),同一系统中相邻两层的实体进行交互的地方。


















6. 计算机网络的性能指标有哪些简述其概念。

计算机网络的性能一般指它的几个重要的性能指标。但除了这些重要的性能指标外,还有一些非性能特征也对计算机网络的性能有很大的影响。
性能指标从不同的方面来度量计算机网络的性能。下面总结下常用的七个性能指标。
1、速率
计算机发送出的信号都是数字形式的。比特(bit)是计算机中的数据量的单位,也是信息论中使用的信息量单位。英文字bit来源binary digit(一个二进制数字),因此一个比特就是二进制数字中的一个1或0。网络技术中的速率指的是链接在计算机网络上的主机在数字信道上传送数据的速率,也称为数据率(data rate)或者比特率(bit rate)。速率的单位是b/s(比特每秒)或者bit/s,也可以写为bps,即bit per second。当数据率较高时,可以使用kb/s(k=10^3=千)、Mb/s(M=10^6=兆)、Gb/s(G=10^9=吉)或者Tb/s(T=10^12=太)。现在一般常用更简单并不是很严格的记法来描述网络的速率,如100M以太网,而省略了b/s,意思为数据率为100Mb/s的以太网。这里的数据率通常指额定速率。
2、带宽
带宽本上包含两种含义:
(1)带宽本来指某个信号具有的频带宽度。信号的带宽是指该信号所包含的各种不同频率成分所占据的频率范围。例如,在传统的通信线路上传送的电话信号的标准带宽是3.1kHz(从300Hz到3.1kHz,即声音的主要成分的频率范围)。这种意义的带宽的单位是赫兹。在以前的通信的主干线路传送的是模拟信号(即连续变化的信号)。因此,表示通信线路允许通过的信号频带范围即为线路的带宽。
(2)在计算机网络中,贷款用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络的某一点到另一点所能通过的“最高数据量“。这种意义的带宽的单位是”比特每秒“,即为b/s。子这种单位的前面也通常加上千(k)、兆(M)、吉(G)、太(T)这样的倍数。
3、吞吐量
吞吐量(throughput)表示在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量进场用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。显然,吞吐量受到网络的带宽或网络的额定速率的限制。例如,对于一个100Mb/s的以太网,其额定速率为100Mb/s,那么这个数值也是该以太网的吞吐量的绝对上限值。因此,对100Mb/s的以太网,其典型的吞吐量可能只有70Mb/s。
4、时延
时延指数据(一个报文或者分组)从网络(或链路)的一端传送到另一端所需的时间。时延是一个非常重要的性能指标,也可以称为延迟或者迟延。
网络中的时延由以下几部分组成:
(1)发送时延 发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需时间。发送时延也可以称为传输时延。发送的时延=数据帧长度(b)/发送速率(b/s)。
对于一定的网络,发送时延并非固定不变,而是与发送的帧长成正比,与发送数率成反比。
(2)传播时延 传播时延是电磁波在信道中传播一定的距离需要花费的时间。
传播时延=信道长度(m)/电磁波在信道上的传播数率(m/s)
电磁波在自由空间的传播速率是光速,即3.0×10^5 km/s。电磁波在网络传输媒体中的传播速率比在自由空间低一些,在铜线电缆中的传播速率约为2.3×10^5 km/s,在光纤中的传播速率约为2.0×10^5 km/s。
(3)处理时延 主机或路由器在收到分组时需要花费一定的时间处理,分析分组首部、从分组中提取数据部分、进行差错检验、查到适当路由等,这就产生了处理时延。
(4)排队时延 分组在经过网络传输时,要经过许多的路由器。但分组在进入路由器后要先在输入队列中排队等待处理。在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队延时。排队延时通常取决于网络当时的通信量。
这样数据在网络中尽力的总延时就是
总延时 = 发送延时 + 传播延时 + 处理延时 + 排队延时
对于高速网络链路,提高的仅仅是数据的发送数率而不是比特在链路上的传播速率。荷载信息的电磁波在通信线路上的传播速率与数据的发送速率并无关系。提高的数据的发送速率只是减小了数据的发送时延。
5、时延带宽积
把以上两个网络性能的两个度量,传播时延和带宽相乘,就等到另外一个度量:传播时延带宽积,即
时延带宽积 = 传播时延 × 带宽
例如,传播时延为20ms,带宽为10Mb/s,则时延带宽积 = 20 × 10 × 10^3 /1000 = 2 × 10^5 bit。这就表示,若发送端连续发送数据,则在发送的第一个比特即将达到终点时,发送端就已经发送了20万个比特,而这20万个bit都在链路上向前移动。
6、往返时间RTT
在计算机网络中,往返时间RTT也是一个重要的性能指标,表示从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时间。对于上面提到的例子,往返时间RTT就是40ms,而往返时间和带宽的乘积是4×10^5(bit)。
显然,往返时间与所发送的分组长度有关。发送很长的数据块的往返时间,应当比发送很短的数据块往返时间要多些。
往返时间带宽积的意义就是当发送方连续发送数据时,即能够及时收到对方的确认,但已经将许多比特发送到链路上了。对于上述例子,假定数据的接收方及时发现了差错,并告知发送发,使发送方立即停止发送,但也已经发送了40万个比特了。
7、利用率
利用率有信道利用率和网络利用率。信道利用率指出某信道有百分之几的时间是被利用的。网络利用率则是全网络的信道利用率的加权平均值。信道利用率并非越高越好。这是因为,根据排队的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。
如果D0表示网络空闲时的时延,D表示当前网络时延,可以用简单公式(D=D0/(1-U)来表示D,D0和利用率U之间的关系。U数值在0和1之间。当网络的利用率接近最大值1时,网络的时延就趋近于无穷大。

7. 计算机网络按传输介质可分为哪三类

计算机网络按传输介质可分为有线网、光纤网、无线网。

1.有线网:指采用双绞线来连接的计算机网络。

2.光纤网:采用光导纤维作为传输介质。

3.无线网:采用一种电磁波作为载体来实现数据传输的网络类型。

按数据交换方式划分分为电路交换网、报文交换网、分组交换网 。

按通信方式划分为广播式传输网络、点到点式传输网络。

根据网络的覆盖范围与规模分为局域网、城域网、广域网。

(7)计算机网络里的rtt是什么扩展阅读

计算机网络的性能指标

(1)速率

网络技术中的速率指的是连接在计算机网络上的主机在数字信道上传送数据的速率,它也称为数据率(data rate)或比特率(bit rate)。速率是计算机网络中最重要的一个性能指标。速率的单位是bit/s(比特每秒)(即bit per second)。

(2)带宽

信号的带宽是指该信号所包含的各种不同频率成分所占据的频率范围。

(3)吞吐量

吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。

(4)时延

时延是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。

(5)时延带宽积

把以上讨论的网络性能的两个度量—传播时延和带宽相乘,就得到另一个很有用的度量:传播时延带宽积,即时延带宽积=传播时延×带宽。

(6)往返时间(RTT)

在计算机网络中,往返时间也是一个重要的性能指标,它表示从发送方发送数据开始,到发送方收到来自接收方的确认(接受方收到数据后便立即发送确认)总共经历的时间。

(7)利用率

利用率有信道利用率和网络利用率两种。信道利用率指某信道有百分之几的时间是被利用的(有数据通过),完全空闲的信道的利用率是零。网络利用率是全网络的信道利用率的加权平均值。

8. 计算机网络(5)| 运输层

从通信和处理信息的角度看,运输层是向它上面的应用层提供通信服务的,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两台主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

运输层的两个主要协议 TCP/IP 都是互联网的正式标准,即:
(1)用户数据报协议UDP
(2)传输控制协议TCP

TCP则是面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或者多播服务。由于TCP要提供可靠的面向连接的运输服务,因此需要增加很多的开销。

TCP/IP的运输层用一个16位端口号来标志一个端口。端口号只有本地意义。它是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。

运输层的端口号分为以下两类:
(1)服务器端使用的端口号: 它主要分为系统端口号0~1023和登记端口号1024~49151。

(2)客户端使用的端口号: 49152~65535,这类端口号仅在客户端进程运行时才动态选择。当服务器收到客户端进程的报文时,就知道客户端进程的端口号。因而可以把数据发送给客户进程。

用户数据报协议相比于IP的数据报服务就是只增加了复用、分用和差错检测功能。UDP的主要特点是:
(1)UDP是无连接的, 发送数据之前不需要建立连接,因此减少开销和发送数据之前的时延。
(2)UDP使用尽最大努力交付, 即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
(3)UDP是面向报文的。 发送方的UDP对应用交下来的报文,添加首部后就向下交付给IP层。不对报文做任何处理,因此当报文过长时,IP层可能需要进行分片处理。
(4)UDP没有拥塞控制, 网络出现的拥塞不会使源主机的发送速率减低。
(5)UDP支持一对一、一对多、多对一和多对多的交互通信。
(6)UDP的首部开销小, 只有8个字节。

UDP有两个字段:数据字段和首部字段。先介绍首部字段,它是由4个字段组成的,每个字段只有2个字节,总共有8个字节。各个字段的意义如下:
(1)源端口: 源端口号。在需要对方回信时选用。不需要时可用全0。
(2)目的端口: 目的端口号。在这终点交付报文时必须使用。
(3)长度: UDP用户数据报的长度,其最小值是8(只有首部)。
(4)检验和: 检测UDP用户数据报在传输中是否有错,有错则丢弃。

当在传送用户数据报时,如果接收方UDP发现收到的报文中目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。

TCP的主要特点如下:
(1)TCP是面向连接的运输层协议。 应用程序在使用TCP协议之前,必须先建立TCP连接。传送数据完毕后,必须释放TCP连接。
(2)每一条TCP连接只能有两个端点。 每一条TCP连接只能是点对点的。
(3)TCP提供可靠交付的服务。 通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
(4)TCP提供全双工通信。 TCP允许通信双方的应用进程在任何时候都能发送数据。
(5)面向字节流。 TCP中的流指的是流入到进程或进程流出的字节序列。虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成一连串的无结构的字节流。TCP不保证发送方发送的数据块和接收方接收的数据块一致,但保证程序接收到的字节流和程序发送的字节流一致。

TCP连接的端点叫做套接字或者插口。套接字是指将端口号拼接到IP地址之后,即:

每一条TCP连接唯一的被通信两端的两个端点所确定。即:

如图所示,A发送分组M1,发送完毕就暂停发送,等待B的确认,B收到了M1就向A发死你确认。A在收到了对M1的确认之后,就再发送下一个分组M2,以此类推。

如图所示,当B接收M1时检测出了差错,就丢弃M1,其他什么也不做。而A只要超过了一段时间没有收到确认,就会认为刚才发送的分组丢失了,因而重传前面发送过的分组,这就叫做超时重传,而实现超时重传则需要A为每一个已发送的分组都设置一个超时计时器。
需要注意以下三点:
(1)A在发送完一个分组后,必须暂时保留已发送的分组的副本。
(2)分组和确认分组必须编号,这样才能明确哪一个发出的分组收到了确认。
(3)超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长。

如图所示,B所发送的对M1确认丢失了,A在设定的超时重传时间内没有收到确认,所以无法知道自己发送的分组是怎样出错的,所以会重传M1,而当B又收到了重传的分组M1,这时应该采取两个行动:
(1)丢弃这个重复分组M1。
(2)向A发送确认。

还有一种情况就是在传输过程中没有出现差错,但B对分组M1的确认迟到了,而A会收到重复的确认,A收下后就会丢弃,B仍然会收到重复的M1,并且同样要丢弃重复的M1,并且重传确认分组。

停止等待协议的优点是简单,缺点则是信道的利用率太低。我们用TD表示A发送分组需要的时间,TA表示B发送确认分组需要的时间,RTT为往返时间,则:

为了提高传输的效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输的方式。即不必每发完一个分组就停下来等待对方的确认,这样就可以使信道上一直有数据在不间断的传送。

如图表示的是发送方维持的发送窗口,它指的是位于发送窗口内的5个分组都可以连续发送出去而不需要等待对方的确认。同时连续ARP协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

对于接收方采用的则是累计确认的方式,即接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已正确收到了。这种方式的优点是:容易实现,即使确认丢失也不必重传(意思是发送方不必重传)。但缺点是不能向发送方反映出接收方已经正确收到的所有分组信息。

TCP虽然是面向字节流的,但传送TCP的数据单元却是报文段。一个TCP报文段可以分为首部和数据两部分。

为了后面讲述的方便,我们假设数据传输只在一个方向进行,即A发送数据,B给出确认。

TCP的滑动窗口是以字节为单位的。如图所示,现在假定A收到了B发来的确认报文段,其中的窗口是20字节,而确认号是31,根据这2个数据,A就构造出自己的发送窗口。

发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。发送窗口后面的部分表示已发送且已经收到了确认。而发送窗口前沿的部分表示不允许发送的。

现在假定A发送了序号为31~41的数据。这时发送窗口位置并未改变但是发送窗口内靠后面有11个字节表示已发送但是未收到确认。而发送窗口内靠前面的9个字节时允许发送但未发送的。如图所示:

而对于B,它的接收窗口大小是20,在接收窗口外面到30号位置的数据是接收并确认的,因此可以丢弃。在下图中,B收到了32和33的数据,但它们不是按序到达的,因为并没有收到31号数据。B只能对按序达收到的数据中的最高序号给出确认,因此B发送的确认报文字段的确认号依然是31号。

现在假定B收到了序号为31的数据,并把31~33的数据交付主机,然后B删除这些数据。接着把窗口向前移动3个序号,同时给a发送确认,其中的窗口值仍为20,但确认号变为34。表明B已经收到序号33为止的数据。

因为TCP的发送方在规定的时间内没有收到确认就要重传已经发送的报文段,但是重传时间的选择却TCP最复杂的问题之一。为此TCP采用了一种自适应算法,它记录了一个报文段发出的时间以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT,同时TCP保留了RTT的加权平均往返时间RTTs。而RTTD是RTT的偏差加权平均值,它与RTTs和新的RTT样本之差有关。

超时重传时间的算法如下:
第一次测量时,加权平均往返时间取往返时间RTT,以后每次测量到一个新的RTT,按以下公式计算:

第一次测量时,RTT偏差的加权平均等于RTT的一半,以后的测里中,按以下公式计算:

综上超时重传时间RTO计算如下:

若收到的报文无差错,只是未按序号,使用选择确认SACK可是让发送方发送那些未收到的数据,而不重复发送已经收到的那些数据。如果要使用选择确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,并且双方必须都事先商量好。

流量控制就是指让发送方的发送速率不要太快,要让接收方来得及接收。而利用滑动窗口机制就可以很方便的在TCP连接上实现对发送方的流量控制。

如上图所示,接收方B进行了三次流量控制。第一次把窗口减小到rwnd=300,第二次又减到rwnd=100,最后是rwnd=0,即不允许发送方再发送数据了。

但是我们应该考虑一种情况,就是当接收方B的存储已满时,会向发送方发送零窗口的报文段,接着B的存储又有了一些空间,B再向A发送一个不为零的窗口值,但这个报文丢失了,结果就是双方一直等待下去。所以为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,当计时器到期后,就发送一个探测段文段,而对方就在确认这个探测段时给出了现在的窗口值。如果窗口仍然是0,那么收到这个报文段的一方就重新设置持续计时器,反之则死锁的僵局就可以打破了。

应用程序把数据传送到TCP的发送缓存后,TCP在何时发送这些数据?,在TCP的实现中广泛使用了Nagle算法。具体算法如下:
(1)若发送应用进程要把数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发出去,把后面到达的数据字节都缓存起来。
(2)方发送方收到对第一个数据字节的确认后,再把发送缓存中的所有数据组装成一个报文发送出去,同时继续对后续到来的数据进行缓存。
(3)只有收到对前一个报文段的确认后才继续发送下一个报文段。

当数据到达快而网络速度慢时,这种方法可以明显减少网络带宽。Nagle还规定:当到达的数据达到窗口的一半或最大报文长度时就立即发送一个报文。

但还还需要考虑一个叫做糊涂综合征的问题,具体内容是若接收方的缓存已满,应用进程每次只从缓存中取1个字节,然后向发送方确认,并把窗口设为1个字节(缓存只空了1个字节的空间),接着发送方发来1个字节,接收方发回确认,仍然将窗口设为1,这样进行下去,网络的利用率很低。

为了解决这个问题,可以让接收方等待一段时间,使得或者缓存已有足够的空间或者等到接收缓存已有一半的空闲空间。此时,接收方就发出确认报文,并向发送方通知当前窗口的大小。

拥塞 是指在某一段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏的情况。而所谓的 拥塞控制 就是防止过多的数据注入到网络当中,这样可以使网络中的路由器或者链路不致过载,它是一个全局性的过程,涉及到所有的主机和路由器,而流量控制往往是指点对点通信量的控制。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。

TCP进行拥塞控制的算法有4种:慢开始、拥塞避免、快重传和快恢复。下面在讨论这些算法时我们假定:
(1)数据是单方向传送的,对方只传送确认报文。
(2)接收方总是有足够大的缓存空间。

发送方维持一个拥塞窗口的状态变量,其大小取决于拥塞程度,并且动态变化。发送方让自己的发送窗口小于拥塞窗口(如果考虑接收方的接收能力的话,发送窗口可能小于拥塞窗口)。发送方控制拥塞窗口的原则是:只要网络没有拥塞,拥塞窗口就再增大一点,以便把更多的分组发送出去,只要出现拥塞,就减小拥塞窗口,以减少注入到网络的分组数。

下面会从“慢开始算法”讲起来讨论拥塞窗口的大小如何变化的。

慢开始的算法思路是:当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入到网络中,就有可能引起网络拥塞。因此会采用由小逐渐增大发送窗口。即在通常开始发送报文时,先将拥塞窗口cwnd的值设为一个最大报文段MSS的数值,而在每收到一个新的报文段确认后,把拥塞窗口增加至多一个MSS的数值。

如上图所示,开始时cwnd=1,发送方发送一个M1,接收方收到M1发送确认,发送方收到一个确认后将cwnd加1,此时cwnd=2,因此发送方发送M2和M3两个报文段,接收方收到后返回两个确认,因此cwnd增加两次,此时cwnd=4,接着发送方发送M4~M7四个报文段。依次类推。因此使用慢开始算法后,每经过一个传输轮次,拥塞窗口就加倍。

但是为了防止拥塞窗口cwnd增加过大导致网络拥塞,需要设置一个慢开始门限ssthresh,慢开始门限用法如下:
当cwnd<ssthresh时,使用上述的慢开始算法。
当cwnd>ssthresh时,停止使用慢开始算法,使用拥塞避免算法。
当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。
这里的拥塞避免算法是指让拥塞窗口缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。

需要注意的是无论在慢开始阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(根据是没有按时收到确认),立即把慢开始门限ssthresh设为出现拥塞时的发送窗口的一半。然后发送窗口cwnd重新设为1,执行慢开始算法。目的是迅速减少主机发送到网络分组的分组数。

快重传算法要求接收方每收到一个失序的报文段后就立即发送重复确认,如下图接收了M1和M2后,又接收到一个M4,M4属于失序报文,则发送对M2的重复确认。发送方只要连续收到三次确认重复就立即重传对方未收到的报文段M3。

与快重传算法配合的还有快恢复算法,过程如下:
(1)当发送方连续收到三个重复确认时,就把慢开始门限ssthresh减半,这是为了防止网络拥塞,接着并不执行慢开始算法。
(2)由于上图这种情况很可能不是因为网络拥塞引起的,因此这里不执行慢开始算法(即不把拥塞窗口cwnd设为1,这样速度太慢),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法。

TCP的运输连接有是三个阶段:连接建立、数据传送和连接释放。在TCP的连接过程中要解决以下三个问题:
(1)要使每一方能够确知对方的存在。
(2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量)。
(3)能够对运输实体资源进行分配。

TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换3个TCP报文段。如图是三报文握手建立的连接过程:

A最后还要发送一次确认的原因是为了防止已经失效的连接请求报文段突然又传送到了B,因而产生错误。试想一种情况:如果只有第一次和第二次握手,第二次B向A发送的确认丢失了,此时B进入了连接建立状态,A没有收到确认,过一段时间后会再次向B发送连接请求,B收到后又会再次建立连接,白白浪费B的资源。

A在TIME-WAIT状态等待2MSL(MSL,最长报文段寿命),主要是因为以下两点考虑:首先是为了保证A发送的最后一个ACK报文段能够到达B,因为这个ACK报文段可能丢失,此时B会重传连接释放报文,如果A已经关闭,则无法收到这个报文。其次,当A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续时间内产生的所有报文段都从网络中消失。这样,下一个新连接中不会出现这种旧的连接请求报文段。

在图中每一个方框即TCP可能具有的状态。每个方框中的大写英文字符串时TCP标准所使用的的TCP连接状态名。状态之间的箭头表示可能发生的状态变迁。箭头旁边的字表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作,在图中粗实线箭头表示对客户进程的正常变迁,粗虚线箭头表示对服务器进程的正常变迁,细线箭头表示异常变迁。

9. 网络编程(五)TCP详解

考虑最简单的情况:两台主机之间的通信。这个时候只需要一条网线把两者连起来,规定好彼此的硬件接口,如都用 USB、电压 10v、频率 2.4GHz 等, 这一层就是物理层,这些规定就是物理层协议

我们当然不满足于只有两台电脑连接,因此我们可以使用交换机把多个电脑连接起来,如下图:

这样连接起来的网络,称为局域网,也可以称为以太网(以太网是局域网的一种)。在这个网络中,我们需要标识每个机器,这样才可以指定要和哪个机器通信。这个标识就是硬件地址 MAC。

硬件地址随机器的生产就被确定,永久性唯一。在局域网中,我们需要和另外的机器通信时,只需要知道他的硬件地址,交换机就会把我们的消息发送到对应的机器。

这里我们可以不管底层的网线接口如何发送,把物理层抽离,在他之上创建一个新的层次,这就是 数据链路层

我们依然不满足于局域网的规模,需要把所有的局域网联系起来,这个时候就需要用到路由器来连接两个局域网:

但是如果我们还是使用硬件地址来作为通信对象的唯一标识,那么当网络规模越来越大,需要记住所有机器的硬件地址是不现实的;

同时,一个网络对象可能会频繁更换设备,这个时候硬件地址表维护起来更加复杂。这里使用了一个新的地址来标记一个网络对象: IP 地址

通过一个简单的寄信例子来理解 IP 地址。

我住在北京市,我朋友 A 住在上海市,我要给朋友 A 写信:

因此,这里 IP 地址就是一个网络接入地址(朋友 A 的住址),我只需要知道目标 IP 地址,路由器就可以把消息给我带到。 在局域网中,就可以动态维护一个 MAC 地址与 IP 地址的映射关系,根据目的 IP 地址就可以寻找到机器的 MAC 地址进行发送

这样我们不需管理底层如何去选择机器,我们只需要知道 IP 地址,就可以和我们的目标进行通信。这一层就是 网络层 。网络层的核心作用就是 提供主机之间的逻辑通信

这样,在网络中的所有主机,在逻辑上都连接起来了,上层只需要提供目标 IP 地址和数据,网络层就可以把消息发送到对应的主机。

一个主机有多个进程,进程之间进行不同的网络通信,如边和朋友开黑边和女朋友聊微信。我的手机同时和两个不同机器进行通信。

那么当我的手机收到数据时,如何区分是微信的数据,还是王者的数据?那么就必须在网络层之上再添加一层: 运输层

运输层通过 socket(套接字),将网络信息进行进一步的拆分,不同的应用进程可以独立进行网络请求,互不干扰。

这就是运输层的最本质特点: 提供进程之间的逻辑通信 。这里的进程可以是主机之间,也可以是同个主机,所以在 android 中,socket 通信也是进程通信的一种方式。

现在不同的机器上的应用进程之间可以独立通信了,那么我们就可以在计算机网络上开发出形形式式的应用:如 web 网页的 http,文件传输 ftp 等等。这一层称为 应用层

应用层还可以进一步拆分出表示层、会话层,但他们的本质特点都没有改变: 完成具体的业务需求 。和下面的四层相比,他们并不是必须的,可以归属到应用层中。

最后对计网分层进行小结:

这里需要注意的是,分层并不是在物理上的分层,而是逻辑上的分层。通过对底层逻辑的封装,使得上层的开发可以直接依赖底层的功能而无需理会具体的实现,简便了开发。

这种分层的思路,也就是责任链设计模式,通过层层封装,把不同的职责独立起来,更加方便开发、维护等等。

TCP 并不是把应用层传输过来的数据直接加上首部然后发送给目标,而是把数据看成一个字节 流,给他们标上序号之后分部分发送。这就是 TCP 的 面向字节流 特性:

面向字节流的好处是无需一次存储过大的数据占用太多内存,坏处是无法知道这些字节代表的意义,例如应用层发送一个音频文件和一个文本文件,对于 TCP 来说就是一串字节流,没有意义可言,这会导致粘包以及拆包问题,后面讲。

前面讲到,TCP 是可靠传输协议,也就是,一个数据交给他,他肯定可以完整无误地发送到目标地址,除非网络炸了。他实现的网络模型如下:

对于应用层来说,他就是一个可靠传输的底层支持服务;而运输层底层采用了网络层的不可靠传输。虽然在网络层甚至数据链路层就可以使用协议来保证数据传输的可靠性,但这样网络的设计会更加复杂、效率会随之降低。把数据传输的可靠性保证放在运输层,会更加合适。

可靠传输原理的重点总结一下有: 滑动窗口、超时重传、累积确认、选择确认、连续 ARQ

停止等待协议

要实现可靠传输,最简便的方法就是:我发送一个数据包给你,然后你跟我回复收到,我继续发送下一个数据包。传输模型如下:

这种“一来一去”的方法来保证传输可靠就是 停止等待协议 (stop-and-wait)。不知道还记不记得前面 TCP 首部有一个 ack 字段,当他设置为 1 的时候,表示这个报文是一个确认收到报文。

然后再来考虑另一种情况:丢包。网络环境不可靠,导致每一次发送的数据包可能会丢失,如果机器 A 发送了数据包丢失了,那么机器 B 永远接收不到数据,机器 A 永远在等待。

解决这个问题的方法是: 超时重传 。当机器 A 发出一个数据包时便开始计时,时间到还没收到确认回复,就可以认为是发生了丢包,便再次发送,也就是重传。

但重传会导致另一种问题:如果原先的数据包并没有丢失,只是在网络中待的时间比较久,这个时候机器 B 会受到两个数据包,那么机器 B 是如何辨别这两个数据包是属于同一份数据还是不同的数据?

这就需要前面讲过的方法: 给数据字节进行编号 。这样接收方就可以根据数据的字节编号,得出这些数据是接下来的数据,还是重传的数据。

在 TCP 首部有两个字段:序号和确认号,他们表示发送方数据第一个字节的编号,和接收方期待的下一份数据的第一个字节的编号。

停止等待协议的优点是简单,但缺点是 信道利用率 太低。

假定AB之间有一条直通的信道来传送分组

这里的TD是A发送分组所需要的时间(显然TD = 分组长度 / 数据速率)再假定TA是B发送确认分组所需要的时间(A和B处理分组的时间都忽略不计)那么A在经过TD+RTT+TA时间后才能发送下一个分组,这里的RTT是往返时间,因为只有TD是采用来传输有用的数据(这个数据包括了分组首部,如果可以知道传输更精确的数据的时间,可以计算的更精确),所有信道利用率为

为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用 流水线传输 :就是发送方可以 连续的发送多个分组 ,不必每发完一个分组就停下来等待对方的确认。这样可使信道上一直有数据不间断地在传送。显然这种传输方式可以获得很高的信道利用率

停止等待协议已经可以满足可靠传输了,但有一个致命缺点: 效率太低 。发送方发送一个数据包之后便进入等待,这个期间并没有干任何事,浪费了资源。解决的方法是: 连续发送数据包

也就是下面介绍的 连续ARQ协议 滑动窗口协议

连续 ARQ 协议

模型如下:

和停止等待最大的不同就是,他会源源不断地发送,接收方源源不断收到数据之后,逐一进行确认回复。这样便极大地提高了效率。但同样,带来了一些额外的问题:

发送是否可以无限发送直到把缓冲区所有数据发送完?不可以。因为需要考虑接收方缓冲区以及读取数据的能力。如果发送太快导致接收方无法接受,那么只是会频繁进行重传,浪费了网络资源。所以发送方发送数据的范围,需要考虑到接收方缓冲区的情况。这就是 TCP 的 流量控制

解决方法是: 滑动窗口 。基本模型如下:

在 TCP 的首部有一个窗口大小字段,他表示接收方的剩余缓冲区大小,让发送方可以调整自己的发送窗口大小。通过滑动窗口,就可以实现 TCP 的流量控制,不至于发送太快,导致太多的数据丢失。

连续 ARQ 带来的第二个问题是:网络中充斥着和发送数据包一样数据量的确认回复报文,因为每一个发送数据包,必须得有一个确认回复。提高网络效率的方法是: 累积确认

接收方不需要逐个进行回复,而是累积到一定量的数据包之后,告诉发送方,在此数据包之前的数据全都收到。例如,收到 1234,接收方只需要告诉发送方我收到 4 了,那么发送方就知道 1234 都收到了。

第三个问题是:如何处理丢包情况。在停止等待协议中很简单,直接一个超时重传就解决了。但,连续 ARQ 中不太一样。

例如:接收方收到了 123 567,六个字节,编号为 4 的字节丢失了。按照累积确认的思路,只能发送 3 的确认回复,567 都必须丢掉,因为发送方会进行重传。这就是 GBN(go-back-n) 思路。

但是我们会发现,只需要重传 4 即可,这样不是很浪费资源,所以就有了: 选择确认 SACK 。在 TCP 报文的选项字段,可以设置已经收到的报文段,每一个报文段需要两个边界来进行确定。这样发送方,就可以根据这个选项字段只重传丢失的数据了。

第四个问题是:拥塞控制的问题
也是通过窗口的大小来控制的,但是检测网络满不满是个挺难的事情,所以 TCP 发送包经常被比喻成往谁管理灌水,所以拥塞控制就是在不堵塞,不丢包的情况下尽可能的发挥带宽。

水管有粗细,网络有带宽,即每秒钟能发送多少数据;水管有长度,端到端有时延。理想状态下,水管里面的水 = 水管粗细 * 水管长度。对于网络上,通道的容量 = 带宽 * 往返时延。

如果我们设置发送窗口,使得发送但未确认的包为通道的容量,就能撑满整个管道。

如图所示,假设往返时间为 8 秒,去 4 秒,回 4 秒,每秒发送一个包,已经过去了 8 秒,则 8 个包都发出去了,其中前四个已经到达接收端,但是 ACK 还没返回,不能算发送成功,5-8 后四个包还在路上,还没被接收,这个时候,管道正好撑满,在发送端,已发送未确认的 8 个包,正好等于带宽,也即每秒发送一个包,也即每秒发送一个包,乘以来回时间 8 秒。

如果在这个基础上调大窗口,使得单位时间可以发送更多的包,那么会出现接收端处理不过来,多出来的包会被丢弃,这个时候,我们可以增加一个缓存,但是缓存里面的包 4 秒内肯定达不到接收端课,它的缺点会增加时延,如果时延达到一定程度就会超时重传

TCP 拥塞控制主要来避免两种现象,包丢失和超时重传,一旦出现了这些现象说明发送的太快了,要慢一点。

具体的方法就是发送端慢启动,比如倒水,刚开始倒的很慢,渐渐变快。然后设置一个阈值,当超过这个值的时候就要慢下来

慢下来还是在增长,这时候就可能水满则溢,出现拥塞,需要降低倒水的速度,等水慢慢渗下去。

拥塞的一种表现是丢包,需要超时重传,这个时候,采用快速重传算法,将当前速度变为一半。所以速度还是在比较高的值,也没有一夜回到解放前。

到这里关于 TCP 的可靠传输原理就已经介绍得差不多。最后进行一个小结:

当然,这只是可靠传输的冰山一角,感兴趣可以再深入去研究

10. RTT 往返时延

       RTT(Round-Trip Time),往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

       往返延时(RTT)由三个部分决定:即链路的传播时间、末端系统的处理时间以及路由器的缓存中的排队和处理时间。其中,前面两个部分的值作为一个TCP连接相对固定 ,路由器的缓存中的排队和处理时间会随着整个网络拥塞程度的变化而变化。所以RTT的变化在一定程度上反映了网络拥塞程度的变化