1.概述
计算机网络是一些互相连接的、自治的计算机的集合
1.1 因特网的组成
边缘部分: 由所有连接在因特网上的主机组成
-
计算机之间通信:
主机 A 的某个进程和主机 B 上的另一个进程进行通信 -
端系统:
处在因特网边缘的部分就是连接在因特网上的所有的主机 -
工作方式:
在网络边缘的端系统中运行的程序之间的工作方式通常可划分为两大类 客户服务器方式(C/S 方式) 客户软件特点: 被用户调用后运行,在通信时主动向远地服务器发起通信 可与多个服务器进行通信 不需要特殊的硬件和很复杂的操作系统 服务器软件特点: 系统启动后即自动调用并一直不断地运行着,被动地等待并接受来自各地的客户的通信请求 需要强大的硬件和高级的操作系统支持 对等方式(P2P 方式) 特点: 通常没有固定的服务请求者和服务提供者,分布在网络中的应用进程是对等的 从本质上看仍然是使用客户服务器方式,只是对等连接中的每一个主机既是客户又同时是服务器
核心部分: 由大量网络和连接这些网络的路由器组成
- 网络核心部分是因特网中最复杂的部分
- 网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信
- 在网络核心部分起特殊作用的是路由器
电路交换的三个阶段:
- 建立连接
- 通信
- 释放连接
三种交换方式
- 对比
- 分组交换
步骤:
- 在发送端,先把较长的报文划分成较短的、固定长度的数据段
- 分组交换网以“分组”作为数据传输单元,依次把各分组发送到接收端
每一个分组的首部都含有地址等控制信息 分组交换网中的结点交换机根据收到的分组的首部中的地址信息,把分组转发到下一个结点交换机 用这样的存储转发方式,最后分组就能到达最终目的地 - 接收端收到分组后剥去首部还原成报文
单个分组的转发过程: H1→H5 1.交换机先将分组接收下来(存储),查看首部中的控制信息 2. 然后根据目的地址选择下一个交换机,并转发出去 多个分组的转发过程: 按照上述单个的转发过程,多个分组会从A交换机出发,然后随机选择一个直连的交换机,然后再转发,直到抵达终点
其他情况: 类推很好明白,不做赘述
分组交换的特点(优点):
- 高效
动态分配传输带宽,对通信链路是逐段占用 - 灵活
以分组为传送单位和查找路由 - 迅速
不必先建立连接就能向其他主机发送分组 - 可靠
保证可靠性的网络协议;分布式的路由选择协议使网络有很好的生存性
分组交换的特点(缺点)
- 分组在各结点存储转发时需要排队,这就会造成一定的时延
- 分组必须携带的首部(里面有必不可少的控制信息)也造成了一定的开销
- 无法确保通信时端到端所需的带宽,在通信量较大时可能造成网络拥塞
路由器
在路由器中的输入和输出端口之间没有直接连线
路由器处理分组的过程是:
- 把收到的分组先放入缓存(暂时存储)
- 查找转发表,找出到某个目的地址应从哪个端口转发
- 把分组送到适当的端口转发出去
主机和路由器的区别:
- 主机是为用户进行信息处理的,并向网络发送分组,从网络接收分组
- 路由器对分组进行存储转发,最后把分组交付给目的主机
小结
- 因特网的核心部分是由许多网络和把它们互连起来的路由器组成,而主机处在因特网的边缘部分
- 在因特网核心部分的路由器之间一般都用高速链路相连接,而在网络边缘的主机接入到核心部分则通常以相对较低速率的链路相连接
- 主机的用途是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。路由器的用途则是用来转发分组的,即进行分组交换的
1.2 主要性能指标
速率
速率:数据率或比特率,单位为b/s,或kb/s, Mb/s, Gb/s 等
比特:计算机中数据量的单位,也是信息论中使用的信息量的单位 一个比特就是二进制数字中的一个 1 或 0
带宽
本来是指信号具有的频带宽度,单位是赫兹 现在“带宽”是数字信道所能传送的最高数据率的同义语,单位是“比特每秒”,或 b/s (bit/s)
吞吐量
吞吐量:表示在单位时间内通过某个网络(或信道、接口)的数据量
时延
总时延 = 排队时延 + 发送时延 + 传播时延 + 处理时延 发送时延 = 数据块长度(比特)/ 发送速率(比特/秒) 传播时延 = 信道长度(米)/ 信号在信道上的传播速率(米/秒)
丢包率
分组丢失率:在一定的时间范围内,分组在传输过程中丢失的分组数量与总的分组数量的比率
利用率
信道利用率:某信道有百分之几的时间是被利用的。完全空闲的信道的利用率是零
网络利用率:全网络的信道利用率的加权平均值
时延与利用率
信道利用率并非越高越好 D = D0 / (1-U)
1.3 体系结构
- 相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。
- “分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。
两种国际标准+五层协议
法律上:OSI参考模型 事实上的:TCP/IP协议
五层协议
路由器在转发分组时最高只用到网络层而没有使用运输层和应用层
2.物理层
单个比特的传输(二进制比特流)
2.1 基本概念
主要任务: 确定与传输媒体的接口的一些特性
物理层特性:
- 机械特性
指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等 - 电气特性
指明在接口电缆的各条线上出现的电压的范围 - 功能特性
指明某条线上出现的某一电平的电压表示何种意义 - 规程特性
指明对于不同功能的各种可能事件的出现顺序
传输媒体: 数据传输系统中在发送器和接收器之间的物理通路
- 导引型: 电磁波被导引沿着固体媒体传播
- 非导引型: 电磁波在自由空间传播
2.2 信道复用技术
频分复用
时分复用
波分复用
码分复用
- 常用的名词是码分多址 CDMA
- 各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰
- 这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被发现。
- 每一个比特时间划分为 m 个短的间隔,称为码片(chip)。
2.3 互联网接入技术
接入技术: 解决最终用户接入本地ISP“最后一公里”的问题 接入网AN: 将端系统连接到ISP边缘路由器的物理链路及相关设备的集合
- 电话网拨号接入
通过拨号调制解调器接入(非宽带接入) 允许最高56Kbps接入速率(通常会更低) 不能同时上网和打电话 不提供持续连接
- 数字用户线接入
- 光纤同轴混合接入
- 光纤接入
- 以太网接入
各种政府机构、大型企业和大学校园的用户通常通过内部的以太网接入到因特网 一些接入网运营商将以太网用于住宅接入网领域,在原有以太网技术的基础上(采用原有以太网的帧结构和接口),增加了远端馈电、接入端口的控制、用户间的隔离、计费等功能
- 无线接入
无线广域接入:通过蜂窝移动通信系统接入到因特网(典型的:3G、4G) 无线局域接入:通过无线局域网接入到因特网(典型的:Wi-Fi)
3.数据链路层
怎样与邻居进行通信(帧)
3.1 点对点信道
链路(link): 一条无源的点到点的物理线路段,中间没有任何其他的交换结点。 数据链路(data link): 把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。 一般的适配器都包括了数据链路层和物理层这两层的功能。
主机 H1 向 H2 发送数据
数据链路层传送帧
封装成帧: 在一段数据的前后分别添加首部和尾部,然后就构成了一个帧
透明传输 字符填充——转义字符:在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”
差错检测 在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1
可靠传输 在不可靠的信道上实现可靠的数据传输为上层提供一条可靠的逻辑通道
停止等待协议:确认+重传
- 在发送完一个帧后,必须暂时保留已发送的帧的副本。
- 数据帧和确认帧都必须进行编号。
- 只要超过了一段时间还没有收到确认,就认为已发送的帧出错或丢失了,因而重传已发送过的帧。这就叫做超时重传。
RTT(Round-Trip Time): 往返时延 注意: 停止等待协议的优点是简单,但缺点是信道利用率低。故停止等待协议不适合发送时延远小于往返时延的情况!
连续ARQ
- 发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认
- 由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率
通过设置发送窗口来限制发送方的发送速率 发送窗口大小是已发送但还没有收到确认的最大分组数 注意: 连续不间断发送数据可能导致接收方或网络来不及处理
数据链路层的可靠传输
- 实现可靠传输需要付出代价(例如会降低传输效率)。
- 因此,应当根据链路的具体情况来决定是否需要让链路层向上提供可靠传输服务。
- 当链路误码率非常低时,在数据链路层可不实现可靠传输,而是由上层协议(例如,运输层的TCP协议)来完成。
- 但是在使用无线信道传输数据时,由于信道质量较差,在数据链路层仍需要实现可靠传输(例如使用停止等待协议)。
3.2 点对点协议PPP
PPP工作状态
组成
- 一个将 IP 数据报封装到串行链路的方法。
- 链路控制协议 LCP (Link Control Protocol)。
- 网络控制协议 NCP (Network Control Protocol)。
透明传输——字符填充
- 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列(0x7D, 0x5E)。
- 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列(0x7D, 0x5D)。
- 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。
透明传输——0比特填充
- PPP 协议用在 SONET/SDH 链路时,是使用同步传输(一连串的比特连续传送)。这时 PPP 协议采用零比特填充方法来实现透明传输。
- 在 发送端,只要发现有 5 个连续 1,则立即 填入一个 0。 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
3.3 广播信道
广播信道
- 广播信道可以进行一对多的通信,能很方便且廉价地连接多个邻近的计算机,因此曾经被广泛应用于局域网之中
- 由于用广播信道连接的计算机共享同一传输媒体,因此使用广播信道的局域网被称为共享式局域网
- 虽然交换式局域网在有线领域已完全取代了共享式局域网,但无线局域网仍然使用的是共享媒体技术
媒体接入控制
静态划分信道 频分多址、时分多址、码分多址 … 动态媒体接入控制(多点接入)
- 随机接入,如以太网
- 受控接入 ,如令牌环或轮询
局域网
两种国际标准 DIX Ethernet V2 + 802.3标准 网络适配器(DIX Ethernet V2) MAC地址
- 在局域网中,硬件地址又称为物理地址,或 MAC 地址
- “地址”严格地讲应当是每一个站的“名字”或标识符
- IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节
- 地址字段中的后三个字节由厂家自行指派,称为扩展标识符
适配器从网络上每收到一个 MAC 帧就首先用硬件检查 MAC 帧中的 MAC 地址
- 如果是发往本站的帧则收下,然后再进行其他的处理。
- 否则就将此帧丢弃,不再进行其他的处理。
- “发往本站的帧”包括以下三种帧:
单播(unicast)帧(一对一) 广播(broadcast)帧(一对全体) 多播(multicast)帧(一对多)
3.4 共享式以太网
交换式以太网
- 采用无连接的工作方式
- 无差错接收
CSMA/CD协议
- 多点接入:表示许多计算机以多点接入的方式连接在一根总线上。
- 载波监听:是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
- 碰撞检测:计算机边发送数据边检测信道上的信号电压大小。
二进制指数类型退避算法
发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据
- 确定基本退避时间,一般是取为 争用期 2 t
- 定义重传次数 k ,k <= 10,即 k = Min[重传次数,10]
- 从整数集合[0,1,…, (2^k-1)]中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间
- 当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告
强化碰撞
当发送数据的站一旦发现发生了碰撞时:
- 立即停止发送数据
- 再继续发送若干比特的 人为干扰信号,以便让所有站点都知道现在已经发生了碰撞
争用期的长度
- 以太网取 51.2 us 为争用期的长度
- 对于 10 Mb/s 以太网,在争用期内可发送512 bit,即 64 字节
- 以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突
最短有效帧长
- 为保证发送方能检测到所有碰撞,以太网规定了最短有效帧长为 64 字节
- 如果发生冲突,就一定是在发送的前 64 字节之内,立即中止发送,这时已经发送出去的数据一定小于 64 字节
- 因此将长度小于 64 字节的帧都视为是由于冲突而异常中止的无效帧
以太网信道利用率
- a→0 表示一发生碰撞就立即可以检测出来, 并立即停止发送,因而信道利用率很高
- a 越大,表明争用期所占的比例增大,每发 生一次碰撞就浪费许多信道资源,使得信道 利用率明显降低
- 当数据率一定时,以太网的连线的长度受到限制,否则 T0的数值会太大
- 以太网的帧长不能太短,否则 T0 的值会太小,使 a 值太大
- 当网络覆盖范围越大,既端到端时延越大,信道极限利用率越低,即网络性能越差。
- 另外,端到端时延越大或连接的站点越多,都会导致发生冲突的概率变大,网络性能还会进一步降低。
- 可见,共享式以太网只能作为一种局域网技术。
集线器
- 集线器是使用电子器件来模拟实际电缆线的工作,因此整个系统仍然像一个传统的以太网那样运行。
- 使用的还是 CSMA/CD 协议,并共享逻辑上的总线。
- 集线器很像一个多接口的转发器,工作在物理层
以太网帧格式
3.5 网桥和以太网交换机
共享式以太网→交换式以太网
在物理层扩展 —— 主机使用光纤和一对光纤调制解调器连接到集线器
未扩展: 扩展后: 优点
- 使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信
- 扩大了局域网覆盖的地理范围
缺点
- 碰撞域增大了,但总的吞吐量并未提高
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来
- 由于争用期的限制,并不能无限扩大地理覆盖范围
在数据链路层扩展 —— 网桥
- 根据 MAC 帧的目的地址对收到的帧进行转发
- 网桥具有过滤帧的功能
优点
- 过滤通信量。
- 扩大了物理范围。
- 提高了可靠性。
- 可互连不同物理层、不同 MAC 子层和不同速率的局域网
缺点
- 时延
- 无流量控制
- 广播风暴
透明网桥 —— 一种即插即用设备,其标准是IEEE802.1D
当网桥找不到目的地址所在接口时向所有其他接口转发! 通过接收帧的源地址及接收接口学习站点和接口的对应关系! 网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址有无相匹配的项目。如没有,就在转发表中增加一个项目(源地址、进入的接口和时间)。如有,则把原有的项目进行更新。
转发帧。查找转发表中与收到帧的目的地址有无相匹配的项目。
- 如没有,则通过所有其他接口(但进入网桥的接口除外)按进行转发。
- 如有,则按转发表中给出的接口进行转发。
- 若转发表中给出的接口就是该帧进入网桥的接口,则应丢弃这个帧(因为这时不需要经过网桥进行转发)。
生成树协议: 在任何两个站之间只有一条路径 没有生成树协议的情况
以太网交换机
二层交换机——全双工方式 多接口的网桥——独占传输媒体的带宽
虚拟局域网
- 当 B1 向 VLAN2 工作组内成员发送数据时,工作站 B2 和 B3 将会收到广播的信息。
- B1 发送数据时,工作站 A1, A2 和 C1
都不会收到 B1 发出的广播信息。
802.3MAC帧
VLAN划分
3.6 无线局域网
有固定设施的
WI-FI——802.11标准
- 一个移动站若要加入到一个基本服务集 BSS,就必须先选择一个接入点 AP,并与此接入点建立关联。
- 建立关联就表示这个移动站加入了选定的 AP 所属的子网,并和这个 AP 之间创建了一个虚拟线路。
- 只有关联的 AP 才向这个移动站发送数据帧,而这个移动站也只有通过关联的 AP 才能向其他站点发送数据帧。
无固定基础设施的
- 在军事领域中,携带了移动站的战士可利用临时建立的移动自组网络进行通信。
- 这种组网方式也能够应用到作战的地面车辆群和坦克群,以及海上的舰艇群、空中的机群。
- 当出现自然灾害时,在抢险救灾时利用移动自组网络进行及时的通信往往很有效的。
802.11无线局域网的物理层
CSMA/CA 协议
- 接收信号强度往往会远远小于发送信号强度,如要在无线局域网的适配器上实现碰撞检测,对硬件的要求非常高。
- 即使够实现碰撞检测的功能,并且当发送数据时检测到信道是空闲的,在接收端仍然有可能发生碰撞(隐蔽站问题)
屏蔽站问题: 未能检测出媒体上已存在的信号的问题 当 A 和 C 检测不到无线信号时,都以为信道是空闲的,因而都向 B 发送数据,结果发生碰撞。
停止等待协议 SIFS(短帧间间隔): 最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站应当能够在这段时间内从发送方式切换到接收方式。 使用 SIFS 的帧类型有: ACK 帧、CTS 帧、由过长的 MAC 帧分片后的数据帧,以及所有回答 AP 探询的帧和在 PCF 方式中接入点 AP 发送出的任何帧。
PIFS(点协调功能帧间间隔): 比 SIFS 长,是为了在开始使用 PCF 方式时(在 PCF 方式下使用,没有争用)优先获得接入到媒体中。PIFS 的长度是 SIFS 加一个时隙(slot)长度。 时隙的长度的确定: 在一个基本服务集 BSS 内当某个站在一个时隙开始时接入到媒体时,那么在下一个时隙开始时,其他站就都能检测出信道已转变为忙态。
DIFS(分布协调功能帧间间隔(最长的 IFS)): 在 DCF 方式中用来发送数据帧和管理帧。DIFS 的长度比 PIFS 再增加一个时隙长度。
退避算法:
其他无线计算机网络
无线个人区域网WPAN (Wireless Personal Area Network)
- 在个人工作地方把属于个人使用的电子设备用无线技术连接起来自组网络,不需要使用接入点 AP。
- 整个网络的范围大约在 10 m 左右。
- 蓝牙 (Bluetooth) 系统(802.15)
- 超宽带UWB (Ultra-Wide Band)(802.15.3)
无线城域网 WMAN(Wireless Metropolitan Area Network)
- WMAN 可提供“最后一英里”的宽带无线接入(固定的、移动的和便携的)。
- 在许多情况下,无线城域网可用来代替现有的有线宽带接入,因此它有时又称为无线本地环路。
- WiMAX(Worldwide Interoperability for Microwave Access)常用来表示无线城域网 WMAN
4.网络层
怎样到达目的地 —— IP数据报
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。
- 网络层不提供服务质量的承诺。
4.1 网际协议IP
- 不同的网络在网络层使用相同的IP协议,实现互相通信
- 路由器连接不同的异构网,实现网络中继
- 进出网络的所有数据必经路由器,因此路由器又叫网关
IP地址的编码方法分类编址——分类编址 32位点分十进制
IP 地址 ::= { <网络号>, <主机号>} 缺点:
- IP 地址空 间的利用率有时很低。
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 两级的 IP 地址不够灵活。
IP地址的编码方法分类编址——划分子网 32位点分十进制
IP 地址 ::= { <网络号>, <子网号>, <主机号>} 缺点: 提高了IP地址的利用率,但很快面临全部耗尽的威胁。
IP地址的编码方法分类编址——无分类编址 32位点分十进制
IP 地址 ::= { <网络前缀>, <主机号>} CIDR记法 10.0.0.0/10 可简写为 10/10 网络前缀的后面加一个星号 * 的表示方法 如:00001010 00*
案例: 已知 IP 地址是 141.14.72.24,子网掩码是 。试求网络地址。
- 不同的子网掩码得出相同的网络地址,但不同的子网掩码效果不同
- 地址块大小不一样
128.14.32.0/20的无分类编址
案例: 一校园的无分类编址
特殊IP地址
互联网中的IP地址
- 由路由器互连起来的每个网络有一个唯一的网络前缀。
- 各网络的子网掩码可以不同,因此各自的地址空间大小也不相同。
- 连接在同一个网络上的主机或路由器的IP地址的网络前缀必须与该网络的网络前缀一样。
- 用网桥互连的网段仍然是一个网络,只能有一个网络地址
IP地址与物理地址
通信的路径:H1→经过 R1 转发→再经过 R2 转发→H2 从协议栈的层次上看数据的流动 从虚拟的 IP 层上看 IP 数据报的流动 在链路上看 MAC 帧的流动 路由器只根据目的站的 IP 地址的网络号进行路由选择 在具体的物理网络的链路层,只能看见 MAC 帧而看不见 IP 数据报
地址解析协议 ARP
- 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
- 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
- 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
IP 数据报的格式
- 版本:
占 4 位,指 IP 协议的版本,目前的 IP 协议版本号为 4 (即 IPv4) - 首部长度:
占 4 位,可表示的最大数值,是 15 个单位(一个单位为 4 字节) - 总长度:
占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节 - 标识(identification):
占 16 位,它是一个计数器,用来产生数据报的标识 - 标志(flag):
占 3 位,目前只有前两位有意义。 标志字段的最低位是 MF MF= 1 表示后面“还有分片”,MF= 0 表示最后一个分片。 标志字段中间的一位是 DF ,只有当 DF =0 时才允许分片。 - 片偏移:
12位,较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。 - 生存时间:
8 位,记为 TTL (Time To Live),数据报在网络中可通过的路由器数的最大值。 - 协议:
8 位,字段指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程
IP数据报的转发
路由表 在路由表中,对每一条路由,最主要的是(网络地址,掩码,下一跳地址) 默认路由 默认路由用网络前缀0.0.0.0/0来表示 只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器。
案例: 已知互联网和路由器 R1 中的路由表。主机 H1 向 H2 发送分组。试讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。 要发送的分组的目的 IP 地址:128.30.33.138
- H1 首先检查主机 128.30.33.138 是否连接在本网络上
如果是,则直接交付; 否则,就送交路由器 R1,并逐项查找路由表。 - 主机 H1 首先将本子网的子网掩码 255.255.255.128与分组的 IP 地址 128.30.33.138 逐比特相“与”(AND 操作)
- 只需计算最后的 128 AND 138 即可
- 因此 H1 必须把分组传送到路由器 R1然后逐项查找路由表,直到发现128.30.33.128匹配网络地址
IP数据报的转发流程:
- 从收到的数据报首部提取目的IP地址D
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查,看是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行3
- 对路由表中的每一行(目的网络地址,掩码,下一跳,接口),用其中的掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行4
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行5
- 报告转发数据报出错
路由聚合/地址聚合: 使用单个网络前缀代表多个网络路由的能力 CIDR使用最长前缀匹配! 总是选择最具体的路由!
特定主机路由
- 这种路由是为特定的目的主机指明一个路由:路由表中前缀为“特定主机IP地址/32”的表项
- 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由
CIDR 最主要的特点
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用不定长的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
- CIDR虽然形式上是二级编址,但实际上可实现多级编址,大的地址块还可以划分为更小的地址块进行分配。
- 等级结构的CIDR地址块分配便于实现路由聚合。
4.2 网际控制报文协议 ICMP
- 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- ICMP 不是高层协议,而是 IP 层的协议。
- ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
注意:
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
ICMP 询问报文
- 回送请求和回答报文
- 时间戳请求和回答报文
注意: 下面的几种 ICMP 报文不再使用
- 信息请求与回答报文
- 掩码地址请求和回答报文
- 路由器询问和通告报文
PING DOS常用命令
- PING 用来测试两个主机之间的连通性。
- PING 使用了 ICMP 回送请求与回送回答报文。
- PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP
tracert
- 用于跟踪一个分组从源点到终点的路径
- 通过向目标发送不同IP生存时间 (TTL) 值的ICMP回应数据包,Tracert诊断程序确定到目标所采取的路由
4.3 因特网的路由选择协议
一、基本概念
- 理想的路由算法
- 算法必须是正确的和完整的。
- 算法在计算上应简单。
- 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。
- 算法应具有稳定性。
- 算法应是公平的。
- 算法应是最佳的。
- 最佳路由
- 不存在一种绝对的最佳路由算法。
- 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
- 实际的路由选择算法,应尽可能接近于理想的算法。
- 路由选择是个非常复杂的问题:
它是网络中的所有结点共同协调工作的结果。 路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。
- 分类
- 静态路由选择策略——即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。
- 动态路由选择策略——即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
- 分层次的路由选择协议
- 因特网采用分层次的路由选择协议。
- 因特网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使因特网的通信链路饱和。
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。
- 自治系统AS
- 自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
- 现在对自治系统 AS 的定义是强调下面的事实:尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略
- **两大类路由选择协议 **
- 内部网关协议 IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 协议。
- 外部网关协议EGP (External Gateway Protocol) 若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。在外部网关协议中目前使用的是 BGP-4。
二、内部网关协议RIP
- 概述
- 路由信息协议 RIP 是内部网关协议 IGP中最先得到广泛使用的协议。
- RIP 是一种分布式的基于距离向量的路由选择协议。
- RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
- “距离”的定义
- 路由器到直接连接的网络的距离定义为 1。
- 路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
- RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。
- RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
- RIP 允许一条路径最多只能包含 15 个路由器。
- “距离”的最大值为16 时即相当于不可达。可见 RIP 只适用于小型互联网。
- RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
- 三个要点
- 仅和相邻路由器交换信息。
交换的信息是当前本路由器所知道的全部信息,即自己的路由表。 - 按固定的时间间隔交换路由信息,例如,每隔 30 秒。
- 为加快协议的收敛速度,当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息(即触发更新)。
- 路由表的建立
- 路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。
- 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- 一般情况下RIP 协议的收敛过程较快,即在自治系统中所有的结点都得到正确的路由选择信息的过程。
- 路由表的更新
- 距离向量算法
收到相邻路由器(其地址为 X)的一个路由更新报文:
- 先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1。每一个项目都有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X。
- 若原路由表中没有目的网络N,则把该项目添加到路由表中。
否则,查看路由表中目的网络为N的表项,若其下一跳是X,则把收到的项目替换原项目。 否则,若收到的项目中的距离d小于路由表中的距离,则进行更新, 否则什么也不做。 - 若180秒(默认)没有收到某条路由项目的更新报文,则把该路由项目记为无效,即把距离置为16(距离为16表示不可达),若再过一段时间,如120秒,还没有收到该路由项目的更新报文,则将该路由项目从路由表中删除。
- 若路由表发生变化,向所有相邻路由器发送路由更新报文。
- 返回。
- 坏消息传得慢
- 优缺点
- RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
- RIP 协议最大的优点就是实现简单,开销较小。
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
三、内部网关协议OSPF
- 基本特点
- “开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
- “最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF
- OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
- 是分布式的链路状态协议。
- 三个要点
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。 - 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
- 链路状态数据库
- 由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
- 这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。
- OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
- 区域(area)
- 为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫作区域。
- 每一个区域都有一个 32 位的区域标识符(用点分十进制表示)。
- 区域也不能太大,在一个区域内的路由器最好不超过 200 个。
主干路由器、区域边界路由器
- 划分区域
- 划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
- 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
- OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
- 直接用 IP 数据报传送
- OSPF 不用 UDP 而是直接用 IP 数据报传送。
- OSPF 构成的数据报很短。这样做可减少路由信息的通信量。
- 数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
- 可靠的洪泛法
- 其他特点
- OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡。
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分和无分类编址 CIDR。
- 每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
- OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
- OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于 100 ms。
四、外部网关协议BGP
- BGP 是不同自治系统的路由器之间交换路由信息的协议。
- BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。
- 可以将 BGP-4 简写为 BGP。
4.4 路由器的工作原理
路由器与交换机比较
| 路由器 | 交换机 |
---|
优点 | 能提供更加智能的路由选择,并能隔离广播域 | 即插即用,并具有相对高的分组过滤和转发速度 | 缺点 | 不是即插即用的,对每个分组处理时间通常比交换机更长 | 大型交换机网络要求交换机维护大的转发表,主机中维护大的ARP表,并可能产生广播风暴,逻辑拓扑被限制为树 |
三层交换机
- 处于同一个局域网中的各个子网的互连以及局域网中VLAN间的路由,用三层交换机来代替普通路由器,实现广播域的隔离。
- 只有局域网与广域网互连,或广域网之间互连时才使用普通路由器
4.5 VPN与NAT
- 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向因特网的管理机构申请。
- 全球地址——全球唯一的IP地址,必须向因特网的管理机构申请。
VPN与NAT
VPN
- 有的公司可能没有分布在不同场所的部门,但有很多流动员工在外地工作。公司需要和他们保持联系,远程接入 VPN 可满足这种需求。
- 在外地工作的员工拨号接入因特网,而驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
NAT
- 需要在专用网连接到因特网的路由器上安装 NAT 软件,它至少有一个有效的外部全球地址 IPG。
- 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成 IPG 才能和因特网连接。
为支持更多主机同时访问外网,可利用报文中的其它字段来区别使用同一外部地址多个内部主机!如:协议字段、目的地址,甚至运输层的端口号! 由于端口号字段有16比特,因此一个外部IP地址可支持60000多对内部主机与外部主机的通信。
5.运输层
分用和复用 —— 运输协议数据单元
5.1 概述
- 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
- 运输层还要对收到的报文进行差错检测。
- 运输层可选的功能:
可靠数据传输 流量控制 拥塞控制
UDP
在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
TCP
提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
将数据交付给指定应用进程
发送方: 不同的应用进程都可以使用同一个运输层协议传送数据 接收方: 运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
端口
为何要设置端口
- 要能正确地将数据交付给指定应用进程,就必须给每个应用进程赋予一个明确的标志
- 在TCP/IP网络中,使用一种与操作系统无关的协议端口号来实现对通信的应用进程的标志
端口的定义:
- 端口就是应用进程的运输层地址。
- 端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程
端口的表示:
- 端口用一个 16 位端口号进行标志。
- 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。
- 并且TCP和UDP端口号之间也没有必然联系
端口的分类:
- 熟知端口 其数值一般为 0~1023。当一种新的应用程序出现时,必须为它指派一个熟知端口。
- 登记端口 其数值为 1024~49151。这类端口是 ICANN 控制的,使用这个范围的端口必须在 ICANN 登记,以防止重复。
- 动态端口 其数值为 49152~65535。这类端口是留给客户进程选择作为临时端口。
5.2 用户数据报协议UDP
-
UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。 -
虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。
2.1 发送数据之前不需要建立连接。
2.2 UDP 的主机不需要维持复杂的连接状态表。
2.3 UDP 用户数据报只有 8 个字节的首部开销。
2.4 网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。 -
UDP 是无连接的,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。 -
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制,因此主机不需要维持具有许多参数的、复杂的连接状态表。 -
由于 UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如 IP 电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP 正好适合这种要求。 -
UDP 是面向报文的。这就是说,UDP 对应用程序交下来的报文不再划分为若干个分组来发送,也不把收到的若干个报文合并后再交付给应用程序。
6.1 应用程序交给 UDP 一个报文,UDP 就发送这个报文;而 UDP 收到一个报文,就把它交付给应用程序。
6.2 应用程序必须选择合适大小的报文。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信。 -
用户数据报只有 8 个字节的首部开销,比 TCP 的 20 个字节的首部要短。
用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
5.3 传输控制协议 TCP
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 3. 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- 面向字节流。
UDP与TCP复用的区别
源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 位字(4 字节为计算单位)。
保留字段——占 6 位,保留为今后使用,但目前应置为 0。
紧急位 URG —— 当 URG ? 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认位 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
推送位 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位位 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步位 SYN —— 当 SYN = 1 时,表示这是一个连接请求或连接接受报文。
终止位 FIN (FINal) —— 用来释放连接。当 FIN = 1 时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
紧急指针 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
选项字段 —— 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
TCP 的可靠传输
数据编号与确认
- TCP 协议是面向字节的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。
- 在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。
- TCP 的确认是对接收到的数据的最高序号表示确认。接收方返回的确认号是已收到的数据的最高序号加 1。因此确认号表示接收方期望下次收到的数据中的第一个数据字节的序号。
- 由于TCP连接能提供全双工通信,因此通信中的每一方都不必专门发送确认报文段,而可以在传送数据时顺便把确认信息捎带传送。
- 为此,接收方在正确接收到数据时可能要等待一小段时间(不能超过0.5秒)再发送确认,若这段时间内有数据要发送给对方,则采用捎带确认。这样做可以提高传输效率。
- 接收方若收到有差错的报文段就丢弃(不发送否认信息)。
- 若收到重复的报文段,也要丢弃,但要发回(或捎带发回)确认信息。
- 若收到失序的报文段,可选择将失序报文段丢弃,或者先将其暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。注意,不论采用哪种方法,接收方都要对已按序接收到的数据进行确认。
以字节为单位的滑动窗口
- TCP 采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。
- 在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。
- 发送窗口在连接建立时由双方商定。但在通信的过程中,接收方可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。
- 发送方要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节。
- 发送方只要收到了对方的确认,发送窗口就可前移。
- 发送 TCP 要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。
- 发送方已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。
- 现在发送方还可发送 300 字节。
- 发送方收到了对方对前 400 字节数据的确认,但对方通知发送方必须把窗口减小到 400 字节。
- 现在发送方最多还可发送 400 字节的数据。
发送缓存
接收缓存
超时重传时间的选择
- 重传机制是 TCP 中最重要和最复杂的问题之一。
- TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
注意:由于 TCP 的下层是一个互联网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时间的方差也很大
快速重传
- 快要求接收方每收到一个失序的报文段后就立即发出重复确认。
- 发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
- 不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。
选择确认 选择确认SACK (Selective ACK) 允许接收方通知发送方所有正确接收了的但是失序的字节块,发送方可以根据这些信息只重传那些接收方还没有收到的字节块,这很像前面介绍的选择重传SR的工作方式。
- TCP在首部中提供了一个可变长的“SACK选项字段”来存放接收到的失序字节块的信息
- 在建立TCP连接时,通过添加“允许SACK选项字段”首部选项,表示都支持选择确认功能
流量控制
- 如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
- 流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收。
- 利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
每段100字节,初始窗口和接收缓存为400
TCP 的连接管理
TCP的连接建立
- 运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
- 连接建立过程中要解决以下三个问题:
要使每一方能够确知对方的存在。
要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
客户服务器方式
- TCP 的连接和建立都是采用客户服务器方式。
- 主动发起连接建立的应用进程叫做客户(client)。
- 被动等待连接建立的应用进程叫做服务器(server)。
用三次握手建立 TCP 连接 建立 TCP 连接:
- A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 x,表明下一个报文段的第一个数据字节的序号是 x + 1。
- B 的 TCP 收到连接请求报文段后,如同意,则发回确认,在确认报文段中使 SYN = 1 和 ACK = 1,其确认号应为 ack = x + 1,并选择序号seq = y。
- A 收到此报文段后,向 B 给出确认,其 ACK = 1,序号应为 seq = x + 1,确认号应为 ack = y + 1。
- A 的 TCP 通知上层应用进程,连接已经建立。
- 当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。
三次握手或三次联络
- 防止已失效的连接请求报文段又传送到 B,因而产生错误。
- A 发出连接请求,但因未收到确认而再重传一次。后来收到了确认,建立了连接。数据传输完毕后释放了连接。A 共发送了两个连接请求报文段,其中的第二个到达了 B。
- A 发出的第一个连接请求报文段以后又传送到 B。B 误认为是 A 又发出一次新的连接请求。于是就向 A 发出确认报文段,同意建立连接。
- A 不会理睬 B 的确认 。但 B 却以为运输连接就这样建立了,并一直等待 A 发来数据。 B 的许多资源就这样白白浪费了。
TCP 的连接释放
- 至此,整个连接已经全部释放。
- 从 A 到 B 的连接就释放了,连接处于半关闭状态。A 不能再向 B 发送数据了,但 B 有可能还有数据发送给 A ,A 需要对 B 发送的数据进行确认。
TCP的有限状态机
5.4 拥塞控制
- 如果网络中的负载(load),即发送到网络中的分组数量,超过了网络的容量,即网络中能处理的分组数量,那么在网络中就会发生拥塞(congestion)。
- 所谓拥塞控制(congestion control)就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
- 理想吞吐量为100 Mb/s
- 不加任何控制只能达到60 Mb/s
- 当分组丢失时, 任何用于传输该分组的上游传输能力都被浪费!
拥塞控制与流量控制的区别
拥塞控制 —— 一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。 流量控制 —— 在给定的发送端和接收端之间的点对点通信量的控制。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
开环控制和闭环控制
开环控制——在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。 闭环控制——基于反馈环路的概念。属于闭环控制的有以下几种措施:
- 监测网络系统以便检测到拥塞在何时、何处发生。
- 将拥塞发生的信息传送到可采取行动的地方。
- 调整网络系统的运行以解决出现的问题。
显式反馈和隐式反馈
- 根据拥塞反馈信息的形式又可以将闭环拥塞控制算法分为显式反馈算法和隐式反馈算法。
- 在显式反馈算法中,从拥塞点(即路由器)向源端提供关于网络中拥塞状态的显式反馈信息。
- 在隐式反馈算法中,源端通过对网络行为的观察(如分组丢失与往返时延)来推断网络是否发生了拥塞。
- TCP采用的就是隐式反馈算法。
TCP的拥塞控制
- 发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。
- 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
接收方窗口 rwnd —— 接收方根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收方的流量控制。接收方将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送方。
拥塞窗口 cwnd —— 发送方根据自己估计的网络拥塞程度而设置的窗口值,是来自发送方的流量控制。
发送窗口的上限值
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定: 发送窗口的上限值 = Min [rwnd, cwnd]
- 当 rwnd < cwnd 时,是接收方的接收能力限制发送窗口的最大值。
- 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
慢启动和拥塞避免
- 在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。
- 在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。
- 用这样的方法逐步增大发送方的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。
- 用报文段的个数作为窗口大小的单位。还假定接收方窗口 rwnd 足够大,因此发送窗口只受发送方的拥塞窗口的制约。
- 发送方先设置 cwnd = 1,发送 M0,接收方收到后发回 ACK1。
- 发送方收到 ACK1 后,把 cwnd 从 1 增大到 2,发送方接着发送 M1 和 M2 两个报文段。
- 接收方收到后发回 ACK2 和 ACK3。
- 发送方每收到一个对新报文段的确认 ACK,就使发送方的拥塞窗口加 1,因此现在发送方的 cwnd 又从 2 增大到 4,并可发送 M3 ~ M6 共 4 个报文段。
发送方每收到一个对新报文段的确认(重传的不算在内)就使 cwnd 加 1。
慢启动的作用
- 可见慢启动的“慢”并不是指 cwnd 的增长速率慢,而是指在开始时发送速率“慢”( cwnd = 1)。
- 使用慢启动算法可以使发送方在开始发送时向网络注入的分组数大大减少。这对防止网络出现拥塞是非个常有力的措施。
开始门限 ssthresh
为了防止拥塞窗口 cwnd 的增长引起网络拥塞,还需要另一个状态变量,即慢启动门限 ssthresh,其用法如下:
- 当 cwnd < ssthresh 时,使用上述的慢启动算法。
- 当 cwnd > ssthresh 时,停止使用慢启动算法而改用拥塞避免算法。
- 当 cwnd = ssthresh 时,既可使用慢启动算法,也可使用拥塞避免算法。
拥塞避免算法
- 拥塞避免算法使发送方的拥塞窗口 cwnd每经过一个往返时延 RTT 就增加一个MSS 的大小(而不管在时间 RTT 内收到了几个 ACK)。
- 拥塞窗口 cwnd 按线性规律缓慢增长,比慢启动算法的拥塞窗口增长速率缓慢得多。
当网络出现拥塞时
- 随着 cwnd增大,发送方的发送速率会超过网络可用带宽,导致分组丢失,即出现网络拥塞。
- 为是网络迅速从拥塞状态恢复到正常,发送方把拥塞窗口 cwnd 重新设置为 1,慢启动门限 ssthresh 设置为出现拥塞时的发送窗口值的一半,又执行慢开始算法。
- 这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
慢启动和拥塞避免算法的实现举例
横坐标的单位——传输轮次。 轮次——把拥塞窗口 cwnd 所允许发送的报文段都发送出去,并且都收到了对方的确认。“传输轮次”的时间并不是固定不变的。
- 当 TCP 连接进行初始化时,将拥塞窗口置为 1。为便于理解,图中的窗口单位不使用字节而使用报文段。
- 慢启动门限的初始值设置为 16 个报文段,即 ssthresh = 16。
- 发送方的发送窗口不能超过拥塞窗口 cwnd 和接收方窗口 rwnd 中的最小值。
- 我们假定接收方窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
- 在执行慢启动算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。以后发送方每收到一个对新报文段的确认,就将发送方的拥塞窗口加 1,然后开始下一次的传输。
- 当拥塞窗口 cwnd 增长到慢启动门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
- 假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。
- 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢启动算法。
- 当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。
|