相关术语
URI:Uniform Resource Identifier 统一资源标识符,指的是一个资源
URL:Uniform Resource Location 统一资源定位符,URI的子集,用地址定为的方式指定一个资源
URN:Uniform Resource Name 统一资源名称,URI的子集,用名称定为的方式指定给一个资源
Host(End System):主机,端系统Communication Link:通信链路
Bandwidth:带宽
Router:路由器
Switch:交换机
Packet Switching:分组交换技术,将发送端要发送的报文分成若干数据块,封装成分组,发送到目的
端,目的端解封后恢复原数据
ISP:Internet Service Provider英特网服务提供商,一个由多个分组交换机和多段通信链路组成的网
络。 端系统通过ISP接入因特网,如住宅区ISP、大学ISP、公司ISP等
IXP:Internet Exchange Point,互联网交换中心
IETF:Internet Engineering Tast Force,英特网工程任务组
RFC: Request For Comments,请求评论,包含所有互联网的协议
ISDN:Integrated Services Digital Network,综合业务数字网
DSL:Digital Subscriber Line,数字用户线
ADSL:Asymmetric Digital Subscriber Line,非对称数字用户线路
FDM:Frequency-Division Multiplexing,频分复用
TDM:Time-Division Multiplexing,时分复用
TCP:Transmission Control Protocol,传输控制协议
IP:Internet Protocol,网络之间互联协议
Distributed Application:分布式应用程序
Socket Interface:套接字接口
Cable Internet Access:电缆英特网接入
Hybrid Fiber Coax:混合光纤同轴
FTTH:Fiber To The Home,光纤到户
LAN:Local Area Network,本地局域网
DSLAM:Digital Subscriber Line Access Multiplexer,数字用户接入线路复用器,用于接纳所有DSL线
路
UDP:User Datagram Protocol,用户数据报协议
PPP:Point to Point Protocol,点对点协议
PDU:Protocol Data Unit,协议数据单元
DoS:Denial of Service,拒绝服务攻击
DDoS:Distributed Denial of Service,分布式拒绝攻击
LAN:Local Area Network,局域网
WAN:Wide Area Network,广域网
HTTP:Hypertext Transfer Protocol,超文本传输协议,默认端口为80
FTP:File Transfer Protocol,文件传输协议,默认端口号为21SMTP:Simple Mail Transfer Protocol,简单邮件传输协议,使用TCP协议,默认服务器端口为25
MIME:Multipurpose Internet mail Extensions, 多用途因特网邮件扩展,在发送非英文邮件时,使
用的编码方法
POP3:Post Office Protocol 3,邮局协议,端口110
IMAP:Internet Message Access Protocol,网络信息获取协议,端口143
DNS:Domain Name System,域名系统
CDN:Content Distrustion Network,内容分发网
FSM:Finite State Machine,有限状态机
GBN:Go Back N,回退N步
SR:Selective Repeat,选择性重传
AIMD:Additive-Increase Multiplicative-Decrease,加性增,乘性减
MSS:Maximum Segment Size,最大报文长度
MTU:Maximum Transmission Unit,最大传输单元
ICANN:Internet Corporation for Assigned Names and Numbers ,互联网名称与数字地址分配机构
IANA:Internet Assigned Numbers Authority,互联网号码分配局
NIC:Network Information Center,互联网信息中心
NAT:Network Access Translation,网络地址转换协议
什么是Internet?
计算机网络
- 两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。
- 计算机网络向用户提供的最重要的两大功能:
- 连通性
- 共享
Internet:由网络构成的网络,从具体构成和提供服务方面进行描述
- 服务上描述
- 提供网络应用基础架构
- 允许终端系统上运行分布式应用程序,并彼此交换数据:
- Web, email, games, e-commerce, database, VOIP, P2P file sharin
- 为分布式应用程序提供的通信服务接口
- 无连接服务connectionless
- 面向连接服务connection-oriented
- 不提供数据传递时间保证(发送端到接收端)的服务
Internet通信控制
-
控制发送和接收消息——协议
e.g., TCP, IP, HTTP, FTP, SMTP -
什么是协议?
协议:定义了两个或多个通信实体间交换报文的格式和次序,以及在报文发送和/或接收或者其他事件方面所采取的行动(响应)
- 协议的基本要素
- 语法
- 语义
- 同步(时序)
协议是水平的,服务是垂直的
协议是控制两个对等实体进行通信的规则,而服务是由下层通过层间接口向上层提供的
协议本身是水平的,即协议是控制两个对等实体进行通信的规则。但服务是垂直的,即服务是由下层通过层间接口向上层提供的。上层使用所提供的服务必须与下层交换一些命令,这些命令在OSI中称为服务原语。协议的实现保证了能够向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议。
Internet标准
- IETF:
Internet Engineering Task Force
(因特网工程任务组) - RFC:
Request for comments
(请求评论)
网络边缘部分
接入网络(access network)
带宽
表示1s内传输数据容量的大小,一般也将“带宽”称为“数据传输率”。
带宽的单位一般有两种形式
第一种是以字节为单位来计算,有Bps、KBps、MBps、GBps、TBps 等,表示单位时间(秒)内传输的字节数量(常用)
第二种是以比特为单位来计算,有bps、Kbps、Mbps、Gbps、Tbps等,表示单位时间(秒)内传输的比特数量
两种带宽的换算
因为一个字节是8比特,
因此1B/s=8 bps (b/s)
家庭接入网络
家庭接入网络: 点对点接入
- 拨号线路上使用modem
- 可达56Kbps 直接接入边缘路由器
- (实际远小于该值,数字模拟调制解调)
- 不能同时网上冲浪和拨打电话: 不能一直在线
- ISDN(Integrated Services Digital Network):综合业务数字网,数字数据传输,2D+B,128Kbps
- ADSL: (asymmetric digital subscriber line,非对称数字用户线路)
- 可达1 Mbps 上行速率 (典型 < 512 kbps)
- 可达 8 Mbps 下行速率 (典型 < 4 Mbps)
- FDM: 50 kHz - 1 MHz 高速下行通道
- 4 kHz - 50 kHz 高速上行通道
- 0 kHz - 4 kHz 普通双向电话通道
企业接入网络: local area networks (LAN)
WiFi无线接入网络
广域无线接入网络
物理介质
- 物理链路: 在发送方和接受方间,传播位(bit)信号
- 导引型媒体:
- 信号在固态介质中有向传播, 如:光纤、双绞线和同轴电缆等
- 非导引型媒体:
- 信号在大气空间或外太空空间自由传播, 如:无线电
双绞线
同轴电缆和光纤线缆
无线电磁波
端系统上的因特网服务
- 因特网在端系统上为应用程序之间的数据传递提供了哪些服务呢?
面向连接的服务
无连接服务
网络核心部分
电路交换
频分和时分
500ms + 640kb / (1.536Mbps / 24) = 500ms + 640kb / 64Kbps = 10.5s
分组交换
- 每个端到端的数据流被划分成分组
- 所有分组共享网络资源
- 每个分组使用全部链路带宽
- 资源按需使用
- 资源竞争:
- 资源需求总量可以大于可获得资源的总量
- 拥塞: 采用分组队列, 等待使用链路
- 存储转发: 分组每次转发1站
- 在1个链路上传输
- 每经过1个链路转发1次
- 转发分组前,要求收到完整分组
分组交换网络的分类
- 数据报网络: TCP/IP
- 分组目的地址决定下一跳
- 会话期间路由可以改变
- 比方: 驱车逐段问路
- 虚电路网络: X.25,FR,ATM
- 每个分组有1个标签 (虚电路号,virtual circuit ID), 标签决定下1跳
- 连接建立时确定固定的路径, 并且将保持于整个会话期间
- 路由器必须为每个连接维护状态信息
- 分组交换:在通讯过程中,源主机将报文划分为多个小的数据块,封装成分组,将每个分组通过若干分组交换机传输到目的主机,目的主机拆分分组,并重新组装成报文(分组交换机会将整个分组接收下来(存储),再将分组发送到目的地(转发))
- 输出缓冲:用于保存准备发送到某个链路的分组,每条相连的链路都对应有一个输出缓冲
- 排队时延:分区在输出缓冲中等待转发的时间,某条链路上要转发的分组多,需在其输出缓存中等待。排队时延是变化的,与网络中的拥塞有关
- 分组丢失:当缓冲区满时,有的缓冲会被丢弃,就出现了分组丢失
- 数据报网络(TCP/IP):分组的目的地址决定下一跳,会话期间路由可以改变(类比驱车问路)
- 虚电路网络:每个分组有1个标签 (虚电路号,virtual circuit ID), 标签决定下1跳,连接建立时确定固定的路径, 并且将保持于整个会话期间,路由器必须为每个连接维护状态信息
- 虚电路一定是面向连接的,而数据报可以面向连接,也可以不面向连接
- 电路交换:通讯双方建立专用的连接用于双方通信,直到通讯结束,例如电话网络
- 频分复用(FDM):将链路的频谱分为若干频段,每个频段供一个专用连接
- 时分多路复用(TDM):将一段时间划分为多个帧,每个帧被划分为多个时间相同的时隙,每个时隙专用于一个连接,用于传输数据
Internet主干/ISP的结构组成
Internet松散分层,由众多网络构成的网络
- 构成Internet的核心主干:第一层ISPs【国家/国际级ISP】
- 覆盖国际区域的ISP彼此对等,通过因特网交换节点【Internet Exchange Point IXP】互连。
- 第二层ISP(区域级ISP)
- “第二层” ISPs: 较小的(通常是区域级的) ISPs
——连接到1个或多个 tier-1 ISPs, 也可能连接其他 tier-2 ISPs
- 第三层ISP(本地ISP或接入ISP)
- 最后的接入网络(最接近端系统)
- Internet结构组成与分组传送
IXP作用:用于减少服务费用,当两个ISP通过IXP进行交换的时候,不收取流量费用
分组交换网络中的延迟、丢失和吞吐量
- 路由器分组缓冲区队列
- 分组到达输出链路的速率超过输出链路的容量,产生延迟,甚至丢失
- 分组在缓冲区队列排队, 按序等待
分组延迟的4种类型
- 处理时延:检查错误位,选择输出链路,高速路由器等所产生的的延迟-微妙级
- 排队时延:等待被发送到输出链路上的时间,取决于路由器的拥塞程度(通过流量强度来判断排队时延(La/R)L是分组长度,a是分组到达率,R是带宽,如果趋近1,排队时延会迅速增加,如果趋近0,几乎没有排队时延,如果大于1,则排队时延无限大,容易出现分组丢失)
- 传输时延:将分组推向链路所消耗的时间(L/R,L是分组长度,R是链路带宽)
- 传播时延:分组在物理链路上的传播时间(d/s,d为物理链路长度,s为物理链路传播速度)
将上述四个时延相加就得到分组交换的总时延
总的节点时延=
节点处理时延 +
排队时延 +
传输时延 +
传播时延
排队时延:
- R=链路带宽 (bps)
- L=分组长度 (bits)
- a=平均分组到达率 average packet arrival rate
- 流量强度:traffic intensity = La/R
分组丢失
- 路由器输入链路和输出链路的缓冲区容量有限
- 当分组到达路由器输入链路发现缓冲区已满,则路由器只好丢弃分组
- 当分组在路由器内部要转发到输出链路时发现输出缓冲区队列已满,路由器只好丢弃分组
- 丢失的分组可能被前路由节点、源节点重传,或不重传
- 丢包率或分组丢失率(packet loss rate/ratio)
吞吐量(Throughput)
-
网络吞吐量——
- 单位时间内整个网络传输数据的速率或分组数
- 单位:bps或data packets per second
-
吞吐量: 接收端接收到数据的比特速率 (bps )
- 瞬时吞吐量: 某一瞬间的吞吐量
- 平均吞吐量: 一段时间内的吞吐量均值
min{Rs,Rc,R / M}
max{min{Rik}},k=1…M,i = 1…N
∑min{R1k,…,RNk}
所有分组到达目的主机所耗费总时延,即为最后一个分组到达目的主机所花费的总时间。设最后一个分组为X:
- 在X进入链路之前,要等待之前的P-1个分组进入链路,它们的总传输时延为(P-1)L/R
- X进入后,经过N段链路到达目的地,共花费传输时延N*L/R
- X在链路还还要经历传播时延,N*m/C
因此,所有分组到达目的主机所耗费的总时延
=(P-1)L/R+NL/R+Nm/c
协议层及其服务模型
网络协议栈
- 应用层:FTP,SMTP,STTP等
- 支持网络应用,报文传送
- 传输层:TCP,UDP等
- 主机进程间数据段传送
- 网络层:IP协议,路由协议等
- 主机(源目标节点)间分组传送
- 链路层:PPP(Potint to Point Protocol,点对点协议),Ethernet等
- 相邻网络节点间的数据帧传送
- 物理层:物理介质上的比特传输
逻辑通信
实体:定义自身功能的软硬件集合
对等实体:两台计算机上同一层所属程序、进程、实体称为该层的对等程序、对等进程或对等实体
协议分层中的数据传输
- 各层发方从上层到下层,收方从下层到上层传递数据
- 发方添加头部信息创建新的数据单元(封装),收方去掉首部(解封)
- 传递新的数据单元到下层/上层
- 各层传送不同的协议数据单元PDU
网络中的攻击威胁
网络安全的重要属性:真实性,可用性,机密性,完整性,不可否认性
网络攻击分为被动攻击主动攻击
主动攻击是攻击者通过网络线路将虚假信息或计算机病毒传入信息系统内部,破坏信息的真实性、完整性及系统服务的可用性,即通过中断、伪造、篡改、重放和重排信息内容造成信息破坏,使系统无法正常运行。包括拒绝服务攻击(DoS)、分布式拒绝服务(DDos)、信息篡改、资源使用、欺骗、伪装、等攻击方法
被动攻击是攻击者非常截获、窃取通信线路中的信息, 主要是收集信息而不是进行访问,并不涉及数据的任何改变,使信息保密性遭到破坏, 数据的合法用户对这种活动一点也不会觉察到,给用户带来巨大的损失。被动攻击包括嗅探、信息收集等攻击方法
常见的攻击方式分为:
-
植入恶意软件:病毒,蠕虫,僵尸网络:通过各种手段在大量计算机中植入特定的恶意程序,使控制者能够通过相对集中的若干计算机直接向大量计算机发送指令的攻击网络攻击服务器或网络基础设施:拒绝服务攻击(DoS)通过以下三种方式进行攻击
-
弱点攻击:向一台目标主机上运行的易受攻击的应用程序或操作系统发送制作精细的报文,达到攻击的目的
-
带宽洪范:攻击者向目标主机发送大量分组,分组数量之多使得目标的接入链路变得拥塞,使得合法的分组无法到达服务器
-
连接洪范:攻击者在目标主机中创建大量半开或者全开的TCP连接,使主机因为伪造的连接而陷入困境,无法打开合法的连接
-
嗅探分组:分组嗅探器可以记录每个流经分组,从而嗅探用户的隐私信息
-
伪装:攻击者通过伪装成用户信任的角色来截取用户的信息
- 计算机网络的定义
- 协议的定义和基本要素
- Internet的构成描述:
- 具体构成:边缘(端系统,包括软件和硬件)、核心、接入网络和物理介质
- 网络交换方式:电路和分组
- 电路:时分和频分
- 分组:数据报和虚电路
- 分组交换网络中的延迟及其计算
- TCP/IP的分层模型,各层PDU的名称和功能
第一章单元检测
# 第二章 应用层
应用层协议原理
网络应用程序体系结构
- 客户机/服务器体系结构:至少有一个服务器,一个客户机,其中服务器总是打开的,具有固定的众所周知的IP地址,主机群集常被用于创建强大的虚拟服务器,而客户机向服务器端进行通信,可以间断的同服务器连接,可以拥有动态的IP地址,客户机相互之间不直接通信
- P2P体系结构:没有总是打开的服务器,任意一对主机直接相互通信,对等方间歇连接并且可以改变IP地址
- 优点:自扩展性
- 缺点:难以管理
- 客户机/服务器和P2P混合的体系结构:文件直接在对等方之间交换,文件搜索通过服务器,中心服务器记录对等方内容,对等方查询中心服务器来决定要求文件位置,两个聊天用户之间是P2P,注册查询时通过服务器,用户上线时要在中心服务器上进行注册,用户与中心服务器联系以找出在线小伙伴,git配合上共享服务器就能实现该种方式
进程通信
- 进程:运行在端系统中的程序
- 同一主机上的两个进程通过内部进程通信机制进行通信
- 不同主机上的进程通过交换报文相互通信
- 客户进程: 发起通信的进程
- 服务器进程: 等待联系的进程
- 寻址通过IP地址和端口号
注意:具有P2P体系结构的应用程序既有客户进程和服务器进程。
应用层协议
- 交换的报文类型,如请求报文和应答报文
- 报文类型的语法:报文中的各个字段及其详细描述
- 字段的语义,即包含在字段中的信息的含义
- 进程何时、如何发送报文及对报文进行响应
因特网传输协议提供的服务
-
TCP服务
- 面向连接的服务:在客户机程序和服务器程序之间必须建立连接
- 可靠的传输服务:接收和发送进程间,数据是可靠的
- 流量控制:发送方不会淹没接收方
- 拥塞控制:网络出现拥塞时抑制发送进程
- 没有提供:时延保证,最小带宽保证
-
UDP服务
- 无连接服务
- 不可靠数据传输
- 没有提供:建立连接,可靠性,流量控制,拥塞控制,时延和带宽保证
面向连接是指:必须在建立连接之前确认双方链路可达,并已准备好才开始通信,提供了可靠或者不可靠的服务
无连接指:发送端在开始通信前不去询问接收端是否可达和是否已准备好数据,提供不可靠的服务
应用 | 应用层协议 | 下面的传输协议 |
---|---|---|
电子邮件 | SMTP [RFC 28c21] | TCP |
远程终端访问 | Telnet [RFC 854] | TCP |
Web | HTTP [RFC 2616] | TCP |
文件传输 | FTP [RFC 959] | TCP |
流媒体 | 通常专用(e.g. RealNetworks) | TCP or UDP |
因特网电话 | 通常专用(e.g., Skype) | 典型用 UDP |
- TCP和UDP
- 没有加密
- 网络明文传输,如用户名和口令信息等
- SSL【应用层】
- 提供加密的TCP连接
- 保证数据完整性
- 端点认证
- 应用使用SSL库调用TCP服务接口
- SSL提供套接字API
Web应用和Http协议
- 网页(Web页,或称文档)由许多对象组成。
- 对象就是文件,可以是HTML文件, JPEG图像, Java applet, 音频文件…
- 多数网页由单个基本HTML文件和若干个所引用的对象构成
- 每个对象被一个URL(Uniform Resource Locator统一资源定位符)寻址
举例URL:
-
HTTP: 超文本传输协议(HyperText Transfer Protocol)
- Web的应用层协议
- client/server模式
- client: 浏览器browser请求, 接收, “解释显示” Web对象
- server: Web服务器响应请求,发送 Web对象
- HTTP 1.0: RFC 1945
- HTTP 1.1: RFC 2616
-
使用TCP:
- 客户初始化一个与HTTP服务器80端口的TCP连接 (创建套接字)
- HTTP服务器接受来自客户的TCP连接请求, 建立连接
- Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息
- 最后结束(或叫关闭)TCP连接
-
HTTP是无状态协议
-
HTTP服务器不维护客户先前的状态信息
非持续连接和持续连接
-
非持久HTTP连接
- 每个TCP连接上只传送一个对象,下载多个对象需要建立多个TCP连接
- HTTP/1.0使用的是非持久HTTP连接
-
持久HTTP连接
- 一个TCP连接上可以传送多个对象
- HTTP/1.1默认使用持久HTTP连接
- 不带流水的持久HTTP连接:客户必须收到响应才能继续发送请求,也就说多个资源之间不能够并发
- 带流水的持久HTTP连接:客户可以在收到响应之前发送新的请求,多个请求可以同时发送,只需要一个RTT就能获得所有资源
- 定义往返时间RTT(Round-Trip Time):
- 1个小分组从客户主机到服务器再到客户主机所花费的时间
- 响应时间:
- 1个RTT用于建立TCP连接
- 1个RTT用于HTTP请求/响应消息的交互
- html文件传输时间
- total = 2RTT+transmit time
HTTP/2
- 关键目标:减少多对象HTTP请求的延迟
- HTTP1.1:在单个TCP连接上引入了多个流水线GET
- 服务器按顺序响应GET请求(FCFS: first-come-first-served scheduling)
- 对于FCFS,小对象可能必须在大对象后面等待传输( head-of-line (HOL) blocking, 线头阻塞HOL)
- 丢失恢复(重新传输丢失的TCP段)对对象传输时间的影响
- HTTP/2:[RFC 7540,2015]增加了服务器向客户端发送对象的灵活性
- 方法、状态代码、大多数头字段与HTTP1.1相比没有变化
- 基于客户端指定的对象优先级的请求对象的传输顺序(不一定是FCFS)
- 将未请求的对象推送到客户端
- 将对象划分为框架,安排框架以减少HOL阻塞
- 普通TCP连接没有安全性
- HTTP/3:通过UDP增加了安全性、每个对象的错误和拥塞控制(更多的流水线操作)
- 关于传输层支持HTTP/3的更多信息: QUIC协议(Quick UDP Internet Connections)
HTTP报文格式
请求报文格式
请求方法类型
- GET
- POST
- HEAD
- 服务器收到请求时,用HTTP报文进行响应,但不返回请求对象
- HTTP1.1
- PUT
- 文件在实体主体中被上载到URL字段指定的路径
- DELETE
- 删除URL字段指定的文件
响应报文格式
HTTP 响应的状态码
位于服务器响应客户的响应消息的第一行
几个常见的样本状态码:
- 200:请求成功,所请求信息在响应消息中返回
- 301:所请求的对象已永久迁移,新的URL在本响应信息的头部指出
- 400:该请求不能被服务器解读
- 404:服务器不存在所请求文档
Cookies
目的:提高用户和服务的交互性
- cookie头部行在HTTP请求消息中
- cookie头部行在HTTP响应消息中
- cookie文件保存在用户主机中并被用户浏览器管理
- cookie信息也保存在Web站点的后端数据库中
cookies可以跟踪用户:例如虚拟购物车,推荐广告,身份认证,用户会话状态
Web缓存
-
目标: 代表起始服务器满足HTTP请求
-
用户配置浏览器: Web 访问经由缓存
-
所有HTTP请求指向缓存
- 对象在缓存中:缓存器返回对象
- 否则缓存器向起始服务器发出请求,接收对象后转发给客户机
-
减少对客户机请求的响应时间
-
减少内部网络与接入链路上的通信量
-
能从整体上大大降低因特网的Web流量
条件GET方法:
- 用于判断缓存是否为最新的版本,在请求中包含if-modified-since:根据响应报文的内容判断缓存是否为最新的
- 如果是最新的,响应报文中不会含有请求的对象,会包含:HTTP/1.0 304Not Modified表示缓存是最新版本
- 如果修改过,则会返回正常请求的对象
文件传输协议:FTP
FTP:传输文件到远程主机/从远程主机下载文件,默认端口号21
FTP的工作流程:
- 客户首先发起建立一个与服务器21端口之间的TCP连接(控制连接)
- 客户在控制连接上进行身份认证
- 客户在控制连接上发送命令浏览远程主机目录
- 当服务器接收到一个文件传输命令时,他使用端口20创建一个与客户的TCP数据连接
- 传输一个文件后,服务器结束这个连接,因为FTP是带外发送控制信息,也就是说如果要请求其他的文件会建立新的TCP连接,因为FTP传输的单位是文件,所以传输多个文件时会创建多个TCP连接这是低效的,推荐打包后传送
FTP数据连接的建立的方式:
- 主动模式(客户端指定地址和端口):
- 客户端通过发送PORT命令来指定IP地址和端口号
- 服务器根据PORT命令的端口号和地址来建立连接
- 被动模式(服务器指定地址和端口):
- 客户端发送PASV命令
- 服务器返回监听的地址和端口号
- 客户端发起数据连接
SMTP
电子邮件的三大组成
- 用户代理:运行在客户端的软件或者Web网页,允许用户对邮件进行相关操作(发送,转发等)
- 邮件服务器:存放用户邮件的服务器,邮件之间的发送通过邮件服务器通信来完成
- 邮件协议:邮件的发送协议,邮件的收取协议,采用标准的7位ASCII码
SMTP
- 用来交换邮件消息的协议
- 客户使用TCP来可靠传输邮件消息到服务器端口号25
- 直接传送: 发送服务器到接收服务器
- 传输的3个阶段
- 握手 (问候)
- 邮件消息的传输
- 结束
- 命令/应答的交互
- 命令: ASCII文本格式
- 应答: 状态码及其短语
- 邮件消息必须是7-bit ASCII
SMTP: 总结
- SMTP使用持久连接
- SMTP 要求邮件消息(header & body)必须是7-bit ASCII
- SMTP服务器使用CRLF.CRLF 来判断邮件消息的结束
与HTTP的比较:
- HTTP: 拉协议
- SMTP: 推协议
- 都有ASCII 命令/应答交互, 状态码
- HTTP: 每个对象封装在它各自的HTTP响应消息中发送
- SMTP: 一个邮件内各个对象置于同一个邮件消息的多目部分发送
邮件访问协议
- SMTP: 递送/存储邮件消息到接收者邮件服务器
- 邮件访问协议: 从服务器获取邮件消息
- POP: Post Office Protocol 邮局协议[RFC 1939]110端口号
- 身份认证 (代理 <–>服务器) 并 下载邮件消息
- 包含三个阶段:
- 授权,事务处理,更新,POP是没有状态的,当断开连接之后,需要重新登录
- IMAP: Internet Message Access Protocol [RFC 3501] 143端口
- 更多功能特征 (更复杂!)
- 允许用户像对待本地邮箱那样操纵远程邮箱的邮件
- HTTP: 也可以通过HTTP来进行邮件的接收
- POP: Post Office Protocol 邮局协议[RFC 1939]110端口号
POP3协议
DNS
DNS: 存储资源记录(RR,Resource Records)的分布式数据库
DNS的出现是为了方便人们记忆网站的地址,IP地址难以记忆,可以转换为其他的字符串例如转换为uestc.edu.cn
DNS主要提供的功能:
- 主机名到IP地址的转换
- 主机别名
- 一个主机可以有一个规范主机名和多个主机别名
- 邮件服务器别名
- 负载分配
- DNS实现冗余服务器:一个IP地址集合可以对应同一个规范主机名
DNS的分层架构【Domain Name System】域名系统:
- 分布式数据库:一个由分层DNS服务器实现的分布式数据库
- 应用层协议:DNS服务器实现域名转换 (域名/地址转换)
客户机怎样决定主机名www.amazon.com的IP地址?
-
客户机查询根服务器得到com DNS服务器
-
客户机查询com DNS服务器得到amazon.comDNS服务
-
客户机查询amazon.comDNS服务器得到www.amazon.com的IP地址
根名字服务器负责记录顶级域名服务器的信息
顶级域服务器(top-level domain servers):负责顶级域名 com, org, net, edu, etc, 和所有国家的顶级域名 uk, fr, ca, jp.
- Network solutions 公司维护com顶级域的TLD服务器
- Educause 公司维护edu顶级域的 TLD服务器
权威DNS服务器(authoritative DNS servers):
在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。组织机构的权威DNS服务器负责保存这些DNS记录。
- 多数大学和公司维护它们的基本权威DNS服务器
本地DNS服务器:Local DNS Name Server
- 严格来说不属于层次架构
- 每个ISP都有一个本地DNS服务器,也叫默认服务器
- 当主机发出DNS请求时,该请求被发往本地DNS服务器,起着代理的作用,转发请求到层次结构中
DNS存储资源记录(RR:Resource Records)
RR格式(name,value,type,ttl)
当type=A(Address)时,name表示主机名,value表示ip地址
当type=CNAME(canonical)时,name表示主机别名,value表示规范主机名
当type=NS(name server)时,name表示域名,value表示权威名字服务器的主机名
当type=MX(Mail Exchange)时,name表示邮件服务器的主机别名,value表示邮件服务器的真实规范主机名
DNS协议 : 查询报文与应答报文 , 但具有同样的报文格式
P2P技术
- 没有总是在线的服务器
- 任意端系统之间直接通信
- 对等方之间可以间断连接并可以改变IP地址
一般采用集中式目录架构:例如git+github
存在问题
- 单点故障
- 性能瓶颈
- 侵犯版权
BitTorrent是一种用于文件分发的流行P2P协议。
参与一个特定文件分发的所有对等方的集合被称为一个洪流(torrent)。
一个洪流中的对等方彼此下载等长度的文件块(chunk),典型块长度为256KB。
内容分发网络(CDN)
- 将多份拷贝存储在地理上分散的不同站点来提供服务(CDN)
- 深入: 将CDN服务器部署在众多的接入网络中
- 靠近用户
- Akamai首创, 使用了1700多个位置
- 邀请做客: 在少量(例如10个)靠近接入网的关键位置(例如IXP)建造大集群,邀请到ISP做客
- Limelight等使用
网络应用程序体系结构
Web应用和HTTP协议
基本术语(网页、URL等)
HTTP的特性及其区别(无状态、非持久和持久等)
请求和响应报文
COOKIE技术
Web缓存文件传输协议FTP :两种连接*
- 数据连接、控制连接
电子邮件:组成及其使用的协议
- SMTP
- POP
- IMPA
- HTTP
DNS的功能和实现
P2P文件共享原理和实现技术*
CDN
构造简单的web服务器*
第二章单元检测
第三章 传输层
传输层服务与协议
传输层为两个不同主机上的应用程序之间提供逻辑通信机制
- 传输层协议运行在端系统
- 发送方: 将应用程序报文分成数据段传递给网络层,
- 接受方: 将数据段重新组装成报文传递到应用层
网络层为两个主机之间提供逻辑通信
主要提供两种协议TCP和UDP:
多路复用和多路分解
多路复用:从多个套接字收集数据,添加首部封装数据,然后将报文段传递到网络层的过程叫做多路复用
多路分解:将收到的数据传递到对应的套接字的过程叫做多路分解
- 如何工作?
- 主机收到IP数据报
- 每一个数据报有源IP目的IP
- 每一个数据报搬运一个数据段
- 每一个数据段有源和目标端口号
- 主机用IP地址和端口号指明数据段属于哪个合适的套接字
- 无连接多路分解:
- UDP套接字由两个因素指定(目的IP,目的端口号)
- 具有不同源IP/源端口号,但是具有相同目的IP和目的端口号的IP数据报,指向同样的套接字。
- 面向连接的多路分解
- TCP套接字由四部分指定:
- 源IP地址
- 源端口号
- 目的IP地址
- 目的端口号
- 接收主机使用所有的四个值将数据段定位到合适的套接字
- 服务器主机可同时支持很多个TCP套接字
- TCP套接字由四部分指定:
- 主机收到IP数据报
无连接传输:UDP
UDP套接字有两个属性标识(目的IP地址和目的端口号)
来自不同的IP地址/端口号的IP报文段可以导向同一个套接字
UDP具有以下特点:
- 不需要建立连接(代表延迟较低)
- 简单:在发送者与接受者之间不需要连接状态
- 报文首部很小
- 没有拥塞控制:UDP能够以尽可能快的速度传递
- UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制
- UDP是面向报文的传输协议,对于应用层的报文只添加首部信息就进行发送而不会对报文进行合并或者拆分
- 对于网络层交上来的UDP用户数据报,在去除首部后就原封不动的交付上层的应用程序
- 支持一对一、一对多、多对一、多对多的交互通信
数据段可能丢失、传递失序的报文到应用程序
无连接:在UDP接收者发送者之间没有握手、每个UDP数据段的处理独立于其他数据段
UDP的首部有八个字节,由四个字段组成,每个字段长度为两个字节,长度是指首部和数据的总长度
在UDP中在进行校验和的计算过程中,会引入UDP的伪首部,伪首部的作用仅仅是为了计算校验和
UDP校验和差错检测
目标:对传输的数据进行差错检测
- 发送方
- 将数据段看作16bit的整数序列
- 校验和:数据段内容相加(1的补码和,即反码)
- 发送者将校验和放入UDP的校验和域
- 接受方
- 计算接收到的数据段的校验和
- 检查计算的校验和是否等于校验和域中的值
Internet校验和
- 按位相加
- 回卷
- 取反
可靠数据传输原理
Rdt的发展
TCP套接字由四个属性表示(源IP地址,源端口号,目的IP地址,目的端口号)
- 逐步开发发送方和接收方的可靠数据传输协议 (rdt)
- 仅考虑单向数据传输,但控制信息将双向流动!
- 用有限状态机 (FSM) 来标示发送方和接收方
Rdt1.0 完全可靠信道上的可靠数据传输
- 在完美可靠的信道上
- 没有bit错误
- 没有分组丢失
- 发送方,接收方分离的 FSMs :
- 发送方发送数据到下层信道
- 接收方从下层信道接收数据
RDT2.0:具有bit错误的通道上的可靠数据传输
具有bit错误是指:在接收方接收的报文段中的数据可能会和发送方发送的数据不一致,一般通过差错校验机制来判断是否发送错误
- 如何从错误中恢复
- 确认(ACKs):接受方明确告诉发送方分组接收正确
- 否认(NAKs):接收方明确告诉发送方分组接收出错
- 发送方收到NAK后重发分组
- Rdt2.0新增差错检测和接收方反馈
- **缺陷:**ACK和NAK混淆
- 处理重复:发送方给每个分组加上序号【区分新旧分组】
- 在ACK/NAK混淆时发送方重发当前分组
- 接收方丢弃重复分组
- 只需要0、1信号就行,区分新老信号
什么是停等协议?发送方发送一个报文,然后等待接受方的响应
RDT2.1:发送方处理混乱的ACK/NAK
在2.0中,可能会出现发送的ACK/NAK出现错误因此出现了RDT2.1,通过分组上来添加序号来判断是否最新的分组
RDT2.2:无NAK的消息协议
不用 NAK, 如果上个报文接收正确接收方发送 ACK
接收方必须明确包含被确认的报文的序号
发送方收到重复 ACK 将导致和 NAK一样的处理: 重发当前报文
在2.1中可以去掉NAK,只通过ACK来表示可以减少信息类型数量
RDT3.0:具有出错与丢失的信道
发送的消息除了出错之外,还有可能完全丢失,需要设置定时器当超过一定时间后重新发发送分组
a)正常发送
b)一号报文丢失
d)发送方超时间隔过短
定量看:rdt3.0的性能
例如: 1 Gbps链路, 15 ms 端到端传输延迟, 8000bit 报文, 计算网络利用率?
停等浪费了物理资源的使用
流水线技术
- 流水线:允许发送方可以在接收到ACK之前发送其他分组
- 序号数目的范围必须增加
- 在发送方/接收方必须有缓冲区
- 两个通用形式
- go-Back-N
- 选择重传
Go-Back-N【滑动窗口协议】
发送方:
-
在分组头中规定一个k位的序号【0-2k-1】
-
“窗口”, 允许的连续未确认的报文【长度为n的序列】
-
ACK(n): 确认所有的报文直到(包含)序号n - “累积ACK”
-
对第一个发送未被确认的报文定时
-
超时(n): 重发窗口中的报文n及以上更高序号的报文(只有一个定时记录最早的未被确认报文的发送时间)【窗口下沿设置定时器】
接收方
重发最高序号的分组ACK
- 发送0-3号报文后,等待ACK
- 0和1号ACK到了,窗口移动到2号,并发送4和5号
- 由于二号报文丢失了,于是接收方丢弃345,并且都回复ACK1,要求传二号报文
- 发送方的二号报文窗口下沿超时,重发2345报文
4567
收到了023的ACK,接收方发送的ACK是按序列顺序进行发送的,说明1号分组发送成功,只是ACK1丢失。所以需要重传最大的ACK+1的分组及其后面的分组
选择性重传SR
- 接收方分别确认已经收到的分组
必要时,缓冲报文, 最后按序提交给上层 - 发送者只重发没有收到确认的分组
对每个没有确认的报文发送者都要启动一个定时器(每个未被确认的报文都有一个定时器) - 发送窗口
N 个连续序号
限制被发送的未确认的分组数量
和GBN的区别,发送方的窗口出现间隙
发送方接收方的窗口不一致
发送方收到ACK时,若在窗口范围内,标注为被接收,如果接收后使得窗口某一部分被填满了,则窗口向右边滑动
接收方如果接收分组在窗口内,就发送ACK
失序分组暂时缓存
有序分组:交付上层,窗口滑动
接收方收到窗口左边的分组,必须发送相应的ACK,否则发送方的窗口会被卡住
二号在传输过程中丢失了,接收方缓存345
发送方因为超时重传二号包
序号是有限的,窗口大小小于或等于序号空间大小的一半
面向连接传输TCP
报文段结构
新版的首部格式:
CWR:CWR 标志与后面的 ECE 标志都用于 IP 首部的 ECN 字段,ECE 标志为 1 时,则通知对方已将拥塞窗口缩小;
ECE:若其值为 1 则会通知对方,从对方到这边的网络有阻塞。在收到数据包的 IP 首部中 ECN 为 1 时将 TCP 首部中的 ECE 设为 1.;
URG:该位设为 1,表示包中有需要紧急处理的数据,对于需要紧急处理的数据,与后面的紧急指针有关;
ACK:该位设为 1,确认应答的字段有效,TCP规定除了最初建立连接时的 SYN 包之外该位必须设为1;
PSH:该位设为 1,表示需要将收到的数据立刻传给上层应用协议,若设为 0,则先将数据进行缓存;
RST:该位设为 1,表示 TCP 连接出现异常必须强制断开连接;
SYN:用于建立连接,该位设为 1,表示希望建立连接,并在其序列号的字段进行序列号初值设定;
FIN:该位设为 1,表示今后不再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段。每个主机又对对方的 FIN 包进行确认应答之后可以断开连接。不过,主机收到 FIN 设置为 1 的 TCP 段之后不必马上回复一个 FIN 包,而是可以等到缓冲区中的所有数据都因为已成功发送而被自动删除之后再发 FIN 包;
TCP序号和确认
- 序号:
- 数据段中第一个字节在数据流中的位置编号
- 确认:
- 期望从另外一边收到的下一个字节的序号
- 累计ACK
问: 接收方如何处理失序的数据段
答: TCP规范没有明确规定, 由编程人员处理
TCP往返时延的估计和超时
如何设置 TCP 超时值?
比 RTT长;但 RTT变化
太短: 不成熟的超时、不必要的重传
太长: 对数据段丢失响应慢
首先指定RTT的初始估计值
每次接收到样本RTT,和预测RTT指数加权平均
TCP可靠数据传输机制
-
TCP在IP不可靠服务之上创建rdt服务
-
流水线技术处理报文段
-
累积确认
-
GBN和选择性重传的综合
-
TCP不会像GBN一样直接将失序报文报文丢掉,而是像SR一样缓存。
发送方不会重传一大段报文,只重传没有被确认的
TCP使用累计确认,为了降低开销只使用单个重发定时器,和GBN类似
-
-
TCP 使用单个重发定时器
-
触发重发:
——超时事件
——重复确认
快速重传
超时触发重传存在问题:超时周期往往太长
重传丢失报文之前要等待很长时间,因此增加了网络的时延
- 发送方可以在超时之前通过重复的ACK检测丢失报文段
- 发送方常常一个接一个地发送很多报文段
- 如果报文段丢失,则发送方将可能接收到很多重复的 ACKs
- 如果发送方收到一个确认后再收到3个对同样报文段的确认,发送方应意识到不对劲——生成三个重复ACK,是因为接收方存在缺失报文段【冗余ACK】
- 启动快速重传: 在定时器超时之前重发丢失的报文段
接收方收到乱序的包就会发送重复ACK,两次的重复ACK可能是重新排序造成的,三次的重复ACK可能是丢包造成的
两次重复ACK肯定是乱序造成的
丢包肯定会造成三次重复ACK
假定通信双方如下,A发送4个TCP 报文段给B,编号如下,N-1成功到达,因此A收到B的ACK(N),重组到达顺序,观察收到ACK(N)的数量
A 发送至 B
A方发送顺序->N-1,N,N+1,N+2
B方到达顺序
由于累计确认机制,如果发生乱序
① N-1,N,N+1,N+2 -> A收到1个ACK (N)
② N-1,N,N+2,N+1 -> A收到1个ACK (N)
③ N-1,N+1,N,N+2 -> A收到2个ACK (N)
④ N-1,N+1,N+2,N -> A收到3个ACK (N)
⑤ N-1,N+2,N,N+1 -> A收到2个ACK (N)
⑥ N-1,N+2,N+1,N -> A收到3个ACK (N)
如果N丢包
N-1,N+1,N+2 -> A收到3个ACK (N)
N-1,N+2,N+1 -> A收到3个ACK (N)
TCP 乱序 有2/6 的概率会造成A收到三次冗余ACK(N);
而如果N丢了,则概率为100%A
基于以上的统计,当A接收到三次 冗余ACK(N)启动立马快速重传N可快速修复一个丢包的恶劣影响。
而如果A接收到二次冗余ACK(N),则说明是乱序造成的,已经传送到了B
图自小林coding
在上图,发送方发出了 1,2,3,4,5 份数据:
- 第一份 Seq1 先送到了,于是就 Ack 回 2;
- 结果 Seq2 因为某些原因没收到,Seq3 到达了,于是还是 Ack 回 2;
- 后面的 Seq4 和 Seq5 都到了,但还是 Ack 回 2,因为 Seq2 还是没有收到;
- 发送端收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2。
- 最后,收到了 Seq2,此时因为 Seq3,Seq4,Seq5 都收到了,于是 Ack 回 6 。
所以,快速重传的工作方式是当收到三个相同的 ACK 报文时,会在定时器过期之前,重传丢失的报文段。
流量控制
TCP连接的接收方有一个接收缓冲区:应用程序可能从这个缓冲区读出数据很慢
- 提供速度匹配服务
- 发送速率和接受应用程序提取速率匹配
- 流量控制
- 发送方不能发送的太多太快,让接收缓冲区溢出
(假设 TCP 接收方丢弃失序的报文段)
- 流量控制使用接收窗口【窗口字段】:接收缓冲区的剩余空间
- 接收方在报文段中宣告接收窗口的剩余空间
- 发送方限制没有确认的数据不超过接收窗口
- -保证接收缓冲区不溢出
- 接收方控制发送方
连接管理
连接:通信双方通信之前确认彼此的存在,确认一些通信需要的参数,做好一些资源的准备,如开辟缓冲区等。通信过程中需要维护连接状态的存在,当结束通信时通过合理的步骤逐步终止通信过程释放资源。
- 客户端发送不带数据的、SYN标志位为1、指定客户端随机初始序号的数据报请求连接建立
- 服务器接收,回复ACK=1、SYN=1、指定服务器的随机初始序号
- 客户端接收,回复ACK=1、SYN=0,可携带数据
为什么是三次握手?
为什么不是两次
- 三次握手双方都要对信道的可靠性做至少一次确认
- 服务器和客户端都要对双方选择的初始序号进行确认,这样双方才能使用该序号+1来发送数据
- 信道不可靠, 但是通信双方要要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的
为什么不选择更多次
- 下层信道是不可靠的,无法完全保证连接建立好了
- 从效率出发,保证三次即可
假设发送方和接收方为ab
其实很简单, 1.a->b, 这个时候没有任何状态, 2. b->a, b给a发东西, 说明收到了a的东西, 证明了a的发送能力是没问题的,同时证明了b的接收能力也是没有问题的。 如果到这里就结束了, 那么a的接收能力和b的发送能力就没办法保证了。如果再加上3. a->b , 证明了a收到了b的发送, 那么b的发送能力也是好的, a的接收能力也是好的。这样a和b的接收发送的能力都是好的, 就没必要再次证明了
关闭是双向的
拥塞控制原理
多个终端发送数据的时候由于链路带宽的限制若发送过多数据会导致分组丢失和排队时延较长,为了解决这个问题TCP引入了拥塞控制
- 丢失分组:路由器的缓冲区溢出
- 长延迟:路由器的缓冲区排队
流量控制:不让接收方来不及接收报文【发送方不会淹没接收方】
拥塞考虑的是网络的情况
- 端到端拥塞控制
- 没有从网络中得到明确的反馈
- 从端系统观察到的丢失和延迟推断出拥塞
- TCP采用的方法
- 网络辅助的拥塞控制
- 路由器给端系统提供反馈【路由器协助】
- 单bit指示拥塞 (SNA, DECnet, TCP/IP ECN, ATM)
- 指明发送者应该发送的速率
发送方通过调整发送行为来对拥塞进行反应,发送速率是通过调整发送窗口的大小实现的
流量控制中发送方的窗口大小是由接收方返回的接收窗口字段进行调整
引入新机制:拥塞窗口【CongWin】,发送窗口=min{拥塞窗口,接收窗口}
TCP拥塞控制的重点就是通过对网络的感知动态的调整拥塞窗口
发送方通过丢包事件感知拥塞->超时、三次冗余ACK
TCP发送方在丢失事件后降低发送速率【减小拥塞窗口】
采用三个机制
- 慢启动
- 对拥塞事件做出反应
- AIMD【加性增,乘性减】
慢启动
- 刚启动时,将拥塞窗口设为一个最大报文段
- TCP以2的指数方式增加速率直到产生丢失事件,或者达到某个阈值ssthresh
每个RTT中拥塞窗口翻倍
- 超时事件
- 拥塞窗口置为1MSS,进入慢启动,到达阈值线性增长
- 三次冗余ACK
- 拥塞窗口减半 + 3,然后线性增长
- 表明网络有传输的能力
- 最初是指定的
- 随着传输的进行动态变化,设为丢包之前的一半
AIMD【加性增乘性减】
- 发生丢包事件:拥塞窗口减半
- 每个RTT拥塞窗口增加一个MSS
慢启动状态:拥塞窗口呈2的指数倍增长
拥塞避免状态:拥塞窗口线性增长快速恢复状态:每收到一个重复的ACK,拥塞窗口+1【网络数据包守恒原则】
无论何种状态,超时事件发生则转移到慢启动状态,阈值降为丢包前窗口的一半,拥塞窗口变为1;
无论何种状况,收到3个重复的ACK,转移到快速恢复状态,阈值降为丢包前的一半,拥塞窗口变为新阈值+3
拥塞窗口到达阈值就变为拥塞避免状态
快速恢复状态收到新的ACK转移到拥塞避免状态,并且将拥塞窗口设为阈值
TCP 平均吞吐量
假设忽略慢启动
假设在丢失发生时,设W是窗口大小
如果窗口为 W, 吞吐量是 W/RTT
丢失发生后, 窗口降为 W/2, 吞吐量为 W/2RTT.
平均吞吐量为0 .75 W/RTT
第三章作业
10
以太网帧的数据段的最大长度为1500 byte
1500 byte 减去 IP数据报的首部20 byte,IP片的数据长度最大为1500 - 20 = 1480 byte
IP的数据段 为 UDP报文端 : 8(UDP首部) + 8192 = 8200 byte
8200 / 1480 = 5 … 800 所以应该划分 6 个IP数据报片
对于IP片偏移,其单位为8 byte 需要除以8,如下:
第四章 网络层
学习目的:
- 理解网络层服务的主要原理
- 网络岑服务模型
- 转发(forwarding)和路由(routing)的概念对比
- 路由器的工作原理
- 路由算法及路由协议
- 完成简单的组网及IP地址和路由配置
4.1 引言
网络层提供的功能
- 从发送方主机传输报文段到接收方主机
- 发送方主机封装报文段(segments)为**数据报(datagrams) **
- 接收方主机递交报文段给传输层
- 在每个主机、路由器都需要运行网络层协议
- 路由器会检查通过它的所有IP的数据报的头部字段,然后根据目标IP地址对数据报进行转发
两个主要的网络层功能
- 转发(forwarding): 将分组从路由器的输入端口转移到正确的路由器输出端口(的路由器本地动作)
- 类似驾车通过一个立交桥
- 路由(routing): 确定分组从发送方传输到接收方(目的主机)所经过的路径(或路由)
- 路由算法
- 雷系从发送方到接收方规划旅行路线的过程
路由与转发的相互作用
网络层:数据平面和控制平面
数据平面
- 本地的,每个路由器自身的功能
- 决定抵达路由器输入端口的数据包如何转发到输出端口
控制平面
- 整个网络范围
- 决定数据报在端到端路径上的路由器之间如何路由
- 两种数据平面的实现方式:
- 传统的路由算法: 在路由器内实现
- 软件定义网络(software-defined networking, SDN): 在远程服务器上实现
- 控制平面:传统方式
- 每个路由器都有单独的路由算法组件,路由器之间通过交互来实现控制平面
- 控制平面:SDN方法
- 一个分离的(通常是远程的)控制器和路由器本地的控制代理 (local control agents,CAs) 交互
- CA一般拥有最少的功能,其任务是与控制器通信并且按控制器命令行事。
- CA既不能直接交互,也不能主动参与计算转发表
连接建立*
- 传输层连接: 如TCP协议,在数据实际传输之前,需要发送方和接收方经过三次握手建立所需的状态信息。两个进程之间建立连接
- 网络层连接: 指网络层数据分组开始传输前,在所选择的从源到目的地路径上的各路由器之间相互握手,建立连接状态。
如ATM、帧中继、MPLS的网络层。(已经很少使用)
如今的因特网网络层不执行连接建立。
网络层的服务模型-定义了分组在发送与接收端之间的端到端的 运输特性
问题: 什么样的服务模型可以用于将数据报从发送方传输到接收方?
网络层可能提供的服务
- 确保交付:确保分组到达目的地。
- 具有时延上界的确保交付:主机到主机的时延。
- 有序分组交付:按发送顺序到达。
- 确保最小带宽:当发送主机以低于特定比特率的速率发送比特,分组不会丢失,在一定时延到达。
- 确保最大时延抖动:发送方发送两个连续分组的时间间隔与接收到的间隔相同。
因特网的网络层提供的服务
- 单一服务,即尽力而为服务(best-effort service) 。
- 分组间的定时不能被保证;
- 分组的接收顺序与发送顺序不一定相同;
- 传送的分组不能保证最终交付,即网络可能未向目的地交付分组。
4.2 虚电路和数据报网络
连接和无连接服务
- 数据报 网络提供网络层的无连接 服务
- 虚电路 网络提供网络层的 连接 服务
- 类比于TCP/UDP的面向连接/ 无连接的传输层服务:
- 任何网络中的网络层只提供两种服务之一,不会同时提供。
- 虚电路网络:提供连接服务。
- 数据报网络:提供无连接服务。
- 任何网络中的网络层只提供两种服务之一,不会同时提供。
- 传输层:面向连接服务在网络边缘的端系统中实现。
- 网络层:面向连接服务在端系统及网络核心的路由器中实现。
虚电路(Virtual Circuits)*
“源主机-目的主机路径的行为类似于电话网络的行为”
-
性能上类似
-
沿着源-目的路径的网络行为类似
-
在数据传输之前,需要为每个呼叫建立连接
-
每个分组携带VC标识符(不是目的主机地址)
-
位于“源-目的路径”上的每个路由器会维护经过它的每条连接的“状态”
-
链路和路由器的资源(带宽、缓存)可以被分配给VC(专用资源)
数据报网络
- 在网络层无呼叫的过程
- 路由器: 不需要维护端到端连接的状态
- 没有网络等级的“连接”的概念
- 使用目的主机的地址进行分组转发
数据报转发表
路由器查表方法
- 用目的地址前缀与转发表的前缀匹配:
- 存在匹配:向对应链路转发。
如,目的地址
11001000 00010111 00010110 10100001 - 不存在匹配:选择“其他”项对应的链路转发。
- 存在多个匹配:使用最长前缀匹配规则,即向与最长前缀匹配的链路接口转发分组。
如,目的地址
11001000 00010111 00011000 10101010
说明
- 路由器转发表只维持转发状态信息;
- 转发表由选路算法修改(1~5分钟更新);虚电路网络转发表随虚电路的建立和拆除更新。
- 一个端系统发送给另一个端系统的一批分组可能在网络中选择不同的路径,到达的顺序可能不一致。
虚电路网络的特点*
虚电路网络源于电话产业界(采用“真正”电路)。
- 呼叫建立及每次呼叫的状态要在网络中的路由器上维持,比面向数据报的网络要复杂。
- 网络功能复杂,端系统设备简单
数据报网络的特点
由互连计算机的需求发展而来。与电话网相反。
- 网络层服务模型简单。
- 端系统功能复杂:高层实现许多功能,如按序传送、可靠数据传输、拥塞控制与DNS名字解析等;
- 带来的结果
- 因特网服务模型提供的服务保证最少(可能没有!),对网络层的需求最小,使得互连使用各种不同链路层技术的网络变得更加容易。
- 许多应用都在位于网络边缘的主机(服务器)上实现。
4.3 路由器的工作原理
路由器的整体结构
- 路由器的两个核心功能:
- 运行路由算法/协议(OSPF, RIP, BGP)
- 将分组从路由器的输入链路传送到正确的输出链路。
- 路由器的体系结构:
输入端口功能
- 第一个线路端接模块:将一条物理链路端接到路由器的物理层;
- 第二个数据链路处理模块:实现路由器的数据链路层功能;
- 第三个查找与转发模块:实现查找与转发功能,以便分组通过路由器交换结构转发到适当的输出端口;
输入端口——查找/转发模块
确定将一个到达的分组通过交换结构转发给哪个输出端口。 通过查找转发表实现,这里的转发表是存储在输入端口的内存中。
- 分布式交换:
- 选路处理器计算转发表,给每个输入端口存放一份转发表拷贝。
- 在每个输入端口本地做出交换决策,无须激活中央选路处理器。
- 可避免在路由器中某个单点产生转发处理瓶颈。
- 目的:以线速完成输入端口的处理
- 排队:如果数据报到达输入端口的速度快于输入端口将数据报转发到交换结构的速度,就会发生排队
交换结构
- 将分组从输入端口缓存交换(转发)到恰当的输出端口缓存中
- 三种类型的交换结构
经内存的交换结构
- 早期用计算机作为路由器时采用的结构(第一代)
- 输入端口与输出端口之间的交换由CPU(选路处理器)控制完成;
- 输入端口与输出端口类似I/O设备:
- 当分组到达输入端口时,通过中断向选路处理器发出信号,将分组拷贝到处理器内存中;
- 选路处理器根据分组中的目的地址查表找出适当的输出端口,将该分组拷贝到输出端口的缓存中。
转发速度
交换速度受总线带宽的速度限制 (每个分组穿过两次总线)
若总线带宽为每秒写入或读出B个分组,则总的转发吞吐量 (分组从输入端口被传送到输出端口的总速率)小于B/2。不能同时转发两个分组,即使它们有不同的目的端口,因为经过共享系统总线一次仅能执行一个内存读写
经总线的交换结构
输入端口通过一条共享总线将分组直接传送到输出端口,不需要选路处理器的干预。
- 每次只能有一个分组通过总线传送。
- 分组到达一个输入端口时,若总线正忙,会被暂时阻塞,在输入端口排队
- 路由器交换带宽受总线速率限制。
经交换矩阵交换结构
- 纵横式交换机:由2n 条总线组成,n 个输入端口与n 个输出端口连接。
- 到达输入端口的分组沿水平总线穿行,直至与所希望的输出端口的垂直总线交叉点:
- 若该条垂直总线空闲,则分组被传送到输出端口;
- 否则,该到达的分组被阻塞,必须在输入端口排队。
输出端口
- 取出存放在输出端口内存中的分组,并将其传输到输出链路上。
- 当交换结构将分组交付给输出端口的速率超过输出链路速率,就需要排队与缓存管理功能。当输出端口的缓冲区溢出时,就会出现延时和丢包。
输出端口排队
- 当经过交换结构到达的速度超过了输出端口的处理线速就会发生排队
- 当输出端口的缓冲区溢出时就会发生丢包!
- 当交换结构的速度慢于输入端口的速度,就会在输入端口的缓冲区发生排队
会导致排队延时和由于输入缓冲区溢出导致的丢包! - 线头阻塞(Head-of-the-Line (HOL) blocking): 在队列前面的被阻塞的数据报会阻止队列中的其他数据报被转发。
4.4 网际协议:因特网中的转发和编址
因特网中的网络层协议
IP 数据报格式(IPv4)
数据报长度:是IP数据报的总长度,以字节计。长度为16比特,故数据报理论最大长度为65535字节。
高层协议:**通常仅当IP数据报到达最终目的地的时候才有用。**指示了IP数据报的数据部分应该交给哪个特定的运输层协议。
协议号是网络层与运输层的粘合剂,而端口号是运输层和应用层的粘合剂
首部校验和:用于帮助路由器检测收到的IP数据报中的比特错误
- 为什么TCP/IP在运输层和网络层都执行差错检验?
- IP只对IP首部进行了差错检验,而TCP/UDP是对整个TCp/UDP报文段进行的
- 其次,TCP/UDP和IP不一定都属于同一个协议栈。原则上,TCP能够运行在一个不同的协议(如ATM)上,而IP能够携带不一定要传递给TCP/UDP的数据
数据(有效载荷): IP数据报中的数据字段包含要交付给目的地的运输层报文段,当然也可承载其他类型数据,如ICMP报文段
注意到一个IP数据报有20字节的首部(假设无选项)。如果一个数据报承载着TCP报文段,则每个数据报共承载了40字节 的首部以及应用层报文
IP数据报分片和重组
- 每个数据链路有自己的MTU,链路类型不同,MTU的值也不同,这里MTU指的是数据链路帧的数据区的最大字节数
- MTU:一个数据链路层帧能承载的最大数据量
- 在因特网中,一个大的分组可能在路由器中被分割为几个分片,在最终的目的主机上,将这些分片重新组装成一个大的分组
- 为了进一步识别出这些分组,需要对分片进行标识
分片的例子
偏移量要除以8,片偏移以八个字节为单位
IP地址
- IP 地址: 分配给主机或路由器接口的标识符
- 接口: 主机/路由器与物理链路之间的边界
- 路由器有多个接口
- 主机可以有多个接口
- 每个接口有一个IP地址
- IP地址有两种:IPV4和IPV6
- IPV4:32个二进制位长(4字节),常用点分十进制表示;
- IPV6:128个二进制位长(16字节)常用冒号分隔表示
IPv4编址
- 32比特的二进制表示和点分十进制表示法
- 将4个字节中的每一个字节分别用十进制数来表示,4个十进制数之间用 “.” 分隔。
如
根据不同的取值范围,早期将IP地址分为五类。IP地址中前5位用于标识IP地址的类别,A类地址的第一位为“0”,B类地址的前两位为“10”,C类地址的前三位为“110”,D类地址的前四位为“1110”,E类地址的前五位为“11110”。其中,A类、B类与C类地址为基本的IP地址。
IP地址结构
包括两部分:
- 网络号:指明主机所在网络的编号。
- 主机号:主机在网络中的编号。
传统的IP地址分类
A类地址
- 利用IP地址的第一个字节作为网络地址,最高位为0,其余的三个字节作为主机地址。
地址范围为 1. 0. 0. 1-127.255.255.254
注:全0表示本地地址,全1表示在本地网络中向所有机广播。
B类地址
- 利用IP地址的前两个字节作为网络地址,最高位为10,其余的两个字节作为主机地址
地址范围为 128.0.0.1-191.255.255.254
C类地址
- 利用IP地址的前三个字节作为网络地址,最高位为110,最后一个字节作为主机地址
地址范围为 192.0.0.1-223.255.255.254
特殊IP地址段
-
本地回环地址
127.0.0.1-127.255.255.254
这是预留的一组IP地址,主要是用来识别主机本身的地址。也叫做“localhost”,一般用来测试。 -
私有地址(Private address)
10.x.x.x, 172.16.x.x-172.31.x.x, 192.168.x.x
这三个地址段被称为私有IP地址段,也就是局域网所使用的地址段,在公网上不能被路由 -
0.0.0.0
这个地址严格上来说都不是真正意义上的IP地址。主要是用来标识不清楚的网络和主机的。系统遇到无法识别的网络或主机的时候会统一的归纳到这个地址 -
255.255.255.255
这个地址是受限的广播地址。主要指一个网段内的所有主机
互联网中的IP地址
- 同一局域网上的主机或路由器的IP地址中的网络号必须相同
- 交换机互连的网络仍然是一个局域网,只能有一个网络号。
- 路由器总是具有两个或两个以上IP地址。
- 当两个路由器直接相连时,在连线两端的接口处,可以指明IP地址也可以不指明IP地址。
划分子网
- IP 地址:
- 网络号 (高位 bits)
- 主机号 (低位 bits)
- 网络号相同的IP地址属于同一个网络。而网络还可以划分为若干子网(subnet)。
- 划分子网的方法是从主机号借用若干个比特作为子网号,剩下的主机位为主机号。
子网的特点
- 什么是一个子网 ?
(从IP地址的观点来看)- 设备接口的IP地址具有同样的网络部分
- 没有路由器的介入,物理上能够相互到达
为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫子网
子网掩码
- **子网号字段长度是可变的,**因此,为了确定子网地址,IP协议提供了子网掩码的概念 。
- 子网掩码用来确定网络地址(包括网络号和子网号)和主机地址的长度。子网掩码长为32位比特,其中的1对应于IP地址中的网络号和子网号,而子网掩码中的0对应于主机号。
子网划分技术
例:现有一个网段202.114.1.1-202.114.1.254,
(1)请写出怎样将这个网段划分为2个、6个、14个子网;
(2)假设这些IP用于某公司。现公司任一部门,最多有30台机器,问应该怎样划分子网?如果有49台机器又将怎样划分?
对(1)、(2),请写出子网所需要的位数、子网掩码和子网号。
解答要点:
(1) .2个借1位,6个接3位,14个借4位;
(2).30小于32,故每个子网的主机号只需5位,因为25=32;同理49台机器的话,就需要6位,因为26=64。注意:对某个子网来说,主机号全0的地址不能用,它被用做表示该子网的子网号;主机号全1的也不能用,它用于本子网的广播。因此每个子网所能容纳的主机数是2^N-2,N是主机号位数。
使用子网掩码的分组转发
不划分子网时,路由表只有两项:目的网络地址和下一跳地址,例如
使用子网划分后,路由表中将包括三项:目的网络地址、子网掩码和下一跳地址,例如:
传统IP分类方法的问题
- 一个A类的IP地址,可以有24bit用于分配主机地址,因此可以支持 224个主机,但是一个家庭或者组织往往不需要这么多的地址空间,造成浪费。
- 一个C类的IP地址,只有8bit用于分配主机地址,因此只能支持256个主机,又不太够用。
- 因此,按传统IP地址分类方式分配IP被CIDR技术取代
无分类域间路由(Classless Inter-Domain Routing,CIDR)
- CIDR消除了传统的A类、B类和C类地址的概念。
- 使用斜线记法,又称为CIDR记法来区分网络前缀和主机号,
- 即在IP地址后面加一个斜线“/”,斜线后面用一个数字指定网络前缀的长度。
- CIDR将网络前缀都相同的连续的IP地址组成“CIDR地址块”。
构造超网(superneting)
一个CIDR地址块可以表示分类IP的多个分类地址,这种地址的聚合称为路由聚合,又称为构造超网。
使用单个网络前缀通知多个网络的能力
CIDR 地址块划分举例 -层次寻址: 路由聚合
子网划分及CIDR练习
现有一公司已获得网络号为202.1.1.0/24,如果该公司有3个部门,
(1)如果第1个部门有60台计算机,第二个部门有20台计算机,第三个部门有16台计算机,问如何分配地址?
(2)如果第1个部门有120台计算机,第2个部门有60台计算机,第3个部门有60台计算机,使用上述方法可以分配地址吗?使用CIDR方法如何分配地址?
11001010 00000001 00000001 00000000
分配部门1:11001010 00000001 00000001 00000000 > 202.1.1.0/26
分配部门2:11001010 00000001 00000001 01000000 > 202.1.1.64/27
分配部门3: 11001010 00000001 00000001 01100000 > 202.1.1.96/28
(2) 不能。部门地址数目不够。
11001010 00000001 00000001 00000000 > 202.1.1.0/25
11001010 00000001 00000001 10000000 > 202.1.1.128/26
11001010 00000001 00000001 11000000 > 202.1.1.192/26
动态主机配置协议
问: 主机如何得到IP地址?
-
手工指定(保存在系统配置中)
- Windows: 控制面板->网络
- UNIX/LINUX: 在/etc/rc.config中,可使用ifconfig命令配置
-
DHCP: Dynamic Host Configuration Protocol
- 自动从一个DHCP服务器得到IP地址
- 方便灵活
-
plug-and-play(即插即用)
-
DHCP概述:
- 主机广播 “DHCP DISCOVER” 消息
- DHCP 服务器用 “DHCP OFFER” 消息响应
- 主机请求IP地址: “DHCP REQUEST” 消息
- DHCP 服务器确认 “DHCP ACK/NACK” 消息
- DHCP 终止租用期”DHCP RELEASE”消息
DHCP协议的工作流程
- DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文。
- DHCP 客户从 UDP 端口 68,发送
DHCP 发现报文
。 - 凡收到 DHCP 发现报文的 DHCP 服务器,都发出
DHCP 提供报文
,因此 DHCP 客户,可能收到多个 DHCP 提供报文。 - DHCP 客户从几个 DHCP 服务器中选择,其中的一个,并向所选择的 DHCP 服务器发送
DHCP 请求报文。
- 被选择的 DHCP 服务器发送确认报文
DHCPACK
,客户进入已绑定状态,并可开始使用得到的临时 IP 地址了- DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的
超时时间
分别是 0.5T 和 0.875T。当超时时间到就要请求更新租用期
。
- DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的
- 租用期过了一半(T1 时间到),DHCP 发送请求报文
DHCPREQUEST
要求更新租用期。 - DHCP 服务器若不同意,则发回否认报文
DHCPNACK
。这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址
(回到步骤2) - DHCP 服务器若同意,则发回确认报文DHCPACK。DHCP 客户得到了新的租用期,重新设置计时器。
- 若DHCP服务器不响应步骤6的请求报文DHCPREQUEST,则在租用期过了 87.5% 时,DHCP 客户必须
重新发送请求报文 DHCPREQUEST
(重复步骤6),然后又继续后面的步骤。 - DHCP 客户可
随时提前终止服务器所提供的租用期
,这时只需向 DHCP 服务器发送释放报文DHCPRELEASE
即可。
DHCP报文格式*
OP:若是client送给server的封包,设为1,反向为2;
Htype:硬件类别,ethernet为1;
Hlen:硬件长度,ethernet为6;
Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
Ciaddr:用户IP地址;
Yiaddr:客户IP地址;
Siaddr:用于bootstrap过程中的IP地址;
Giaddr:转发代理(网关)IP地址;
Chaddr:client的硬件地址;
Sname:可选server的名称,以0x00结尾;
File:启动文件名;
Options:,厂商标识,可选的参数字段
DHCP 客户端-服务器场景
首先是客户端广播,DHCP服务器收到后会返回DHCP提供,此时会有多个请求。客户端选择一个发出DHCP请求,请求分配IP地址,然后DHCP服务器返回DHCPACK。
DHCP: 不仅获得IP地址
- DHCP分配的不仅仅是IP地址,还可分配:
- 客户的第一跳路由器的地址(网关)
- DNS服务器的IP地址或域名
- 子网掩码
- DHCP是应用层协议
组织机构如何获取IP 地址?
Q: 怎样获取IP地址中的网络号部分?
A: 从ISP的地址空间中划分一块给申请者
例如:
- ISP获得地址块的方法——从ICANN获取
ICANN(Internet Corporation for Assigned Names and Numbers) http://www.icann.org/- 分配IP地址
- 管理DNS
- 分配域名,解决纠纷
NAT: 网络地址转换
- 动机: 对外部网络来讲,本地网络只用一个IP地址
- 不需要从 ISP分配一系列地址—— 只要一个IP地址用于所有设备
- 在本地网络,改变设备的IP地址不用通知外部世界
- 可以变更 ISP ,不用改变本地网络的设备的地址
- 本地网络内部设备不能被外部世界明确寻址,或是不可见 (增加了安全性)
- 执行NAT,路由器必须做到:
- 外出的分组: 替换每个外出的分组的 (源IP 地址, 端口号) 为 (NAT IP 地址, 新端口号)
- 远程客户/服务器用**(NAT IP地址, 新端口号)作为目的地**来响应。
- (在NAT转换表中)记录每个(源IP 地址, 端口号)到 (NAT IP地址, 新端口号) 转换配对
- 进来的分组: 对每个进来的分组,用保存在NAT表中的对应的**(源IP 地址, 端口号)** 替换分组中的目的域 (NAT IP 地址, 新端口号)
网络转换的一些限制
- 16-bit 端口号:
- 一个局域网地址可以同时支持60,000个并发连接!
- NAT 存在争议
- 路由器只应该处理到第三层
- 违反了端到端主张
- 应用程序设计者在设计时不得不将NAT加以考虑
- 如P2P应用程序
- 应使用IPv6来解决地址短缺问题
ICMP
(Internet Control Message Protocol,因特网控制报文协议)
- 用于主机路由器之间彼此交流网络层信息
- 差错报告: 不可到达的主机, 网络,端口,协议
- 请求/应答 (用于ping,traceroute)
- 位于IP之上
- 因为ICMP消息是装载在IP分组里的
ICMP报文格式及其封装*
ICMP 报文类型及对应常见代码*
Traceroute 和 ICMP
- 源端发送一系列的UDP分组给目的端
- 第一个分组 TTL =1
- 第二个 TTL=2, 等等
- 当第n个分组到达第n个路由器时
- 路由器丢弃该分组
- 并给源端发送一个ICMP报文 (type 11, code 0)
- 这个报文包含了路由器的名称和IP地址
- 当源端收到ICMP报文时,计算传输往返时间RTT
- 对每个TTL作三次
- 停止发送的依据:
- UDP报文最终到达目的端
- 目的端返回回应应答的 ICMP 报文 (type 3, code 3)
- 源端停止发送
IPv6
- 初始动机:32-bit IPv4地址空间即将用尽
- 其他动机:
- 首部格式可帮助加速处理/转发
- 改变首部利于QoS要求(Quality of service)
- IPv6 数据报格式
- 固定长度的 40 字节首部
- 不允许分片
IPv6首部*
- 优先级: 表示流中分组的优先级
- 流标识: 表示分组在同一个“流”中 (“流”的概念尚未完全定义)
- 下一个首部: 表示数据的上层协议
IPv6地址表示
- 冒号十六进制表示法
例如:104.220.136.100.255.255.255.255.0.0.18.128.140.10.255.255
用冒号十六进制表示为:
69DC:8864:FFFF:FFFF:0:1280:8C0A:FFFF - 零压缩表示法
例如:FF0C:0:0:0:0:0:B1
零压缩表示为:
FF0C::B1
与IPv4的其它不同*
- 校验和: 全部去掉,减少每一跳的处理时间
- ipv6不允许在中间路由器上进行分片与重新组装。这种操作只能在源与目的地执行。
- 选项: 允许, 但是不是标准首部的一部分,而是用下一个首部域指出
- ICMPv6:新版本的 ICMP
- 增加消息类型, 例如“分组太大”
- 多播组管理功能
从 IPv4 到 IPv6过渡*
- 并不是所有的路由器都能够同时升级
- 没有 “标志日”
- 同时有 IPv4 和 IPv6 路由器的网络如何工作?
- 两种推荐方法:
- 双栈:一些路由器具有双重栈 (v6, v4) 能够在两种格式中转换
- 隧道: 在穿过IPv4路由器时,IPv6分组作为 IPv4分组的负载
双栈方法*
隧道方法*
4.5 路由和选路
4.5.1选路算法
路由与转发的相互作用
- 路由算法确定了通过网络的端到端路径
- 转发表确定了在路由器上的本地转发
路由的基本概念
- 默认路由器:与主机直接相连的路由器,又叫第一跳路由器。每当主机发送一个分组时,都先传送给它的默认路由器。
- 源路由器:源主机的默认路由器。
- 目的路由器:目的主机的默认路由器。
- 从源主机到目的主机的选路归结为从源路由器到目的路由器的选路。
- 路由算法:是确定一个分组从源路由器到目的路由器所经路径的算法
找到一个子网到另一个子网的路径
路由:按照某种指标(传输延迟,所经过的站点数目等)找到一条
从源节点到目标节点的较好路径
较好路径: 按照某种指标较小的路径
- 指标:站数, 延迟,费用,队列长度等, 或者是一些单纯指标的加权平均
- 采用什么样的指标,表示网络使用者希望网络在什么方面表现突出,什么指标网络使用者比较重视
- 路由算法的关键:在给定的一组路由器以及连接路由器的链路中,找到一条从源路由器到目的路由器的“好”路径。
网络的抽象图模型
- 用“节点图”表示网络的结构
- 图G = (N,E)表示N 个节点和E 条边的集合,每条边是来自N的一对节点。
- 节点:表示路由器(做出分组转发判决的点)。
如u,v,w,x,y,z。 - 边:连接节点的线段,表示路由器之间的物理链路。
如(u,v)、 (u,x) 、(u,w)、…
图抽象在其他的网络场景也受用,节点:peer,边:TCP连接
网络的抽象图模型:费用(cost)
- Cost可以表示对应链路的物理长度、或链路速度、或与链路相关的费用。
- 定义:c(x,y) 表示节点 x 和节点 y 之间边的费用(从节点 x 到节点 y 的链路费用)。
- 若节点x与节点y直接相连(x与y是邻居)
则c(x,y )= 链路费用
如c(u,v) = 2,节点u与节点v互为邻居 - 若节点x与节点y不直接相连(x与y不是邻居)
则c(x,y) = ∞
如c(u,y) = ∞,c(u,z) = ∞ - c(x,y)= c(y,x)
如c(u,v) = c(v,u) =2
最优化原则(optimality principle)
- 汇集树(sink tree)
- 此节点到所有其它节点的最优路径形成的树
- 路由选择算法就是为所有路由器找到并使用汇集树
路由选择算法原则
- 路由选择算法的原则
- 正确性(correctness):算法必须是正确的和完整的,使分组一站一站接力,正确发向目标站;完整:目标所有的站地址,在路由表中都能找到相应的表项;没有处理不了的目标站地址;
- 简单性(simplicity):算法在计算机上应简单:最优但复杂的算法,时间上延迟很大,不实用,不应为了获取路由信息增加很多的通信量;
- 健壮性(robustness):算法应能适应通信量和网络拓扑的变化:通信量变化,网络拓扑的变化算法能很快适应;不向很拥挤的链路发数据,不向断了的链路发送数据
- 稳定性(stability):产生的路由不应该摇摆
- 公平性(fairness):对每一个站点都公平
- 最优性(optimality):某一个指标的最优,时间上,费用上,等指标,或综合指标;实际上,获取最优的结果代价较高,可以是次优的
路由算法分类
-
全局路由算法:所有路由器拥有完整的网络拓扑信息和链路费用信息。
- 链路状态路由算法LS:必须知道网络中每条链路的费用。
-
分布式路由算法:以迭代的、分布式的方式计算最低费用路径。
- 节点只有与其直接相连链路的费用信息:不需拥有所有网络链路费用的完整信息。
- 通过迭代计算,并与相邻节点(邻居节点)交换信息
- 逐步计算出到达某目的节点或一组目的节点的最低费用路径。
- 距离向量路由算法DV:每个节点维护到网络中所有其他节点的费用(距离)的估计向量。
-
静态路由算法:
- 路由确定后基本不再变化。只有人工干预调整时,可能有一些变化。
-
动态路由算法:
- 当网络的流量负载或拓扑发生变化时,路径可能发生改变。
- 可以周期性地或直接地响应拓扑或链路费用的变化。
- 易受选路循环、路由振荡之类问题的影响。
链路状态选路算法Link state
将任何一个节点的链路状态分组泛洪
- 第五步才是路由算法,前面都是测量和散播路由信息。
Dijkstra最低费用路径算法
- 所有节点知道网络拓扑,以及每条链路的费用信息
- 通过链路状态广播来实现
- 所有节点拥有相同的信息
- 计算任意一个节点(源节点)到所有其他节点的最低费用路径
- 给出该节点的转发表
- 迭代:通过
k次
迭代后可以知道到达k个目的节点
的最低费用路径 - 基本思想:以源节点为起点,每次找出一个到源节点的费用最低的节点,直到把所有的目的节点都找到为止。
- 术语定义
c(x,y):表示从节点x到y的链路费用;
= ∞ 如果不是直接邻居
D(v):表示从源节点到目的节点v的当前路径的费用;
p(v):表示从源节点到目的节点v的路径上的前驱节点(例如w是v的前驱节点);
N’:表示已经找到最低费用路径的节点集合。
Dijkstra算法
算法描述
(1)初始化(1#~6#)
N’ ={源节点u};
- 对所有不在N‘ 中的节点v,标出其D(v)值:
- 节点v与源节点u直接相连,D(v) = c(u,v)
- 节点v与源节点u不直接相连 ,D(v) = ∞
(2)找出一个到源节点的费用最低的节点w,并以此更新其它点D(v) 值
- 从不在N’ 中的节点中找出一个D(w)值最小的节点w,并将w加入到N’ 中。(9#~#10)
- 对不在N‘ 中,但与节点w是邻居的节点v,用新的值更新
D(v)=min[D(v),D(w)+c(w,v)]
将节点v原值与节点v现经节点w到源节点的值比较,取小
(3)重复步骤(2)
直到所有的网络节点都在N’ 中为止。
- 对于每个节点,都得到从源节点沿着它的最低费用路径的前驱节点;
- 每个前驱节点,又可得到它的前驱节点;以此继续,可以得到到所有目的节点的完整路径。
如节点z的前驱节点依次为: z->y->x->u - 得出从源节点u到节点z的最低费用路径为:uxyz,费用为4。
- 构建最低费用路径树
- 根据目的节点找出顺序和其费用以及前驱节点,可以画出源节点u到所有目的节点的最低费用路径树。
- 根据得到的所有目的节点的完整路径,或最低费用路径树,可以生成源节点的转发表。
转发表:存放从源节点到每个目的节点的最低费用路径上的下一跳节点。即指出对于发往某个目的节点的分组,从该节点发出后的下一个节点。
构建转发表
默认路由 *
:表示所有具有相同“下一跳”的表项。即将“下一跳”相同的项合并为一项,目的节点用“*”表示。优先级最低,转发分组时,当找不到对应表项时,才使用默认路由。
Dijkstra算法:讨论
计算复杂度
- 设n个节点(除源节点),最坏情况下要经多少次计算才能找到从源节点到所有目的节点的最低费用路径?
- 第一次迭代:搜索所有的n个节点以确定最低费用节点
- 第二次迭代:检查n-1个节点;
- 第三次:检查n-2个节点;
依次类推。
所有迭代中需要搜寻的节点总数为n(n+1)/2。
- 算法复杂性为n平方阶序O(n2)。
- 更有效的执行可能: O(nlogn)
可能产生振荡
4.5.2 距离向量路由算法(Distance Vector)
- 距离向量路由算法是一种迭代的、异步的和分布式的算法。
- 分布式:每个节点都从其直接相连邻居接收信息,进行计算,再将计算结果分发给邻居。
- 迭代:计算过程一直持续到邻居之间无更多信息交换为止。
- 异步:不要求所有节点相互之间步伐一致地操作。
- 自我终结:算法能自行停止。
每个节点和邻居交换距离矢量,测量到邻居的代价,可以算出经过邻居到每一个目标的代价值
最低费用表示
Bellman-Ford方程:
dx(y) = minv{c(x,v)+ dv(y)}
dx(y):节点x到节点y的最低费用路径的费用。
v: 节点x的邻居节点。
c(x,v)+ dv(y):x与某个邻居v之间的直接链路费用c(x,v)加上邻居v到y的最小费用。即x经v到节点y的最小的路径费用。
minv :从所有经直接相连邻居节点到节点y的费用中选取的最小路径费用。
B-F方程举例
得到节点u的转发表中到目的节点z的下一跳是节点x
距离向量DV路由算法
对每个节点x
(1)初始化:
(2)更新自己的距离向量
(3)重复执行(2),直到没有更新的距离向量发出
异步、迭代:
本地迭代的触发条件
- 本地链路代价的变化
- 从邻居来的DV的更新信息
DV的无穷计算问题
采用水平分裂方式解决
B是A的下一跳,所以C对B报告A的距离为INF
C是B的下一跳,所以D对C报告通向A的距离为INF
节点的距离向量表
- 节点x选路表(距离表):
- 行:该节点的
距离向量Dx
和其邻居的距离向量Dv
- 列:
所有目的节点
。 - 节点x的距离向量Dx ,即
节点x到每个目的节点y的估计费用
; Dx = [Dx(y):y在N中] - 节点x每个邻居的距离向量Dv ,即
x的邻居v到每个目的节点y的估计费用
,Dv = [Dv(y):y在N中]
更新其距离向量
每个节点不断向邻居发送其距离向量拷贝;
当节点x收到一个邻居v的新距离向量,先保存,并用B-F公式更新自己的距离向量:
Dx(y) = minv{c(x,v)+ Dv(y)}
从所有经邻居v到节点y
的费用中选取最小路径费用
- 若距离向量发生改变,将新的距离向量通知给邻居。
- 当距离向量不再变化,算法终止,此时
Dx(y)收敛到dx(y)
,即得到节点x到节点y的最低费用路径。
横轴是时间,纵轴是各个节点
- 多次重复从邻居接收更新距离向量、重新计算选路表项、并向邻发送更新通知的过程,一直持续到没有更新报文发出为止。
- 算法进入静止状态,直到某个链路费用发生改变为止。
链路费用改变与链路故障
当一个节点检测到从它到邻居的链路费用发生变化时,就更新其距离向量,如果最低费用路径的费用发生变化,通知其邻居。
(1)某链路费用减少时情况
如图所示,当y 到x的链路费用从4变为1的情况。
考虑y与z到目的节点x的距离表变化
t0:y 检测到x的链路费用从4变为1,更新其距离向量,并通知其邻居z;
t1:z收到来自y的更新报文,并更新自己的距离表,此时到节点x的最低费用减为2,并通知其邻居y;
t2:y收到来自z的更新报文,并更新自己的距离表,此时到节点x的最低费用不变仍为1。不发送更新报文,算法静止。
当x与y之间费用减少,DV算法只需两次迭代到达静止状态。
节点之间链路费用减少的“好消息”在网络中能迅速传播。
(2)某链路费用增加时情况
如图所示,假设x与y之间的链路费用从4增加到60。
-
链路费用变化前
Dy(x)=4 ,Dy(z)=1, Dz(y)=1,Dz(x)=5 -
t0 时刻:y检测到链路费用从4变为60。更新到x的最低路径费用
Dy(x )=min{ c(y,x)+ Dx(x), c(y,z)+ Dz(x)}
=min{60+0,1+5}=6
经节点z到x费用最低,此新费用错误,发给节点z。
需要迭代原因:y不知道z到x需要经过自身
- t1时刻:z收到新费用,更新其到x的最低路径费用
Dz(x )=min{ c(z,x)+ Dx(x), c(z,y)+ Dy(x)}
=min{50+0,1+6}=7
经节点y到x费用最低,发给节点y。
- t2 时刻:y收到新费用,更新到x的最低路径费用
Dy(x )=min{ c(y,x)+ Dx(x), c(y,z)+ Dz(x)}
=min{60+0,1+7}=8
经节点z到x费用最低,发给节点z。
……
节点y或z的最低费用不断更新。 - 产生**“选路回环”:为到达x, y通过z选路,z又通过y选路**。
即目的地为x的分组到达y或z后,将在这两个节点之间不停地来回反复,直到转发表发生改变为止。
会不停迭代44次,直到另一条线路之和超过50
- 上述循环将持续44次迭代 (y与z之间的报文交换),直到z最终算出它经由y的路径费用大于50为止。并确定:
- z到x的最低费用路径:zx
- y到x的最低费用路径:yzx
- 说明:链路费用增加的
“坏消息”
传播很慢!
当链路费用增加很大,会出现“计数到无穷”
问题。
如链路费用c(y,x)变为10000,c(z,x)变为9999时。
毒性逆转
计数到无穷的解决办法:毒性逆转
假如 Z通过 Y 到达 X ,则Z告诉Y:它到X的距离是无穷大,Y将不会再经过Z到X
Z向Y撒了一个善意的谎言,使得只要Z经过Y选路到X,它就会一直持续讲述这个谎言,这样Y也就永远不会尝试从Z选路到X了,也就避免了环路问题
- 毒性逆转可以完全解决计数到无穷的问题吗?
——不能,如果三个以上节点的环路,则不能被毒性逆转技术检测到。
- 其它解决环路的方法:
- 定义最大度量(以防止计数至无穷大 )
- 抑制计时器
- 水平分割
- 路由毒化
- 触发更新
LS算法与DV算法比较
- 消息复杂度:【DV胜出】
- LS算法:知道网络每条链路的费用,需发送O(nE)个报文;当一条链路的费用变化时,必须通知所有节点
- DV算法:迭代时,仅在两个直接相连邻居之间交换报文;当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用。
- 收敛速度:【LS胜出】
- LS算法:需要O(nE)个报文和O(n2)的搜寻,可能会振荡
- DV算法:收敛较慢。可能会遇到选路回环,或计数到无穷的问题。
- 健壮性:当一台路由器发生故障、操作错误或受到破坏时,会发生什么情况?【LS胜出】
- LS算法:路由器向其连接的一条链路广播不正确费用,路由计算基本独立(仅计算自己的转发表),有一定健壮性。
- DV算法:一个节点可向任意或所有目的节点发布其不正确的最低费用路径,一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络。
4.6 层次选路
迄今为止,我们的路由研究都是理想化的:
所有路由器一样的
网络是 “平面的”
… 实际中并不是这样的…
- 规模:具有20亿个节点
- 路由表中不可能存储所有的节点!
- 路由表的信息交换将淹没数据链路!
- internet =众多网络组成的网络
- 每个网络管理者管理自己网络的路由选择-管理自治
层次选路
- 一个区域内的路由器组成集合 “自治系统” (AS,autonomous system )
- 同一个自治系统的路由器运行相同的路由协议——区域内路由协议
- 不同自治系统内的路由器可以运行不同的区域内路由协议
网关路由器
- 和其他自治系统内的路由器直接相连的路由器
- 运行域间路由协议,与其他网关路由器交互
- 同自治系统内的所有其他路由器一样也运行域内路由协议
问题转换为自治区域内部和自治区域间的路由
优点:
- 解决了规模问题
- 内部网关协议解决:AS内部数量有限的路由器相互到达的问题, AS内部规模可控
- 如AS节点太多,可分割AS,使得AS内部的节点数量有限
- AS之间的路由的规模问题
- 增加一个AS,对于AS之间的路由从总体上来说,只是增加了一个节点=子网(每个AS可以用一个点来表示)
- 对于其他AS来说只是增加了一个表项,就是这个新增的AS如何走的问题
- 扩展性强:规模增大,性能不会减得太多
- 内部网关协议解决:AS内部数量有限的路由器相互到达的问题, AS内部规模可控
- 解决了管理问题
- 各个AS可以运行不同的内部网关协议
- 可以使自己网络的细节不向外透露
域(自治系统)内路由选择
- 使用域内路由协议,也被称作内部网关协议 (IGP)
- 标准的域内路由协议:
- RIP: 路由信息协议
- OSPF: 开放式最短路径优先
- IGRP: 内部网关路由协议 (Cisco 所有)
RIP ( Routing Information Protocol)*
- 距离向量算法
- 包含在1982年发布的BSD-UNIX 版本中。
- 距离衡量: 跳数 (max = 15 hops)
- RIP 通告
- 每隔30秒,通过响应报文在邻居间交换距离向量 (也被称为RIP通告,advertisement)
- 或者对方请求的情况下
- 每个通告包含了多达25个AS内的目的子网的列表【自治区域的小网】
- RIP链路失败及恢复
若180秒后没有收到通告,则认为邻居死机或链路中断: - 通过故障邻居的路由失败
- 新的公告发送给其他邻居
- 邻居然后再发送新的公告 (如果转发表发生变化)
- 链路故障信息快速传播到整个网络
- 毒性逆转用于防止乒乓循环 (无限距离 = 16 跳)
OSPF (Open Shortest Path First)
- “open”: 开放、公用的
- 用链路状态算法
- 分发LS 分组
- 每个节点具有拓扑图
- 路由计算使用 Dijkstra算法
- 每个router都广播OSPF通告,OSPF通告里为每个邻居路由器设一个表项(记录每个邻居的链路特征和费用)。
- 通告会散布到 整个 自治系统 (通过洪泛法)
- OSPF信息直接通过 IP传输 (不是 TCP 或 UDP)
OSPF 优点 (RIP所没有的)
- 安全: 所有OSPF 消息需要认证 (防止恶意入侵)
- 允许多个相同开销的路径 (在 RIP中只有一条路径)
- 对于每个链路, 有多个消费尺度用于不同的服务类型TOS (例如在尽力转发时卫星链路代价设置为 “低” ,而对实时应用设置为高)
- 单播和多播综合支持:
- 多播 OSPF (MOSPF) 使用和 OSPF同样的链路数据库
- 在大的区域中使用层次 OSPF
- backbone骨干网
- 每一个area运行相同的域内路由协议
- 整个是大的AS
- 通过boundary router边界路由器连接其他AS
- 两级层次: 本地区域, 主干区域(这些区域都是在一个自治系统内)
- 只在区域内发送链路状态通告
- 每个节点有详细的区域拓扑; 仅知道到达其他区域内网络的方向(即到区域边界路由器的最短路径)
- 区域边界路由器(同时属于本地区域和主干区域):“汇总”了到本区域内部网络的路径, 并通告给其他区域边界路由器.
- 主干路由器:限于在主干区域内运行OSPF路由协议(本身不是区域边界路由器)
- 边界路由器: 连接到其他自治系统
Internet 域间选路
BGP
eBGP:将子网可达信息发送给其他相邻的ASes
iBGP:将获得子网可达信息,发送给子网内布的路由器
路由器之间都是TCP连接
- BGP (Border Gateway Protocol【边界网关协议】):事实上的标准
- BGP 为每个 AS 提供了一种手段:
- 从相邻AS获取子网可达信息
- 区域边界网关路由器向该AS内部的所有路由器传播这些可达性信息
- 基于该可达信息和AS策略,决定到达子网的**“好”**路由
- 允许一个子网向Internet的其他部分通告它的存在 “I am here”
AS互连
- 转发表根据AS内和AS间选路算法而配置
- AS域内的选路项用于目的端在域内的选路。
- AS域内和AS域间的选路项用于目的端在域外的选路。
AS域间任务
- 假设AS1中的路由器接收到了目的端是AS1外的分组。路由器将把这个分组转发到网关路由器,但是是哪个网关路由器呢?
- AS1 需要知道:
- 通过AS2和AS3可以到达哪些目的端
- 将这些可达信息传播给AS1内的所有路由器
- 这就是域间选路的任务
- 示例:在router 1d 上设置转发表
- 假设AS1运行域间路由协议知道网络X通过网关1c从AS3(而不是AS2)是可达的
- 通过域内路由协议将可达信息传播给所有域内路由器
- Router 1d 由域内路由信息判断自己的接口I 在到达1c的最小开销路径上
- 在转发表里添加一项 (x,I ).
- 示例:在多个自治系统中选择
- 现在假设AS1通过域间选路协议知道子网x从AS3和AS2都可以到达
- 为了配置转发表,路由器1d必须决定通过哪个网关将分组转发到目的子网x
- 这同时也是域内路由协议的工作
- 热土豆选路: 把分组送到两个路由器中最近的一个【不考虑全局开销】
BGP会话与通告【传输层实现网络层的功能】
- 路由器对(BGP对等方)通过半永久TCP连接来交换选路信息:BGP 会话
- BGP会话和物理链路无关(并不总是和某条物理链路对应)。
- 当AS2通告一个前缀给AS1,说明AS2能够转发目的地址前缀是这个通告前缀的所有分组。
- AS2能够在它的通告中汇总了这些前缀。
传播可达信息
- 在3A和1C的eBGP会话中,AS3向AS1通告一个前缀可达信息。
- 1c通过iBGP会话向AS1中的所有路由器发布这个新的前缀可达信息。
- 1b 又将这个可达信息通过1b和2a之间的eBGP会话通告给AS2。
- 当路由器得知一个新的前缀时,就在它的转发表中为该前缀创建一个项。
eBGP:AS间的BGP会话
iBGP:AS内的BGP会话
路径属性 和 BGP 路由
- 当通告前缀时,通告包含了BGP属性.
- 前缀+属性=“路由”
- 两个重要的属性:
- AS-PATH: 包含了前缀的通告已经通告过的那些AS,如 AS 67 AS 17
- NEXT-HOP: 指出到达下一个AS的具体AS间边界路由器(可能存在多条从当前AS到达下一个AS的链路)
- 当网关路由器接收到路由通告时,使用输入策略来决定接收/舍弃该通告。
- 按照策略进行选择
BGP 路由选择
- 路由器可能知道到相同前缀的多条路由,路由器必须从中选择
- 排除规则(应用排除规则直到有一条留下)
- 本地偏好值属性: 具有最高偏好值的路由被选择
- 最短AS-PATH的路由
- 最靠近 NEXT-HOP路由器的路由 : 热土豆路由
- 其他标准
BGP 报文
- BGP 报文交换使用 TCP
- BGP 报文:
- OPEN:建立到对方的TCP连接,并对发送者进行认证
- UPDATE:通告新路径 (或者撤销旧路径)
- KEEPALIVE:在没有UPDATES时保持连结活跃; 也对OPEN请求作出应答
- NOTIFICATION:报告前面报文的错误; 也用于关闭连结
BGP 选路策略’
-
A,B,C 是提供商的网络
-
X,W,Y是提供商的客户
-
X是双重的: 连接到两个网络
-
X 不希望 B 通过 X 到 C的路由BXC
-
… 所以 X 不会向B公告到C的路由XC
-
A 向B通告路径 AW
-
B 向X通告路由BAW
-
B 应该向C通告路由BAW?
- 决不! B 路由 CBAW 没有什么“好处”,因为 W 和 C 都不是 B的客户
- B 希望强迫 C通过A路由到W–CAW
- B 只想路由它的客户!
为什么AS内选路和AS间选路采用不同的协议 ?
- 策略:
- AS间: 管理员想控制本AS内产生的通信流怎样选路,以及什么信流穿过自己的网络
- AS内:单个管理者, 因此不需要策略
- 规模:
- 层次路由节省了转发表的大小空间,减少了路由更新的流量
- 性能:
- AS内: 集中在性能上
- AS间: 策略可能比性能更加重要
4.7 SDN*略
传统方式
网络设备难以管理,固化
网络管理更容易
可编程
SDN的特点
南向接口上报状态,下交流表
SDN控制器
网络控制应用
实现各种各样网络功能
什么是SDN
- 软件定义网络(SDN,SoftwareDefinedNetwork)源自美国斯坦福大学CLeanState研究组提出的一种新型网络创新架构,可通过软件编程的形式定义和控制网络,具有控制平面和转发平面分离及开放性可编程的特点。
- SDN的核心理念是,希望应用软件可以参与对网络的控制管理,满足上层业务需求,通过自动化业务部署,简化网络运维。
- SDN并不是一个具体的技术,它是一种网络设计理念,规划了网络的各个组成部分(软件、硬件、转发面和控制面)及相互之间的互动关系。
SDN的发展驱动力和优势
- 发展驱动力
- 计算虚拟化驱动:静态到动态的网络变化
- 云计算对资源的垂直整合:独立演进到协同
- 云计算时代IT业务的发展
- 数据中心资源:需要随业务跨地域整合,并使数据中心间广域流量增大
- 优势
- 统一便捷的管理
- 解决网络中设备越来越多样化问题
- 无缝的版本升级
- 解决设备版本升级对业务的影响
- 网络数据可视化
- 整体的流量调度
- ……
- 统一便捷的管理
SDN的相关组织
- ONF(open network foundation ):openflow
该组织的发起者为google、facebook 、微软等由客户驱动的组织,负责推动SDN网络的部署 - IETF I2RS interface to route system
I2RS实现路由系统的开放访问接口标准化,通过外部控制平面对设备控制平面进行扩展,也不是完全取代现有控制平面,可以实现基于控制层面的hybrid SDN - 国际主流运营商发起成立的ETSI: 网络功能虚拟化工作组(Network Function Virtualizetion,NFV)
NFV的目标是利用当前的一些IT虚拟化技术,讲多种网络设备虚拟到大量符合行业标准的物理服务器、交换机或者存储设备上,然后在这些标准的硬件上运行各种执行这些网络功能(路由、安全功能、负载均衡、SBC等) - Opendaylight
由各软硬件厂商成立目标打造一个开源的基于SDN的平台框架
SDN技术的应用方向
- 数据中心
- 虚拟机联动/多租户
- 流量监视/拥塞发现/自动分流
- 可编程/自定义路由
- 自动化管理与运维
- 广域网
- 流量工程(TE)
- 流量识别与差异化调度
- 业务QoS自动部署与保证
- 无线、安全等
- 业务动态隔离及权限控制
- 统一安全防护
- BYOD
- AC云
SDN:通用转发
- SDN的核心思想是建立一个通用转发体系
——每个交换设备包含一个流表(flow table). 流表由一个逻辑上中心化的控制器(远程控制器)来计算和分发
SDN体系结构及特征
特 征
- 基于流的转发
- 数据平面与控制平面分离
- 网络控制功能:位于数据平面交换机外部
- 可编程的网络
SDN控制器的组件
网络层:总结
- 我们已经学习了:
- 网络层服务
- 路由原理: 链路状态和距离矢量
- 层次路由
- IP
- Internet 选择协议 RIP, OSPF, BGP
- 路由器的内部结构
- IPv6
网络层提供的服务和功能
主机通信
虚电路和数据报
转发
选路
路由器工作原理
网际协议IP
IP报文、IP分片和重组
IP编址和IP子网
IP地址分类和无分类编址CIDR
NAT网络地址转换
IPv6协议及特点、IPv4和IPv6互通
第五章 数据链路层
学习目的
- 目的1:理解链路层服务的主要功能
- 差错检查、纠错
- 共享广播信道:多点接入问题(multiple access)
- 链路层寻址(link layer addressing)
- 局域网技术:Ethernet, VLANs
- 目的2:链路层技术的实现
- 点到点的线路一般用于广域网【IP】
- 点可以是主机节点可以是路由节点
- 多点连接的链路容易发生碰撞【局域网,功能更复杂】
- 需要协调共享型介质MAC:Media Access Controll
- 需要寻址
wan全称Wide Area Network,是广域网的意思;lan全称Local Area Network,是局域网的意思
5.1 链路层概述
链路层的术语
- 主机和路由器: 节点(nodes)
- 沿着通信路径连接相邻节点的通信信道:链路(links)
- 有线链路(wired links)
- 无线链路(wireless links)
- 第二层的分组: 数据帧(frame), 它是封装了的数据报
数据链路层的职责是将数据报从一个节点传送到与该节点直接有物理链路相连的另一个节点。
帧:链路层的PDU【协议数据单元】
链路层解决点到点的数据传输
网络层解决端到端的数据传输
传输层解决进程到进程的区分,加强网络层的服务
应用层解决交换报文,实现网络应用
链路层的类比
-
数据报可以在不同的链路上,通过不同的链路层协议发送:
e.g., Ethernet on first link, frame relay on intermediate links, 802.11 on last link -
每个链路层协议提供不同的服务:
e.g., 可以提供/也可以不提供可靠数据传输服务 -
运输的类比:
- 从学校到洛桑的旅程
- 小汽车: 电子科大——双流机场
- 飞机: 双流机场——日内瓦
- 火车: 日内瓦——洛桑
- 游客 = datagram
- 分段旅程 = communication link
- 运输模式 = link layer protocol
- 旅行社代理 = routing algorithm
- 从学校到洛桑的旅程
每一段的帧的协议都不同,有以太网、帧中继等
5.1.1 链路层提供的服务
不同的链路层协议,提供的只是服务的子集
- 封装成帧,链路接入(framing, link access):
- 封装数据报为数据帧,增加头部,尾部信息
- 如果是共享链路,接入链路
- 在数据帧头部中,用MAC地址来标识源目的MAC地址【物理地址】
- 不同于IP地址
- 在相邻节点之间可靠传输数据帧
- 我们在第3章已经学习了如何在运输层实现数据的可靠传输
- 在比特错误率很低的链路(光纤、双绞线)很少使用
- 无线链路:高比特错误率
- **对于出错率高的链路层:**需要实现可靠传输,防止到了源端再重发带来的恢复时间长、协议栈代价变高的问题。
- 问题:为什么要在链路层和端到端都实现可靠传输?
- 分层架构,并不知道下层或上层是否可靠,每层只实现自己的功能
- 为什么网络层不实现可靠服务?
- 网络层设计之初提供best effort 服务,没有实现可靠,可靠会增大传输成本
- 流量控制(flow control):
- 用于控制发送节点向直接相连的接收节点发送数据帧的频率
- 差错检查(error detection):【还剩下的服务】
- 差错可能由信号衰减、噪声引入、
- 接收方检测是否出现错误:
- 通知发送方重传或丢弃数据帧
- 错误纠正(error correction):【还剩下的服务】
- 接收方标识和纠正比特错误,而不需要请求重传
- 半双工和全双工(half-duplex and full-duplex):
- 在半双工模式,链路的两个节点都可以发送数据,但是不能同时发送
5.1.2 链路层实现的位置
网卡:Adapter 网络适配器,实现了链路层和响应的物理层的功能
- 在主机和网络设备(路由器)上实现
- 在主机上,链路层的主体部分是在网络适配器上实现的(称为网卡)
- 以太网卡,802.11卡;以太网芯片组
- 实现链路层和物理层的功能
- 硬件、软件、固件的组合
网络适配器
- 发送方:
- 封装数据报为数据帧
- 增加差错检测比特,可靠数据传输,流量控制等机制。
- 接收方
- 执行检查错误、可靠数据传输、流量控制等机制
- 抽取数据报,将其递交给上层
5.2 差错检测和纠错
差错检测和纠错技术
- 比特级差错检测和纠错
- 对一个节点发送到一个相邻节点的帧,检测是否出现比特错,并纠正。
- 相关技术很多。
- 差错检测和纠错的过程
- 差错检测并非100%可靠
- 协议可能丢失一些错误
- 差错校验位越多,检测和纠正功能越好
发送节点
- 将数据D附加若干差错检测和纠错位EDC,一起发送到链路。
- 数据D包括网络层传来的数据报,以及链路级寻址信息、序列号和其他字段。
- 保护范围包括数据D的所有字段。
接收节点
- 接收比特序列D’和EDC’。
- 如果发生传输比特错误(0->1,1->0),D’和EDC’可能与发送D和EDC不同
- 接收方根据D’和EDC’,判断D’是否和初始的D相同(D的传输是否正确)。
- 正确:解封取出数据报,交给网络层;
- 出错:差错处理。
说明
- 差错检测和纠正技术不能保证接收方检测到所有的比特差错,即可能出现未检测到的比特差错,而接收方并未发现。
- 选择一个合适的差错检测方案使未检测到的情况发生的概率很小即可。
- 差错检测和纠错技术越好,越复杂,开销更大。
三种主要差错检测技术
- 奇偶校验:最基本的方法。
- Internet校验和:常用于运输层。
- 循环冗余检测:常用于链路层。
一维比特奇偶校验
-
发送方:
- 在要发送的信息D(d位)后面附加一个奇偶校验位
- 使“1”的个数是奇数(奇校验)或偶数(偶校验)
- 一起传输发送(d+1位)。
-
接收方:
- 检测收到的信息**(d+1位)中“1”的个数。**
- 偶校验:发现奇数个“1”,至少有一个比特发生差错(奇数个特差错)。
- 奇校验:发现偶数个“1”,至少有一个比特发生差错。
-
可以查出任意奇数个错误,但不能发现偶数个错误。
-
若比特差错概率很小,差错独立发生,一比特奇偶校验可满足要求。
-
若差错集中一起“突发”(突发差错),一帧中未检测到的差错的概率达到50%。
二维奇偶校验
- 基本思想:
- 将要传信息D(d比特)划分为i行j 列(i 个组,每组j位);
- 对每行和每列分别计算奇偶值;
- 结果的i+j+1个奇偶比特构成了帧的差错检测比特。
二维奇偶校验的例子
-
要发送的数据比特10101 11110 01110,
划分3组,每组5个比特。进行行、列偶校验 -
特点:
- 可以**检测并纠正单个比特差错(**数据或校验位中)。
- 能够检测(但不能纠正)分组中任意两个比特的差错。
Internet校验和方法(复习)
Internet校验和的特点
- 分组开销小:检查和位数比较少;
- 差错检测能力弱:
- 适用于运输层(差错检测用软件实现,检查和方法简单、快速)。
- 链路层的差错检测由适配器中专用的硬件实现,采用更强的CRC方法。
循环冗余检测
- 计算机网络中广泛采用
- 循环冗余检测CRC (cyclic redundancy check)编码:
- 即多项式编码,把要发送的比特串看作为系数是0或1的一个多项式,对比特串的操作看作为多项式运算。
- 基本思想:
- 设发送节点要把数据D(d 比特)发送给接收节点。
- 发送方和接收方先共同选定一个生成多项式 G(r+1比特),最高有效位 (最左边)是1。
- 循环冗余检测CRC (cyclic redundancy check)编码:
10111 -> x4+x2+x+1 位串的表示方式
循环冗余检测的基本思想
- 发送方:
- 计算出一个r位附加比特R,添加到D的后面产生DR(d+r 比特)
- DR能被生成多项式G模2运算整除,一起发送。
- 接收方:
- 用生成多项式G去除接收到的DR(d+r比特)
- 余数非0:传输发生差错;
- 余数为0:传输正确,去掉尾部r位,得所需数据D。
- 用生成多项式G去除接收到的DR(d+r比特)
什么是模2运算
- 加法不进位,减法不借位,即操作数按位异或 (XOR)
例
1011 XOR 0101=1110 ; 1011-0101=1110
1001 XOR 1101=0100 ; 1001-1101=0100 - 乘法和除法与二进制运算类似,其中加法或减法没有进位或借位。
- 乘以2r,即比特模式左移r 个位置。
D×2r XOR R = D 00…00 XOR R
= DR (d+r 比特)
计算R(CRC比特)
CRC练习
最多检验多项式长度,超过了不保证检测得到
奇数位错误也可也被检测到
循环冗余码CRC的特点
- 生成多项式G的选择:常见的有8、12、16和32 比特生成多项式G。
- 国际标准已经定义了8-、16-、32-位生成多项式G;8-位CRC用于ATM信元首部的保护;32-CRC用于大量链路层IEEE协议。其他检错方法不常用,故不作专门介绍
- CRC8生成多项式为G(x)=x8+x5+x4+1
- CRC16生成多项式为G(x)=x16+x12+x5+1
- CRC-32生成多项式为G(x)=x32+x26+x23+x22+x16+x11+x10+x16+x8+x7+x5+x4+x2+x+1
- CRC特点:
能检测小于 r+1 位的突发差错、任何奇数个差错。
差错检测方法比较
- 奇偶校验能力最弱,CRC校验能力最强。
- 奇偶校验通常用于简单的串口通信【一个比特一个比特传输】
- Internet校验和通常用于网络层及其之上的层次,要求简单快速的软件实现方式
- CRC通常应用于链路层,一般由适配器硬件实现
检错纠错的基本原理*
海明编码*
5.3 多路访问链路和协议
多路访问链路和协议
- 两种网络链路:
- 点对点链路:链路两端各一个节点。一个发送和一个接收。如点对点协议PPP。
- 广播链路: 多个节点连接到一个共享的广播信道。
广播:任何一个节点传输一帧时,信号在信道上广播,其他节点都可以收到一个拷贝。常用于局域网LAN中,如早期的以太网和无线局域网。
- 本节主要学习广播链路的信道共享技术。
两个节点同时发送会造成冲突
- MAC介质访问控制协议:协调介质的共享使用
- 多个站点一个信道,可发控制信息和数据信息
广播信道要解决问题
- 传统的广播电视:是单向的广播,一个固定的节点向许多接收节点发送。
- 计算机网络:广播信道上的节点都能够发送和接收。
好比许多人聚集在一起交谈(空气是广播媒体)。
解决“谁在什么时候获得说话权力”(向信道发送)。 - 多路访问问题:如何协调多个发送和接收节点对共享广播信道的访问。相关技术即是多路访问协议(也称多址访问协议)。
多路访问协议
-
目的:协调多个节点在共享广播信道上的传输。
避免多个节点同时使用信道,发生冲突(碰撞),产生互相干扰。 -
冲突(collide):两个以上的节点同时传输帧,使接收方收不到正确的帧(所有冲突的帧都受损丢失)。
- 造成广播信道时间的浪费。
- 多路访问协议可用于许多不同的网络环境,如有线和无线局域网、卫星网等。
-
理想的多址访问协议
速率为R bps的广播信道- 当一个节点有数据发送时,它能以R bps的速率发送.
- 当有M个节点要发送数据,每个节点的平均发送速率为 R/M
- 完全分散:
不需要主节点协调传输
不需要时钟、时隙同步 - 简单
多路访问协议类型(三类)
- 信道划分协议
- 把信道划分为小“片” (时隙)
- 给节点分配专用的小“片”
- 随机访问协议
- 不划分信道,允许冲突
- 能从冲突中“恢复”
- 轮流协议
- 通过轮流访问信道避免冲突,要发送的节点越多轮流时间越长
5.3.1 信道划分协议
主要有TDMA、FDMA、CDMA三种。
设信道支持 N 个节点,传输速率是 R b/s。
- 时分多路访问TDMA (time division multiple access):
将时间划分为时间帧,每个时间帧再划分为N个时隙【slot】(长度保证发送一个分组),分别分配给N个节点。每 个节点只在固定分配的时隙中传输。
例:6个站点的LAN, 时隙1、3、4 有分组, 时隙2、5、6 空闲
-
TDMA的特点
- 避免冲突、公平:每个节点专用速率R/N b/s。
- 节点速率有限:R/N b/s;
- 效率不高:节点必须等待它的传输时隙。
-
频分多路访问FDMA (frequency division multiple access):
- 将总信道带宽 R b/s划分为 N 个较小信道(频段,带宽为R/N),分别分配给 N 个节点。例: 6个站点的LAN, 频带1、3、4 有分组, 频带2、5、6 空闲
- 特点:
避免冲突、公平:N个节点公平划分带宽;
节点带宽有限、效率不高:节点带宽为R/N。
-
码分多路访问CDMA (frequency division multiple access):
- 每个节点分配一个唯一的编码
- 每个节点用它唯一的编码来对它发送的数据进行编码
- 允许多个节点“共存” ,信号可叠加,即可以同时传输数据而无冲突 (如果编码 是“正交化”的)
5.3.2 随机访问协议
随机访问协议规定:
- 如何检测冲突
- 如何从冲突中恢复
ALOHA
纯 ALOHA
纯Aloha效率
纯Aloha的效率:1/2e
时隙ALOHA
冲突之后,以p的概率重传帧,时间越长成功概率越大。
载波侦听多路访问CSMA
传输前先侦听信道
- 由于电磁波传递的速度,局部的判知无法判断全局的使用情况。
- 端到端越长,传播延迟越大,冲突概率越大
- CSMA可以进一步减少冲突可能性,但无法避免冲突
CSMA/CD(冲突检测)
CSMA:说之前听
CSMA/CD:边说边听
冲突发生时停止传输,**提升信道利用率 **
以太网采用CSMA/CD
- 发送方检测到了冲突,发送Jam信号让所有站点都知道冲突
- 窗口越大碰撞几率下降,但平均等待时间增大了
- 直到m=10,取值为{0-1023},双方选择一个值,等待i*512位时
- 对载荷自适应
- 载荷越大,碰撞几率越大,窗口扩大
- 自适应算法:【二进制指数退避算法】
- 在等待时间和碰撞几率中取得较好的均衡
效率比ALOHA更好
CSMA/CA(冲突避免)
WLAN有两种模式:
- 有基础设施模式
- 自主帧模式
AP接入点【Access Point】
**无线介质特点:**电磁波衰减,开放空间传电磁波干扰严重。
发之前监听,发过程中不作冲突检测
无线网络中冲突检测不可行:
- 自身的电磁波信号强于其他节点传播的电磁波信号
- 不冲突不意味着成功
有限网络中:不发生冲突=成功
条件:帧>=2t(t=最远两个站点的传播延迟)
图中A、C为隐藏站点,B作为中继节点
- A、C同时向B发送,对于A、C没有冲突,但在B点冲突,不代表成功。
- 为什么不采用CD?
- 由无线局域网带来的隐藏终端和暴露终端的问题使得CD不好用
CA:事前避免冲突,信道忙,则随机选择一个值,信道空闲时每个周期-1,为0时获得信道访问权
SIFS < DIFS,确认帧的发送优先级更高
以太网没有确认帧
冲突预约
线缆接入网络
下行数据:
- 互联网通过CMTS向客户端发送的一些数据
- 不存在竞争
上行数据【互联网访问的数据】:存在介质访问控制的问题
- 竞争式的预约的时隙
- 终端设备通过竞争式的上行链路的信道去预约,CMTS通过下行信道通知所有节点,采用预约的结果使用响应的时隙进行上行传输
- 若预约信息冲突,终端用户可再次预约【采用二进制退避的方法】
轮流MAC协议
信道划分:
- 低负载的情况下:每个用户的带宽只有1/N,利用率低
- 高负载情况下利用率高
随机访问:
- 低负载情况下:效率几乎100%
- 高负载情况下:冲突开销大,效率极低
- 单点故障:不可靠
分布式的轮询
高低负载效率都高
- 高负载比不过信道划分
- 低负载比不过随机访问
MAC总结
5.4 交换局域网
局域网概述
- 局域网:Local Area Network ( LAN )
- 多址访问协议广泛应用于局域网
- 基于随机访问的CSMA/CD广泛应用于局域网
- 基于令牌传递技术的令牌环和FDDI在局域网技术中变得次要或被淘汰
- 链路层技术的发展,使得局域网、城域网、广域网的概念变得越来越模糊和不重要
- 主要特点:网络为一个组织所拥有,且地理范围和站点数目均有限
- 局域网按拓扑结构进行分类:星形网、环形网、总线网、树形网和网状网
常见的网络拓扑结构
-
星型结构
-
辐射状连接
-
中央结点集中式通信控制
-
优点:结构简单,访问协议简单,单个节点的故障不会影响到整个网络。
-
缺点:对中央结点的可靠性要求很高,一有故障,全网瘫痪。
-
总线结构
-
所有的站点都连接在同一根传输线,即“总线”上
-
优点:结构简单,易于扩充
-
缺点:故障检测比较困难
-
环型结构
-
站与站点之间首尾相接,形成一个环,数据只能沿单方向传输
-
优点:这种结构适合于光纤介质。实时性较强
-
缺点:如果处理不当,站点的故障会引起全网故障
-
树型结构
-
它是从星型拓扑演变而来的,形状像一棵倒挂的树
-
特点:与星型拓扑大致相似。它与星型结构相比降低了通信线路
本,增加了网络复杂性
-
网状结构
-
网状网络的每一个站点都与其它站点一一直接互连
-
优点:连接方法主要是利用冗余的连接,实现站与站之间的高速传输和高容错性能,以提高网络的速度和可靠性
-
缺点:关系复杂,建网难,维护难
计算机与局域网的连接
计算机与局域网通过网络接口板进行连接,网络接口板又称通信适配器(Adapter)或网络接口卡NIC(Network Interface Card),通常我们称为“网卡”。
局域网体系结构
-
美国电气与电子工程师协会IEEE 802委员会制定的IEEE 802局域网标准已经得到了国际标准化组织ISO的采纳,成为计算机局域网的事实标准
-
IEEE 802局域网参考模型是针对局域网的网络体系结构特点而制定的,它遵循ISO/OSI参考模型的原则,解决物理层和数据链路层的功能以及与网络层的接口服务、网际互连的高层功能
局域网体系结构
LANs
前n-1跳是ip地址的子网层起作用
LAN地址【48位】:区分一个网络的内部,节点节点之间的切分
MAC:在物理网络的内部标识每个节点,从而把分组分装为帧从一个节点发到另一个节点【唯一标识一块网卡】
IP地址是分层的,MAC地址的平面的
ARP:IP地址到MAC地址的转换
- IP地址完成网络到网络的交付
- MAC地址完成物理网络内部的节点到节点的数据交付
- 分离的好处
- 网卡变了IP地址可以不变
- 可以支持不同的网络层协议
!!!MAC地址完成的工作
- 前n-1跳:到下一跳的IP转换为MAC
- 最后一条将目标IP地址转换为MAC地址
- 将这些MAC地址交给网卡,封装成帧【都是一个网卡交给另一个网卡】
- 经过前面n-1跳,穿过若干子网,最后一跳到达目标主机
- 广播MAC地址:48位全1,整个局域网内的所有节点都能收到
MAC地址可以移动
IP地址不能随意移动,子网前缀不同
ARP协议
查询MAC地址
- 查询缓存表
- 没有
- 广播IP地址,等待接收ARP包的回复得到MAC地址
- 加入节点的IP-to-MAC地址映射关系表,20min信息超时
- 有
- 直接查询得到
理解过程:【假设有n跳(n>2)】
- 第一步:A节点查询默认网关的IP地址,广播ARP包,得到网关路由器的MAC地址
- 第二步:封装成帧,发向网关路由器
- 第三步:路由器解封装,得到目标IP地址,查询路由表,得到转发端口和下一跳IP地址
- 第四步:重复第一步,得到下一跳路由器的MAC地址,重复第二步
- 第五步:直到到达目标IP的网关路由器,同样得到MAC地址,进行封装发送。
- 穿过每一段的MAC形式都可能变,IP地址始终不变
以太网
每个节点使用CSMA/CD【冲突检测】的方式
线缆只要有一处破损,会导致总是冲突
hub集线器:一个端口收,所有端口发
集线器的连接设备,都处于一个碰撞域内,一次只能有一个设备发【逻辑上看总线型,物理看星形】
过多的节点连接会导致冲突增多,效率下降,需升级为Switch【交换机】
交换机:网络的发送和接收可以同时多个主机并行。
发送节点发送至交换机,交换机存储后只转发到对应的端口
CSMA/CD在高负载情况下冲突的弱点,由交换机解决
网卡混杂模式,接收所有目标MAC
type:标注上层需要交给的协议【IP、xx】
CRC:循环冗余校验
以太网:无连接、不可靠的服务
以太网使用CSMA/CD
T代表双绞线
所有集线器连接的节点处在同一个碰撞域中
Manchester编码
每个信号中间有向下的跳变代表1,有向上的跳变代表0
接收方可以区分时钟和数据
物理层内容
- 体积x2,10M的数据变为20M
慢车斯顿编码在每个比特都有时钟周期和传送的数据,导致带宽太宽。
4b5b,100M->125M,有限的若干比特至少有一个跳边
802.11WLAN
网络交换设备
Hub集线器
集线器Hub
物理上是星型设备,逻辑上是总线型,盒中总线
Hub可以接其他hub,所有设备都在一个碰撞域中,一次只有一个站点能发送
碰撞域即网段
交换机
交换机:帧的存储转发。每个端口是一个网段。多个主机可以并发发送。
透明
点到点:主机直接接到交换机
表项:(主机MAC,经过的接口,时戳)
- 当接收到帧的时候,交换机学习到发送站点的端口,记录时添加时戳,到时间删除
- 不知道帧的端口,进行泛洪【向所有端口转发】
- 出去的端口和进来的端口不同
- 转发
- 出去的端口和进来的端口相同
- 丢弃【过滤】
- 不知道捆绑的端口
- 泛洪
交换机VS路由器
VLANS
VLAN:一个物理LAN基础设施,虚拟成多个LANs
**基于端口的VLAN:**交换机端口成组(通过交换机管理软件),以至于单个的交换机可以分成若干虚拟LANs1
VLAN之间通过路由器进行转发
多个交换机共享VLAN,之间传输帧必须使用trunk port干线接口,携带VLAN ID【802.1Q】
链路虚拟化MPLS
按照标签进行转发
数据中心网络
高带宽、高可靠性、低延迟
页面请求流程
学生在校园启动一台笔记本电脑:请求和接受www.google.com