计算机网络
Chapter 1
1.2 Network edge(网络边缘)
- 接入网是指端系统连接到其边缘路由器(edge router)的物理链路
- 边缘路由器是端系统到任何其他远程端系统路径上第一台路由器
接入网的形式
-
家庭接入:DSL、电缆、FTTH、拨号和卫星
-
企业接入:以太网和wifi
-
广域无线接入:3g和LTE
difference of WAN, MAN, LAN, PAN
-
WAN:wide area network 广域网
-
WAN是最大的网络类型,一个WAN可以包括多个LAN、CAN及MAN
-
是一种跨越很大地理区域的网络,例如一个国家,一个大陆,甚至整个地球,广域网的一个很好的例子就是互联网
-
-
MAN:metropolitan area network 城域网
-
这是一种比校园网区域网络还大的网络
-
它是一种横跨一个城市或城镇的多个建筑的网络
-
城域网通常使用高速连接,例如光缆
-
城域网是一种高速网络,能够在城市中共享数据和资源提供服务
-
-
LAN:local area network 局域网
-
由一组设备组成,如计算机、服务器、交换机、打印机等
-
最常见的局域网类型是以太网,两台或多台计算机通过电缆连接到以太网交换机上
-
-
PAN:personal area network 个人区域网络
- 无线连接:蓝牙,红外,NFC
- 有线连接:USB电缆
- 常用于传输小文件、如音乐、照片、日历、约定等
Physical media(物理媒体)
- 物理媒体分为两类:导引型媒体(guided media)和非引导型媒体(unguided media),前者电波沿着固体媒体前行,后者电波在空气或者外层空间中传播
- 常见物理媒体
- 双绞铜线 twisted pair
- 同轴电缆 coaxial cable
- 光纤 fiber optic cable
1.3 network core(网络核心)
1.3.1 分组交换
- 如果某源端系统或分组交换机经过一条链路发送一个L bits的分组,传输速率为R bits/s,则delay = L/R
- 存储转发传输
- 多数分组交换机在链路的输入端使用存储转发传输(store-and-forward transmission)
- 存储转发传输机制是开始传输前必须接收到整个分组
- 排队时延和分组丢失
- 对于每条链路,分组交换机有一个输出缓存(output buffer)(也叫输出队列 output queue)
- 当链路忙于传输其他分组时,到达分组必须在传输缓存中等待,被称为排队时延(queue delay)
- 当缓存满后,已到达分组或者已排队的分组之一将被丢弃,被称为分组丢失(丢包)(packet lost)
- 转发表和路由选择协议
- 源主机向目的端系统发送一个分组时,分组首部包含目的地的IP地址
- 每台路由器具有一个转发表(forwarding table),用于将目的地址映射为输出链路
1.3.2 电路交换
- 通过网络链路和交换机移动数据有两种方法:电路交换(circuit switching)和分组交换(packet switching)
- 使用电路交换时,两台主机在通信时,创建一条专用的端到端连接(end-to-end connection)
- 电路交换网络中的复用
- 实现方式:频分复用(FDM)和时分复用(TDM)
- 分组交换与电路交换的对比
- 分组交换的性能优于电路交换
1.4 Performance: delay, loss and throughput in packet-switched networks(分组交换网中的时延、丢包和吞吐量)
1.4.1 时延
- 当分组从一个结点(主机或路由器)到后继结点(主机或路由器 ),在每个结点会经历不同类型的时延
- 常见时延:结点处理时延(nodal processing delay)、排队时延(queue delay)、传输时延(transmission delay)和传播时延(propagation delay),累加起来是结点总时延(total nodal delay)
- 处理时延
- 排队时延
- 传输时延 (L/R)
- 传播时延
- 从链路起点到下一个路由器所需要的时间
- 取决于该链路的物理媒体
- 时延=d/s,d是路由器A到路由器B之间的距离,s是该链路的传播速率
- 传输时延与传播时延的比较
- 前者是路由器将分组推出所需的时间,后者是在路由器之间传播所需时间
1.4.2 排队时延和丢包
- 流量强度(traffic intensity)=L*a/R (a表示分组到达队列平均速率b/s,L为分组大小,R是传输速率)
- 若流量强度>1,则队列趋于无限增加,故设计系统时流量强度不能大于1
- 丢包
- 当到达分组发现队列已满,没有地方存储时,路由器将丢弃该分组
1.4.3 端到端时延
- 端到端时延为处理时延、传输时延、传播时延之和
- Traceroute
- 端系统、应用程序和其他时延
1.4.4 计算机网络中的吞吐量
- 在任何时间瞬间主机B收到主机A发送的大文件的速率(bps)称为瞬时吞吐量(instantaneous throughput)
- 平均吞吐量(average )= F/T bps,F是该文件有F比特构成,主机B接受到F文件用了T秒
1.5 协议层次及其服务模型
1.5.1 分层的体系结构
- 协议分层
- 各层的所有协议被称为协议栈(protocol stack)
- 因特网协议栈由5个层次组成:物理层、链路层、网络层、运输层和应用层
- 应用层
- 包括许多协议,如HTTP(提供了Web文档的请求和传送),SMTP(提供了电子邮件报文的传送)、FTP(提供两个端系统之间的文件传送)
- 位于应用层的信息分组称为报文(message)
- 运输层
- 运输层在应用程序端点之间传送应用层报文
- TCP向应用程序提供面向连接服务(包括应用层报文向目的地的确保传递和流量控制),还能将长报文划分为短报文,提供拥塞控制机制(网络拥塞时,源抑制其传输速率)
- UDP协议向应用程序提供无连接服务
- 运输层分组称为报文段(segment)
- 网络层
- 网络层分组叫数据报(datagram)
- 网络层包括了IP协议和一些路由选择协议
- 链路层
- 链路层分组称为帧(frame)
- 链路层将帧从一个网络元素移动到邻近的网络元素
- 物理层
- 物理层的任务是将帧中的一个一个比特从一个结点移动到下一个结点
- 应用层
- OSI模型
- 应用层、表示层、会话层、运输层、网络层、数据链路层和物理层
1.5.2 封装 encapsulation
- 在每一层,一个分组具有两种类型字段:首部字段和有效载荷字段(payload field),有效载荷字段通常来自上一层的分组
Chapter 2
2.1 应用层协议原理
2.1.1 网络应用程序体系结构
- 应用程序体系结构(application architecture)
- 客户-服务器体系结构(client-server architecture)
- 总是有一个打开的主机,叫服务器
- 该服务器具有固定的IP地址
- 客户总是能通过IP地址发送分组来与其联系
- 配备大量主机的数据中心常被用于创建强大的虚拟服务器(如:Google、Bing、Gmail)
- 对等体系结构(p2p)
- 应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方(常见:BitTorrent,迅雷,Skype)
- P2P具有自扩展性(self-scalability)
- 尽管每个对等方由于请求文件产生工作量,但每个对等方通过向其他对等方发送文件也为系统增加服务能力(可以理解为,bt下载的人越多,下载的速度越快)
- 面临的挑战:
- ISP友好
- 安全性
- 激励
- 客户-服务器体系结构(client-server architecture)
2.1.2 进程通信
-
进行通信的实际上是进程(process)而不是程序
-
两个不同端系统上的进程,通过跨越计算机网络交换报文(message)而相互通信
1.客户和服务器进程
- 对每对通信进程,我们通常将这两个进程之一标识为客户,另一个进程标识为服务器
- 对于p2p文件共享,下载文件的对等方标识为客户,上载文件的对等方标识为服务器
2.进程与计算机网络之间的接口
- 进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文
- 套接字是一台主机内应用层与网络层的接口
- 开发者可以控制套接字在应用层端的一切,但几乎没有运输层端的控制权,仅限于:
- 选择运输层协议
- 也许能设定几个运输层参数
3.进程寻址
- 接收进程需要定义的两种信息:
- 主机的地址
- 目的主机中接收进程的标识符
- 主机由其IP地址标识
- 除了目的地主机地址,发送进程还必须指定运行在接受主机上的目的地端口号(port number)
2.2.1 HTTP概况
-
端口号:80
-
Web应用层协议是超文本传输协议(HyperText Transfer protocol,HTTP)
-
Web页面是由对象组成的,一个对象只是一个文件,诸如HTML,JPEG图形,一个视频片段等等,他们都可以用一个URL地址寻址
-
每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名
- 例如:www.someschool.edu/( 这之前是host name )someDept/pic.gif( 这之前是path name )
-
HTTP使用TCP作为它的支撑运输协议,TCP为HTTP提供可靠数据传输服务
-
HTTP服务器不保存关于客户的任何信息,是一个无状态协议(stateless protocol)
2.2.2 非持续连接和持续连接
-
非持续连接(non-persistent connection):客户对服务器的每个请求经一个单独的TCP连接发送
-
持续连接(persistent connection):客户对服务器的所有请求经一个相同的的TCP连接发送
-
HTTP默认使用持续连接
1.采用非持续连接的HTTP
- 往返时间(RTT):一个短分组从客户到服务器然后再返回客户所花费的时间。
- 一个TCP连接涉及一次 “三次握手” 过程:
- 客户向服务器发送一个小TCP报文段
- 服务器用一个小TCP报文段做出确认和响应
- 客户向服务器返回确认
- 三次握手前两个部分占用一个RTT,客户向TCP连接发送一个HTTP请求,以及服务器在该TCP连接上发送HTML文件,这个过程用去一个RTT及发送HTML文件时间。
- 粗略地讲,总的响应时间是RTT*2+服务器传输HTML时间
2.采用持续连接的HTTP
- 非持续连接的缺点:必须为每个请求对象建立维护一个全新的连接,加重Web服务器负担
- 利用相同的TCP连接发出请求,不必等待每个请求的回答
2.2.3 HTTP报文格式
- 两种HTTP报文:请求报文和响应报文
- HTTP请求报文:
- 第一行是请求行(request line),后继行叫做首部行(header line)
- 请求行有三个字段:方法字段,URL字段和HTTP版本字段
- HTTP响应报文:
- 三个部分:初始状态行(state line),6个首部行(header line),实体体(entity body)
- 状态行有三个字段:协议版本字段、状态码和相应状态信息
- 常见状态码的相关短语:
- 200 OK:请求成功
- 301 Moved Permanently 请求对象被永久转移
- 400 Bad request 请求不能被服务器理解
- 404 Not Found 请求的文档不在服务器上
- 505 HTTP Version Not Supported 服务器不支持请求报文使用的HTTP协议版本
2.2.4 用户与服务器的交互:cookie
- cookie技术有四个组件:
- HTTP响应报文中的一个cookie首部行
- HTTP请求报文中的一个cookie首部行
- 用户端系统中保留有一个cookie文件,由浏览器进行管理
- 位于Web站点的一个后端数据库
2.2.5 Web缓存
- Web缓存器(Web cache)也叫代理服务器(proxy server)
- Web缓存器的目的是:不需访问目标服务器的情况下也能满足客户端需求
- 好处:
- 大大减少对客户请求的响应时间
- 大大减少一个机构的接入链路到因特网的通信量
- CDN(Content Distribution Network,CDN):内容分发网络,使得大量流量实现了本地化。
2.2.6 条件GET方法
- HTTP协议中有一种机制,允许缓冲器证实它的对象是最新的。
- 一条条件GET的HTTP请求报文包括:
- 请求报文使用GET方法
- 请求报文中包含一个“If-Modified-Since:”首部行
2.3 文件传输协议:FTP
- HTTP和FTP都是文件传输协议,区别是FTP运用了两个并行的TCP连接来传输文件,一个是控制连接(control connection),一个是数据连接(data connection)
- FTP的控制信息是带外(out-of-band)传送的,HTTP是带内(in-band)发送控制信息的
- 对于FTP,会话中的每一次文件传输都要建立一个新的数据连接(即数据连接是非持续的)
- FTP服务器在整个会话区间保留用户的状态(state),相对于 HTTP,HTTP是无状态的
2.4 因特网中的电子邮件
- 三个主要组成部分:用户代理(user agent),邮件服务器(mail server),简单邮件传输协议(SMTP)
- SMTP是因特网电子邮件中重要的应用层协议,依靠TCP提供可靠数据传输服务
2.4.1 SMTP
-
端口号:25
-
邮件报文只能采用简单的7-bit的ASCII码表示
-
STMP传输多媒体文件必须先将二进制多媒体数据编码为ASCII码,传输后再解码还原,而HTTP传送不需要
2.4.2 与HTTP对比
- HTTP主要是一个拉协议(pull protocol),即用户是使用HTTP从服务器拉取信息,TCP连接是由接收方发起;而SMTP是一个推协议(push protocol),即发送邮件服务器将文件推向接收邮件服务器,TCP连接是由发送方发起
- SMTP限制7-bit ASCII码编码,HTTP数据不受这种限制
- HTTP把每个对象封装到自己的HTTP响应报文中,SMTP把所有报文对象放在一个报文之中
2.4.4 邮件访问协议
- 流行的邮件访问协议:第三版邮局协议(POP3),因特网邮件访问协议(IMAP),以及HTTP
- POP3:
- 端口号:110
- POP3按照三个阶段进行工作:特许(authorization),事务处理以及更新
- 事务处理中用户代理配置有“下载并删除”和“下载并保留”两种方式,但是前者存在一个问题,即接收方是移动的,可能希望从多个不同机器访问邮件报文,前者就实现不了这种情况
- POP3在会话期间保留状态信息
- IMAP:
- 端口号:143
- POP3没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法
- IMAP服务器把每个报文与一个文件夹联系起来
- IMAP服务器维护了IMAP会话的用户状态信息,例如文件夹的名字以及哪些报文与哪些文件夹相关联
- IMAP允许用户代理获取报文组件的命令
2.5 DNS:因特网的目录服务
- 主机的一种标识方法是用它的主机名,也可以使用IP地址进行标识
2.5.1 DNS提供的服务
-
域名系统(Domain Name System,DNS)
-
作用:简单来说,域名→IP地址
-
DNS是:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议(DNS协议)
-
DNS运行在UDP上,使用53号端口
-
DNS还提供了一些重要服务:
- 主机别名(host aliasing):有着复杂主机名的主机可以拥有一个或者多个别名,原主机名叫做规范主机名(canonical hostname)
- 邮件服务器别名(mail server aliasing)
- 负载分配(load distribution)
2.5.2 DNS工作机理概述
- 集中式DNS服务器的问题:
- 单点故障(a single point of failure):如果该DNS服务器崩溃,整个因特网随之瘫痪
- 通信容量(traffic volume):单个DNS服务器不得不处理所有DNS查询
- 远距离的集中式数据库(distant centralized database):距离远的查询会带来严重的时延
- 维护(maintenance)
- 3种类型的DNS服务器:根DNS服务器、顶级域(Top-Level Domain,TLD)DNS服务器(例如com,org,net和所有国家顶级域名uk、fr、ca等)和权威DNS服务器
- 本地DNS服务器(local DNS server):
- 本地DNS服务器的两种查询方式:递归查询(recursive query)和迭代查询(iterative query)
- 对于每次查询两个服务器之间返回的是结果的话就是递归查询(个人理解)
- 对于查询中两个服务器之间返回的是继续查询的IP地址的话就是迭代查询(个人理解)
- DNS缓存(DNS cacheing)
2.5.3 DNS记录和报文
- DNS服务器存储了资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射
- 资源记录是一个4元组:(Name,Value,Type,TTL)(TTL:time to live)
- Type = A,Name是主机名,Value是主机名对应IP地址
- Type = NS,Name是一个域(如foo.com),Value是知道如何获得该域中主机IP地址的权威DNS服务器主机名。
- Type = CNAME,Value是别名为Name的主机对应的规范主机名
- Type = MX,Value是别名为Name的邮件服务器的规范主机名
- DNS报文:
- 两种报文:DNS查询,回答报文
- 前12个字节是首部区域,标志位指出是查询(0)还是回答(1),权威位只出是否希望执行递归查询
- 问题区域:
- 名字字段:正在被查询的主机名
- 类型字段:指出问题类型(A还是MX等等)
- 回答区域:包含了最初请求的名字的资源记录,因为回答区域可以包含多条RR,因此一个主机名可以有多个IP地址
- 权威区域
- 附加区域
- 注册域名需要到注册登记机构注册,并且必须确保Wev服务器的类型A资源记录和用于邮件服务器的类型MX资源记录被输入到你的权威DNS服务器中
2.6 P2P应用
-
p2p模式与C/S模式的对比(左C/S右p2p)
-
Overlay network(覆盖网络)(不熟)
-
p2p overlay network 是在物理网络上搭建的一个逻辑网络,可分为:
-
1.结构化的p2p网络:
这种网络上,资源的放置以及节点的逻辑部署不是一个任意或者随即的结构。这种网络通常使用DHT来定位资源。
-
2.非结构化的p2p网络:
这种网络上,资源和节点是随机或者说是任意部署的,它没有结构化的拓扑,定位资源时,使用的是随机访问,轮询,泛洪的方式,所以在访问资源时效率相比结构化的p2p网络来说要低。
-
-
Chapter 3
3.1 运输层服务
3.1.1 运输层和网络层的关系
- 网络层提供了主机之间的逻辑通信
- 运输层为运行在不同主机上的进程之间提供了逻辑通信
3.1.2 运输层概述
- TCP(传输控制协议)是一种可靠的、面向连接的服务(简单来说,传输的数据正确地、按序地将从发送进程交付给接收进程)
- TCP提供拥塞控制(congestion control)服务
3.2 多路复用与多路分解(Multiplexing and demultiplexin)
-
将运输层报文段中的数据交付到正确的套接字的工作成为多路分解(demultiplexing)(分解是自底向上的,所以是从网络层到运输层)
-
从不同套接字中收集数据块,封装上首部信息从而生成报文段,然后将报文段传递到网络层,称为多路复用(multiplexing)(复用是自顶向下的,所以是运输层到网络层)
-
一个UDP套接字是由一个二元组来标识的,(目的IP地址,目的端口号)
-
一个TCP套接字是由一个四元组来标识的,(源IP地址,源端口号,目的IP地址,目的端口号)(区别就在TCP有来源)
3.3 UDP
- UDP首部仅仅只有8个字节,TCP首部有20个字节
3.3.1 UDP报文结构
- UDP首部只有4个字段(由于首部是8个字节,64位,故每个字段16位),分别是源端口号,目的端口号,长度和检验和
3.4 可靠数据传输原理(Principles of reliable data transfe)
3.4.1 构造可靠数据传输协议
- 经完全可靠信道的可靠数据传输: rdt 1.0
- 经具有比特差错信道的可靠数据传输: rdt 2.0,2.1,2.2
- rdt 1.0问题所在:传送的分组有些比特可能受损
- rdt 2.0提供了ARQ(Automatic Repeat reQuest,自动重传请求)协议
- ARQ的三种协议功能:
- 差错检测
- 接收方反馈
- ACK(肯定确认)
- NAK(否定确认)
- 重传
- rdt 2.0的缺陷:没有考虑ACK,NAK分组的比特差错
- rdt 2.1的改进:增加一位新字段,为发送数据分组的序号,通过检查序号顺序即可确定是否要重传
- rdt 2.2的改进:不用发送NAK,因为假设有数据发生差错,在下一个新分组到来后,接收方依旧会发送一个针对差错分组的相同ACK,这样发送方就会收到冗余的ACK,来判断需要重传
- 经具有比特差错信道的丢包信道的可靠数据传输: rdt 3.0
- 设计一个倒计数定时器(countdown timer),来处理丢包重传情况
- rdt 3.0 有时也叫比特交替协议(alternating-bit protocol)
3.4.2 流水线可靠数据传输协议
- 解决流水线差错恢复的两种方法:回退N步(Go-back-N,GBN)和选择重传(Selective Repeat,SR)
3.4.3 回退N步(GBN)
-
N是滑动窗口长度,GBN协议也常被称为滑动窗口协议****(sliding-window protocol)
-
滑动窗口为N,先将滑动窗口内的分组按序全部发送出去,当每收到一个分组,滑动窗口后移,继续发送后面的分组。
-
当某个分组发生丢失时,后面接受到的分组全部丢弃,从丢失的分组开始重新发送
3.4.4 选择重传(SR)
-
发送方与接受方都有一个滑动窗口,发送方要收到滑动窗口第一个的ACK才能滑动,否则等待ACK;接收方要收到滑动窗口第一个的分组才能滑动,否则缓存
-
当发生分组丢弃时,发送方会因为收到超时响应重发滑动窗口第一个的那个分组;接收方会缓存后来收到的分组,当滑动窗口第一个的分组重新收到时,一次性滑动到没有接受到分组的位置
-
窗口大小必须小于等于序号空间大小一半,否则会发送冗余的分组(自己手动模拟一下)
三种窗口滑动协议比较:
3.5 TCP
- 提供全双工服务(full-duplex service),应用层数据从进程B流向A的同时从A流向B(一定要同时)
3.5.2 TCP报文段结构(重要)
- 首部一般是20个字节
- 首部包括源端口号和目的端口号,用于多路复用/分解
- 首部还包括32位的序号和确认号字段,用于实现可靠数据传输服务
- 首部包括16位的接收窗口字段,用于流量控制
- 4比特的首部长度字段,TCP首部长度可变,若该字段为空,则为一般的20字节
- 6比特的标志字段。ACK用于确认成功接收报文段。RST、SYN、FIN用于建立连接和拆除。PSH被设置时,说明接收方应将数据交给上层。URG指示存在“紧急”的数据。
- URG紧急的数据由最后16比特的紧急数据指针指出
序号和确认号
- 考虑主机A向主机B发送数据,主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号(见下图)
快速重传(fast retransmit)
- 当发送方收到三个冗余ACK时,TCP执行快速重传
- 根据快速重传机制,TCP看起来更像GBN协议
3.5.5 流量控制(flow control)
-
接收方有个接收缓存(RcvBuffer),分为缓存中的数据以及接收窗口(rwnd)
-
发送方发送的但未被确认的数据要小于等于接收方的接收窗口大小
-
当rwnd=0时,发送方收到阻塞,无法发送数据
3.5.6 TCP连接管理
-
三次握手(重点)
- 第一步:客户端向服务器端发送一个特殊的TCP报文段(SYN报文),首部中SYN被置为1,并且随机选择一个初始序号(client_isn),封装在IP数据报中
- 第二步:当IP数据报到达服务器时,发送一个SYNACK报文段,SYN设为1,序号设为server_isn(自己的初始序号),并将ACK设为client_isn+1
- 第三步:发送方发送另一个报文段,SYN设为0,序号设为client_isn+1,ACK设为server_isn+1
-
思考为什么不能是两次握手?
- 若只有两次握手,倘若发送方没有收到来自接收方的SYNACK报文,则连接其实是无法成立的
-
终止TCP连接(双向的)
-
A向B发送一个报文,FIN为1,设置一个序号,B向A回发一个ACK报文,断开A到B的连接
-
B向A发送一个报文,FIN为1,设置一个序号,A向B回发一个ACK报文,断开B到A的连接
-
3.6 TCP拥塞控制(TCP congestion cont)
拥塞控制和流量控制的区别
- 流量控制解决的是发送方和接收方速率不匹配的问题;拥塞控制解决的是避免网络资源被耗尽的问题。
- 流量控制是通过滑动窗口(rwnd)****来实现的;拥塞控制是通过拥塞窗口(cwnd)**来实现的。
慢启动算法(slow start)
- 开始时,拥塞窗口(cwnd)被设置为一个最大报文段(MSS)的大小,每当有一个报文段被确认,cwnd+=MSS
- 于是cwnd呈指数级增长:1MSS、2MSS、4MSS、8MSS……
- 当发生拥塞(超时或者受到接收方三个冗余的ACK)时,设置一个慢启动阈值(ssthresh),ssthresh=cwnd/2,将cwnd调整为阈值大小,进入拥塞避免阶段
拥塞避免
- 进入拥塞避免后,cwnd的增长不再是指数级而是线性的,每次只增加一个MSS
- 当再次发生拥塞时,进入快速恢复阶段
快速恢复(fast recover)
-
TCP Tahoe版本:
- 拥塞窗口变为1,重新进入慢启动阶段
- 慢启动阈值设为进入快速恢复前大小的一半
-
TCP Reno版本:
-
慢启动阈值设为进入快速恢复前大小的一半
-
拥塞窗口大小设置为阈值的大小+3,
即 cwnd=ssthresh(后)+3
注意:当发生超时的时候要回到慢启动,也就是cwnd=1,只有三个冗余ack,才是快速恢复
-
Chapter 4
4.1 网络层概述
- 两个关键功能:转发(forwarding)和路由选择(routing)
- 转发:当一个分组到达时,路由器需将它转发到适当的输出链路
- 路由选择:当分组从发送方流向接收方时,网络层需决定这些分组所采用的路径。计算这些路由的算法叫路由选择算法(routing algorithm)
4.2 虚电路和数据报网络(Virtual circuit and datagram network)
- 运输层中,服务是运输层向应用层提供进程到进程的服务;网络层中,服务是网络层向应用层提供主机到主机的服务
- 虚电路(Virtual-Circuit,VC)网络:在网络层提供连接服务的计算机网络
- 数据报网络(datagram network):在网络层提供无连接服务的计算机网络
4.2.1 虚电路网络(VC network)
- 一条虚电路组成如下:
- 源和目的主机之间的路径
- VC号,沿着该路径的每段链路的一个号码
- 沿着该路径的每台路由器中的转发表表项
- 转发表:
4.2.2 数据报网络(datagram network)
-
在数据报网络中,每当一个端系统发送分组,它就为分组加上目的端系统的地址
-
-
使用这种风格的转发表,路由器用分组的目的地址的前缀(prefix)与表中的表项进行匹配
-
例子:
-
第一个DA的接口应该是0,第二个DA的接口应该是2,利用了最长前缀匹配规则(longest prefix matching rule)
-
4.3 路由器工作原理
4.3.2 交换结构
- 通过内存交换
- 通过总线交换
- 通过互联网交换
4.3.3 输出端口
- 当无内存可用于存储到达的分组时,出现丢包(pocket loss)
- 路由器缓存(B)=平均往返时延(RTT)*链路的容量(C)
即 B=RTTC***
-
主动队列管理(Active Queue Management,AQM):
当没有足够的缓存一个入分组时,对分组的丢弃和标记等策略,统称为AQM
-
线路前部(Head-Of-the-Line,HOL)阻塞:
在一个输入队列中排队的分组必须等待交换结构发送
4.4 IP 协议
4.4.1 数据报格式
-
IPv4数据报格式:
-
一般的IP数据报具有20字节的首部
-
数据报长度(length):IP数据报的总长度(以字节记),只有16比特,故IP数据报不会超过65535个字节
-
源和目的地址
-
数据(有效载荷)(data):大多数情况下,数据字段包含着要交付给目的地的运输层报文段(TCP或者UDP),也可承载其他类型的数据
-
假设IP数据报承载着一个TCP报文段,则它承载了总长40字节的首部(TCP和IP的)以及应用层报文
IP数据报分片
-
一个链路层帧所能承载的最大数据量称为最大传送单元(Maximum Transmission Unit,MTU)
-
过大的IP分组会被分片成更多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报
-
例子:假设有一个4000字节的IP数据报要被转发到一条MTU为1500字节的链路上:
-
解释:
- 首先清楚,偏移量以8字节快为单位
- 4000字节中有20字节是首部,于是要将剩余的3800字节分片成几个小的IP数据报
- 先分1480字节(1500字节中有20要组成首部),偏移量为0(最开始是0)
- 还剩2520字节,再分1480字节,偏移量为185(1480=185*8)
- 还剩1040字节,可以全部装入一个片,偏移量为375(375=185+1480/8)
4.4.2 IPv4 address
-
每个IP地址长度为32比特(想想IP数据报格式那个图,IP地址是独占一行的(32比特)),可以用点分十进制(dotted-decimal notation)书写,如193.32.216.9
-
CIDR(Classless Interdomain Routing,无类别域间路由选择):形式为a.b.c.d/x 的地址最高的x比特构成了IP地址的网络部分
-
关于IP地址与子网掩码的计算:
- 网络地址 = 主机地址 & 子网掩码(mask)
- 广播地址 = 网络地址 + ~(子网掩码)(子网掩码取反后表示的就是主机位全为1的地址)
- 例子:
- 假设一个主机的IP地址为202.112.14.137,子网掩码为255.255.255.224,求出网络地址以及主机网络对应的广播地址
- IP&mask=202.112.14.128,故网络地址为202.112.14.128
- mask为255.255.255.224,最后8位是11100000,说明有5位是主机位,因此广播地址就是网络地址加上这些主机位全为1的结果,即202.112.14.159
-
DHCP(动态主机配置协议,Dynamic Host Configuration Protocol)
- DHCP,也被称为即插即用协议(plug-and-play protocol),用于主机每次与网络连接时能得到一个相同的IP地址,或者某主机被分配一个临时的IP地址
- DHCP是一个应用层协议,运用UDP服务
- DHCP协议:
- DHCP服务器发现
- DHCP服务器提供
- DHCP请求
- DHCP ACK
-
NAT(Network Address Translation,网络地址转换)
- NAT能使路由器对外界隐藏内部网络细节
- 通过NAT转换表来将分组转发给内部主机
-
本地回环地址(lookback address):127.0.0.1~127.0.0.254
4.4.3 ICMP(因特网控制报文协议)
- ICMP是一个网络层协议
- ICMP最典型的用途是差错报告(error reporting),另一个是回显应答(echo request)(如对ping的回答)
4.4.4 IPv6
-
数据报格式:
-
扩大的地址容量,从IPv4的32比特到IPv6的128比特,解决了IP地址不够的问题
-
首部40个字节(32+32+128+128比特)
-
IPv6不再允许分片与重新组装
-
从IPv4到IPv6的迁移
- 双栈(dual-stack)
- 建隧道(tunneling)
4.5 路由选择算法
- 主机通常直接与一套路由器相连接,该路由器为主机的默认路由器(default router),也叫第一跳路由器(first-hop router),源主机的默认路由器叫源路由器(source router),目的主机的默认路由器叫目的路由器(destination router)
- 按照全局式和分散式来定义路由选择算法:
- 全局式路由选择算法(global routing algorithm):知道网络中每条链路的费用,具有全局状态信息,如LS算法
- 分散式路由选择算法(decentralized routing algorithm):以迭代、分布式方法计算最低费用路径,每个节点都不知道关于所有网络链路费用完整信息,仅知道与其直接相连链路费用,如DV算法
- 按照静态和动态来定义路由选择算法:
- 静态路由选择算法(static routing algorithm):路由变化缓慢,人工干预(如人为手动编辑一条路由器的转发表)
- 动态路由选择算法(dynamic routing algorithm):根据网络流量负载或拓扑发生变化改变路由选择路径
4.5.1 链路状态路由选择算法(Link State,LS)
-
Step 1:每个结点向网络中其他节点广播链路状态分组,让每个结点了解各自邻居的链路费用信息
-
Step 2:测量每个邻居结点的路由延迟
-
Step 3:建立链路状态报文(如下图)
-
Step 4:利用dijkstra算法确定转发表(例子如下)
4.5.2 距离向量路由选择算法(Distance Vector,DV)
-
对于x路由器到y路由器的最低费用,等于所有x到v路由器与v路由器到y路由器之和的最小值(v可以是y自己)
即
-
带来的问题:
- 路由选择环路(routing loop):
-
- 当链路费用发生改变的时候,y要更新到x的最低链路费用路径,y会发现x到z只用5(原本是5,还未更新),于是y就会通过z路由,但是z路由本身到达x也会通过y,于是就形成路由选择环路
- 增加毒性逆转(poisoned reverse):
- 在以上问题中,因为z会通过y路由器到达x,于是z向y传递信息,Dz->x=正无穷,这样y就会直接连向x更新
- 但是增加毒性逆转无法解决更多结点的问题
4.6 因特网中的路由选择
- 自治系统(Autonomous System,AS):每个AS由一组通常处在相同管理控制下的路由器组成
- 自治系统内部路由选择协议(intra-autonomous system routing protocol):在一个自治系统内运行的路由选择算法
- 网关路由器(gateway router):在一个AS内一台或者多台负责向本AS之外的目的地转发分组的路由器
- 自治系统间路由选择协议(inter-autonomous system routing protocol):在多个自治系统之间运行的路由选择算法
- 热土豆路由选择(hot potato routing ):
4.6.1 RIP
-
AS内部路由选择协议又称为内部网关协议(interior gateway protocol)
-
常见的两个自治系统内的路由选择协议:
- RIP(Routing Information Protocol)
- OSPF(Open Shortest Path First)
-
RIP是基于DV算法的一种协议
-
RIP使用跳数作为费用测度,最大费用被限制为15跳
-
RIP中,路由选择更新信息通过RIP响应报文(RIP response message)交换,又称RIP通告(RIP advertisement)
-
每台路由器维护 一张RIP表
4.6.2 OSPF
-
OSPF是基于LS算法的一种协议
-
一个区域内,一台或多台区域边界路由器(area border)负责为向外流出分组提供路由选择
-
只有一个OSPF区域配置成主干(backbone)区域,总是包含AS内所有的区域边界路由器
4.6.3 BGP
-
BGP(Broder Gateway Protocol,边界网关协议)
-
BGP是用来选择不同AS之间的路由的
-
BGP中,路由器通过使用179端口的半永久TCP连接来交换信息
-
跨越两个AS的BGP对话称为外部BGP对话(eBGP),AS中两台路由器间的BGP对话称为内部BGP对话(iBGP)
-
BGP中,目的地不是主机而是CDIR化的前缀(prefix)
-
前缀中包含一些BGP属性,带有属性的前缀被称为一条路由(route),比较重要的属性是AS-PATH和NEXT-HOP
-
BGP的距离测度使用AS跳数目而不是路由器跳数目
Chapter 5
5.1 链路层概述
- data link layer : between adjacent nodes over a link:提供相临结点的可靠数据传输。
- 结点(nodes):运行链路层协议的任何设备称为结点,包括主机、路由器、交换机和WiFi接入点
- 链路(link):连接相邻结点的通信信道
- 传输结点将数据报封装在链路层帧中
5.1.1 链路层提供的服务
- 成帧(framing)
- 链路接入(link access)
- 可靠交付(reliable delivery)
- 差错检测和纠正(error detection and correction)
5.2 差错检测和纠正技术(error detection and correction)
5.2.3 CRC(循环冗余检测)
- CRC编码也称多项式编码(polynomial code)
- 待发送信息加上根据多项式生成的余数发送给接收方,接收方通过将这个信息与多项式相除,如果余数为0,则没有出现差错,反之出现。
- 具体方法:(课件例子)
生成式:10011对应的多项式是G(x)= x^4 + x + 1(第i位对应x的第i项系数)
这里最高次是4次,先在待发信息后面补上4个0,然后整体对G(生成式对应的式子,这里是10011)做除法,算出余数
检验方理论上会收到11010110111110(这里后四位是余数),然后用这个数去除以多项式对应的生成式,假如余数为0,则没有差错
5.3 多路访问链路协议(Multiple access protocols)
- 两种网络链路:
- 点对点链路(point-to-point link):由链路一端单个接收方和链路一端单个接收方组成
- 广播链路(broadcast link):让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上
- 多路访问问题(multiple access problem):协调多个发送和接收节点对一个共享广播信道的访问
- 因为所有结点都能够传输帧,因此传输的的帧在所有接收方处会发生碰撞(collide)
- 多路访问协议(multiple access protocol,MAC protocol):
- 信道划分协议(channel partitioning protocol):把信道(channel打成碎片再组织起来利用)
- 随机接入协议(Random access protocol):信道不分开,允许冲突,但是要从冲突中恢复
- 轮流协议 (taking turns protocol):节点轮流发消息,但是节点一多发消息就困难了起来
5.3.1 信道划分协议(channel partitioning protocol)
-
TDM(时分多路复用):把信道分成时间片(time slot),每个节点用一个
-
FDM(频分多路复用):将信道划分为不同频率,分配给不同的结点
-
CDMA(码多分址):给每个结点分配一种不同的编码,利用这唯一的编码来对发送的数据进行编码
5.3.2 随机接入协议:
-
当结点经历一次碰撞时,等待一个随机时延,再重发该帧
-
时隙ALOHA:把时间分成时隙(让一个时隙只能传一帧),如果发生冲突,这个帧以概率p在后面的每个时隙重新发送,直到成功发送为止。
-
ALOHA:没有时隙,当发生碰撞时,等碰撞帧完全发送完后,立即以概率p重传该帧,否则等待一个帧传输时间,直到发送成功
-
CSMA(载波侦听多路访问)
- 会先载波侦听(carrier sensing),监听信道中是否有帧在发送,直到检测到一段时间没有传输,再开始传输
-
CSMA/CD(具有碰撞检测的载波侦听多路访问)
- 当检测到有碰撞之后,会中止传帧,利用二进制指数后退(binary exponential backoff)算法在之后重传
- 二进制后退算法:
- 当一个帧经历n次碰撞后,结点随机从[0,1,2,……,2^n-1]中选择一个K值,然后结点等待K*512比特时间,再进行重传
- n的最大值在10以内
5.4 交换局域网
-
MAC地址
- 适配器(网络接口)具有链路层地址
- 链路层地址也叫LAN地址、物理地址或者MAC地址
- MAC地址长度为6字节
-
ARP(地址解析协议)
- ARP的任务就是完成网络层地址(如IP地址)和链路层地址的转换
- ARP表:每个 主机或路由器中有一个ARP表,包含IP地址到MAC地址的映射关系
-
数据报在同一局域网和不同局域网中的传输
5.4.2 以太网
-
以太网是目前为止最流行的有线局域网技术
-
以太网帧
- 以太网帧以一个8字节的前同步码(preamble)字段开始,前7个字节都是10101010,最后一个字节是10101011,前7个字节用于“唤醒“接收适配器,并同步时钟,第8个字节连续两个”1“,提醒适配器,重要内容要来了
- 目的地址包含目的适配器的MAC地址
- 源地址包含传输该帧到局域网的适配器的MAC地址
PPPframe
5.4.3 链路层交换机(Switch- link-layer device)
-
交换机的任务是接收入链路层帧并将它们转发到出链路
-
交换机是即插即用设备(plug-and-play devices),因为它们不需要网络管理员或用户的干预
-
交换机是自学习(self-learning)的
-
Creation of Switch table : self-learning
每个switch中都有一个 switch table,它们记录了:
①主机的MAC地址,到每个主机的接口,时间戳
②看起来像个路由表
当switch收到frame时后,它记录发送方的地址,并且在转发表(switch table)里面记录下来发送的端口号和地址对
知道地址和接口就发送,不知道就泛洪(flood)
-
-
Differences of communication devices: Hub, Repeater, Switch, Bridges, Router
Hub:一个端口收到数据后,向其他所有的端口发送刚才收到的数据
Repeater:中继器,延长网络传输距离,增强衰减信号
Switch:交换机,学习,转发,
Bridges:连接同一个子网内的主机,地址是MAC地址
Router:可以在子网和子网之间进行连接
5.4.4 VLAN(虚拟局域网)
-
Motivation
①实现流量隔离
②降低交换机的无效使用
③管理用户
-
Communication of across different VLAN
要通过路由器
-
a kind of overlay
它也是和P2P一样的基于网络上的网络
5.7 a day in the life of a web request-see the whole
例子:学生打开个人电脑连接校园网,访问google
1.连接上的手提电脑需要获取自己的IP地址,它第一条所需的路由器,DNS服务器的地址。
那么它要用DHCP(申请自己的IP地址)
2.于是手提电脑把DHCP请求封装在UDP中,再封装在IP中,再封装在802.3以太网中
3.以太网 frame 在LAN(局域网)上广播(dest:FF-FF-FF-FF-FF-FF),使得DHCP服务器收到
4.以太网把IP解包(demuxed)再解包(UDP)最后就获得了DHCP的请求报文
5.DHCP服务器发送DHCP ack,其中包含他分配给主机的IP地址,第一条的路由器,DNS服务器的名称和IP地址
6.这些信息在DHCP处封装成frame 然后通过局域网,在客户端(也就是这个学生这里)解包(demultiplexing)
7.DHCP客户端接收DHCP 的ACK
然后我们需要获得谷歌服务器的IP地址,而首先呢需要获得路由器的MAC地址
1.主机创建DNS询问报文封装在UDP里再封装进IP里,然后想办法获取路由器接口的MAC地址,于是主机广播了APR query 路由器收到后,通过ARP reply 把自己的MAC地址发送出去。
2.于是客户端现在可以把域名询问相关的信息发送出去了
3.包含IP querying的数据摆通过局域网,从转发器到了第一个路由器,然后通过RIP/OSPF/BGP路由到DNS服务器,DNS服务器解包,并返回IP地址
4.收到了IP地址后,为了发HTTP连接请求,客户端先为网络服务器打开一个端口, TCP SYN segment(请求建立连接)被发送到网络服务器网络服务器回应以(SYN ACK),然后建立TCP连接,HTTP request 被发送到TCP套接字中,包含HTTPrequest的数据报被路由到谷歌服务器,网络服务器再把网页发回来,包含HTTP reply的数据报被发送回客户端