计算机网络和因特网

因特网

计算机网络:两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。计算机网络向用户提供的最重要的两大功能是连通性共享

因特网:因特网是一个世界范围的计算机网络,即一个互联了遍及全世界的数十亿计算设备的网络

协议:定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文的发送/接收或其他事件所采取的操作。

协议的三要素

  • 语法(报文格式)
  • 语义(各字段的含义)
  • 同步(报文传输的先后顺序)

网络边缘

主机:容纳运行应用程序,有时进一步分为客户级和服务器

在电子学领域里,带宽是用来描述频带宽度的。在数字传输方面,也常用带宽来衡量传输数据的能力。它表示单位时间内(一般以“秒”为单位)传输数据容量的大小,表示吞吐数据的能力。

带宽的单位一般有两种形式

  • 第一种是以字节为单位来计算,有Bps、KBps、MBps、GBps、TBps等,表示单位时间(秒)内传输的字节数量

  • 第二种是以比特为单位来计算,有bps、Kbps、Mbps、Gbps、Tbps等,表示单位时间(秒)内传输的比特数量

因为一个字节是8比特,因此1B/s=8 bps(b/s)、1 KB/s=8 Kbps(Kb/s)、1 MB/s=8 Mbps(Mb/s)

接入网

  • 家庭接入网络:点对点接入、线缆调制解调器、光纤到户
  • 企业接入网络:LAN(以太网)、WIFI
  • 广域无线接入网络:3G、4G、5G

物理媒介

双绞线、同轴电缆、光前线缆、无线电磁波

网络核心

电路交换:网络资源(如带宽)被分片

分组交换:数据以离散的数据块通过网络来发送、每个分组使用全部链路带宽

相比于电路交换,分组交换允许更多用户使用网络

第一层ISP:国家/国际级ISP,第一层提供了公用的因特网交换点(IXP)

第二层ISP:较小的区域级的ISP

第三层ISP:最后的接入网络(最接近端系统)

分组交换中的时延、丢包和吞吐量

优点:适合大量的突发数据传输、资源共享、不需要建立连接

缺点:过度竞争导致分组延迟与丢失、需要可靠数据传输和拥塞控制协议

分组丢失和延迟的原因:分组到达输出链路的速率超过输出链路的容量

分组交换网中的时延

  1. 处理时延

    检查分组首部和决定将该分组导向何处所需要的时间、检查比特级别的差错所需要的时间

  2. 排队时延

    当分组在链路上等待传输时的时延

  3. 传输时延

    $L$表示分组的长度,$R$表示从路由器A到路由器B的链路传输速率,则传输时延是$L/R$

  4. 传播时延

    从链路起点路由器A到路由器B传播所需要的时间是传播时延

我们可以将传输时延类比于车队通过收费站的时间,而传播时延则是该车队从一个收费站到另一个收费站所花时间

节点的总时延即这四种时延相加

排队时延和丢包

丢包产生原因:路由器输入链路和输出链路的缓冲区容量有限,当缓冲区已满时,路由器只好丢弃分组,丢失的分组可能被前路由节点、源节点重传,或不重传

吞吐量

瞬时吞吐量:主机B接收到该文件的速率(以bps计)

平均吞吐量:如果文件由$F$bit组成,主机B接收到所有$F$bit用去$T$s,则平均吞吐量为$F/T$bps

假设$R_s$表示服务器与路由器之间的链路速率,$R_c$表示路由器与客户之间的链路速率,那么吞吐量则是$min\left { R_c,R_s \right } $,即瓶颈链路的传输速率

协议层次及其服务模型

分层的体系结构

因特网的协议栈由5个层次组成:应用层、运输层、网络层、链路层、物理层

分层的作用:

  • 清楚的结构模型允许我们对大型复杂系统定义其特定部分,探讨其各部分的关系
  • 模块化使得系统的维护、升级简化,改变其某一层服务的具体实现对系统其余部分透明(不影响)
  • 分层是将人和机器联系起来的常见手段

逻辑通信

物理通信

应用层

网络应用原理

网络应用体系结构

现代网络应用程序有两种主流体系结构:客户-服务器体系结构对等(P2P)体系结构

当然也存在客户机/服务器和P2P混合的体系结构

进程通信

进程通过软件接口套接字向网络发送报文和从网络接收报文

套接字也称为应用程序和网络之间的应用编程接口(API)

用户通过API对传输层的控制仅限于:

  1. 选择传输协议
  2. 能设定几个参数

进程寻址依靠的是IP地址和端口号

运输服务

可以从4方面对服务要求进行分类:可靠数据传输、吞吐量、时延和安全性

因特网提供的服务有TCP和UDP

面向连接和无连接服务的区别:

  1. 面向连接:必须在建立连接前确认双方链路可达,并已准备好才开始通信。提供可靠或者不可靠的服务
  2. 无连接:发送端在开始通信前不去询问接收端是否可达和是否已准备好接收数据。提供不可靠的服务

可靠与不可靠:

  1. 可靠:遇到误码的报文会进行重发等操作
  2. 不可靠:仅仅丢弃有误码的帧

典型使用UDP传输的是因特网电话

Web和HTTP

HTTP概述

网页由许多对象组成,每个对象被一个URL(统一资源定位符)寻址

客户端浏览器(client)接收并显示Web对象,Web服务器(server)发送Web对象

HTTP即超文本传输协议,是Web的应用层协议

HTTP是一种无状态协议服务器不保留与客户交易时的任何状态。

非持续连接和持续链接

非持续连接每个请求/响应对是经一个单独的TCP连接发送

持续连接所有请求及其响应相同的TCP连接发送

往返时间(RTT):1个小分组从客户主机到服务器再到客户主机所花费的时间

响应时间:2RTT+传输文件的时间

image-20231226105340998

不带流水线的持久HTTP连接:客户收到之前的响应消息,才发出新的请求消息,每个引用对象经历1个RTT

带流水线的持久HTTP连接:HTTP/1.1默认使用,客户遇到1个引用对象就发送请求消息,所有引用对象只经历1个RTT(并行

HTTP/1.1使用FCFS即先到先得模型,默认使用流水线、持久连接。此时小对象可能必须在大对象后面等待传输

HTTP/2则是基于客户端指定的对象优先级的请求对象的传输顺序,同时对象也被分为框架(分片),以减少HOL阻塞

HTTP报文格式

一个请求报文的例子如下

不同的协议定义了不同的方法类型

如果方法为GET,输入数据包含在URL中,而POST的输入数据则在实体体中

需要注意的是头部行与实体体之间存在一个回车换行

响应报文如下

HTTP响应有很多不同的状态码:

  • 200 OK:请求成功,信息在返回的响应报文中
  • 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的”Location”首部行中
  • 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解
  • 404 Not Found:被请求的文档不在服务器上
  • 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP版本

Cookies

Cookie可以用于身份认证、虚拟购物车、推荐广告以及保存用户会话状态

Web缓存

Web缓存器也叫代理服务器

image-20231226112710763

当浏览器向Web缓存器发送请求时,Web缓存器会先检查本地是否存储了该对象的副本,如果没有则会与初始服务器进行TCP连接,并在本地生成副本

条件GET方法:在请求报文中包含对象最后修改时间来证实缓存器中的对象是否为最新

传输协议

文件传输协议

FTP客户首先发起建立1个与FTP服务器端口号21之间的TCP控制连接, 指定TCP作为传输层协议,控制连接上可以进行身份认证,即带外发送给控制信息

当服务器接收到1个文件传输命令时, 在服务器端口号20创建1个与客户的TCP数据连接,1个文件传输完后,服务器结束这个TCP数据连接

由于FTP服务器需要维护用户状态信息,属于有状态连接

主动模式下,客户端发送port信息给服务器

被动模式下,客户端发送PASV命令,服务器返回监听的地址和端口号

邮件传输协议(SMTP,POP3,IMAP)

因特网电子邮箱系统有三个主要的主要组成部分:

  1. 用户代理
  2. 邮件服务器
  3. 简单邮件传输协议

用户代理允许用户阅读、回复、转发、保存和撰写邮件信息,发送邮件信息到服务器,从服务器接收邮件信息,运行邮件协议

邮件服务器存放用户接收的邮件信息,同时维护外出报文队列,运行邮件协议

邮件协议分为邮件发送协议邮件访问协议

SMTP用于从发送方的邮件服务器发送报文到接收方的邮件服务,使用TCP传输到端口号25

传输分为握手、邮件消息的传输、结束三个阶段,邮件消息必须是7-bit ASCII,使用持久连接

用一个独立的句点指示邮件的结束,即CRLF.CRLF

与HTTP相比,HTTP属于拉协议,而SMTP属于推协议

邮件访问协议用于从服务器获取邮件消息,例如POP以及IMAP

POP为无状态,IMAP为有状态协议

DNS

DNS服务

DNS提供以下服务:

  1. 主机名到IP地址转换的目录服务
  2. 主机别名
  3. 邮件服务器别名
  4. 负载分配

一个13台根名字服务器,10个美国,1个英国,1个瑞典,个日本

DNS服务器的层次结构如下:

  1. 根DNS服务器

  2. 顶级域DNS服务器(每个顶级域和国家的顶级域都有)

  3. 权威DNS服务器(组织机构,多数大学和公司)

本地DNS服务器(居民区、大学、机构)不属于层次结构,但也很重要

DNS工作机理

DNS共有两种查询方式,递归查询迭代查询

在递归查询中,域名解析的负担交给被查询的域名服务器

而迭代查询中,被查询的的域名服务器会回复可以被查询的域名服务器的IP地址

本地DNS服务器可以缓存之前的DNS回答,这样当有相同主机名的查询请求时,可以立刻提供所需IP

同时本地DNS服务器也能缓存TLD服务器的IP地址,这样能绕过查询链的根DNS服务器

DNS记录和报文

DNS的查询报文与应答报文具有同样的报文格式

当我们想在DNS数据库中插入记录时,我们需要先在注册机构提供自己的基本权威DNS服务器和辅助权威DNS服务器的名字和IP地址

该注册登记机构将下列两条资源记录插入注册机构的DNS系统中(省略TTL)

(network.com, dns1.network.com, NS)

(dns1.network.com, 212.212.212.1, A)

接下来,如果我们想建立一个网站,则可以将网址www.network.com以类型A的方式记录到权威DNS服务器dns1.network.com中。

如果我们想建一个邮件服务器,则可以将mail.network.com以类型MX的方式记录到权威DNS服务器dns1.network.com中。

DNS的安全问题

  1. 基于主机耗尽型的DNS查询拒绝服务(DDos)攻击:对根域名服务器或顶级域名服务器发起拒绝服务攻击

  2. 基于宽带耗尽型的DNS反弹式拒绝服务攻击:(DNS reflector attacks,又称DNS amplification attacks)。伪造客户地址向大量的DNS服务器发出请求,导致客户被回复淹没。

DNS的攻击方法有本机Host文件被篡改,DNS劫持,DNS污染

对于国家安全来说,域名解析控制器在美西方国家手上、域名服务器的管理者仍然是受美国法律约束的组织

P2P

任意端系统之间直接通信,对等方之间可以间断连接并可以改变IP地址

分发时间是指所有N个对等方得到该文件的副本所需要的时间

在对等方数量上升时,客户-服务器框架所需的最小分发时间上升速度大于P2P

套接字

套接字是一个主机本地应用程序所创建的, 为操作系统所控制的接口。应用进程通过这个接口,使用传输层提供的服务, 跨网络发送(/接收)消息到(/从)其他应用进程。

内容分发网络(CDN)

我们可以将内容的拷贝存储在CDN节点

用户向CDN请求内容,会被定向到附近的拷贝,取得内容。如果网络路径拥塞,则可能选择其他的拷贝

复习内容

传输层

传输层协议运行在端系统上,发送方将应用程序报文分成数据段传递给网络层。接收方将数据段重新组装成报文传递到应用层

多路复用和多路分解

无连接传输时,UDP套接字包含(目的IP地址,目的端口号),主机收到UDP数据段后可以根据套接字中的目的端口号来确定该UDP数据段属于哪个套接字

面向连接连接传输时,TCP套接字包含(源IP地址,源端口号,目的IP地址,目的端口号),接收主机使用所有四个值将数据段定位到合适的套接字。即对同一Web服务器而言,每个连接的客户都有不同的套接字

无连接传输:UDP

无连接即在UDP接收者发送者之间没有握手,每个UDP数据段的处理独立于其他数据段

但这也会导致UDP数据段丢失、传递失序的报文到应用程序

不过UDP也有一些优点

  1. 不需要建立连接(减少延迟)
  2. 简单:在发送者接受者之间不需要连接状态
  3. 很小的数据段首部(8个字节)
  4. 没有拥塞控制

UDP只在IP数据报上添加了端口的功能和差错检测的功能

校验和用于对传输的数据进行差错检测

发送方将数据段看成16bit的整数序列校验和,将数据段内容相加 (1的补码和,即反码),将求和时产生的进位回卷到结果上,最后的累加和按位取反即校验和

发送者将校验和值放入UDP的校验和位置上,接收者将所有字加在一起(包括校验和),如果没有差错则是1111111111111111

可靠数据传输原理

Rdt1.0

rdt1.0基于最简单的情况,即底层信道是完全可靠的,没有bit错误或分组丢失

有限状态机中引起变迁的事件显示在表示变迁的横线上方,事件发生时所采取的操作显示在横线下方

Rdt2.0

Rdt2.0传输协议开始考虑具有bit错误的信道

下层信道可能让传输分组中的bit受损

rdt2.0相对于1.0增加了差错检测和接收方反馈(ACK,NAK)

这里涉及到停等协议:即发送方发送一个报文,然后等待接受方的响应

但是这里存在一个问题,如果一个ACK或NAK分组受损,发送方无法知道接收方是否正确接收了上一块发送的数据

解决这个问题的一个办法即添加数据分组的序号,在在 ACK/NAK 混淆时发送方重发当前分组

Rdt2.1

对于停等协议而言,Rdt2.1只需要采取1比特的序号就足够了

Rdt2.1中,接受方回答的ACK和NAK中会带上自己接收到达分组序号

Rdt2.2

Rdt2.2在2.1上的改进即它是一个不需要NAK的协议

当接收方收到错误分组时,仍然向发送方发送ACK,但是包含接收到的序号

发送方会检查收到的ACK回答中的序号

Rdt3.0

Rdt3.0的出现即为了解决丢包问题

一种方法即发送方明智地选择一个时间值,以判定可能发生了丢包,如果在这个时间内没有收到ACK,则重传该分组

下面是一些情况

但是Rdt3.0在性能上存在一个核心问题:它是一个停等协议

停等协议有着非常低的发送方利用率

流水线技术

发送方允许发送多个还没有确认的报文

此时我们需要增加序号数目的范围,发送方和接收方必须要有缓冲区

当出现差错时有两种恢复方法:回退N步选择重传

回退N步

回退N步方案中,流水线未确认的分组数不能超过某个最大允许数N

N也被称为窗口长度

当上层调用发送方时,必须先检查发送窗口是否已满

如果出现超时,发送方重传所有已发送但还未被确认过的分组。仅使用一个定时器,当收到一个ACK,但仍有已发送但未被确认的分组,则定时器被重新启动,否则停止该定时器

当收到一个ACK时,采取累积确认的方式

选择性重传

选择性重传中,对每个没有确认的报文发送者都要启动一个定时器,发送方只重发没有收到确认的分组

收到一个ACK时,如果其是最小的未确认分组,则增加窗口基序号到下一个未被确认的序号

窗口长度必须小于或等于序号空间大小的一半

面向连接的运输:TCP

报文结构

源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号

确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

数据偏移(即首部长度)——占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。

窗口字段 —— 占 2 字节,用来让对方设置发送窗口的依据,单位为字节。

TCP的校验和计算时同样需要加上伪首部

  • 序号:数据段中第一个字节在数据流中的位置编号
  • 确认:期望从另外一边收到的下一个字节的序号

往返时延的估计和超时

超时时间设置太短会导致不必要的重传,太长会导致对数据段丢失响应慢

RTT(TCP往返时延)即报文从被发出到确认被收到之间的时间量

估计RTT可以使用指数加权移动平均法

每隔一段时间会测定样本RTT,并使用样本RTTT计算当前均值

当我们要设置超时时间时,我们可以使用EstimtedRTT 加上 “安全余量”

可靠数据传输

TCP使用单个重发定时器,定时器是最早没有被确认的报文发送时启动的

快速重传:发送方可以在超时之前通过重复的ACK检测丢失报文段,当收到3个重复报文段的确认,则在定时器超时之前重发丢失的报文段

流量控制

TCP连接的接收方有一个接收缓冲区,当应用程序提取速率慢,则需要控制发送方发送的速度

流量控制使用接收窗口来确认接收缓冲区的剩余空间

连接管理

三次握手过程如下

四次挥手如下

状态转移图如下

拥塞控制

从信息角度看: “太多源主机发送太多的数据,速度太快以至于网络来不及处理”,此时会导致丢失分组和长延迟(由下层路由器导致)

拥塞的另一个“代价”:当分组丢失后, 任何上游路由器的发送能力都浪费了

TCP拥塞控制

TCP采用端到端拥塞控制

发送方通过超时或3个重复的ACK来感知拥塞,当丢失时间发生后,发送方降低发送速率

慢启动:连接开始时,设定一个较慢的速率,但是以2的指数方式增加速率,直到产生丢失事件或达到阈值

当CongWin达到超时前的一半的时候,从指数增长变为线性增长

网络层

网络层从发送方封装报文段为数据报,并传输给接收方主机

每个主机、路由器上都需要运行网络层协议

网络层有两个主要功能:

  • 转发:将分组从路由器的输入端口转移到正确的路由器输出端口
  • 路由:确定分组从发送方传输到接收方所经过的路径

网络层包含数据平面和控制平面

网络层提供的服务:

  • 确保交付
  • 具有时延上界的确保交付
  • 有序分组交付
  • 确保最小带宽
  • 确保最大时延抖动

虚电路和数据报网络

数据报网络提供网络层的无连接服务

虚电路网络提供网络层的连接服务

网络层的面向连接服务在端系统及网络核心的路由器实现

虚电路

虚电路中,源主机-目的主机路径的行为类似于电话网络的行为

在数据传输之前,需要为每个呼叫建立连接

每个分组携带VC标识符(不是目的主机地址)

位于“源-目的路径”上的每个路由器会维护经过它的每条连接的“状态”

链路和路由器的资源(带宽、缓存)可以被分配给VC(专用资源)

沿路径的每条链路都有一个VC号,同时路径上的路由器都有转发表条目

数据报网络

数据报网络中,路由器不需要维护端到端连接的状态,而是使用目的主机的地址进行分组转发

数据报转发表采用地址范围来建立表项

对于给定的目的地址,使用最长地址前缀匹配来完成输出端口的查找

如果前缀存在多个匹配,则选择最长前缀匹配的链路接口

比较

路由器的转发表只维持转发状态信息

数据报网络的转发表由选路算法修改(1~5分钟更新);虚电路网络转发表随虚电路的建立和拆除更新。

一个端系统发送给另一个端系统的一批分组可能在网络中选择不同的路径,到达的顺序可能不一致。

虚电路的网络功能复杂,端系统设备简单;而数据报网络的网络模型简单,端系统功能复杂

因特网服务模型提供的服务保证最少(可能没有!),对网络层的需求最小,使得互连使用各种不同链路层技术的网络变得更加容易。

路由器的工作原理

路由器的两个核心功能:

  • 运行路由算法/协议(OSPF, RIP, BGP)

  • 将分组从路由器的输入链路传送到正确的输出链路。

路由器主要由三部分组成:输入端口、交换架构、输出端口、选路处理器

确定将一个到达的分组通过交换结构转发给哪个输出端口。 通过查找转发表实现,这里的转发表是存储在输入端口的内存中。

经内存的内存交换结构交换速度受总线带宽的速度限制 (每个分组穿过两次总线),交换由CPU(选路处理器)控制完成

经总线的交换结构通过一条共享总线将分组直接传送到输出端口,每次只能有一个分组通过总线传输,所以会形成阻塞和排队

经交换矩阵交换结构(纵横式):由2n条总线组成,n条横,n条纵

当交换结构的速度慢于输入端口的速度,就会在输入端口的缓冲区发生排队。会导致排队延时和由于输入缓冲区溢出导致的丢包

线头阻塞(Head-of-the-Line (HOL) blocking): 在队列前面的被阻塞的数据报会阻止队列中的其他数据报被转发。

输出端口同样会发生排队和丢包,这时需要管理缓存中的数据包(包调度)

因特网中的转发和编址

数据报报文

每个数据链路有自己的MTU(数据区的最大字节数),一个大的数据报可能被分割为若干小的数据报

计算偏移时需要排除20字节的数据头

fragflag用来标识是否是最后一段数据报,0表示是

IP地址

IP地址中前5位用于标识IP地址的类别

本地回环地址:127.0.0.1-127.255.255.254,用于识别主机本身的地址,也叫localhost

私有地址:10.x.x.x,172.16.x.x-172.31.x.x,192.168.x.x,这三个地址称为私有IP地址段,也就是局域网所使用的地址段,在公网上不能被路由

网络号相同的IP地址属于同一个网络。而网络还可以划分为若干子网(subnet)。

划分子网的方法是从主机号借用若干个比特作为子网号,剩下的主机位为主机号。

CIDR

在CIDR方案中,地址中的网络部分可以任意长,地址格式为a.b.c.d/x,这里x是地址网络部分的bit数

子网掩码使用全1表示网络位,全0表示主机位

练习

现有一公司已获得网络号为202.1.1.0/24,如果该公司有3个部门,

(1)如果第1个部门有60台计算机,第二个部门有20台计算机,第三个部门有16台计算机,问使用分类IP的方法如何分配地址?

(2)如果第1个部门有120台计算机,第2个部门有60台计算机,第3个部门有60台计算机,使用分类IP的方法可以分配地址吗?使用CIDR方法如何分配地址?

解:(1)以最多台数的部门(60台)为准,需要的最接近数为26=64,故要从最后个字节借8-6=2位,子网分别为202.1.1.0, 202.1.1.64, 202.1.1.128, 202.1.1.192,在这4个其中任选3个即可。掩码均为255.255.255.192。

(2)若以最多台数的部门(120台)为准,仅能分两个子网,无法满足。故应采用CIDR法:

①首先以最小需求台数部门为准(60台),此时主机号位数需要6位(因为60<=26-2),则子网号位数为8-6=2位,然后将子网划分出来。此时和(1)一样;

②接下来,部门2、3可以直接在4个子网中任选两个,部门1选剩下2个以满足120台的要求(但这两个子网要连续,以便用CIDR法合并之,做超网)。比如202.1.1.128、202.1.1.192分别给部门2、3,部门1用202.1.1.0、202.1.1.64。

③最后将各部门IP段用CIDR超网形式描述,以便对外发布:

部门1:202.1.1.0/25;(注意含义:表示前25位是网络号,且最后一个字节最高位为0,后面7位用做主机号)

部门2:202.1.1.128/26;(最后一个字节最高两位为10,后面6位用做主机号)

部门3:202.1.1.192/26; (最后一个字节最高两位为11,后面6位用做主机号)

DHCP

动态主机配置协议(DHCP):允许一个主机自动获取以下信息:

  • IP地址、子网掩码、默认网关、DNS地址

  • plug-and-play(即插即用)

DHCP的回复中包括客户的IP地址、第一跳路由器的IP地址、DNS的IP地址和名字

相关组织机构

ICANN是一个非营利性的国际组织,负责互联网协议(IP)地址的空间分配、协议标识符的指派、通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理。

所有的IP地址都由ICANN规划,然后主要由国际组织NIC(Network Information Center)具体负责统一分配

NAT网络地址转换

对于对外部网络来讲,本地网络只需要使用一个共同的IP地址,端口号不同

在NAT转换表中记录每个源IP 地址, 端口号)到 (NAT IP地址, 新端口号)转换配对

应为端口号位数的限制,一个局域网地址最多同时支持60000个并发连接

IPV6共16个字节,同时在报文中去掉了校验和,用于减少每一跳的处理时间

选路算法

算法分类

路由选路算法用于更新路由器上的转发表

第一跳路由器(默认路由器):与主机直接相连的路由器

从源主机到目的主机的选路归结为从源路由器到目的路由器的选路

从不同角度,路由算法有如下分类:

  • 全局路由算法:所有路由器拥有完整的网络拓扑信息和链路费用信息

  • 分布式路由算法::以迭代的、分布式的方式计算最低费用路径。节点只有与其直接相连链路的费用信息:不需拥有所有网络链路费用的完整信息。通过迭代计算,并与相邻节点(邻居节点)交换信息。逐步计算出到达某目的节点或一组目的节点的最低费用路径

  • 静态路由算法:路由确定后基本不再变化,只有人工干预调整时可能有一些变化
  • 动态路由算法:当网络的流量负载或拓扑发生变化时,路径可能发生改变。

链路状态选路算法

通过找到每个节点的前驱节点,可以得到所有目的节点的完整路径

转发表:存放从源节点到每个目的节点的最低费用路径上的下一跳节点。即指出对于发往某个目的节点的分组,从该节点发出后的下一个节点。

可以将转发表中具有相同下一跳的表项合并为一项,目的节点用*表示,作为默认路由,其优先级最低

Dijkstra算法的算法复杂度为$O(n^2)$

距离向量路由算法DV

距离向量路由算法是一种迭代、异步和分布式的算法

每个节点存有距离表,一开始仅初始化了自己与邻居节点之间的距离

如果自己的距离向量发生改变,则将新的距离向量通知给邻居

但是存在选路回环现象:

解决方法即毒性逆转

不过当产生三个节点以上的环路时,毒性逆转技术无法检测到选路回环问题

算法对比

层次选路

一个区域内的路由器组成集合“自治系统,”同一个自治系统的路由器运行相同的路由协议——区域内路由协议

域内路由协议包括RIP: 路由信息协议,OSPF: 开放式最短路径优先,IGRP: 内部网关路由协议 (Cisco 所有)

OSPF使用Dijkstra算法,通过散布到整个自制系统的通告来告诉每个节点链路状态

层次OSPF拥有两层:本地区域、主干区域,只在区域内发送链路状态通告,节点有区域内的详细拓扑,但是只知道到达其他区域的最短路径

网关路由器与其他自治系统内的路由器直接相连,运行域间路由协议,与其他网关路由器交互

域间路由协议即BGP

SDN

链路层

链路层中,主机和路由器称为节点,沿着通信路径连接相邻节点的通信信道称为链路

数据链路层的职责是将数据报从一个节点传送到与该节点直接有物理链路相连的另一个节点,传输的报文为数据帧

流量控制控制发送节点向直接相连的接收节点发送数据帧的频率

差错检查(error detection): 差错可能由信号衰减、噪声引入。接收方检测是否出现错误,通知发送方重传或丢弃数据帧

错误纠正(error correction):接收方标识和纠正比特错误,而不需要请求重传

半双工和全双工(half-duplex and full-duplex):在半双工模式,链路的两个节点都可以发送数据,但是不能同时发送

链路层在主机和路由器上实现,主机上主要依靠网络适配器

差错检测和纠错位用于保护网络层传来的数据报,以及链路级寻址信息、序列号和其他字段。

三种主要差错检测技术

二维奇偶校验将信息划为一个矩阵,对每行和每列分别计算奇偶值,这样可以用于定位出现差错的位置

检查和方法则是运输层常用的方法,将校验和附加在信息上

循环冗余检测(CRC)使用多项式编码,把要发送的比特串看作为系数是0或1的一个多项式,对比特串的操作看作为多项式运算。

发送方和接收方先共同选定一个生成多项式 Gr+1比特),最高有效位 (最左边)是1。

可以选择8、12、16和32比特生成多项式G,能检测小于r+1位的突发差错、任何奇数个差错