一、计算机网络概述
1)基本概念
- 基本概念
① 计算机网络就是一种通信网络
② 计算机网络 = 通信技术 + 计算机技术
③ 计算机网络就是互连的、自治的计算机集合
自治:无主从关系;互连:互联互通。
若计算机距离远、数量庞大, 可以通过交换网络互联主机
- Internet 组成
① 全球最大的互联网络: ISP网络
② 主机 (hosts) / 端系统 (end systems)
数以百万计互连的计算机设备集合, 用来运行各种网络应用
③ 通信链路: 光纤、铜缆、无线电、卫星
④ 交换节点: 路由器、交换机, 用来转发数据包
- Internet 服务
① 为网络应用提供通信服务的基础设施
Web (浏览器), Vol (电话语音), email (邮箱)
网络游戏 (LOL), 电子商务 (淘宝), 社交网络 (贴吧)
② 为网络应用提供应用编程接口 (API)
支持类似邮政系统的数据传输服务,支持应用程序连接Internet 并发送/接收数据
- Internet 协议
Q: 仅有硬件连接,Internet 能否流畅运行? 能否保证应用数据有序交付?
(单个数据流的传输是按序的, 但是多个数据流中接受顺序可能与发送顺序不同)
A: 不能, 需要网络协议制约
① 网络协议是为网络数据交换而建立的规则。比如:TCP, IP, HTTP, Skype, 802.11
② 网络协议规定了通信实体间交换信息的格式、意义、顺序, 及收到信息所采取的 “动作”
语法: 数据与控制信息格式
语义: 控制信息,动作响应
时序: 双方发生事件的顺序
Internet 协议标准:RFC、IETF
2)网络结构
- 网络结构
① 网络边缘: 主机 (端系统)
客户 (client) / 服务器 (server) 应用模型, 例如: Web应用
对等 (P2P) 应用模型, 例如: QQ、微信
② 接入网络
共享: 电缆网络, 例如: 电视
独占: 数字用户线路, 例如: 座机
机构接入网络: 局域网, 例如: 以太网
无线接入网络: 无线局域网 (LANs), 例如: WiFi
广域无线接入, 例如: 移动互联网
③ 网络核心: 互联的路由器网络
路由: 路由算法确定分组从源到目的传输路径
转发: 将分组从路由器的输入端口交换到正确的输出端口
通过网络核心的数据交换,数据从源主机送达目的主机。
- Internet 结构
① 接入ISP
端系统通过接入ISP连接 Internet , 接入ISP进一步互连, 使得任意主机间可以互发分组
② 网络结构
一级商业 ISP, 例如: 电信。它提供国家范围的覆盖
IXP: 将一级商业ISPs互连, 因为其属于竞争关系
区域 ISP: 连接接入ISP和一级商业ISP
内容提供商网络, 例如: Google。通常绕过一级ISP、区域ISP
3)网络核心
- 网络核心
A)电路交换, 例如:电话网络
分为三个阶段: 建立连接(呼叫)、通信、释放连接(挂机)
电话网络是独占资源的,即双方没有挂机时第三方不可占用
而中继线是共享的,即多路复用(Multiplexing )
B)报文交换:以报文整体进行“存储-转发”
C)分组交换:以较小分组进行“存储-转发”
分组 = 头 + 数据,交换中需要拆分与重组。
- 多路复用
① 频分多路复用
分配给用户不同频率带宽,例如:有线电视网络
② 时分多路复用
将时间划分为等长时分复用帧,分配帧中周期性的时隙给用户
③ 波分多路复用
波分复用就是光的频分复用
④ 码分多路复用
分配给用户唯一的码片序列,例如:蜂窝网,卫星通信
0 表示 -1,1表示+1,例:(-1-1+1+1-1+1+1)
各用户码片序列相互正交,从而保证共享信道,互不干扰
编码:原始数据、码片序列的叉乘
解码:编码信号、码片序列的内积
报文交换 vs 分组交换
M 是报文长度 (bits),L 是分组长度 (bits),R 是传输速率 (bits/sec)
报文交换:传输延迟 = M/R,串行交换,传输慢
分组交换:传输延迟 = L/R,并行交换,传输快
电路交换 vs 分组交换
分组交换允许更多用户同时使用网络(资源充分共享)
分组交换:适用于突发数据传输网络,例如:短时看十个视频
电路交换:适用于非突发数据传输网络,例如:长时看一个视频
4)网络性能
① 速率
单位时间传输信息量,往往指额定速率
单位:b/s(bps)、kb/s、mb/s、gb/s
k = 10^3、M = 10^6、G = 10^9
② 带宽
数字信道所能传达的最高速率
单位:b/s(bps)、kb/s、mb/s、Gb/s
③ 延迟
排队延迟、传输延迟、传播延迟、结点处理延迟
Q:分组交换为什么会发生丢包、延迟?
A:分组会在路由器缓存中排队
R:链路带宽,L:分组长度,a:平均到达速率
La/R ~ 0:平均排队延迟很小
La/R -> 1:平均排队延迟很大
La/R > 1:平均排队延迟无限大
④ 时延带宽积
时延带宽积 = 传播时延×带宽 = d×R
链路的时延带宽积,又称以比特为单位的链路长度
⑤ 丢包
丢包:缓存区已满时,到达的分组将被丢弃
丢包率 = 分组丢失数/已发分组总数
⑥ 吞吐量
吞吐量:发送端与接收端间传送数据的速率
即时吞吐量:一定时刻的速率
平均吞吐量:一段时间的平均速率
瓶颈链路:端到端的路径上,限制吞吐量的链路,比如Rc、Rs
5)体系结构
计算机网络是一个非常复杂的系统,涉及许多组成部分
例如:主机,路由器,各种链路,应用,协议,硬件,软件
1)计算机网络体系结构是其各层及协议的集合,属于分层结构
分层结构清晰,利于识别系统的部件及关系,易于系统更新、维护
2)每层依赖底层服务,遵循网络协议,实现本层功能,向上层提供服务
实体指任何可发送或接收信息的硬件或软件进程
相邻层实体通过接口进行交互,通过服务访问点SAP交换原语,请求特定服务
① 物理层
接口特性:机械、电气、规程
传输模式:单工/半双工/全双工
② 数据链路层
传输数据:结点结点
组帧:组合信息成为可以在网络上传输的帧
物理寻址:在帧头增加物理地址标识
流量控制:避免淹没接收端
差错控制:检验并重组损坏帧或丢失帧
访问控制:决定哪个设备拥有链路控制权
③ 网络层
负责源主机到目的主机的数据分组交付
逻辑寻址:全局唯一逻辑地址(如IP地址),确保数据准确送达
路由:路由器互连网络,并路由分组至最终目的主机
④ 传输层
分段重组,SAP寻址,连接控制,流量控制,差错控制
⑤ 会话层
对话控制:建立/维护
同步:在数据流中插入同步点
⑥ 表示层
处理两个系统间交换信息的语法与语义问题
数据转化,加密/解密,压缩/解压缩
⑦ 应用层
支持用户通过用户代理(如浏览器)或网络接口使用网络服务
典型服务:文件传输(FTP),电子邮件(SMTP),Web(HTTP)
6)发展历史
计算机网络与 Internet 发展历史
1961~1972:早期分组交换原的提出与应用
1961:Kleinrock - 排队论证实分组交换的有效性
1967:ARPA提出ARPAnet 构想
1972:ARPAnet 公开演示,拥有15个结点
第一个主机-主机协议NCP(Network Control Protocol)诞生
1972~1980:网络互连,涌现大量新型、私有网络
1974:Cerf与kahn-提出网络互连体系结构
1976:Xero设计了以太网
1979:ARPAnet 拥有200个结点
1980-1990:涌现大量新型网络、网络协议
1983:部署TCP/IP
1988:TCP拥塞控制
1982:定义smtp电子邮件协议
1983:定义NDS
1985:定义FTP协议
1986:NSFnet 形成骨干网区域网、校园网的三级网络
1990-2000s:商业化,Web,新应用
1990s 前期:ARPAnet 退役
1991:NSFnet 解除商业应用限制,由私营企业经营
1990s 后期:Web应用涌现:超文本,html、http
2000s:网络应用涌现:即时消息系统(如QQ)、P2P文件共享
网络安全引起重视,网络主机数量达五万,用户数量达一亿
2005~今
7.5亿主机(如智能手机、平板电脑)
宽带接入快速部署,高速无线接入快速增长
出现在线社交网络(如Facebook)
服务提供商(如Google )创建专用网络绕开Internet
电子商务、大学、企业开始在“云”中运行服务(如Amazon EC2)
二、网络应用
1)内容概述
① 网络应用体系结构
客户机 / 服务器,P2P ,混合结构
② 网络应用的服务需求
可靠性,带宽,时延
③ Internet 传输层服务模型
TCP ,UDP
④ 特定网络应用及协议
HTTP ,SMTP,DNS ,P2P应用
⑤ Socket 编程
TCP,UDP
2)基本原理
- 网络应用的体系结构
① 客户机 / 服务器结构(如 Web)
客户机:与服务器通信,使用服务
间歇性接入网络,可能使用动态P地址
服务器:7×24 小时提供服务
永久性访问地址和域名,大量服务器实现可扩展性
② 点对点(P2P)结构
没有7*24小时服务器,任意端系统和节点直接通信
节点间歇性接入网络,可能改变 IP 地址
③ 混合结构(如 Napster)
文件传输使用P2P结构,文件搜索使用 C/S 结构集中式
① 网络应用的基础: 进程间通信
进程:主机上运行的程序
Q:同一主机的进程如何通信?A:通信机制、系统提示
Q:不同主机的进程如何通信?A:消息交换
② 套接字:Socket
进程间通信用 Socket 发送接受消息
③ 寻址进程
寻址主机:IP地址,主机可能有多个进程,有了 IP 依然不能定位进程
为主机上每个通信进程分配端口号(Port number)
如 HTTP Server :80 ,Mail Server :25
所以进程的标识符:IP地址+端口号
④ 应用层协议
公开协议:RFC定义,允许互操作,如HTTP、SMTP...
私有协议:多数P2P文件共享应用
⑤ 应用层协议内容
消息类型:请求消息、响应消息
消息语法:消息包含哪些字段、如何描述字段
字段语义:字段中信息的含义
规则:进程何时如何发送 / 相应消息
- 网络应用对传输服务的需求
① 数据丢失 / 可靠性
能够容忍一定数据丢失的网络应用:网络电话
要求100%可靠数据传输的网络应用:文件传输
② 时间 / 延迟
某些应用只有在延迟足够低时才有效:网络游戏
③ 带宽
某些应用只有在带宽足够低时才有效:网络视频
某些应用能够适应任何带宽(弹性应用):email
- Internet 提供的传输服务
① TCP 服务
面向连接:客户机 / 服务器进程间需要建立连接
可靠的数据传输,流量传输,拥塞控制,延迟保障,带宽保障
② UDP 服务
无连接,不可靠的数据传输
不提供:流量传输,拥塞控制,延迟保障,带宽保障
3)Web 应用
- Web
① 网页互相链接
World Wide Web(万维网)
② 网页包含多个对象
对象:HTML文件、JPEG图片、视频文件、动态脚本
基本HTML文件:包含对其他对象的引用链接
①对象的寻址
URL(Uniform Resoure Locator ):统一资源定位器
例:www .someschool .edu / someDept / pic.gif
- HTTP协议
① 超文本传输协议
HyperText Transfer Protocol
② C/S结构
客户 - Browser :请求、接收、展示Web对象
服务器 - Web server :响应请求,发送对象
③ HTTP版本
1.0:RFC 1945
1.1:RFC 2068
④ TCP传输服务
服务器在80端口等待客户请求
浏览器发起TCP连接,服务器接收TCP连接
浏览器与服务器交换HTTP信息
⑤ 无状态
服务器不维护任何有关客户瑞过去所发的请求信息
- HTTP连接
① 非持久性连接(HTTP 1.0)
每个TCP连接只允许一个传输对象
② 持久性连接(HTTP 1.1)
每个TCP连接允许多个传输对象
- 响应时间分析与建模
① RTT ( Round Trip Time )
很小的一个数据包往返客户瑞、服务器经历的时间
② 响应时间(Response time )
Total = 2RTT + 文件发送时间
发起、建立TCP连接:一个RTT
发送HTTP请求、HTTP响应消息到达:一个RTT
响应消息中所含文件 / 对象传输时间
a. 非持久性连接
操作系统需要为每个TCP连接开销资源,打开多个并行连接以获取网页对象
b. 持久性连接
发送响应后,服务器保持TCP连接打开,后续HTTP消息通过这个连接发送
c. 无流水机制的持久性连接
只有收到前一个响应,才发送新的请求,每个被引用的对象耗时一个RTT
d.有流水机制的持久性连接
只要收到一个引用对象,就发送新的请求,收到所有的引用对象只耗时一个RTT
- HTTP消息格式
1)HTTP请求消息
① 上传输入的方法
a. POST方法:网页填写表格,在消息体中上传客户瑞的输入
b. GET方法:输入信息通过 request 行的URL字段上传
② 方法的类型
HTTP /1.0:GET ,POST ,HEAD
HTTP /1.1:GET ,POST ,HEAD ,PUT ,DELETE
HEAD:请求 Server 不要将对象放入响应消息
PUT:将消息体中文件上传到URL字段指定路径
DELETE :删除URL字段指定文件
2)HTTP响应消息
响应消息的第一行,例:200 OK ,400 Bad Request ,404 Not Found
3)体验一下HTTP
① 利用helnet 登录到Web服务器
telnet www .baidu .com 80
② 输入HTTP请求,查看响应消息
GET / about / profile .htm HTTP / 1.1
Host www .baidu .com
- Cookie
① Cookie 技术
网站为了辨别用户身份、进行 session 跟踪而存储在用户本地终端上的数据(通常经过加密)
Cookie 标准:RFC6265
② Cookie 组件
HTTP 响应 / 请求消息的 cookie 头部行
客户端的 cookie 文件,服务器端的后台数据库
③ Cookie 作用
身份认证,购物车,商品推荐,隐私保护,Web e-mail
④ Cookie 原理
4)Email 应用
- Email 应用的构成
① 构成组件
邮件客户端:与服务器交互,读写收发 Email 信息
邮件服务器:邮箱储存发给用户的Email ,消息队列存储等待发送的Email
SMTP协议:客户端与服务器之间传递消息的协议,使用TCP进行可靠传输,端口25
传输阶段:握手 >> 传输消息 >> 关闭
- Email 消息格式
SMTP:email 消息的传输 / 交换协议
RFC 822:文本消息的格式标准
头部行(header) :To,From,Subject
消息体(body):ASCII 字符
MIME:多媒体邮件扩展
- 邮件访问协议
POP:认证和下载
IMAP:功能化,复杂化,操纵信息
HTTP :163 Mail ,QQ Mail
5)DNS 应用
- DNS服务
DNS:Domain Name System (域名解析系统)
域名向 IP 地址的翻译
主机别名,服务器别名
负载均衡:Web服务器
- 分布式层次式数据库
① 根域名服务器(root):全球有13个
② 顶级域名服务器(TLD):负责com,org,net,edu,cn等域名
③ 权威域名服务器(authoritative):负责组织内部的域名
e.g. 客户端想要查询 www .amazon .com 的 IP
查询根域名服务器,找到 com 域名解析服务器
查询 com 域名解析服务器,找到 amazon .com 域名解析服务器
查询 amazon .com 域名解析服务器,获得 www .amazon .com 的 IP
- DNS记录缓存和更新
① 缓存:DNS 获得 域名-IP 映射后会缓存此映射
一段时间后缓存会失效,本地域名服务器一般缓存TLD的映射
② 更新:RFC 2136,DNS UPDATE
- DNS记录
① Type = A
Name:主机域名,Value :IP 地址
② Type = NS
ame:edu.cn,Value :权威域名服务器的主机域名
③ Type = CHAME
Name:真实域名的别名,Value :真实域名
④ Type = MX
Name:主机域名,Value :邮件服务器
- DNS协议与消息
① DNS协议:查询和回复,消息格式相同
② DNS消息头部:identification :16位查询编码,回复使用相同编码;flags:查询 / 回复
6)P2P 应用
- 文件分发:客户机/服务器 vs P2P
- 文件分发:BitTorrent
上传速率高,能够更快获取文件
① 文件划分为 256KB 的 chunk
② 节点加入 torrent
③ 下载的同时,向其他节点上传 chunk
④ 一旦节点获得完整文件,它可能留下或离开
7)Socket 编程
- 应用编程接口 API(ApplicationProgramming Interface)
应用进程控制权 / 操作系统控制权进行转换的一个调用接口
① UNIX 系统定义了一种 APl,称为套接字(socket)
② 微软系统中采用了稍有不同的套接字,称为 WINSOCK
WSAStartup :初始化 socket 库(仅对 WinSock)
WSACleanup :清楚 / 终止 socket 库的使用(仅对 Winsock)
socket :创建套接字
connect :“连接”远端服务器(仅用于客户端)
closesocket: 释放 / 关闭套接字
bind:绑定套接字的本地P地址和端口号(通常客户端不需要)
listen:置服务器端TCP套接字为监听模式,并设置队列大小(仅用于服务器端TCP套接字)
accept: 接受提取一个连接请求,创建新套接字,通过新套接(仅用于服务器端的TCP套接字)
recv:接收数据(用于TCP套接字或连接模式的客户端UDP套接字)
recvfrom:接收数据报(用于非连接模式的UDP套接字)
send:发送数据(用于TCP套接字或连接模式的客户端UDP套接字)
sendto :发送数据报(用于非连接模式的UDP套接字)
setsockopt :设置套接字选项参数
getsockopt :获取套接字选项参数
- Socket APl(TCP)调用基本流程
三、传输层
1)传输层服务
- 基本理论和机制
① 复用 / 分用
② 可靠数据传输机制
③ 流量控制机制
④ 拥塞控制机制
- 传输层协议
UDP:无连接的传输服务
TCP:面向连接的传输服务
TCP 拥塞控制
- 传输层服务概述
① 传输层服务和协议
传输层协议为运行在不同 Host 上的进程提供了一种逻辑通信机制
发送方:将应用递交的消息分成多个 Segment ,并向下传给网络层
接收方:将接收到的多个 Segment 组装成消息,并向上传给应用层
传输层可以为应用提供多种协议(TCP、UDP)
② 传输层 vs 网络层
网络层:提供主机间的逻辑通信机制
传输层:提供应用进程间的逻辑通信机制
2)复用和分用
- 多路复用 / 分用
如果某层的一个协议对应上层的多个协议,则需要复用 / 分用
① 接收端进行多路分用
传输层依据头部信息将收到的 Segment 交给正确的 Socket ,即不同的进程
② 发送端进行多路复用
从多个 Socket 接收数据,为每块数据封装上头部信息生成 Segment 给网络层
- 分用如何工作
① 主机收到 IP 数据报(datagram)
② 主机收到 Segment 后传输层协议提取地址和端口号将 Segment 导向相应的 Socket
- 无连接的分用
① 利用端口号创建Socket
DatagramSocket mySocket1 new DatagramSocket (99111);
DatagramSocket mySocket2 new DatagramSocket (99222);
② UDP 的 Socket 使用二次组织标识:目的地址,目的端口号
③ 主机收到UDP段后,检查段中的目的端口号,将UDP段导向绑定在该端口号的Socket
④ 来自不同源 IP 地址或源端口号的 IP 数据包被导向同一个 Socket
- 面向连接的分用
① TCP 的 Socket 使用四元组标识:源IP地址,源端口号,目的地址,目的端口号
② 接收端利用四个值将 Segment 导向合适的 Socket
③ 服务器可能同时支持多个 TCP Socket
④ Web 服务器为每个客户端开不同的 Socket
3)无连接传输协议(UDP)
- UDP :User Datagram Protocol
① 基于Internet 协议
复用 / 分用,简单的错误校验
② “Best effort”服务
UDP段可能丢失非按序到达
③ 无连接
UDP 发送方和接收方之间不需要握手,每个UDP段的处理独立于其他段
④ UDP 为什么存在
实现简单,无需维护连接状态,减少延迟,头部开销少
没有拥塞控制应用可更好地控制发送时间和速率
⑤ 常用于流媒体应用,容忍丢失,速率敏感
⑥ UDP 还用于 DNS,SNMP
⑦ UDP上如何实现可靠数据传输
在应用层增加可靠性机制,应用特定的错误恢复机制
- 校验和 (checksum)
目的:检测 UDP 段在传输中是否发生错误
① 发送方
将段的内容视为 16-bit 整数
校验和计算:求整数和进位加在和的后面
将得到的值按位求反得到校验和
发送方将校验和放入校验和字段
② 接收方
计算所收到段的校验和,将其与校验和字段对比
不相等:检测出错误,相等:没有检测出错误
4)可靠数据传输
- 可靠数据传输
① 可靠:不错、不丢、不乱
② 可靠数据传输对应用层、传输层、链路层都很重要
③ 信道的不可靠性决定了可靠数据传输协议 (rdt) 的杂性
④ 只考虑单向数据传输, 但控制信息双向流动
⑤ 利用状态机 (FSM) 刻画传输协议
- 基本结构: 接口
① 发送方
rdt_send (): 被上层应用调用,将数据交给rdt以发送给对方
udt send (): 被rdt调用,在不可靠信道上向接收方传输数据
② 接收方
deliver_data : 被rdt调用,向上层应用交付数据
rdt_rcv (): 当数据包到达接收方信道时被调用
- Rdt 1.0/2.0
Rdt 1.0: 底层信道完全可靠;发送方和接收方的FSM独立
Rdt 2.0: 底层信道可能翻转分组中的位(bit)
如何从错误中恢复?
① 确认机制(ACK): 接收方显式地告知发送方分组已正确接收
② NAK: 接收方显式地告知发送方分组有错误
③ 发送方收到NAK后, 重传分组
这种重传机制的rdt协议称为ARQ协议。
5)滑动窗口协议
- 流水线机制
Rdt 3.0:停等操作
流水线机制:提高资源利用率
流水线协议:允许发送方在收到ACK之前连续发送多个分组
- 滑动窗口协议
滑动窗口协议:GBN,SR
窗口:允许使用的序列号范围
窗口尺寸为N,最多有N个等待确认的消息
滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动
- Go-Back-N 协议
分组头部包含 k-bit 序列号
窗口尺寸为N,最多允许N个分组未确认
ACK (n):确认到序列号n的分组均已被正确接收,可能收到重复ACK
超时 Timeout (n) 事件:重传序列号大于等于n,还未收到ACK的所有分组
- Selective Repeat 协议
GBN 协议的缺陷
接收方对每个分组单独进行确认 ⇒ 缓存乱序到达的分组
发送方只重传那些没收到ACK的分组 ⇒ 为每个分组设置定时器
发送方窗口 ⇒ N个连续的序列号,限制已发送未确认的分组
6)面向连接传输协议(TCP)
- TCP 概述:RFCs-793,1122,1323,2018,2581
a. 点对点:一个发送方,一个接收方
b. 可靠的、按序的字节
c. 流水线机制:TCP拥塞控制,流量控制机制,设置窗口尺寸
d. 发送方 / 接收方缓存
e. 全双工:同一连接中能够传输双向数据流
f. 面向连接:通信双方在发送数据之前必须建立连接。
连接状态只在连接的两端中维护,在沿途节点中并不维护状态。
TCP 连接包括:两台主机上的缓存、连接状态变量、socket 等。
g. 流量控制机制
- TCP 可靠数据传输
TCP 在 IP 层的不可靠服务基础上实现可靠数据传输
① Q:如何设置定时器的超时时间?
大于RTT,但是RTT是变化的
过短:不必要的重传
过长:对段丢失时间反应慢
② Q:如何估计RTT?
测量从段发出去到收到 ACK 的时间 SampleRTT
测量多个 SampleRTT 求平均值,形成RTT的估计值 EstimatedRTT
EstimatedRTT = (1-α)* EstimatedRTT + α*SampleRTT(典型值:α=0.125)
③ 定时器超时时间的设置:
EstimatedRTT + 安全边界
EstimatedRTT 变化大 → 较大的边界
④ 测量RTT的变化值: SampleRTT 与 EstimatedRTT 的差值
DevRTT = (1-β) * DevRTT + β * ISampleRTT-EstimatedRTT| ( typically:β = 0.25 )
⑤ 定时器超时时间的设置:
TimeoutInterval = EstimatedRTT + 4 * DevRTT
- TCP 发送方事件
① 从应用层收到数据
创建 Segment ,序列号是 Segment 第一个字节的编号
开启计时器,设置超时时间:TimeoutInterval
② 超时:重传引起超时的Segment,重启定时器
③ 收到ACK:如果确认此前未确认的Segment,更新SendBase
如果窗口中还有未确认的分组,重启定时器
- TCP 流量控制
接收方为 TCP 连接分配 buffer
上层应用可能处理 buffer 中的数据速度较慢
flow control :发送方不会传输的太多太快以至于淹没接收方(buffer 溢出)
假定TCP receiver 丢弃乱序的 segments
① Buffer 中的可用空间 (spare room) = RcvWindow
= RcvBuffer- [LastByteRcvd - LastByteRead ]
② Receiveri 通过在 Segment 的头部字段将 RcvWindow 告诉 Sender
③ Sender 限制已发送但还未收到ACK的数据不超过接收方的空闲 RcvWindow 尺寸
- TCP 连接管理
TCP sender 和 receiver 在传输数据前需要建立连接
① 初始化TCP变量 :
Seq . #(Buffer 和流量控制信息)
② Client :连接发起者
Socket clientsocket = new Socket ("hostname"," portnumber ");
② Server :等待客户连接请求
Socket connectionsocket = welcome Socket .accept ();
7)拥塞控制原理
- 拥塞控制
拥塞 (A top-10 problem):“太多主机发送了太多数据或者发送速度太快,以至于网络无法处理”
表现:分组丢失,分组延迟过大
场景1:两个 senders ,两个 receivers,一个路由器,无限缓存,没有重传
拥塞时分组延迟太大,达到最大 throughput
场景2:一个路由器,有限 buffers,Sender 重传分组
情况a:Sender 能够通过某种机制获知路由器buffer 信息,有空闲才发 λin = λout(goodput)
情况b:丢失后才重发:λin’> λout
情况c:分组丢失和定时器超时后都重发,λin’变得更大
拥塞的代价:对给定的 goodput 要重传,造成资源的浪费。
场景3:四个发送方,多跳,超时/重传
拥塞的代价:当分组被 drop 时,用于该分组的 “上游” 传输能力全被浪费掉。
- 拥塞控制的方法
① 端到端拥塞控制
网络层不需要显式的提供支持
端系统通过观察 loss,delay 等网络行为判断是否发生拥塞
TCP采取这种方法
② 网络辅助的拥塞控制
路由器向发送方显式地反馈网络拥塞信息
简单的拥塞指示(1bit):SNA,DECbit ,TCP /IPECN ,ATM
指示发送方应该采取何种速率
③ 案例:ATM ABR 拥塞控制
ABR :available bit rate“弹性服务”
a. 如果发送方路径“underloaded ,使用可用带宽
b. 如果发送方路径拥塞,将发送速率降到最低保障速率
RM :resourcemanagement
a. 发送方发送
b. 交换机设置 RM cell 位 (网络辅助),NI bit :rate不许增长,CI bit :拥塞指示
c. RM 由接收方返回给发送方
在 RM 中有显式的速率字段:两个字节
数据 cell 中的 EFCl 位:拥塞的交换机将其设为1
8)TCP 拥塞控制
- TCP 拥塞控制的基本原理
① Sender 限制发送速率
LastByteSent-LastByteAcked <= Congwin
rate ≈ CongWin/RTT (Bytes /sec)
② CongWin
动态调整以改变发送速率
反映所感知到的网络拥塞
Q:如何感知网络拥塞?
A:Loss事件 = timeout/3个重复ACK,事件后发送方降低速率
Q:如何合理地调整发送速率?
A:加性增-乘性减:AIMD,慢启动:SS
① 加性增-乘性减:AIMD
原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
每个 RTT 将 CongWin 增大一个MSS,发生 loss 后将 CongWin 减半
② 慢启动:SS
原理:当连接开始时,指数性增长
a. TCP连接建立时,CongWin =1
例:MSS=500byte,RTT =200msec,初始速率=20kbps
b. 指数性增长
每个 RTT 将 CongWin 翻倍,收到每个ACK进行操作
c. 初始速率很慢,但是快速攀升
- TCP 性能分析
① throughput :吞吐率
给定拥塞窗口大小和 RTT, TCP 的平均吞吐率是多少?
假定超时时,CongWin = W, 吞吐率是 W/RTT
超时后,CongWin = W/2, 吞吐率是 W/2RTT
平均吞吐率是 0.75W/RTT
② 未来的 TCP
例:Segment = 1500 bytes,RTT = 100ms,希望获得10Gbps的吞吐率
throughput = WMSS8/RTT,则 W = throughput * RTT/(MSS * 8)
throughput =10Gbps, 则 W = 83,333, 窗口大小为 83,333
吞吐率与丢包率 (L) 的关系
CongWin 从 W/2 增加至 W 时出现第一个丢包,那么一共发送的分组数为
W/2+(W/2+1)+(W/2+2)+...+W = 3W²/8+3W/4
3W²/8>>3W/4, 所以 L = 8/3W²,W = √8/3L
throughput = 0.75W*MSS/RTT ⇒ L = 2×10^-10
“ 高速网络下需要设计新的 TCP ”
③ TCP 的公平性
a. 公平性与UDP
多媒体应用通常不使用TCP,以免被拥塞控制机制限制速率
使用UDP:以恒定速率发送,能够容忍丢失
b. 公平性与并发TCP连接
某些应用(Web浏览器)会打开多个并发连接
例:链路速率为 R,已有9个连接
新来的应用请求1个TCP,获得 R/10 的速率
新来的应用请求11个TCP,获得 R/2 的速率
四、网络层
1)网络层服务
- 网络层
发送主机向接收主机传送数据段(segment )
发送主机:将数据段封装到数据报(datagram )
接收主机:向传输层交付数据段(segment )
每个主机和路由器都运行网络层协议
路由器检验所有穿越它的 IP 数据报的头部域
- 网络层服务
① 转发表:确定路由器如何转发分组
② 路由算法:确定分组从源到目的的路径
某些网络的重要功能:ATM,帧中继,X25
数据分组传输之前两端主机需要首先建立虚拟连接
网络层连接:两个主机之间
传输层连接:两个应用进程之间
A)无连接服务(数据报网络)
不事先为系列分组确定传输路径,每个分组独立确定传输路径,不同分组可能传输路径不同
B)连接服务(虚电路网络)
事先为系列分组确定传输路径,然后沿该路径传输系列分组。每个分组传输路径相同,传输结束后拆除连接
2)虚电路网络,数据报网络
- 虚电路网络
数据报网络、虚电路网络是典型的两类分组交换网络
数据报网络提供网络层无连接服务
虚电路网络提供网络层连接服务
类似于传输层的无连接服务(UDP)和面向连接服务(TCP),但是网络层服务是主机到主机,网络核心实现
虚电路(VC):一条从源主机到目的主机,类似于电路的路径
通信过程:呼叫建立 → 数据传输 → 拆除呼叫
每个分组携带虚电路标识(VCID),而不是目的主机地址
虚电路的每个网络设备(如路由器),利用转发表记录经过的每条虚电路
链路、网络设备资源(如带宽缓存)可以面向VC进行预分配
同一条VC,在每段链路上的VCID通常不同
- 数据报网络
网络层无连接,每个分组携带目的地址,路由器根据分组的目的地址转发分组
基于路由算法构建转发表,每个分组独立选路
路由算法:确定网络端到端的路径
转发表:确定路由器如何转发分组
检索转发表时,优先选择与目的地址匹配前缀最长的入口
- 二者对比
ATM(虚电路网络) —— 简化边缘,复杂网络
① 电话网络演化而来
② 实时对话,严格的时间、可靠性需求
③ 非智能端系统(电话机、传真机)
Internet (数据报网络) —— 简化网络,复杂边缘
① 计算机之间的数据交换,弹性服务,没有严格时间需求
② 链路类型众多,特点、性能各异,统一服务困难
③ 智能端系统(计算机),可以自适应、性能控制、差错恢复
3)IPv4 协议
- IP 协议 - IP 数据报
① 版本号字段占4位:IP 协议的版本号。例:4→ipv4,6→ipv6
② 首部长度字段占4位:IP 分组首部长度,以4字节为单位。例:5→20字节
③ 服务类型字段占8位:IP 分组该字段第2字节的值通常为 00H,很少被使用
④ 总长度字段占16位:IP 分组的总字节数(首部+数据)
最大的 IP 分组长度:65535B
最小的 IP 分组首部:20B
最大的 IP 分组数据:65515B
⑤ 生存时间字段占8位:IP 分组可以通过的路由器数
路由器转发一次分组,TTL减1,TTL=0 时路由器丢弃该分组
⑥ 协议字段占8位:IP 分组封装的是哪个协议的数据包。例:6→TCP,17→UDP
⑦ 首部校验和字段占16位:IP 分组首部的差错检测
逐跳计算校验和时,字段置全0。采用反码算数运算求和,和的反码作为首部校验和字段,逐跳校验
⑧ 源IP地址、目的IP地址字段各占32位:发送分组的源主机/路由器、接收分组的目的主机/路由器的 IP 地址
⑨ 选项字段占1~40B:携带安全、源选路径、时间戳、路由记录等内容,很少被使用
⑩ 填充字段占0~3B:用来补齐整个首部,符合32位对齐,保证首部长度是4字节的倍数
⑪ 标识字段占16位:标识一个 IP 分组
IP 协议利用计数器,每产生一个 IP 分组计数器加1,作为该 IP 分组的标识
⑫ 标志位字段占3位:DF (Don't Fragment),MF (More Fragment)
DF = 1:禁止分片;DF = 0:允许分片
MF = 1:非最后一片;MF = 0:最后一片
⑬ 片偏移字段占13位:一个 IP 分组分片封装原 IP 分组数据的相对偏移量,以8字节为单位
- IP 协议 - IP 分片
网络链路存在 MTU(最大传输单元) — 链路层数据帧可封装数据的上限
大 IP 分组向较小 MTU 链路转发时,可以被“分片”(fragmented)
1个 IP 分组分为多片,到达目的主机后进行“重组”(reassembled)
IP首部字段用于标识分片,以及确定相对顺序(总长度、标识、标志位、片偏移)
设原 IP 分组总长度为 L,待转发链路的 MTU 为 M
IP 分片过程:若 L>M,且 DF=0,则需要分片。
分片时每个分片的标识复制原 IP 分组的标识。
除最后一个分片,均分为 MTU 允许的最大分片。
一个最大分片可封装的数据应该是8的倍数: d = [ (M-20)/8 ] × 8
需要总片数: n = [ (L-20)/d ]
- IP 协议 - IP 编址
IP分组:源地址(SA) - 从哪儿来,目的地址(DA) - 到哪儿去
接口(interface ):主机路由器与物理链路的连接
路由器通常有多个接口,主机通常只有一个或两个接口
例:有线的以太网接口,无线的 802.11 接口
IP地址:32比特(Pv4)编号标识主机、路由器的接口
例:11011111 00000001 00000001 00000001 = 223.1.1.1
IP 地址:网络号(NetD) - 高位比特,主机号(HostID) - 低位比特
IP 子网:① IP地址具有相同网络号的设备接口 ② 不跨越路由器可以彼此物理联通的接口
- IP 协议 - 有类 IP 地址
NetID 全0,HostID 全0,可以作为 IP 分组源地址,不可以作为 IP 分组目的地址
用途:表示整个 Internet 网络
NetID 全0,HostID 特定值,不可以作为 IP 分组源地址,可以作为 IP 分组目的地址
用途:表示本网内某个特定主机
NetID 全1,HostID 全1,不可以作为 IP 分组源地址,可以作为 IP 分组目的地址
用途:表示本网广播地址(路由器不转发)
NetID 特定值,HostID 全0,不可以作为 IP 分组源地址,不可以作为 IP 分组目的地址
用途:表示一个网络
NetID 特定值,HostID 全1,不可以作为 IP 分组源地址,可以作为 IP 分组目的地址
用途:表示直接广播地址(对特定网络上的所有主机广播)
NetID 127,HostID 非全0或非全1,可以作为 IP 分组源地址,可以作为 IP 分组目的地址
用途:表示环回地址,用于本地软件环回测试
- IP 协议 - 子网划分,子网掩码
P地址:
网络号(NetID) - 高位比特
主机号(HostID) - 低位比特
子网号(SubID) - 原网络主机号部分比特
如何确定是否划分了子网?利用多少位划分子网?
子网掩码形如 IP 地址:32位,点分十进制形式
取值:NetID、SubID 位全取1,HostID 位全取0
A网的默认子网掩码为:255.0.0.0
B网的默认子网掩码为:255.255.0.0
C网的默认子网掩码为:255.255.255.0
借用3比特划分子网的B网的子网掩码为:255.255.224.0
将 IP 分组的目的 IP 地址与子网掩码按位与运算,提取子网地址
例:目的 IP 地址:172.32.1.112,子网掩码:255.255.254.0
172.32.1.112 = 10101100 00100000 00000001 01110000
255.255.254.0 = 11111111 11111111 11111110 00000000
与运算:10101100 00100000 00000000 00000000 = 172.32.0.0
子网地址:172.32.0.0
地址范围:172.32.0.0~172.32.1.255
可分配地址范围:172.32.0.1~172.32.1.254
广播地址:172.32.1.255
4)CIDR,路由聚集
- IP 协议 - CIDR与路由聚合
无类域间路由(CIDR):消除传统的A类、B类、类地址界限
NetID + SublD → Network Prefix (Prefix) 可以任意长度
融合子网地址与子网掩码,方便子网划分,格式:a.b.c.d/x,其中x为前缀长度
例1:11001000 00010111 00010000 0000000 → 200.23.16.0/23
例2:201.2.3.64,255.255.255.192 → 201.2.3.64/26
提高 Pv4 地址空间分配效率、路由效率(路由聚合)
例:223.1.0.0/23、223.1.2.0/24、223.1.3.0/24 ⇒ 223.1.0.0/22
5)DHCP 协议
一个主机如何获得IP地址?
A)静态配置
B)动态主机配置协议(DHCP)
① 从服务器动态获取:IP 地址、子网掩码、·默认网关、DNS服务器与 IP 地址
② 即插即用,允许地址重用,支持在用地址续租,支持移动用户加入网络
主机广播“DHCP discover ”(发现报文)
DHCP 服务器利用“DHCP offer ”(提供报文)进行响应
主机请求 IP 地址:“DHCP request ”(请求报文)
DHCP 服务器分配 IP 地址:“DHCP ack ”(确认报文)
DHCP工作过程:
① 在应用层实现:请求报文封装到 UDP 数据报 → IP 广播 → 链路层广播
② 服务器构造 ACK 报文(IP地址、子网掩码、默认网关、DNS服务器地址)
6)NAT
- 网络地址转换(NAT)
所有离开本地网络去往 Internet 的数据报的源 IP 地址,需替换为相同的 NAT IP 地址及不同的端口号
本地网络内通信的 IP 数据报的源与目的 IP 地址均在子网内
动机:① 只需从 ISP 申请一个 IP 地址
② 本地网络设备 IP 地址的变更,无需通告外界网络
③ 变更 ISP 时,无需修改内部网络设备 IP 地址
④ 内部网络设备对外界网络不可直接寻址(安全)
实现:① 用(NAT IP 地址,新端口号)替换每个外出 IP 数据报的(源 IP 地址,源端口号)
② 将每对替换信息存储到 NAT 转换表中
③ 根据转换表,用(源 IP 地址,源端口号)替换每个进入 IP 数据报的(目的 IP 地址,目的端口号)
- NAT 穿透问题
客户不能利用地址 10.0.0.1 直接访问服务器,对外唯一可见的是 NAT 地址:138.76.29.7
法1:静态配置 NAT 将特定端口的连接请求转发给服务器
例:(138.76.29.7,2500) 总是转发给 (10.0.0.1,25000)
法2:利用 UPnP 互联网网关设备协议
NAT 公共 IP 地址(138.76.29.7),在 NAT 转换表中,增删端口映射
法3:中继(如 Skype) NAT
内、外部的客户与中继服务器建立连接,中继服务器桥接两个连接的分组
7)ICMP 协议
- 互联网控制报文协议(ICMP)
A)ICMP 支持主机或路由器:差错报告、网络探询
ICMP 报文封装在 IP 数据报中传输
① 差错报告报文(5种)
目的不可达、源抑制、超时超期、参数问题、重定向
② 网络探询报文(2组)
回声请求与应答报文、时间戳请求与应答报文
B)几种不发送 ICMP 差错报告报文的情况:
① 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
② 除第1个 IP 数据报分片外,对所有后续分片均不发送
③ 对所有多播 IP 数据报均不发送
④ 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的 IP 数据报不发送 ICMP 差错报告报文
几种CMP报文已不再使用:
① 信息请求与应答报文
② 子网掩码请求和应答报文
③ 路由器询问和通告报文
C)ICMP 的应用举例
① 源主机向目的主机发送一系列 UDP 数据报
第1组 IP 数据报 TTL=1
第2组 IP 数据报 TTL=2,etc.
目的端口号为不可能使用的端口号
② 当第 n 组数据报到达第 n 个路由器时:
路由器丢弃数据报,向源主机发送 ICMP 报文(type=11,code =0)
报文携带路由器名称和 IP 地址信息,当返回到源主机时记录 RTT
8)IPv6 简介
- IPv6 简介
最初动机:32位 IPv4 地址空间已分配殆尽
其他动机:改进首部格式,可以快速处理数据报,且支持 Qos
A)IPv6 数据报格式:固定长度的40字节基本首部,不允许分片
优先级:标识数据报的优先级
流标签:标识同一流中的数据报
下一个首部:标识下一个选项首部或上层协议首部(如 TCP 首部)
校验和:彻底移除,以减少每跳处理时间
选项:允许,但是从基本首部移出,定义多个选项首部,通过“下一个首部”字段指示
ICMPv6:新版 ICMP
B)IPv6 地址表示形式
一般形式:1080:0:FF:0:8:800:200C:417A
压缩形式:FF01:0:0:0:0:0:0:43 → FF01::43
IPv4 嵌入形式:0:0:0:0:0:FFFF:13.1.68.3 或 ::FFFF:13.1.68.3
地址前缀:2002:43c:476b::/48 (IPv6 不再使用掩码)
URLS:http://[3FFE::1:800:200C:417A]:8000
C)IPv6 的过渡
不可能在某个时刻所有路由器同时被更新为IPv6
IPv4 和 IPv6 路由器共存的网络如何运行?
隧道:IPv6 数据报作为 IPv4 数据报的载荷进行封装,穿越 IPv4 网络
9)路由算法
- 路由算法
A)图:G = (N,E)
N = 路由器集合 = {u,v,w,x,y,z}
E = 链路集合 = {(u,v),(u,x),(v,x),(v,w),(x,w),(x,y),(w,y),(w,z),(y,z)}
图的抽象在网络领域应用很广泛
例如 P2P 中 N 是 peers 集合,E 是 TCP 连接集合
链路的费用可以总是1,或带宽的倒数、拥塞程度等
假设 c(x,x') = 链路 (x,x') 的费用, 如图 c(w,z)=5
路径费用:(x1,x2,x3,...,xp) = c(x1,x2)+c(x2,x3)++c(xp-1,xp)
路由算法即是寻找最小费用路径的算法
B)静态路由:更新慢、手工配置、优先级高
动态路由:更新快、及时响应链路费用或网络拓扑变化
全局信息:路由器掌握完整的网络拓扑和链路费用
e.g. 链路状态(LS)路由算法
分散信息:路由器只掌握物理相连的邻居及链路费用
e.g. 距离向量(DV)路由算法
- 链路状态路由算法
Dijkstra 算法
所有结点(路由器)掌握网络拓扑和链路费用
计算从一个结点(源)到达所有其他结点的最短路径
迭代:k 次迭代后,得到到达 k 个目的结点的最短路径
符号:c(x,y):结点 x 到 y 链路费用,如果x和y不直接相连,则=∞
D(v):从源到目的 v 的当前路径费用值
p(v):沿从源到 v 的当前路径,v 的前序结点
N':已经找到最小费用路径的结点集合
1 初始化:
2 N' = {u}
3 for 所有结点 v
4 if v 毗邻 u
5 then D(v) = c(u,v)
6 else D(v) = ∞
7
8 Loop
9 找出不在 N' 中的 w,满足 D(w) 最小
10 将 w 加入 N'
11 更新 w 的所有不在 N' 中的邻居 v 的 D(v):
12 D (v) = min (D (v), D (w)+c (w,v))
13 到达 v 的新费用或是原先到达 v 的费用,或是
14 已知到达 w 的最短路径费用加上 w 到 v 的费用
15 until 所有结点在 N' 中
算法复杂性:n 个结点
每次迭代需要检测所有不在集合 N' 中的结点 w
n(n+1)/2 次比较: O(n²),更高效的实现:O(nlogn)
- 距离向量路由算法
① 令 dx(y) = 从 x 到 y 最短路径的费用(距离)
Bellman-Ford 方程:dx(y) = min { c(x,v)+dv(y) }
如图 dv(z) = 5,dx(z) = 3,dw(z) = 3
du(z) = min{ c(u,v)+du(z), c(u,x )+dx(z), c(u,w)+dw(z) } = min{ 2+5, 1+3, 5+3 } = 4
结点获得最短路径的下一跳,该信息用于转发表中
② 令 Dx(y) = 从结点 x 到 y 最小费用估计
每个结点不定时地将其自身的 DV 估计发送给邻居
当 x 接收到邻居的新的 DV 估计时,依据 B-F 更新自身的距离向量估计:
Dx(y) <— minv{ c(x,v)+Dv(y)} for each node y∈ N
Dx(y) 将最终收敛于实际的最小费用 dx(y)
Dx (y) = min { c(x,y) + Dy(y),c (x,z) + Dz(y) } = min { 2 + 0,7 + 1 } = 2
Dx (z) = min { c(x,y) + Dy(z),c (x,z) + Dz(z) } = min { 2 + 1,7 + 0 } = 3
- 层次路由
将任意规模网络抽象为一个图计算路由过于理想,在实际网络中不可行
网络规模:6亿目的结点的网络;路由表几乎无法存储;路由计算过程的信息交换量巨大,会淹没链路
管理自治:每个网络的管理可能都期望自主控制其网内的路由;互联网 = 网络之网络
聚合路由器为一个区域:自治系统 AS
同一 AS 内的路由器运行相同的路由算法
网关路由器位于 AS 边缘,通过链路连接其他 AS 的网关路由器
10)Internet 路由
Internet 采用层次路由,AS 内部路由协议也称为内部网络协议 IGP
最常见的 AS 内部路由协议:路由信息协议 RIP 、开放最短路径优先 OSPF 、内部网关路由协议 IGRP
- RIP 协议简介
RIP 最早于1982年随 BSD-UNIX 操作系统发布
如果 180 秒没有收到通告 → 链路失效 → 可能发生无穷计数问题
经过该邻居的路由不可用,向邻居发送新的通告,邻居再依次向外发送通告(如果转发表改变)
RIP 路由表是利用一个称作 route-d 的应用层进程进行管理,通告报文周期性地通过 UDP 数据报发送
- OSPF 协议简介
“开放”:公众可用
采用链路状态路由算法
LS分组通告、每个路由器构造完整的网络拓扑图、利用 Dijkstra 算法
OSPF 通告中每个入口对应一个邻居
OSPF 通告在整个 AS 范围泛洪
OSPF 极其相似的一个路由协议:IS-IS
OSPF 优点:① 所有 OSPF 报文可以被认证(预防恶意入侵)
② 允许使用多条相同费用的路径(RIP 只能选一条)
③ 对于每条链路,可以针对不同的 TOS 设置多个不同的费用度量
④ 集成单播路由、多播路由
⑤ OSPF 支持对大规模 AS 分层
- BGP 协议简介
边界网关协议 BGP:标准域间路由协议,是将 Internet 粘合为一个整体的关键
BGP 为每个 AS 提供了一种手段:
eBGP:从邻居 AS 获取子网可达性信息
iBGP:向所有 AS 内部路由器传播子网可达性信息.
容许子网向 Internet 其余部分通告它的存在
BGP 会话:两个 BGP 路由器交换 BGP 报文
BGP报文:UPDATE :通告新路径或撤销原路径
OPEN:与 peer 建立 TCP 连接并认证发送方
KEEPALIVE :在无 UPDATE 时保活连接;也用于对 OPEN 请求的确认
NOTIFICATION :报告先前报文的差错;也用于关闭连接
网关路由器收到路由通告后,利用其输入策略决定接受/拒绝该路由
路由器可能获知到达某目的 AS 的多条路由,基于以下准则选择:
1.本地偏好值属性:策略决策
2.最短 AS-PATH
3.最近 NEX-HOP 路由器:热土豆路由
4.附加准则
A,B,C 是提供商网络
X,W,Y 是客户网络
W,Y 是桩网络:只与一个其他 AS 相连
X 是双宿网络:连接两个其他 AS
为什么采用不同的 AS 内与 AS 间路由协议?
① 策略
inter-AS:期望能够管理控制流量如何被路由
intra-AS:单一管理,无需策略决策
② 规模
层次路由节省路由表大小,减少路由更新流量,适应大规模互联网
③ 性能
inter-AS:策略主导,intra-AS:侧重性能
五、数据链路层
1)数据链路层服务
- 数据链路层服务
结点:主机、路由器
链路:连接相邻结点的通信信道
分为有线链路、无线链路、局域网
帧:链路层数据分组
数据链路层:负责一条链路从一个节点向另一个物理链路直接相连的相邻结点传送数据报
① 组帧
封装数据报构成数据帧,加首部和尾部,帧同步
② 链路接入
如果是共享介质,需要解决信道接入
帧首部中的“MAC”地址,用于标识帧的源和目的
③ 相邻结点间可靠交付
有线链路:误码率低,很少采用(如光纤)
无线链路:误码率高,需要可靠交付
④ 流量控制
协调相邻的发送结点和接收
⑤ 差错检测
信号衰减和噪声会引起差错.
接收端检测到差错,通知发送端重传或丢弃帧
⑥ 差错纠正
接收端直接纠正比特差错
⑦ 全双工和半双工通信控制
全双工:链路两端结点同时双向传输
半双工:链路两端结点交替双向传输
网卡间通信:
① 发送端:将数据报封装成帧,增加差错检测比特,实现可靠数据传输和流量控制
② 接收端:检测差错,实现可靠数据传输和流量控制,提取数据报,交付上层协议实体
2)差错编码
- 差错编码
原理:D→DR,其中 R 为差错检测与纠正比特(冗余比特)
差错编码不能保证 100% 可靠
差错编码分为检错码、纠错码
① 对于检错码,如果编码集的汉明距离 ds=r+1,则该差错编码可以检测 r 位的差错
例:编码集 {0000,0101,1010,1111} 的汉明距离 ds=2,可以 100% 检测 1 比特差错
② 对于纠错码,如果编码集的汉明距离 ds=2r+1,则该差错编码可以纠正 r 位的差错
例:编码集 {000000,010101,101010,111111} 的汉明距离 ds=3,可以纠正1比特差错,如 100010 纠正为 101010
Internet 校验和(Checksum)
① 发送端
将“数据”(校验内容)划分为16位的二进制整数序列
求和:补码求和(最高位进位的“1”返回最低位继续加)
校验和:和的反码
放入分组(UDP、TCP、IP)的校验和字段
② 接收端
与发送端相同算法计算
算得的"checksum "为16位全0(或全1):无错
否则:有错
循环冗余校验码(CRC)
检错能力更强大的差错编码
将数据比特,D,视为一个二进制数,选择一个 r+1 位的比特模式,G
目标:选择 r 位的 CRC 比特,R,满足刚好可以被 G 整除(模2)
接收端检错:利用 G 除,余式全0无错,否则有错
可以检测所有突发长度小于r+1位差错,广泛应用于实际网络(如以太网,802.11WiFi,ATM)
3)多路访问协议
- 多路访问控制(MAC)协议
两类“链路”
① 点对点链路 ② 广播链路(共享介质)
单一共享广播信道
干扰:两个或两个以上结点同时传输
冲突:结点同时接收到两个或者多个信号→接收失败
多路访问控制协议:
① 采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据
② 必须基于信道本身,通信信道共享协调信息
MAC 协议分类:
① 信道划分 MAC 协议
多路复用技术、TDMA、FDMA、CDMA、WDMA等
② 随机访问 MAC 协议
信道不划分,允许冲突,采用冲突恢复机制
③ 轮转 MAC 协议
结点轮流使用信道
A)TDMA:time division multiple access
“周期性”接入信道
每个站点在每个周期,占用固定长度的时隙
未用时隙空闲
例如:6-站点LAN,1,3,4传输分组,2,56空闲
信道划分MAC协议:FDMA
B)FDMA :frequency division multiple access
信道频谱划分为若干频带
每个站点分配一个固定的频带
无传输频带空闲
例如:6站点LAN,1,3,4频带传输数据,2,5,6频带空闲
六、局域网
1)ARP 协议
- ARP 协议
① 32 位 IP 地址
接口的网络层地址
用于标识网络层分组,支持分组转发
② MAC 地址
用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口
48 位 MAC 地址用于大部分 LANs,固化在网卡的 ROM 中,有时也可以软件设置
16进制表示,例:1A-2F-BB-76-09-AD
局域网中的每块网卡都有一个唯一的MAC地址
MAC 地址由 IEEE 统一管理与分配
网卡生产商购买 MAC 地址空间(前24比特)
③ 两者对比
MAC 地址好比身份证号,IP 地址好比邮政地址
MAC 地址是平面地址,可携带,可从一个 LAN 移到另一个 LAN
IP 地址是层次地址,不可携带,依赖于结点连接到哪个子网
④ 地址解析协议
Q:在同一个LAN内,如何在已知目的接口的 IP 地址前提下确定 MAC 地址?
A:LAN 中的每个 IP 结点维护一个 ARP 表,存储某些 LAN 结点的 IP/MAC 地址映射关系:
TTL:经过这个时间以后映射关系会被遗弃(典型值为20min)
- ARP 协议:同一局域网内
① A 想要给同一局域网内的 B 发送数据报
B 的 MAC 地址不在 A 的 ARP 表中
② A 广播 ARP 查询分组,其中包含 B 的 IP 地址
目的 MAC 地址 = FF-FF-FF-FF-FF-FF ,LAN 中所有结点都会接收 ARP 查询
③ B 接收 ARP 查询分组,IP 地址匹配成功,利用单播帧向 A 应答 MAC 地址
④ A 在其 ARP 表中,缓存 B 的 IP-MAC 地址对,直至超时
⑤ ARP 是“即插即用”协议,结点自主创建 ARP 表,无需干预
- 寻址:从一个 LAN 路由至另一个 LAN
通信过程:A 通过路由器 R 向 B 发送数据报
关注寻址:IP 地址(数据报)和 MAC 地址(帧)
假设 A 知道 B 的 IP 地址(怎么知道的?)
假设 A 知道第一跳路由器 R (左)接口 IP 地址(怎么知道的?)
假设 A 知道第一跳路由器 R (左)接口 MAC 地址(怎么知道的?)
A 构造 IP 数据报,源 IP 地址是 A 的 IP 地址,目的 IP 地址是 B 的 IP 地址
A 构造链路层帧,源 MAC 地址是 A 的 MAC 地址,目的 MAC 地址是 R(左)接口的 MAC 地址,封装 A 到 B 的 IP 数据报
帧从 A 发送至 R,R接收帧,提取 IP 数据报,传递给上层 IP 协议,R 转发 IP 数据报(源和目的地址不变)
R 构造链路层帧,源 MAC 地址是 R(右)接口的 MAC 地址,目的 MAC 地址是 B 的 MAC 地址,封装 A 到 B 的 IP 数据报