计算机网络复习网络传输-IP-传输层-DNS

计算机网络复习网络传输-IP-传输层-DNS

TCP/IP和OSI网络模型

为什么需要分层网络模型?

网络通信中需要很多很多协议、功能、组件的协作。如果采用模块化的网络体系结构,适应性差,难以维护,对系统实现是场灾难。使用分层模型,如果之分为两层的化,每一种新的应用都需要物理层的每个种类适配,扩展性较差。因此需要引入中间层适配物理层和应用层。

分层的优点:各层相互独立,将建造一个网络的问题分解为多个可处理的部分,一层解决一部分问题。灵活性好:任何层发生变化时,只要接口不变,上下层不受影响。结构上可分割开:各层都可以采用最合适的技术实现易于实现和维护能促进标准化工作。

OSI七层模型每层都有什么,对应什么功能

osi模型
功能

TCP/IP模型与OSI的对应关系

TCP/IP

网络体系结构细腰模型的腰在哪?

研究表明,分层的体系结构最终会演化成细腰模型

未来的发展趋势:

分层模型工作机制:封装与解封装

数据发送:由上层传到下层(逐层封装),接收由下层到上层(逐层解封)

层间是虚通信,最下层为实际通信

封装过程

应用进程(Web),应用进程数据先传送到应用层。加上应用层头部,成为应用层Data,再传送到传输层。

在传输层加上传输层头部,成为传输层报文(message),再传送到网络层。

在网络层加上网络层头部,成为IP分组(packet),再传送到数据链路层

在数据链路层加上链路层头部和尾部,成为数据链路层帧(frame),再传送到物理层

在物理层把比特流进行编码、调制,传送到物理媒体电信号(或光信号)在物理媒体中传播从发送端物理层传送到接收端物理层。

封装过程

解封过程

主机2受到主机1的数据,在物理层解调、解码,将比特流,上交给数据链路层。数据链路层剥去帧头部帧尾部取出数据部分,上交给网络层。网络层剥去头部,取出数据部分,上交给传输层。输层剥去头部,取出数据部分,上交给应用层。应用层剥去首部,取出应用程序数据上交给应用进程。

每一层都有那些差错检错机制

为什么要进行差错检测

数据在传输过程中可能会产生比特差错。

差错检测的基本思想在数据帧中加入冗余信息来确定是否存在差错

可以通知对方数据有差错,使其重传数据副本(重传机制)通过加入的冗余信息,重新构造正确的数据(纠错码)

数据链路层CRC

数据链路层会对物理层(只负责传输,不做任何改动的传输机器)传输过来的数据进行差错检测(数据链路层的职责之一:差错控制)。增加数据可靠性,将物理层传输过来的数据无差错地传递给上层(网络层)。

差错检测常见三种方法:

数据链路层广泛使用了 循环冗余检测CRC 的比特差错检测技术。使用检测能力更强的CRC

为什么:

使用最少的冗余比特检测最多的错误。

  • 数据链路层的差错检测的目的是做到"无比特差错"。使用循环冗余检验CRC差错检测技术
  • 无法管帧丢失、失序、重复,它只负责一个帧要是传对了,就是对的。

网路层

网络层的校验只用于针对网络层的头部 IP:

Ip报文里面的checksum字段
实现过程

校验和的计算方式:

传输层

运输层的差错检测的目的是做到"无传输差错"。即弥补帧丢失、帧重复、帧失序。

udp采用校验和检测在传输过程中是否出错

TCP校验和

应用层

码分复用

复用存在的意义

实现媒体共享:

静态划分信道信道复用技术 (Multiplexing),为多个用户静态划分逻辑信道,相互不冲突:频分复用、时分复用、波分复用、码分复用。

码分复用原理

正交关系

CSMA/CD和CSMA/CA的相同点和不同点

CSMA/CD是的原理

核心思想 :1-坚持CSMA + 碰撞检测

碰撞检测:检测结点边发送数据边检测信道上的信号电压大小、当几个结点同时发送数据时,当结点检测到的信号电压摆动值超过一定的门限值时,认为总线上至少有两个结点同时在发送数据,表明产生了碰撞。发生碰撞时,需立即停止发送,避免继续浪费网络资源,然后等待一段随机时间后再次发送。

在侦听/发送发送数据时

  • 侦听链路中是否有其它数据在传输,如果信道忙,则继续侦听等待
  • 如果检测信道空闲,等待一个最小帧间间隔时间,则传输数据帧。(以太网最小帧间间隔9.6𝜇𝑠,为了使刚刚接收帧的节点能清理接收缓存)

在传输过程中如果遇到碰撞,执行碰撞处理操作:

  • 碰撞处理立即停止发送数据帧,并发送特殊阻塞信息,人为的干扰信号(jamming signal),通告其它设备有碰撞发生
  • 根据发生碰撞的次数,计算指数退避时间,在时间范围内 随机选择一个,进行等待后重发数据帧
  • 在尝试给定次数之后将放弃尝试,并向上层报告传输出错

碰撞窗口/争用期

碰撞窗口

强化碰撞

CMSA/CD:发送边侦听

为什么需要CMSA/CA

  • 碰撞检测的能力要求结点同时具有发送(自己的信号) 和接收(检测其它结点是否在发送)的能力无线网络适配器上,接收信号强度远小于发送信号,制造具有碰撞检测能力的硬件代价过大即使硬件支持
  • 无线网络特有的隐藏终端等问题也使得很多碰撞难以检测
  • 不使用碰撞检测结点一旦开始发送数据帧,即使碰撞仍继续,因此需尽量避免碰撞发生
隐藏终端问题

CSMA/CA的主要操作

碰撞避免

CSMA/CA和CSMA/CD的异同对比

相同点

都是基于载波侦听多点接入(CSMA)涉及以下两方面:

多点接入:

总线型网络,多个结点以多点接入的方式连接在一根总线上,同一冲突域

载波侦听:

结点在发送前先检测信道,是否有其它结点也在发送,若有,则暂时不要发送数据,以免发生碰撞总线上并没有“载波”

差异

由于适用场景不同CSMA/CD主要适用以太网。CSMA/CA主要适用无线局域网。

针对无线局域网,CSMA/CD存在以下问题

  • 碰撞检测的能力要求结点同时具有发送(自己的信号) 和接收(检测其它结点是否在发送)的能力无线网络适配器上,接收信号强度远小于发送信号,制造具有碰撞检测能力的硬件代价过大即使硬件支持
  • 无线网络特有的隐藏终端等问题也使得很多碰撞难以检测
  • 不使用碰撞检测结点一旦开始发送数据帧,即使碰撞仍继续,因此需尽量避免碰撞发生
  1. csma/cd在发送前先侦听信道,检测是否有其它节点正在发送。而CSMA/CA是通过虚拟载波监听技术进行检测信道是否空闲。
  2. CSMA/CD中退避只在碰撞发生后,而CSMA/CA中信道由忙变闲后,各发送结点都要执行退避(第一次尝试发送的帧除外)。这样是为了更好的避免冲突。
  3. CSMD/CA在发送、接收结点时通过RTS/CTS短帧预约信道,避免碰撞。CSMA/CD没有这个步骤
  4. CSMA/CA会通过虚拟载波监听(Virtual Carrier Sense)机制预留信道,避免碰撞发送结点将它要占用信道的时间,通过RTS/CTS中的NAV及数据帧MAC头部广播,告知其它结点在此期间停止发送。
  5. CSMA/CA有不同的帧间间隔(任意站点在发现信道空闲后都必须等待一段时间才能发送下一帧,这段等待的时间通称为 IFS)发送不同类型的帧之前需要等待的IFS长度不同,高优先级帧需要等待的IFS较短,因此可优先获得发送权若低优先级帧还没来得及发送而其他站的高优先级帧已发送到媒体,则媒体变为忙状态,因而低优先级帧就只能再推迟发送了,这样就减少了发生碰撞的机会 ,并区分出不同类型帧的优先级。

以太网和WLAN 对比

以太网使用总线型拓扑(星型以太网逻辑上仍为总线型拓扑)

WLAN星型拓扑:中心:接入点(AP)

MAC层对比

以太网帧结构

wlan:

802.11 MAC

WIFI 帧结构:

## 交换技术与生成树算法

为什么会引入交换技术

直连网络本质上是一种广播网络,带宽利用率低、可扩展性很差。在有环路的拓扑中,数据包会在网络中一直被广播下去。

为了提升网络的可扩展性,引入交换技术

网桥工作原理

功能:在数据链路层扩展局域网

工作方式:

  • 过滤
  • 转发

转发表/转发数据库(Forwarding DataBase, FDB)存储目的MAC地址到(出)端口的映射关系:

网桥对数据帧的处理流程

转发表(FDB)生成原理

每收一个新的数据帧,记录其源MAC地址和入端口,将该映射关系写入FDB表。FDB格式如下所示,FDB表中MAC地址通过老化机制 (Aging)来更新。在端口收到无差错帧以后,如果源地址在FDB中需要更新方向和定时器,如果不在则将源地址加入FDB中并设置定时器。

生成树算法

why:这个算法的目的是解决什么问题?

由于网络中存在冗余链路,当网络拓扑由树状结构变成图状结构,在数据转发过程中,形成环路,造成广播风暴。

解决办法:

为网络中每对(源--目的) 结点分配唯一确定的一条路径,这些路径构成构成了一棵树 (生成树,Spanning Tree)

how:生成树算法的实现过程

  • 选择一个网桥作为生成树的根(如选一个最小序号的网桥根网桥总在它所有端口上转发分组)
  • 其它结点确定根端口:每个网桥计算到根的最短路径,并记下路径经过它自己的的哪个端口,即根端口,将根端口作为到根的优先路径
  • 为每个局域网(网段)选定指派网桥:指派网桥负责位该网段向根网桥转发帧

IP协议的特点

RIP 和OSPF的对比

RIP(Routing Information Protocol)的原理

RIP:基于 距离向量(DV)算法分布式动态路由选择协议

基本思想
向量表

在RIP中,跳数(hop count),每条链路的开销为 1(即每经过一个路由器,距离加 1)

RIP 允许距离的最大值为16,一条路径最多只能包含 15 个路由器RIP适用的网络规模有限:网络直径(最大跳数)小于15,跳数大于16,即为不可达

例子

RIP存在的问题

Count-to-Infinity (计数到无穷)问题

image-20240113155241307

RIP 工作流程

RIP局限性

  1. 可扩展性差(16作为无穷大(不可达),它不能在“直径”大于15的网络上使用)

  2. 不能在丢失率高的网络中使用(受限于RIP更新和超时机制)

  3. 不能动态地使用时延、负载等为依据选择路由 (RIP在传播路由时使用固定的费用值,距离,在RIP中,每条链路的开销为 1)

  4. 开销较大 (每30秒信息交换占用网络资源路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加)

  5. 收敛速度慢 :网络出故障时往往需要较长的时间(例如数分钟)

OSPF (Open Shortest Path First) 原理

使用最广泛的分布式链路状态 (Link State, LS) 路由协议

open 与shortest path first

什么是链路状态:

基本思想

ospf怎么构建网络拓扑

  1. 传播LSP:通过传播链路状态分组(LSP),LSP携带了结点标识,链路开销以及序号生存期等内容。

  2. 更新信息:结点x收到结点y的LSP信息副本后判断之前又没有保存过对应ID的LSP,如果没保存过则保存。如果保存过,则由于新副本的序列号更大,更新内容(此时TTL也一并更新了)。

  3. 扩散信息:继续向除y之外的所有节点扩散y的LSP副本

ospf怎么计算路由表

OSPF 协议

OSPF协议的优点

克服RIP的缺点:

  • 收敛速度更快
  • 使用区域(area)概念,可支撑更大规模的网络路由
  • 链路度量可自定义,表示费用、距离、时延、带宽

RIP和OSPF的对比

域内路由协议与域间路由协议的对比

为什么需要域间路由协议而不是直接用域内路由

  • 域内路由是性能目标导向的,全域有统一目标:根据最小化某种链路度量值(开销),找到一条最有路径

  • 域间路由是策略和经济目标导向的,每个AS有自己的策略

    寻找最好的策略兼容路径:找到一条无环的通往预定目的地的路径,路径必须兼容沿着路径的不同AS的策略

域间路由主要要解决的问题

BGP原理

AS的管理员要选择至少一个路由器作为“ BGP 代言人” 。一般是 BGP 边界路由器。

不同AS的 BGP 代言人建立 TCP 连接,在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息

BGP 优点

  • BGP是基于TCP的路由协议,只要能够建立TCP就能够建立BGP;
  • BGP只传递路由信息,不计算路由,不会暴露AS内部的网络拓扑;
  • BGP的路由更新是触发更新,不是周期性更新;

三种IP 地址编址方案以及路由寻找对比

分类 IP 地址

IP地址的层次结构:IP地址 = 网络号+主机号

分为A,BC,D,E类地址

分类IP地址存在的问题

  1. IP地址的利用率低,网络号和主机号位数固定,导致网络规模不可调,造成分配的不合理,分配的是网络号而不是40亿个独立的IP地址,耗尽的速度快
  2. 每个物理网络分配一个网络号使得路由表过大。大转发表增加路由器开销,增大路由查找延迟,减低路由器性能。
  3. 使用不灵活。同一组织在不同地方开通新的物理网络,需要申请新的网络地址不易于扩展、管理

子网划分

针对分类IP地址存在的问题做了一定的改进

基本思想

通过划分子网 (subnetting),在IP 地址中又增加了一个“子网号字段”,将两级的 IP 地址变成为三级。实现多个物理网络共享一个网络号减少分配网络号总数,实现路由聚合 (aggregation)

路由聚合 (aggregation):互联网络不同部分看到不同的路由,远端只看到单一网络

划分子网纯属一个单位内部的事情,对外仍表现为未划分子网的网络

优点

无类地址 (构造超网)

为了解决地址空间的效率和可扩展性问题,(见下面的例子),提出CIDR

CIDR地址块:

路由聚合和超网

最长前缀匹配

为什么需要最长前缀匹配

使用 CIDR ,在查找路由表时可能会得到不止一个匹配结果

怎么匹配

从匹配结果中选择具有最长网络前缀的路由,网络前缀越长,其地址块就越小,因而路由就越具体(more specific)

匹配例子:

IP地址的特点

三种情况下路由转发对比

没划分子网

划分子网

CIDR

总结三种方法的异同:

  1. 首先都需要从IP分组的头部提取目的主机的IP地址D,得到目的网络地址N.

  2. 然后三种方法在判断是否是直接交付的时候存在差异,未划分子网的方法是判断N与路由器直接相连的某个网络地址是否相同,若是则直接交付。而划分子网的方法,需要将路由器结点的各个网络子网掩码与目的主机IP地址D逐位相与后,再查看是否与路由器的本地ip相匹配。CIDR则和之前类似,也是直接判断D和路由器是否在同一个网络内判断是否直接交付。

  3. 从精确到模糊进行匹配:

    1. 如果出现了问题都需要报告转发分组出错(发ICMP 目的不可达报文)

地址解析协议ARP (Address Resolution Protocol)原理

为什么有ARP

主机或路由器的物理接口硬件在转发数据时,只能理解特定网络的编制方案如 MAC地址 。

网络层的地址解析过程

地址解析:IP地址->硬件地址

IP数据报在逐跳转发过程中,每一个结点需要根据本次传输的目的结点IP,找到对应的目的结点的硬件地址,(仅仅是本跳传输的直接接收结点) 随后,网络适配器把IP数据报封装在 目的地址为该硬件地址的的帧中 ,发往本次传输的目的结点(可能是最终目的地,也可能是到达最终目的地的中间路由器 ,网络适配器,也就是数据链路层的处理并不用关心)

ARP原理

每个结点保留一张对照表:IP地址->硬件地址

ARP Cache:每个三层结点中都有一个ARP高速缓存,存储结点所在局域网内各结点的 IP 地址到其硬件地址的映射。

结点A向局域网内另一结点B发送IP报文时,首先在其 ARP Cache 中查看有无B 的 IP 地址,有则查出其对应的硬件地址,将此硬件地址写入 MAC 帧,通过局域网将该 MAC 帧发往此硬件地址。否则,A向局域网内广播ARP请求,询问B的IP地址对应的硬件地址,B收到该请求后,单播回复自己的硬件地址A和B都会将对方地址的映射关系写入ARP Cache。

ARP报文

传输层要解决的核心问题

网络层及其下层技术实现了主机到主机的通信。

网络层实现了:无连接的、尽最大努力交付的数据报传输服务。

为了支持网络应用间的数据传输,主机端还需要实现很多功能:

传输层实现端系统上运行的应用进程间的逻辑通信,即端到端传输

UDP和TCP协议的区别

用户数据报协议 UDP (User Datagram Protocol)

  • 最简单的传输协议把下层网络的主机到主机的传递服务扩展到进程到进程的通信服务,提供端到端的尽力而为的数据报传输服务
  • IP 的数据报服务之上增加了很少一点的功能
    • 多路分解/多路复用,即端口的功能
    • 差错检测的功能

UDP特点

  • 无连接的,无需建立连接,无需维护状态减小开销和启动延迟,例如DNS就是基于UDP的

  • 尽最大努力交付,不保证可靠传输,主机不需维持复杂的状态

  • 没有拥塞控制

    • 网络的拥塞不影响源主机的发送速率
    • 以上两点适用于IP电话、视频直播等应用要求恒定发送速率,允许丢包,但是时延敏感应用。
  • UDP 支持一对一、一对多、多对一和多对多的交互通信需要组播的应用都建立在UDP之上

  • 面向报文的,在IP的功能上简单扩展到端到端

    • 发送方 UDP 对应用交付下来的报文,添加 UDP 头部后,直接交付IP层
      • 不合并,不拆分,保留报文的边界,应用层付多长的报文,UDP 就发多长,一次交付发送一个报文
    • 接收方 UDP 对 IP 层交付上来的 UDP 用户数据报,去除首部后就原封不动地交付上层的应用进程
      • 一次交付一个完整的报文
    • 应用程序必须选择合适大小的报文
      • 报文太长,IP层需要分片,降低IP层效率;报文太短,头部相对太长,也降低效率
  • 作为最基本的传输层协议,上层应用可实现更多功能、按需定制

    • 例如:UDT (UDP-based Data Transfer Protocol),基于UDP的数据传输协议
      • 面向连接的应用层协议,在UDP的基础上增加拥塞控制和数据可靠传输控制机制
      • 主要支持高速广域网上的海量数据传输
        • TCP在高带宽长距离网络上性能很差

TCP特点

udp 对比 TCP

  1. TCP 是面向连接的协议,UDP 是无连接协议

​ TCP 发送数据前使用三次握手建立连接,UDP 发送数据前不需要建立连接。

  1. TCP 可靠,UDP 不可靠

​ TCP 丢包会自动重传,UDP 不会(任何必需的可靠性必须由应用层来提供)。 TCP 可靠性由三个机制保证:1. 序号(TCP 报文的序 号)2. 确认(ACK 机制)3. 重传(超时或者冗余的 ACK)

  1. TCP 有序,UDP 无序

消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP 会对其进行重新排序,UDP 不会。

  1. TCP 无界,UDP 有界

TCP 通过字节流传输,UDP 中每一个包都是单独的。

  1. TCP 有流量控制(拥塞控制),UDP 没有

TCP 协议的流量控制是基于滑窗协议实现的。 拥塞控制和流量控制不同,流量控制是点对点的通信量抑制,抑制发送端发送速率,使得接收端来得及接收。

  1. TCP 传输慢,UDP 传输快

因为 TCP 需要建立连接、保证可靠性和有序性,所以比较耗时。 这就是为什么视频流、广播电视、在线多媒体游戏等选择使用 UDP。

  1. TCP 是重量级的,UDP 是轻量级的

TCP 要建立连接、保证可靠性和有序性,就会传输更多的信息,如 TCP 的包头比较大。

  1. TCP 的 头部比 UDP 大

TCP 滑动窗口

A 收到确认后,移动指针。有效窗口增大

选择确认方法:

TCP流量控制

什么是流量控制?为什么有流量控制

防止快发送方给慢接收方发数据造成接收崩溃,缓冲区溢出

  • 窗口大小变化,受“流量控制”、“拥塞控制”的影响发送FIN报文段,表示己方不再发送数据

流量控制的基本实现原理

  1. 首先,接收方确定 AdvertisedWindow 大小

    AdvertisedWindow = MaxRcvBuffer – ( (NextByteExpected – 1) - LastByteRead)

AdertisedWindow 代表缓存区中剩余的空间数量,新的数据到达,NextByteExpected 指针右移,窗口大小可能变小。可以看出,窗口是否缩小依赖于应用进程读取数据的速度与数据到达的速度的相对快慢

  1. 发送方根据 AdvertisedWindow 值确定有效窗口,限制发送速率

    有效窗口(EffectiveWindow) = AdvertisedWindow – (LastByteSent - LastByteAcked)

  1. 发送方只有在有效窗口大于0的情况下,才能发送更多数据。

    可能的情况:发送方有效窗口已为 0。

    此时一个报文段到达而确认x字节,因此LastByteAcked右移x字节,发送窗口减小。然而接收方应用进程未读取任何数据,因此AdvertisedWindow比之前小了x字节。发送方尽管释放了发送缓冲区空间,但仍不能再发送任何数据。

  2. 发送方还必须同时保证发送缓存区不溢出:LastByteWritten – LastByteAcked ≤ MaxSendBuffer

    可能的情况:发送进程试图向 TCP 写入 y 字节,但是 LastByteWritten – LastByteAcked + y > MaxSendBufferTCP 会阻塞发送进程,不让它再产生数据

举例说明,慢接收进程如何对快发送进程进行流控

存在的死锁问题

某些情况下,发送方 A 无法知道 AdvertisedWindow 不再为 0

  • 当 B 没有数据需要向 A 发送时

  • 原因:TCP 仅在它有数据或者有确认需要向对端发送时才会发送报文段

解决方案

TCP 为每个 TCP 连接设置一个持续计时器 (persistence timer),只要 TCP 连接的一方收到对方的 0 窗口通知,就启动该计时器。

计时器到期,发送零窗口探测报文 (仅携带1字节数据)。

长肥管道现象

通知窗口字段允许的最大值,需要足够大以使得发送方能够保持管道满载

网络的时延带宽积决定 AdvertisedWindow 字段应有的大小

拥塞控制

拥塞控制和流量控制的区别,为什么还需要拥塞控制

流量控制:确保接收方能否承受。防止发送方发出的数据超出接收方的接收能力。

拥塞控制:确保网络能够承受。防止过多数据注入网络造成网络节点或链路超载。

网络拥塞可能带来的代价

  • 分组到达速率接近链路容量时,分组将经历巨大的排队时延
  • 发送方必须执行重传以补偿因为缓存溢出而丢弃的分组
  • 发送方在遇到大时延时所进行的不必要重传会引起路由器及其链路浪费资源转发不必要的分组拷贝
  • 当一个分组沿一条路径传输过程中被丢弃时,每个上游路由器用于转发该分组而使用的传输容量最终被浪费掉了

网络拥塞后果:

丢包率升高、时延增大、甚至网络崩溃 (Network Collapse)

拥塞控制的目标

  • 保证发送速率适应网络瓶颈
  • 发送速率适应网络处理能力的变化
  • 多条流公平地共享资源

拥塞控制策略

TCP采用端到端的拥塞控制策略,TCP/IP 系统设计倾向端到端原则,将可扩展性放到第一位

如何判断是否拥塞

不需要网络设备的拥塞提醒。端设备通过丢包、延迟变化等推测网络拥塞状况。

TCP拥塞控制

四种基本算法 (RFC 5681)

  • 慢启动 (slow start)
  • 拥塞避免 (AIMD)
  • 快重传 (fast transmit)
  • 快恢复 (fast recovery)

拥塞检测

可通过丢包进行隐式的拥塞反馈。通过ACK判断是否丢包。

TCP判断拥塞的两个依据

报文段超时

  • 现在通信线路的传输质量一般都很好,因传输出差错而丢弃分组的概率是很小的(远小于 1 %),出现超时,就可以猜想网络可能出现了拥塞

收到多个重复ACK

  • 收到一个重复ACK,就知道接收方必定收到乱序到达的报文段,表明其前面的分组可能丢失

拥塞窗口 cwnd 怎么调整的

窗口调整的基本策略

慢启动(slow-start)

基本思想

  • 主机开始发送数据 (连接刚建立) 或判断拥塞发生时,不确定网络状况,应避免注入大量数据而引起拥塞拥塞窗口大小从很小的初始值开始,发送成功则快速增大,以探测网络的负载能力。

拥塞窗口的增减策略

怎么选??

对比

TCP 拥塞避免(AIMD)

使用慢启动门限 ssthresh (变量)

  • 当 cwnd < ssthresh 时,使用慢启动
  • 当 cwnd > ssthresh 时,停止使用慢启动而改用AIMD

慢启动+拥塞避免

快重传+快恢复

快重传 (Fast Retransmits):收到 3 个重复 ACK 立即触发重传(阈值减半,开始快恢复)

快速重传不能代替常规超时机制,仅是增强功能并非取消超时重传定时器,而是在某些情况下可更早地触发重传丢失的报文段:

快重传

快速恢复 (Fast Recovery) 阶段 起始于快速重传后,结束于RecoveryPoint 数据被连续确认。RecoveryPoint 为进入快速恢复阶段时发送的最大序列号。

差异对比

快重传+快恢复的优点:

  • 减少了慢启动 (快恢复)

  • 减少了由于等待超时引起的连接无效 (cwnd不变且无数据发送) 时间 (快重传)

  • 可以达到稳态,且稳态时 cwnd 会在最优值附近摆动

快重传+快恢复的一些现象

拥塞控制总结

TCP拥塞控制的优化

快速重传与数据乱序

TCP 连接

连接的目的

连接的特点

TCP 连接的建立采用 客户-服务器 方式

连接的建立是非对称的:

服务器已预先被动打开创建传输控制块,进入LISTEN状态,表示服务程序已准备好,等待客户的连接请求。连接建立由客户端主动打开开始

三次握手

两次握手为啥不行?(为什么 A 需要向B应答最后一个确认报文段 ?)

  • 为防止“已失效的连接请求报文段”突然又传送到B而产生错误。若不采用三次握手,B则单方面建立起了连接,但A并没有建立,因此也不会向B发送数据,B却一直等待,B的资源被浪费

“已失效的连接请求报文段”如何产生?

A发出第一个连接请求未丢失,只是在某些网络结点滞留了,以致延误到连接释放后的某个时间才到达B;B收到这个早已失效的请求后,误以为A发起了一次新的连接请求,向A发送确认报文段,同意建立连接。

TCP 连接释放

特点

连接的任何一方都可以主动关闭连接

  • 发送FIN报文段,表示己方不再发送数据

另一端可以继续发送数据

  • TCP是一个全双工传输协议,双向的字节流传输,两个方向的数据传输可能不会同时结束。
  • 单向的数据传输仍需要得到接收方的确认

报文段异常情况下,任何一方都可以发送 RST 报文段关闭连接

四次挥手释放过程

A、B 都处于 ESTABLISED 状态,假设 A 先传输完数据,主动关闭 TCP 连接。A 向 B 发送连接释放报文段,进入 FIN-WAIT-1 (终止等待1)状态。

B 收到 A 的连接释放报文段后,应答确认,进入 CLOSE-WAIT (关闭等待)状态。TCP 服务器进程此时应通知高层应用进程,从 A 到 B 的连接就释放了,TCP 连接处于半关闭 (half-close) 状态。

A收到B的确认后,进入FIN-WAIT-2 (终止等待2) 。状态B到A方向的连接未关闭,B若发送数据,A仍要接收

若 B 已没有向 A 的数据,其应用进程通知 TCP 释放连接。B 向 A 发送连接释放报文段后,进入 LAST-ACK (最后确认) 状态

A 必须经过时间等待计时器 (TIME-WAIT timer) 设置的时间 2MSL 后,进入 CLOSED 状态。MSL (Maximum Segment Lifetime, 最长报文段寿命),RFC793设为2分钟,允许设为更小值。

为什么 A 在 TIME-WAIT 状态必须等待 2MSL 的时间呢?

确保 A 发送的最后一个 ACK 报文段能够到达 B。

  • 若这个ACK报文段丢失,处在 LAST-ACK 状态的 B 收不到对已发送的 FIN+ACK报文段的确认,会超时重传该FIN+ACK。A能在 2MSL 时间能收到这个重传的 FIN+ACK 报文段,重新启动2MSL计时器;最后A和B都能正常进入CLOSED状态。否则,A 无法收到 B 重传的 FIN+ACK,因此不会再次发送确认,B 会因收不到确认而无法进入 CLOSED 状态。

防止“已失效的连接请求报文段”出现在本连接中

  • A 发送完最后一个 ACK 报文段后,再经过 2MSL,可以使本连接持续时间内产生的所有报文段都从网络中消失,从而使得下个新连接中不会出现这种旧的连接请求报文段
  • 发送FIN报文段,表示己方不再发送数据

DNS

域名的层次化空间

一个 DNS 服务器所负责管辖的 (或有权限的) 范围叫做区 (zone)

DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位

各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的

每一个区设置相应的权威域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射

根域名服务器

根域名服务器是最高层次的域名服务器,也是最重要的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就求助于根域名服务器

顶级域名 (Global Top-level domain, gTLD) 服务器

一般性域名 (e.g. .com, .org, .info)

国家地区域名 (e.g. .cn, .hk, .uk)

一般由专业机构来维护管理 (e.g. VeriSign 管理 .com和 .net域名)

权威 (Authoritative) 域名服务器

负责一个区的域名服务器,提供一个组织内的域名与主机映射关系通常是该组织提供的服务,一般由组织自己维护管理

递归查询和迭代查询的差别和流程

递归查询

主机向本地域名服务器的查询一般都是采用递归查询.若主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求

报文迭代查询

本地域名服务器向根域名服务器的查询通常是采用迭代查询,当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”,再让本地域名服务器进行后续的查询

对比:

递归查询:

迭代查询:

DNS 缓存

负载均衡

网络细腰结构再那一层最合适

为什么要换细腰

网络发生了翻天覆地的变化: 求及挑战一:”更快”

需求及挑战二:”更灵活”:复杂的网络协议与系统无法支持简单、快速组网

需求及挑战三:”更安全”:TCP/IP 对安全性考虑不够

细腰换成什么