绪论
第一代计算机网络——电路交换网络
第二代计算机网络——分组交换网络
分组交换 VS 电路交换
- 若要连续传送大量数据,且其传送时间远大于呼叫建
立时间,则采用在数据通信之前预先分配传输带宽的
电路交换较为合适
- 分组交换不需要预先分配传输带宽,在传送突发数据
时可提高整个网络的信道利用率
分组交换网络的时延类型
- 传播时延:分组比特流在链路上的传播时间
- 排队时延:当分组传入某个端时,发现该端输出队列还有其他分组,该分组需要排队,队列为空时,排队时延为0,队列已满时,分组被丢弃
- 处理时延:路由器决定分组最终去向的时间和刚刚传入时的检查差错时间
一些概念
- 实体(Entity)
- 实体是任何可以发送和接收信息的硬件和软件进程。通常是一个特定的软件模块
- 对等体(Peer)
- 协议(Protocol)
- 语法,即数据与控制信息的结构或格式
- 语义,即需发现何种控制信息,完成何种动作以及做出何种应答
- 同步,即事件实现顺序的详细说明
- 服务(Service)
- 为保证上层对等体之间能互相通信,下层向上层提供的功能。
- 服务原语
- 服务原语是指网络相邻层间进行交互时所要交换的一些必要命令
- 服务访问点(SAP)
- 服务访问点是同一系统中相邻两层的实体进行交互的地方
- 协议数据单元(PDU):协议数据单元是对等层次上传送数据的单位
- 应用层的PDU称为数据
- 传输层的PDU称为数据段
- 网络层的PDU称为数据包
- 网络接口层得PDU称为帧
- 介质实际传输实际使用的PDU称为比特(位)
- 服务数据单元(SDU)
- 网络体系结构(Network Architecture)
- 协议栈(Protocol Stack)
- 一个特定的系统所使用的一组协议(每层一个协议)称为协议栈
应用层
体系结构
C/S,P2P,混合体系结构
服务需求
可靠传输,带宽自动控制,实时性,安全性
常见应用采用的传输协议
应用 |
应用协议 |
所依赖的传输协议 |
e-mail |
smtp |
TCP |
远程中断访问 |
telnet |
TCP |
Web |
http |
TCP |
文件传输 |
ftp |
TCP |
流媒体 |
专有协议 |
TCP or UDP |
远程文件服务器 |
NFS |
TCP or UDP |
IP电话 |
专有协议 |
typically UDP |
TCP和UDP不具备安全性,需要通过其他协议保证传输数据的安全性(如SSL)
套接字
标识每一个网络应用进程,独一无二
主机地址(32位)+端口地址(16位)
网络应用(1)——WEB(C/S模式)
web的构成
- web服务器
- 浏览器
- 协议:信息表达协议——HTML,信息传输协议——HTTP
web内容的表达——HTML
web页面由一些对象组成,任何一个对象都可以用URL来定位
web内容的传输——HTTP协议
http协议:TCP传输服务,80端口,http报文在浏览器和服务器之间交换
http1.0——非持久性连接,每次操作消耗文件传输时间和两个往返时延RTT,操作结束关闭连接
http1.1——持久连接,直至连接休息了一段较长时间后断开连接,减少了服务器端连接数。
持久连接可分为流水线方式(一次性发送所有请求),非流水线方式(一个对象传输完成方能传输下一个)
HTTP报文
请求报文
- 请求行=请求方法+URL+版本
- 首部行=(若干)首部字段名+值
- 空行
- 实体主体(Body)
支持的请求方法
- http1.0:GET,POST,HEAD(请求服务器返回一个响应报文,常用来追踪故障)
- http1.1新增:PUT(上传文件,文件放主体中,上传路径放URL字段),DELETE(删除URL字段中指定的文件)
响应报文
- 状态行=版本+状态编码+短语
- 首部行=(若干)首部字段名+值
- 空行
- 实体主体
常见相应状态码和短语
- 200 OK:请求成功, 被请求的对象在报文中
- 301 Moved Permanently:被请求的对象被移动过, 新的位置在报文中有说明(Location:)
- 400 Bad Request:服务器不懂请求报文
- 404 Not Found:服务器上找不到请求的对象
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
用户-服务器交互——Cookie
使用目的:限制用户的访问,把内容和用户身份关联起来。
保存用户的端系统,由用户浏览器负责管理。
网络应用(2)——电子邮件
电子邮件系统的构成
- 用户代理:写作,编辑,阅读邮件报文
- 邮件服务器:邮箱,报文队列包含了外发的邮件报文
- 邮件传输协议(SMTP):在邮件服务器之间发送邮件
SMTP协议
- 使用TCP,端口25
- 传输的三个阶段:握手,报文传输,结束
- 命令/响应交互
- 全部报文必须使用7-bit ASCII表示
- 持续连接
- HTTP:每个对象分别装在各自的相应报文中,SMTP:多个对象在一个多分部的报文中传送。
邮件报文格式
- header = to + from + subject
- body
非ASCII码数据的MIME扩展
- MIME-Version
- Content-Transfer-Encoding
- Content-Type
- Data
客户机获取邮件的方法
POP3协议
- 进入客户端,输入user和pass
- list:列出报文号码
- retr:用报文号码取信
- dele:用报文号码删信
- quit
IMAP协议
HTTP
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
网络应用(3)——DNS
目的
IP地址和域名之间的转换
DNS协议
四类DNS服务器
- 根DNS服务器:全球一共 13 台,负责返回顶级域 (.com 等) 服务器地址
- 顶级域服务器(TLD服务器): 负责返回一级域 (比如 example.com) 的权威域名服务器地址
- 权威DNS服务器:负责返回其域名下的 Address 记录 (A record)
- 本地域名服务器
三种查询方式
- 递归查询:客户端请求DNS服务器
- 迭代查询:DNS服务器之间
- 非递归查询:DNS服务器有缓存,直接返回
DNS可提供的服务
- 域名到ip地址的转换
- 主机/邮件服务器别名
- 负载均衡
DNS记录格式
- type=A,name=hostname,value=ip address
- type=CNAME,name=alias,value=real name
- type=NS,name=域 (如foo.com) ,value=该域权威域名服务器的主机名
- type=MX,value=与name相关的邮件服务器域名
网络应用(4)——P2P文件共享
核心
所有的计算机都是服务器
文件分发
C/S模式
$$
T_{cs}\geq max{\frac{NF}{u_s}, \frac{F}{min{d_1,d_2,…,d_N}}}
$$
P2P模式
$$
T_{P2P}\geq max{\frac{F}{u_s}, \frac{F}{d_min}, \frac{NF}{u_s+\sum^{i\to N}{d_i}}}
$$
BitTorrent基本概念
- 洪流(torrent):参与一个特定文件分发的所有对等方的集合
- 追踪器(tracker):跟踪正参与在洪流中的对等方
- 文件快(chunk):256KB
BitTorrent工作机制
- 像另据请求哪些块——最稀罕优先
- 优先响应哪些请求——对换算法(4+1)
- 每10秒重新确定4个最高速率对等方
- 每30秒随机选一个新的邻居
网络应用(5)——视频流
互联网宽带的主要消费者
分布式应用程序级基础架构
视频编码方式
- CBR(恒定Constant比特率)
- VBR(可变Variable比特率)
套接字编程
传输层
传输层提供的服务
- 多路复用,多路分解
- 可靠数据传输
- 流量控制
- 拥塞控制
- 差错检查
传输层协议
- UDP:无连接的运输服务
- TCP:面向连接的运输服务、拥塞控制
传输层功能
为不同主机上运行的应用进程之间提供逻辑通信
传输层协议的工作内容
- 发送方:把应用数据划分成报文段(segments),交给网络层
- 接收方:把报文段重组成应用数据,交付给应用层
端口
标志应用层的进程
传输层协议(1)——UDP
提供运输层协议必须的服务:多路复用/分解、差错检查
UDP数据报格式
UDP处理数据的流程
发送方
- 从应用进程得到数据
- 附加上为多路复用/多路分解所需的源和目的端口号 (UDP的8字节首部)及差错检测信息,形成报文段(数据报)
- 递交给网络层,尽力而为的交付给接收主机
接收方
- 从网络层接收报文段(数据报)
- 根据目的端口号,将数据交付给相应的应用进程
采用UDP协议的应用
- 远程文件服务器(NFS)
- 流式多媒体
- 因特网电话
- 网络管理(SNMP)
- 选路协议(RIP)
- 域名解析(DNS)
UDP的检验和
按16bit求和取反,接收方计算和与发送方的检验和相加结果不为全1则检测出错误。
可靠数据传输
可靠数据传输协议(rdt)
- rdt_send(): 由上层(如应用层)调用,将数据发送给接收方的上层
- udt_send(): 由 rdt调用,将分组通过不可靠通道传给接收方
- rdt_rcv(): 当分组到达接收方时调用
- deliver_data(): 由 rdt 调用,将数据交付上层
rdt1.0
假设底层信道完全可靠:
分别为发送方和接收方建立FSM
- 发送方将数据发送给底层信道
- 接收方从底层信道接收数据
rdt2.0
假设
- 分组比特可能受损
- 所有传输的分组都将按序被接收,不会丢失
出错的解决
- 如何通知发送方分组是否受损——接收方反馈(ACK和NAK)
- 在得知分组受损后,发送方如何处理——出错重传
如何实现重传:建立缓冲区
rdt2.1
rdt2.0没有考虑ack和nak分组可能受损
采用停等协议。
发送方只有接收到正确的ack包才会发送下一个数据包,否则会不断重发数据包。
接收方当不断收到来自发送方重发的正确数据包时也会不断像发送方发送ack包(这里认为可能是自己的ack包受损了),当接收到一个新的数据包时才会停止这一过程,为了区别新旧数据包,用0和1标记他们。
rdt2.2
NAK和包错误的动作一样,所以可以只用ACK。
接收方对最后一个正确收到的分组发送ACK。
发送方对不是当前包的ACK视作错误,重传当前数据包。
依然使用停等协议,所以只要用0和1编号。
rdt3.0
假设底层信道不但可能出现比特差错,而且可能会丢包
解决:超时重传
问题:停等协议限制了物理资源的利用率
提高性能:流水线技术
工作原理
- 分组首部用k比特字段表示序号
- 未被传输和已被传输但还未确认的分组的许可序号范围可以看作是一个在序号范围内大小为N的窗口
当流水线技术中丢失一个分组后:
- Go-Back-N协议:其后分组全部重传
- 选择重传SR协议:仅重传该分组
GBN
- ACK(n):序号n之前包括n在内的所有分组已确认
- 允许连续发送n个数据包,未被确认的分组数不饿能超过n
- 对所有已发送但未确认的分组统一设置定时器,从最老的分组开始计时
- 超时重传分组n和窗口中所有序号大于n且已发送的分组
GBN滑动窗口大小
发送端<=2^k-1
接收端=1
SR协议
接收方<=2^(k-1)
传输层协议(2)——TCP
特点
面向连接:TCP连接仅存于端系统,中间路由器对此毫不知情
全双工服务:可双向同时传输数据
点对点连接:仅存在于两个端系统之间,无第三者“插足”
三次握手:建立连接,协商参数
可靠的字节流:MSS(最大报文段长)=MTU(最大传输单元)-链路层首部
TCP报文段=数据字段(MSS限制)+TCP首部
TCP数据报格式
源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号字段——占 4 字节。 TCP 连接中传送的数据流中的每一个字节都编上一个序号。 序号字段的值则指的是本报文段所发送的数据的第一个字节在整个报文字节流中的序号。
确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
首部长度——占 4 bit,它指示意32bit的字为单位的TCP首部长度。 若选项字段为空, TCP首部典型长度为20字节。
保留字段——占 6 bit,保留为今后使用,但目前应置为0。
紧急比特 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送。(一般不使用)
确认比特 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位比特 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
终止比特 FIN (FINal) —— 用来释放一个连接。当FIN = 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
检验和 —— 占 2 字节。 检验和字段检验的范围包括首部和数据这两部分。 在计算检验和时, 要在 TCP 报文段的前面加上 12 字节的伪首部。
紧急指针字段 —— 占 16 bit。 紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
选项字段 —— 长度可变。 TCP 只规定了一种选项, 即最大报文段长度 MSS (Maximum Segment Size)。 MSS 告诉对方 TCP: “我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。 ”
TCP超时控制
基本要求
设置的超时间隔应该大于往返时延
估算往返时延
EstimatedRTT = (1- α)EstimatedRTT + αSampleRTT
参考值α=0.125
估算偏差
DevRTT = (1-β)DevRTT +β|SampleRTT-EstimatedRTT|
参考值β=0.25
第一次计算时,DevRTT=0.5*SampleRTT
最终设置的超时间隔
TimeoutInterval = EstimatedRTT + 4*DevRTT
TCP建立连接
TCP流量控制
流量控制的目的
如果发送者发送数据过快,接收者来不及接受,那么就会有分组丢失,流量控制的目的就是避免发送速度过快导致的分组丢失。
实现方式
接收方返回的ACK包中含有自己的接收窗口大小,利用大小来控制发送方的数据发送。
与拥塞控制的区别
拥塞控制是作用于网络的,而流量控制是作用于接收者的。
TCP拥塞控制
拥塞控制的方法
- 网络辅助的拥塞控制:1.路由器直接发布网络拥塞的消息2.接收方通过路由器标识通知发送方网络拥塞了。
- 端到端拥塞控制:端系统通过对网络行为的观测判断网络是否发生拥塞(TCP采用)
发送方如何感知拥塞
TCP拥塞控制算法——Reno算法
- 当拥塞窗口CongWin小于门限值Threshold时,发送方处于慢启动阶段,窗口以指数速度增大。
- 当拥塞窗口CongWin大于门限值Threshold时,发送方处于拥塞避免阶段,窗口线性增大。
- 当收到3个重复的ACK时,门限值Threshold设为拥塞窗口的1/2,而拥塞窗口CongWin设为门限值Threshold。
- 当超时事件发生时,门限值Threshold设为拥塞窗口的1/2,而拥塞窗口CongWin设为1个 MSS。
网络层
目标
实现主机到主机的通信
作用
- 为运输层提供支持
- 实现从源主机到目标主机成功的移动数据分组,整个路径上的每一台分组交换机上均需实现网络层。
功能
- 控制层面:在全局范畴为主机之间的通信进行选路,选路的结果反映为分组交换机上的转发
- 数据层面:分组交换机上的网络层根据转发表以及分组头不信息,将分组向适当链路进行转发
- 对于面向连接的网络层服务(ATM、X.25和帧中继),提供连接建立的功能。
分组交换机的分类
- 根据链路层首部息进行转发的——链路层节点交换机
- 根据网络层首部信息进行转发的——路由器
网络层提供的服务
- 面向连接的服务——虚电路,需事先握手
- 面向无连接的服务——数据报,无需握手
网络层与运输层相应服务的区别
- 网络层是向运输层提供主机到主机的服务,而运输层是向应用层提供进程到进程的服务
- 网络层仅提供上述两种服务中的一种,不同时提供两种,而运输层则同时提供两种
- 运输层的服务在网络边缘的端系统中实现,而网络层的服务则在整个网络中实现,含路由器
虚电路
目标
使收发双方之间的路径表现得如同电话线路一般
组成
- 从源到目的主机的路径
- VC号,沿着该路径的每段链路的一个号码
- 沿着该路径的每台路由器中的转发表
数据报网络
路由器的工作原理
输入端口
分散式交换
按照给出的目的地址,使用输入端口的内存中存储的路由选择表,查找输出端口
目标
以线路速度完成输入端口的处理
排队
线头阻塞
交换结构
经内存交换
- 在输入端口和输出端口之间的交换是在CPU(路由处理器)的直接控制下完成的
- 分组被拷贝到系统内存中, 然后在CPU的控制下输送到输出端口
- 转发速度受限于内存的带宽
经总线交换
- 输入端口经一根共享总线将分组直接传送到输出端口
- 总线交换的问题: 交换速度受限于总线的带宽
- Cisco 1900——1Gbps;Cisco5600——32Gbps
经互联网络交换
- 克服总线带宽限制
- Cisco 12000通过内联网络交换速度为若干Gb/s
输出端口
缓存管理
当交换结构将分组交付给输出端口的速率超过输出链路速率时
调度策略
FCFS(先来先服务)、WFQ(加权公平排队)、按类别轮流
排队(缓冲区设置)
RFC 3439:B=RTT*R
理论研究:N表示TCP连接数
$$
B=\frac{RTT\times R}{\sqrt N}
$$
分组丢弃策略
网络层协议
IP数据报的格式
IPv4协议(1)——编址
ip结构
32位=网络号+主机号
ip分类
子网划分
从主机号中借用一部分位数作为子网号。
子网掩码
A类默认:255.0.0.0
B类默认:255.255.0.0
C类默认:255.255.255.0
CIDR编址格式
IP地址 ::= {<网络前缀>, <主机号>}
斜线记法: 192.168.0.1/24
简写记法: 10.0.0.0/10 10/10
网络地址
IP地址的host-id部分所有比特都为0时,为该net-id对应子网的网络地址;
广播地址
IP地址的host-id部分所有比特都为1时,为该net-id对应子网的广播地址
主机如何获得IP地址
手工配置,UNIX下在/etc/rc.config
DHCP:应用层协议,工作在UDP上,从服务器动态获取IP地址,同时也能获取网关地址,DNS地址,子网掩码
IPv4(2)——寻址
两级寻址过程
- 检查分组目的IP地址中的网络号:若网络号不是本网络,则从路由表中找出相应的转发结点地址将其转发出去。
- 检查子网号:当网络号是本网络时,路由器将检查子网号,向相应的子网转发此分组。
IPv4(3)——转发
从收到的分组首部提取目的IP地址D
先用各网络的子网掩码判断是否与路由器接口直接相连的网络地址匹配,若匹配,则将分组交付该接口,否则执行第三步
对路由转发表中的每一行的子网掩码进行判断,如果网络地址匹配,则将分组传送给该行指明的下一跳路由器,否则执行第四步。
若路由表中有一个默认路由器,则将分组交给默认路由器
分组出错
若为CIDR时,多个匹配结果选择最长前缀匹配
NAT协议
跨层协议,NAT转发表
两类地址:本地地址,全球地址
三种地址转换方式
- 静态NAT:一个本地地址对应一个全球地址
- 动态NAT:多个本地地址对应一个全球地址
- 端口NAT:一个本地地址的端口对应到一个全球地址的端口
ICMP:因特网控制报文协议
用于主机、路由器、网关之间交换网络层信息
ICMP报文分类
ICMP差错报告报文,ICMP询问报文。
ICMP报文格式
IPv6协议
IPv6数据报格式
选路算法
几个概念:
- 默认路由器: 一台主机“直接” 连接到的路由器 。
- 源路由器:源主机的默认路由器。
- 目的路由器:目标主机的默认路由器。
选路算法的目的:
给定一组路由器以及连接路由器的链路,从中找到一条从源路由器到目标路由器“好的”路径。
选路算法分类:
全局选路算法
- 所有路由器都知道整个网络拓扑图以及链路的费用信息
- 链路状态算法
分散式选路算法
- 每个路由器仅有与其相连链路的费用信息
- 通过迭代计算过程与相邻节点交换信息
- 距离向量算法
静态选路算法
动态选路算法
- 路由信息可以更快地发生变化
- 周期性的更新
- 可以响应拓扑或链路费用的变化
负载敏感算法
负载迟钝算法
层次选路算法
问题背景
因特网规模过大——数亿个目标网络
路由器无法存储每台主机的选路信息
路由表更新的报文广播将导致无剩余带宽供用户数据使用
解决方法
互联网划分为多个自治系统(autonomous system,AS),每个AS内部可以和别的AS使用不同的路由选择协议,根据使用的范围差异可以将路由选择协议分为
自治系统内部的协议(interior gateway protocols, IGP):RIP和OSPF
自治系统间的协议(border gateway protocol, BGP)
因特网中的选路算法
选路信息协议——RIP(距离向量算法)
一个运行在UDP上的应用层协议,端口520
算法
相同下一跳——更新
新的项目——添加
不同下一跳——距离更短才更新
链路状态选路——OSPF协议
AS间的路由——BGP4
半永久的TCP连接,179端口。
跨越两个AS的BGP连接称为外部BGP(eBGP)
相同AS中的两台路由器的BGP会话称为内部BGP(iBGP)
链路层
链路层提供的服务
- 成帧、链路访问
- 将数据加上头部和尾部,封装成数据帧
- 共享介质的信道访问
- 帧头部用MAC地址标识源和目的(不同于IP地址)
- 可靠传递
- 很少用于误码率低的链路(光纤、双绞线链路)
- 用于误码率高的链路(无线链路)
- 流量控制
链路层的实现
- 在每一台设备上(主机、交换机、路由器)
- 链路层在“适配器”(网卡NIC)或者芯片上实现
- 直接与主机的系统总线相连
- 是硬件、软件和固件的结合体
检错和纠错
因特网检查和
累加求和,计算和的反码,仅用于TCP、UDP和IPv4协议中。
循环冗余检验码
$$
R=remainder\frac{D\times 2^r}{G}
$$
两种链路
- 点到点链路:PPP/以太网交换机和主机之间的点到点链路
- 广播链路(共享链路或介质):传统以太网/HFC/802.11无线LAN
广播链路的碰撞
一个节点同时收到两个或多个信号。
多址访问协议
信道划分协议
TDMA Time Division Multiple Access 时分多路复用
FDMA Frequence Division Multiple Access 码分多路复用
CDMA Code Division Multiple Access 码分多址
随机访问协议
ALOHA、时隙ALOHA
CSMA
载波侦听多路访问
以太网是一种流行并广泛部署的CSMA协议
载波侦听
说话之前先听
CSMA/CD
具有碰撞检测的CSMA
CSMA/CA
轮流协议
交换局域网解决了多址访问的带宽衰减问题
MAC地址:在数据链路层标识每块网络适配器,使得能够在广播信道上寻址目标节点
前24bit由IEEE分配管理——OUI号,后24bit由厂商自行分配
地址解析协议(ARP): < IP; MAC;TTL>