第一章 计算机网络和因特网
什么是因特网
- 计算机设备
- 主机 = 端系统
- 运行网络应用程序
- 连接设备的通信链路
- 光纤,铜缆,无线电,人造卫星
- 传输速率 = 带宽
- 转发数据的分组交换机
- 链路层交换机
- 路由器
- 因特网服务提供商(
ISP
) - 协议
- 定义了在两个或两个以上通信实体之间交换的报文格式和次序,以及报文发送和接收一条报文或其他事件所采取的动作
网络边缘:主机;接入网;物理介质网络
- 网络边缘
- 主机:客户端和服务器
- 数据中心的服务器
- 网络边缘的构成
- 端系统(主机)
- 运行应用程序,如:运行浏览器、微信等的网络应用程序的设备
- 端系统(主机)
- 网络应用的通信模型
- 客户/服务器模型(
C/S
) - 对等模型(
P2P
)
- 客户/服务器模型(
- 接入网
- 将网络边缘与网络核心连接起来,通常是将端系统连接到边缘路由器上
- 边缘路由器:端系统到任何其他远程端系统的路径上的第一台路由器
- 接入的方式
- 家庭:
Modem
拨号,ADSL
拨号,HFC
,FTTH
,卫星 - 企业:以太网,
WIFI
- 广域无线接入:
3G
,LTE
,5G
- 局域网接入
- 公司/大学的局域网(LAN)将端系统连接到边缘路由器
- 以太网
- 无线接入
- 共享的无线接入网络连接端系统和路由器
- 无线局域网
- 广域无线接入
- 家庭:
- 物理媒体分类
- 导引型媒体:信号沿着固体媒体被导引
- 非导引型媒体:信号自由传播
- 导引型媒体
- 双绞线
- 同轴电缆
- 光缆
网络核心:分组/电路交换;网络结构
电路交换网络
- 数据交换过程
- 第一步:建立连接;第二步:交换数据;第三步:释放链接
- 电路交换的特性
- 电路交换网络中(数字通信)
- 数据交换前需建立起一条从发端到收端的电路(预留资源)
- 在数据交换的全部时间内用户始终占用端到端的固定传输信道
- 交换双方可实时进行数据交换而不会存在任何延迟
- 电路交换的用户始终占用端到端的通信资源
- 独占链路,链路利用率太低
- 电路交换中的复用
- 时分复用
- 时间被划分为固定期间的帧,并且每个帧又被划分为固定数量的时隙
- 频分复用
- 时分复用
- 数据交换过程
分组交换
数据被截断划分为分组
分组交换机(路由器)转发分组
使用链路最大传输速率
为什么要分组
- 提高传输效率
- 提高传输质量
- 链路利用率高
怎么分组
- 在发送端,先把较长的报文划分成较短的、固定长度的数据段
- 每个数据段前面添加上首部构成分组
- 分组交换网以“分组”作为数据传输单元
- 依次把各分组发送到接收端
- 接收端收到分组后剥去首部还原成报文
分组传输的模式
存储转发传输
分组交换机(链路层交换机或路由器)将整个分组收下并存储存储后再发出去
原因:校验
分组交换的特征
- 数据分成若干组分别传送
- 不必预先确定分组的传输路径
- 交换节点均为共享节点,选择路径
- 存储/转发
- 断续(动态)分配传输带宽
存储转发的效率和可靠性
- 传输时延(发送时延)
- 将分组推向链路的时间,L/R,其中R为链路带宽
- 排队时延
- 存储需要缓存,缓存的过程中可能需要排队(等待前面的分组处理)
- 分组丢失
- 缓存满,随即丢弃等方式
- 传输时延(发送时延)
分组转发的路径(寻路)
- 分组首部包含目的地址
- 路由表里面有转发表
分组交换 VS 电路交换
- 分组交换网络存在的问题
- 分组在各节点村存储转发时因为需要排队总会造成一定的时延,当网络通信量过大时,这种时延可能会很大
- 各分组必须携带一定的控制信息(说明信息),从而带来额外的开销
- 整个分组交换网的管理和控制比较复杂
- 若要连续传送大量数据,且其传送时间远大于呼叫建立时间,则采用在数据通信之前预先分配传输带宽的电路交换较为合适
- 分组交换不需要预先分配带宽,在传送突发数据时可提高整个网络的信道利用率
- 分组交换网络存在的问题
分组交换网的时延、丢包和吞吐量
- 分组交换比电路交换不足之处
- 网络延迟
- 时延、丢包等
- 网络延迟
- 数据丢失和产生时延的原因
- 在路由器缓存中的分组队列
- 分组到达输入链路的速率超出输出链路的能力
- 分组队列,等待转发
- 节点处理实验
dproc
- 检测比特差错
- 确定输出链路
- 排队时延
dqueue
- 在输出链路中等待被发送
- 取决于路由器的拥塞程度
- 传输时延
dtrans
- R=链路带宽,L=分组长度
- 将分组比特流发送到链路上的时间=L/R
- 传播时延
dprop
- d=物理链路的长度,s=媒体中的传播速度
- 传播时延=d/s
- 在路由器缓存中的分组队列
- 吞吐量
协议层次
因特网的协议栈
- 应用层,支持网络应用
FTP
,SMTP
,HTTP
- 运输层,主机间的数据传输
TCP
,UDP
- 网络层,将数据报从源端传送到目的端
IP
,路由协议
- 链路层,数据在网络相邻节点之间传输
PPP
,以太网
- 物理层,在线路上传输比特流
- 应用层,支持网络应用
封装
第二章 应用层(报文)
应用层协议原理
- 网络应用的架构
- 客户端/服务器
- 对等网(
P2P
)
- 套接字
- 每个网络应用进程都有一个属于自己的套接字,该套接字在整个因特网上独一无二
- 主机地址:标识该网络进程运行在因特网上哪一台主机上,通产使用32位
IP
地址标识 - 端口地址:在该主机上标识该网络应用进程通常使用16位端口号标识
- 主机地址:标识该网络进程运行在因特网上哪一台主机上,通产使用32位
- 长度为16+32=48位
- 每个网络应用进程都有一个属于自己的套接字,该套接字在整个因特网上独一无二
Web和HTTP
URL
- 任何一个对象都可以用URL来定位
- 例子:
www.hust.edu.cn/cs/pic.gif
- 持续连接与非持续连接
- 非持续连接
- 每个请求/响应对是经过一个单独的TCP连接发送
- 持续连接
- 非流水线方式
- 一个对象传输完成方能传输下一个
- 流水线方式
- 可以一次性发送所有请求,慢慢接收
- 非流水线方式
- 非持续连接
cookie
web
使用cookie
的目的- 限制用户的身份
- 把内容与用户身份关联起来
cookie
技术的组成部分- 在HTTP响应报文中有一个
cookie
首部行 - 在HTTP请求报文中有一个
cookie
首部行 - 在用户的端系统中保留了一个
cookie
文件,由用户浏览器负责管理 - 在
web
站点有一个后端数据库
- 在HTTP响应报文中有一个
DNS
:因特网的目录服务
DNS
系统,用于IP
地址和域名之间的转换
第三章 运输层(报文段)
概述与运输层服务
- 运输层的功能
- 为不同主机上运行的应用程序之间提供逻辑通信
- 运输层和网络层的区别
- 网络层:不同主机间的逻辑通信
- 运输层:应用进程之间的逻辑通信
多路复用和多路分解
- 端口
- 端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。
- 套接字、端口和
IP
UDP
套接字由一个二元组标识- 包括一个目的
IP
地址和一个目的端口号 - 如果两个
UDP
报文段上述二元组相同,则通过同一个目的套接字被定向到相同的目的进程
- 包括一个目的
TCP
套接字由一个四元组标识- (源
IP
地址,源端口号,目的IP
地址,目的端口号) - 接收方主机根据这四个值将报文段定向到相应的套接字
web
服务器为其每一个客户连接创建不同的套接字
- (源
无连接传输:UDP
- 一个最简单的运输层协议必须提供
- 多路复用/多路分解
- 差错检查
UDP
处理数据的流程- 发送方
- 从应用程序得到数据
- 附加上为多路复用/多路分解所需的源和目的端口号及差错检测信息,形成报文段
- 递交给网络层,尽力而为的交付给接收主机
- 接收方
- 从网络层接收报文段
- 根据目的端口号,将数据交付给相应的应用进程
- 发送方
UDP
的优势- 无需建立连接
- 简单
- 段首部开销小(
8Byte
) - 无拥塞控制
UDP
的检验和- 发送方
- 把报文段看作是
16bit字
的序列 - 检验和:对报文段的所有
16bit字
的和进行反码运算(溢出回卷) - 发送方将校验和写入
UDP
检验和字段中
- 把报文段看作是
- 接收方
- 计算接收到报文段的和
- 与发送方的检验和相加
- 不全为1——检测出错
- 全为1——未检测到出错
- 发送方
可靠数据传输的原理
rdt2.0
- 假设
- 分组比特可能受损
- 所有传输的分组都将按序被接收,不会丢失
- 处理机制
- 如如判断分组受损——差错检测(
ACK
和NAK
)
- 如如判断分组受损——差错检测(
- 假设
rdt2.1
问题引入
ACK
和NAK
的分组可能受损
处理机制
发送发重发——若收到被破坏的
ACK
或NAK
为每一个数据报加上序号
接收方收到重复序号则丢弃
rdt2.2
- 改进
- 只使用
ACK
- 取消
NAK
接收方对最后一个正确接收到的分组发送ACK
- 发送方接收到重复的
ACK
将按照NAK
处理
- 只使用
- 停等协议
- 发送方发送数据报之后等待接收方的响应
- 改进
rdt3.0
- 假设
- 底层信道不但可能出错,而且可能会丢包
- 处理机制
- 丢包后重传
- 设置定时器
- 性能低下
- 停等操作
- 假设
提高性能的方法——流水线技术
- 允许发送方发送多个分组而无需等待确认
- 增大序号范围(原来的0,1不够用)
- 发送方最低限度应当能缓存那些已发送但未被确认的分组
- 或许需要缓存那些已经正确接收的分组
- 工作原理
- 分组首部用k位
bit
字段表示序号 - 未被传输和已被传输但还未确认的分组的许可序号范围可以看作是一个在序号范围内大小为N的“窗口”
- 分组首部用k位
- 允许发送方发送多个分组而无需等待确认
问题:当流水线技术中丢失一个分组后,如何进行重传
Go-Back-N
协议:其后分组全部重传- 特点
- 累积确认——
ACK(n)
接收方对序号n之前包括n在内的所有分组进行确认 - 一个定时器——从一次流水的最老分组开始计时
- 超时——重传分组n和窗口中所有序号大于n的分组
- 接收方无缓存
- 累积确认——
- 思考
- 收到重复的分组怎么处理?
- 丢弃分组,重发
ACK
- 分组失序怎么办?
- 丢弃不缓存,重发按序到达的最高序号分组的
ACK
- 发送端窗口
<=
2^k - 1
- 特点
SR
选择重传协议- 发送方
- 超时——为每个分组定义定时器,重传分组n,重置定时器
- 收到确认(n)在[
sendbase
,sendbase+N
-1]范围内- 标记分组n为已接收
- 如果n是发送窗口基序号
sendbase
,则将窗口基序号前推倒下一个未确认序号 - 若窗口移动,新进入窗口的未发送分组会被发送
- 接收方
- 分组序号n在[
rcvbase
,rcvbase+N
-1]范围内- 发送n的确认
ACK
- 如果分组序号不连续:将其缓存
- 按序分组:将该分组以及缓存的序号连续的分组一起交付给上层,将窗口前推到下一个未收到的分组
- 发送n的确认
- 分组序号n在[
rcvbase
-N,rcvbase
-1]范围内- 虽然确认过,仍再次发送
ACK
- 虽然确认过,仍再次发送
- 分组序号n在[
- 接收方窗口
<=
2^(k-1)
- 发送方
面向连接的传输:TCP
RTT
的估算- 参考值
0.125
- 参考值
TCP
的特别之处TCP
采用按字节编号,而非按报文段序号TCP
仅采用唯一的定时器- 超时——重传认为超时的报文段,重启定时器
- **收到
ACK
**——如果是对之前未确认的报文段确认,跟新sendbase
,如果还有未被确认的报文段,TCP
重启定时器 - 累计确认
- 超时间隔加倍
- 每一次
TCP
重传均将下一次超时间隔设为先前值的两倍 - 超时间隔由
EstimatedRTT
和DevRTT
决定 - 发生以下两个事件,超时间隔重新计算
- 收到上层应用的数据
- 收到对未确认的数据的
ACK
- 每一次
- 快速重传
- 超时周期往往太长——增加重发丢失分组的延时
- 通过重复的
ACK
来检测丢失报文段- 发送方常要连续的发送大量报文段
- 如果一个报文段丢失,会引起很多连读的重复
ACK
- 如果发送方收到一个数据的**3个
ACK
**,他会认为确认数据之后的报文段丢失 - 在超时到来之前重传报文段
- 产生
TCP ACK
的建议
流量控制
目标
- 发送方不会由于传的太多太快而是的接收方缓存溢出
手段
- 接收方在反馈时,将缓冲区的剩余空间大小填充在报文段首部的窗口字段中,通知发送方
窗口值的计算
发送方持续向接收方发送只有一个字节数据的报文段,目的是试探
拥塞控制原理
TCP拥塞控制
- 拥塞窗口(
cwnd
) - 发送方如何感知拥塞
- 超时
- 三个冗余
ACK
- 拥塞处理
- 看题目
TCP
的吞吐量
第四章 网络层—数据平面(数据报)
网络层概述
- 网络层的目标
- 实现主机到主机之间的通信
- 网络层在计算机网络中的地位
- 为运输层提供支持
- 运输层实现进程到进程的通信
- 运输层功能的实现依赖于网络层提供的服务
- 为运输层提供支持
- 网络层的主要功能
- 在全局范畴为主机之间的通信进行选路,选路的结果反应为分组交换机的转发表
- 分组交换设备上的网络层根据 以及分组头部信息,将分组向适当链路进行转发
- 分组交换机设备分类
- 根据链路层首部信息进行转发的——链路层节点交换机
- 根据网络层首部信息进行转发的——路由器
路由器工作原理
- 最长前缀匹配
- 查找给定目标地址的转发表项时,请使用与目标地址匹配的最长地址前缀
- 输入端口排队
- 输入端口的处理速率超过了交换结构的速率
- 线头阻塞:在输入队列中排队的分组必须等待通过交换结构发送,因为它被位于线头的另一个分组阻塞了
- 输入缓冲区溢出可能导致排队时延和丢包
- 交换结构
- 经内存交换
- 经总线交换
- 经内联网络交换
- 输出端口
- 交换结构将分组交付给输出端口的速率超过输出链路的速率
网际协议:IPv4
、寻址
IP
分片和分组- 网络链路具有
MTU(最大传输单位)
属性——由链路层最大帧决定 - 不同类型的链路有不同的
MTU
值 - 大的
IP
数据报在网络中会被分为小的分片- 一个数据报变成了几个数据报
- 重组只在目的主机进行
- 数据报头部的标识、标志、片偏移、长度字段用于目的主机对接收的分片进行重组
- 网络链路具有
IP
地址高位:网络号;低位:主机号
IP
地址的分类划分子网:从主机号中借一部分作为子网号
子网掩码
- 作用:对外隐藏子网的存在,对内指示网络号和子网号的位置
- 获得方法:通过在网络号的子网号相应的位置全置1,主机号相应的位置全置0,即可得到子网掩码
网络地址
IP
地址 AND 子网掩码 = 网络地址
引入子网掩码后的寻址
检查分组目的地址的
IP
地址的网络号若网络号不是本网络,则从路由表中找出相应的转发节点地址将其转发出去
检查子网号
当网络号是本网络时,路由器将检查子网号,向相应的子网转发此分组
IP
地址的扩展——构造超网- 从网络号中借用一部分作为主机号
CIDR
- 最长前缀匹配
- 使用
CIDR
时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成,在查找路由表时可能得到不止一个匹配结果 - 网络前缀越长,启迪之快就越小,因而路由越具体
- 使用
- 最长前缀匹配
DHCP
协议——动态主机配置协议- 工作在应用层
IP
地址请求过程(全广播)- 主机广播“
DHCP
发现”报文 DHCP
服务器使用“DHCP
提供”报文应答- 主机使用“
DHCP
请求”报文请求IP
地址 DHCP
服务器使用“DHCP ACK
”报文响应
- 主机广播“
DHCP
除获取IP
地址外,还能获取网关地址、DNS
地址、子网掩码
NAT
协议- 动机:本地网络只需要使用一个
IP
地址就可以与外部网络相连 - 实现
- 发送数据报:将每个外出报文的源
IP
地址,端口号替换为**NAT IP
地址以及新的端口号** - 记住每一个地址转换对
- 接收数据报:根据
NAT
转换表将每个进入报文的NAT IP
地址,端口号替换为相应的源IP
地址以及端口号
- 发送数据报:将每个外出报文的源
- 三种地址转换方式
- 静态
NAT
- 动态
NAT
- 端口
NAT
- 静态
- 属于网络层协议
- 动机:本地网络只需要使用一个
ICMP
:因特网控制报文协议- 用于主机、路由器、网关之间交换网络层信息
- 错误报告:如住家、网络、端口、协议不可达等
- 回声请求/回答(用于
ping
程序)
- 网络层协议
- 用于主机、路由器、网关之间交换网络层信息
第五章 网络层—控制平面
路由选择算法
几个概念
- 默认路由器:一台主机“直接”连接到的路由器
- 源路由器:源主机的默认路由器
- 目的路由器:目的主机的默认路由器
选路算法的目的
- 给定一组路由器以及连接路由器的链路,从这找出一条从源路由器到目标路由器“好的”路径
选路算法的分类
根据信息是全局性的还是分散式的进行分类
全局选路算法
所有路由器都知道整个网络拓扑图以及链路的费用信息
链路状态算法
分散式选路算法
每个路由器仅有与其相连链路的费用信息
距离向量算法
根据信息是静态的还是动态的进行分类
静态选路算法
随着时间的流逝,路由变换非常缓
动态选路算法
路由信息周期性的更新
根据是否对负载敏感进行分类
- 负载敏感算法
- 负载迟钝算法
迪杰斯特拉算法——链路状态算法
OSPF
协议——链路状态协议- 使用迪杰斯特拉算法
- 在哪一层有争议
距离向量算法
- 好消息传的快
- 坏消息传的慢
层次路由
- 将路由器聚合到一个区域——自治系统(
AS
)- 在相同
AS
内的路由器可全部运行同样的选路算法 - 一般使用
OSPF
协议(或RIP
协议) - 在不同的
AS
内可以使用不同的选路算法
- 在相同
- 转发表是由
AS
内部选路算法和AS
间选路算法共同决定的AS
内部选路算法为内部目的地址设置转发表信息AS
内部选路算法和AS
间选路算法共同为外部目的地址设置转发表信息
- 因特网上的
AS
内层次路由——层次OSPF
- 为了使
OSPF
能够用于规模很大的网络,OSPF
将一个自制系统再划分为若干个更小的范围,叫做区域 - 划分区域的好处是将利用洪泛法交换链路信息的范围局限于每一个区域而不是整个自治系统,这就减少了整个网络上的通信量
OSPF
使用层次结构的区域划分,在上层的区域叫作主干区域
- 为了使
- 将路由器聚合到一个区域——自治系统(
因特网上的
AS
间路由——BGP(边界网关协议)
- 每一个自治系统的管理员要选择至少一个路由作为该自治系统的“
BGP
发言人” - 使用
TCP
,因此是应用层协议 BGP
路由通告AS2
可以聚合多个前缀为一个,并使用BGP
向AS1
通告单一前缀,则AS2
承诺它将沿着朝向该前缀的路径,转发指向该前缀的任何数据报- 当路由器通告一个前缀时,它随着前缀包含一些
BGP
属性 - 两个重要属性
AS-PATH
:该属性包含了前缀的通告已经经过的那些AS
NEXT-HOP
:指明到下一跳AS
的具体的路由器
BGP
路由选择- 一台路由器可能知道一条前缀的多条路由路径,路由器必须在可能的路由中选择一条
- 消除规则
- 本地偏好值
- 最短
AS-PATH
:在余下的路由中,具有最短AS-PATH
的路由将被选择 - 从余下的路由中,选择具有最靠近
NEXT-HOP
路由器的路由:热土豆路由 - 如果仍余下多条路由,该路由器使用
BGP
标识以选择路由
- 每一个自治系统的管理员要选择至少一个路由作为该自治系统的“
第六章 链路层和局域网
链路层概述
- 术语
- 节点:主机和路由器
- 链路:沿着通信路径连接相邻节点的通信信道
- 有线链路
- 无线链路
- 链路层的主要功能
- 负责将数据报通过链路从一个节点传输到物理上相邻的节点
- 链路层提供的服务
- 成帧
- 将数据加上头部和尾部,封装成数据帧
- 帧头部用
MAC
地址标识源和目的
- 链路接入
- 共享介质的信道访问
- 可靠交付
- 成帧
- 差错检测和纠正
- 流量控制
- 发送方和接收方
- 发送方
- 在一个帧内封装数据报
- 增加差错检测位,可靠交付,流量检测
- 接收方
- 查找错误,可靠交付,流量控制
- 取出数据报,交给网络层
- 发送方
差错检测和纠正技术
- 奇偶校验
- 因特网检查和
- 循环冗余校验码(
CRC
)D*2^r
除以G
,得到余数R
多路访问链路和协议
两种链路
- 点到点链路
PPP
、HDLC
- 广播链路(贡献链路或介质)
- 传统以太网
- 802.11无线LAN
HFC
- 点到点链路
广播链路的特点
- 单个共享广播信道
- 两个或多个节点同时传输:相互干扰
多路访问协议
信道划分协议:将信道划分成小的“片”
TDMA
- 循环访问信道,每个节点在每次循环中得到固定长度的时隙
FDMA
- 信道按频谱分成若干频段
随机接入协议:信道没有被划分,允许碰撞
当节点有数据时
- 以信道全部速率
R
传输 - 没有主节点起协调作用
- 以信道全部速率
协议举例
- ALOHA、时隙ALOHA
CSMA
、CSMA/CD
、CSMA/CA
CSMA
非坚持
CSMA
一旦监听到信道忙就不再监听下去,而是根据协议的算法延迟一个随机的时间后重新再监听
时隙非坚持
CSMA
规定只能在每个时隙开始时传输帧
1坚持
CSMA
若信道正忙,则持续监听直到空闲
P坚持
CSMA
CSMA/CD
强化碰撞
当发送数据的站一旦发现了碰撞,除了立即停止发送外,还要继续发送若干比特的人为干扰信号
拥塞信号:
48bit
争用期
- 最先发送数据帧的站,在发送数据帧后至多经过时间
2t
(两倍的端到端往返时延),就可以知道发送的数据帧是否遭受了碰撞 - 以太网端到端往返时延
2t
被称为争用期
- 最先发送数据帧的站,在发送数据帧后至多经过时间
轮流协议:节点轮流传送,但数据量大的节点轮流时间更长
- 轮询协议
- 令牌传递协议
交换局域网
- 链路层寻址和
ARP
MAC
地址- 在数据链路层标识每块网络适配器,使得能够在广播信道上寻址目标节点
48bit
ARP
协议- 根据目标的
IP
地址获取其MAC
地址
- 根据目标的
- 信号编码
- 曼彻斯特编码
- 差分曼彻斯特
- 曼彻斯特编码
- 交换机的自学习
补充
- 协议
DCHP
——应用层,使用UDP
BGP
——应用层,使用TCP
ICMP
——网络层ARP
——网络层