Chapter1 Introduction
-
1.1 What's the internet?
-
1.1.1 consist:Hardware/Software
-
connected compouting:host,network apps
-
communication links:fiber,copper,radio,satellite
-
packet switches:routers,switches
-
Internet:"network of networks":ISP(internet service provider因特网服务提供商)
-
protocols:TCP,IP,HTTP,802.11
-
Internet standards:RFC(request for comments),IETF
-
-
1.1.2 service
-
infrastructure that provides services to applications:Web, VoIP, email, games, e-commerce, social nets, …
-
provides programming interface to apps(发送和交付数据)
-
-
1.1.3 protocols
-
协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及对于发送报文、接收报文和其他事件所采取的动作
-
-
-
1.2 Network edge
-
host:clients,servers
-
access network
-
home access:DSL(数字用户线),电缆因特网接入,FTTH(光纤到户,最快)
-
Enterprise access:Ethernet(以太网),WiFi
-
Wide area wireless access:3G,LTE
-
-
Physical media
-
-
1.3 Network core
-
1.3.1 packet-switching
-
store-and-forward: transmission delay=L/R
-
queuing and loss:
-
每台分组交换机与多条链路相连。对于每条相连的链路,该分组交换机具有一个输出缓存(也称为输出队列)
-
如果到达的分组需要传输到某条链路,但该链路正忙于传输其他分组,那么该到达分组必须在输出缓存中等待
-
分组在输出缓存中等待的时间就是排队时延。如果缓存已满,将出现分组丢失(丢包),即到达的分组或排队的分组中会有一个被丢弃
-
-
-
1.3.2 circuit switching
-
TDM(时分复用)
-
FDM(频分复用)
-
CDMA(码分复用)
-
-
1.3.3 internet structure:network of networks
-
网络结构1:单一的全球传输ISP互联所有接入ISP
-
网络结构2:多个彼此互联的全球传输ISP
-
网络结构3:多层次的ISP等级结构
-
网络结构4:在网络结构3的基础上增加存在点(PoP)、多宿、对等和因特网交换点(IXP)
-
网络结构5:在网络结构4的顶部增加内容提供商网络
-
-
-
1.4 delay,loss,throughput
-
1.4.1 delay
-
processing delay:check out(1.检查分组首部和决定将该分组导向何处所需要的时间,2.检查比特级差错所需要的时间)
-
queueing delay:
-
transmission delay:L/R
-
propagation delay:D/S
-
-
1.4.2 queueing delay and loss
-
记分组长L比特,分组到达队列的平均速率为a(分组/秒),比特到达队列的平均速率为La bps
-
记传输速率为R,比率La/R被称为流量强度
-
假定该队列无限大,当La/R>1时,比特到达队列的平均速率超过从该队列传输出去的速率。此时队列趋向于无限增加,排队时延趋向无穷大。因此流量强度不能大于1
-
-
1.4.3 end-to-end delay
-
Traceroute:追踪
-
-
1.4.4 throughput
-
minimum
-
-
-
1.5 protocol layers,service models
-
Why layering
-
explicit structure allows identification, relationship of complex system’s pieces(明确结构)
-
modularization eases maintenance, updating of system(简化)
-
change of implementation of layer’s service transparent to rest of system(透明)
-
-
Encapsulation(封装):
-
每一层的报文会被封装下一层的报文中
-
在每一层,一个分组具有两种类型的字段
· 首部字段:该层附加的信息
· 有效载荷字段:通常是来自上一层的分组
-
-
-
1.6 networks under attack: security
-
malware:
-
virus:receiving/executing object
-
worm:passively receiving object that gets itself executed
-
-
Denial of Service (DoS)
-
packet “sniffing”
-
IP spoofing
-
-
1.7 history
Chapter2 Application layer
-
2.1 principles of network applications
-
2.1.1Application architectures
-
client-server
-
server:
-
always-on host
-
permanent IP address
-
data centers for scaling
-
-
clients:
-
communicate with server
-
may be intermittently connected(断续连接)
-
may have dynamic IP addresses
-
do not communicate directly with each other
-
-
-
peer-to-peer(P2P)
-
no always-on server
-
arbitrary end systems directly communicate
-
peers request service from other peers, provide service in return to other peers
-
peers are intermittently connected and change IP addresses
-
-
-
2.1.2 Processes communicating
-
client-servers:
-
client process: process that initiates communication(发起通信)
-
server process: process that waits to be contacted(等待联系)
-
-
socket:
-
进程通过一个称为套接字的软件接口向网络发送/从网络接收报文
-
应用程序开发者可以控制套接字在应用层端的一切,但是对于套接字的运输层几乎没有控制
-
应用程序开发者对于运输层的控制仅限于
o 选择运输层协议
o 设定几个运输层参数,如最大缓存和最大报文段长度
-
-
Addressing processes:发送进程需要知道接收主机IP地址,以及指定运行在接收主机上的接收套接字
-
-
2.1.3 Transportation services used by the application
-
data integrity
-
throughput
-
timing
-
security
-
-
2.1.4 Internet transport protocols services
-
TCP & UDP no encryption(加密)
-
SSL:provides encrypted TCP connection,data integrity,end-point authentication
-
SSL socket API
-
-
TCP
-
reliable transport
-
flow control:发送小于接收
-
congestion control:网络过载,减少发送
-
does not provide:timing, minimum throughput guarantee, security
-
connection-oriented
-
full duplex:全双工
-
-
UDP
-
unreliable data transfer
-
full duplex:全双工
-
does not provide: reliability, flow control, congestion control, timing, throughput guarantee, security, or connection setup
-
-
-
2.1.5 application protocols
-
协议定义的内容
-
交换的报文类型,例如请求报文和响应报文
-
各种报文类型的语法,如报文中的各个字段及其描述
-
字段的语义,即这些字段中的信息的含义
-
确定一个进程何时发送、如何发送报文,以及对报文进行响应的规则
-
-
应用层协议只是网络应用的一部分。例如HTTP协议是Web应用的一部分,SMTP协议是电子邮件应用的一部分
-
-
-
2.2 Web and HTTP
-
2.2.1 HTTP
-
Web’s application layer protocol:HTTP
-
two programs:
-
client: browser that requests, receives
-
server: Web server sends (using HTTP protocol) objects in response to requests
-
-
-
Web页面是由对象组成的。一个对象只是一个文件(如HTML文件、JPEG图形、Java小程序等),它们可通过一个URL寻址
-
多数Web页面含有一个HTML基本文件以及几个引用对象
-
每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。例如URL地址AAA Sorry Page,其中www.aaa.com是主机名,/bbb/ccc.gif是路径名
-
-
HTTP运行在TCP上,因此HTTP响应报文能完整、有序地到达客户,port:80
-
HTTP协议是一个无状态协议,即HTTP服务器不保存关于客户的任何信息。因此假如客户在短时间内重复请求同一对象,服务器也会重新发送该对象
-
-
2.2.2 HTTP connections
-
non-persistent HTTP
-
at most one object sent over TCP connection,connection then closed
-
downloading multiple objects required multiple connections
-
服务器要为每个请求的对象建立和维护一个全新的连接,维护这些连接会导致严重的负担
-
每个对象需要经受两倍RTT(往返时延)的交付时延。即一个RTT用于创建TCP,另一个RTT用于请求和接受对象
-
-
persistent HTTP
-
multiple objects can be sent over single TCP connection between client, server
-
-
HTTP/1.0:GET,POST,HEAD
-
HTTP/1.1:GET, POST, HEAD,PUT,DELETE
-
GET:使用GET方法的请求应该只是检索数据
-
POST:POST方法用于将数据发送到服务器以创建或更新资源
-
HEAD:与GET方法相同,但没有响应体,仅传输状态行和标题部分,无需传输整个内容。
-
PUT:PUT方法用于将数据发送到服务器以创建或更新资源
-
DELETE:来删除指定的资源
-
-
HTTP response status codes
-
200 OK
-
301 Moved Permanetly
-
400 Bad Request
-
404 Not Found
-
505 HTTP Version Not Support
-
-
-
2.2.3 cookie
-
ookie是一个识别码。Web站点会在后端数据库产生一个以它作为索引的表项
-
当用户浏览器首次访问一个Web站点时,站点会产生一个对用户浏览器的唯一识别码。Web服务器会把该识别码放在HTTP响应报文中的Set-cookie首部行中,发送给用户
-
用户浏览器收到响应报文后,会在它的cookie文件中添加一行。该行包含服务器的主机名和报文中的识别码
-
此后,用户继续浏览该Web站点时,发送的请求报文都包含首部行“cookie: 识别码”。服务器会根据识别码标识用户,并记录用户的活动
-
-
2.2.3 Web caches
-
Web缓存器也叫代理服务器,它通常由ISP购买并安装
-
当需要请求对象时,浏览器向Web缓存器发送一个HTTP请求
-
如果Web缓存器中存储了该对象的副本,则把该副本发送给客户
-
如果没有该对象,Web缓存器会向该对象的初始服务器发送请求。在收到初始服务器发送的对象后,Web缓存器先在本地存储一份副本,再向客户发送该副本
-
why Web caching?:
-
1.reduce response time for client request
-
2.reduce traffic on an institution’s access link
-
3.Internet dense with caches: enables “poor” content providers to effectively deliver content (so too does P2P file sharing)
-
-
-
-
2.2.4 Conditional GET
-
当浏览器向缓存器请求一个对象时,假如该对象在缓存器中,且距离上一次被请求已经过了很长时间,那么缓存器会向该对象的初始服务器发送一个条件GET请求。服务器会告诉缓存器该对象是否被修改过
-
-
-
2.3 electronic mail
CONSIST:user agent,mail servers,SMTP(运行TCP上)
-
2.3.1 SMTP
-
use TCP,port 25
-
direct transfer: sending server to receiving server
-
three phases of transfer:
-
handshaking (greeting)
-
transfer of messages
-
closure
-
-
command/response interaction (like HTTP)
-
commands: ASCII text
-
response: status code and phrase
-
-
messages must be in 7-bit ASCI
-
-
2.3.2 compare HTTP
-
HTTP: pull SMTP: push
-
SMTP报文必须按照7比特ASCII码进行编码,而HTTP数据不受这种限制
-
HTTP把一个对象封装在一个响应报文中,SMTP把所有报文对象封装在一个报文之中
-
-
2.3.3 Mail message format
-
首部行包括这些字段:From(发送方邮箱地址)、To(接收方邮箱地址)、Subject(邮件主题)
-
首部行和报文体之间用一个空行隔开
-
-
2.3.4 Mail access protocols
-
POP: Post Office Protocol [RFC 1939]: authorization, download
-
IMAP: Internet Mail Access Protocol [RFC 1730]: more features, including manipulation of stored messages on server
-
HTTP: gmail, Hotmail, Yahoo! Mail, etc.
-
-
-
2.4 DNS
-
2.4.1 DNS service
-
recognize host:Host id, IP (DNS的功能是把主机名转换到IP地址)
-
DNS consist:
-
distributed database:implemented in hierarchy of many name servers
-
application-layer protocol:hosts, name servers communicate to resolve names (address/name translation)
-
-
DNS run on UDP,port 53
-
sevice
-
主机名到IP地址的转换
-
浏览器从URL中抽取主机名部分,发送给DNS应用的客户端
-
DNS客户向DNS服务器发送一个包含主机名的请求,客户最终会收到一份包含它请求的IP地址的响应报文
-
-
-
主机别名、邮件服务器别名到规范主机名的转换:一个主机可能有多个别名,一个公司的邮件服务器和Web服务器可能使用相同的主机名
-
负载分配
-
一个Web站点可能有多台服务器,它们具有不同的IP地址(一个规范主机名对应一个IP地址集合)
-
当客户发出请求时,DNS服务器会用整个IP地址集合进行响应,并且在每个回答中循环这些地址的次序
-
因为客户总是向IP地址排在最前面的服务器发送HTTP请求报文,所以DNS在这些Web服务器之间循环分配了负载
-
-
-
2.4.2 DNS overview of working mechanism
-
Central DNS
-
含义:只使用一个DNS服务器,它包含所有主机名到IP地址的映射。客户直接将所有查询发往单一的DNS服务器
-
problem:
-
单点故障:如果该DNS服务器崩溃,整个因特网随着瘫痪
-
通信容量:用单个服务器处理上亿台主机发出的DNS查询
-
远距离的集中式数据库:当客户与服务器距离很远时,中间也许还要经过低速和拥塞的链路,这将导致严重的时延
-
维护:单个服务器需要为所有因特网主机保留记录,这会导致庞大的中央数据库。而且它还需要为新添加的主机频繁更新
-
-
-
Distributed DNS
-
type
-
root name servers:提供TLD服务器的IP地址
-
TLD(顶级域):每个顶级域(如com、org等)都有TLD服务器。TLD服务器提供权威DNS服务器的IP地址
-
authoritative servers(权威域服务器):在因特网上具有公共可访问主机的每个组织机构都必须提供公共可访问的DNS记录
-
Local DNS name server:每个ISP都有一台本地DNS服务器
-
-
DNS查询(无缓存)
-
请求主机向本地DNS服务器发送查询报文
-
本地DNS服务器先向根DNS服务器查询,根据得到的回复向TLD服务器查询,再根据TLD服务器的回复查询权威服务器,直到收到所请求的IP地址
-
本地DNS服务器向请求主机发送查询的结果
-
从请求主机到本地DNS服务器的查询通常是递归查询,其余的查询通常是迭代查询
-
-
-
DNS caching
-
当某DNS服务器收到一个DNS回答时,它能将映射缓存在本地存储器中
-
-
-
2.4.3 DNS record and message
-
DNS record
-
*资源记录*(RR)是包含下列字段的4元组:(Name, Value, Type, TTL)
-
如果Type=A,则Name是主机名,Value是该主机名对应的IP地址
-
如果Type=NS,则Name是个域,Value是域中权威DNS服务器的主机名
-
如果Type=CNAME,则Name是一个主机别名,Value其规范主机名
-
如果Type=MX,则Name是一个邮件服务器别名,Value其规范主机名
-
-
DNS message
-
12字节首部区域
-
标识符:同一个查询的请求报文和响应报文使用同一个标识符,以便让客户匹配
-
标志
-
查询报文or回答报文
-
所请求的是权威DNS服务器or not
-
递归查询or not
-
-
问题数、回答RR数、权威RR数、附加RR数:指出首部后面的4类数据区域出现的RR(资源记录)数
-
-
问题区域
-
名字字段:被查询的主机名
-
类型字段:被询问的问题类型(如A、NS等)
-
-
回答区域
-
回答区域包含对最初请求的名字的资源记录
-
因为一个主机名可以有多个IP地址(多个服务器),所以回答区域可以包含多条RR
-
-
权威区域:包含了其他权威服务器的记录
-
附加区域
-
附加区域包含其他有帮助的记录
-
例如一个MX请求的回答报文中,回答区域包含其规范主机名,附加区域包含其IP地址
-
-
-
在DNS数据库中插入记录
-
注册域名
-
注册登记机构是一个商业实体,它提供注册域名的服务
-
当你向某注册登记机构注册域名aaa.com时,你需要提供你的权威DNS服务器的名字(dns.aaa.com)及其IP地址(212.212.212.1)
-
该注册登记机构会将下列两条资源记录插入DNS系统(此处即所有的TLD com服务器):(aaa.com, dns.aaa.com, NS) (dns.aaa.com, 212.212.212.1, A)
-
-
访问流程
-
完成注册后,人们就能够访问你的Web站点。
-
访客先向其本地DNS服务器发送请求,本地服务器则联系一个TLD com服务器(假设本地服务器中已有其缓存)TLD服务器用上述两条资源记录(NS类型和A类型)作为回复。访客的本地DNS服务器收到回复后,会向dns.aaa.com请求aaa.com的IP地址,然后把收到的IP地址回传给访客的主机。
-
此时访客的浏览器可以向该IP地址对应的主机发起一个TCP连接,然后在TCP上发送HTTP请求
-
-
-
-
Chapter3 Transport Layer
-
3.1
-
3.1.1 transport layer and network layer
-
运输层为运行在不同主机上的进程之间提供了逻辑通信。而网络层提供了主机之间的逻辑通信
-
运输层协议只工作在端系统中,路由器既不识别也不处理运输层报文的信息
-
计算机网络中可以安排多种运输层协议,每种协议为应用程序提供不同的服务模型。
-
运输层协议的服务会受制于网络层协议的服务。例如当网络层协议不提供时延或带宽保证时,运输层协议也无法提供这些保证
-
运输层协议可以提供某些网络层不提供的服务,例如可靠数据交付、加密报文
-
-
3.1.2 transport layer summary
-
本书将运输层分组称为报文段(message segment),将网络层分组称为数据报(datagram)
-
运输层协议
-
UDP(用户数据报协议)
-
是一种不可靠、无连接的服务
-
提供的服务:数据交付和差错检查
-
-
TCP(传输控制协议)
-
是一种可靠的、面向连接的服务
-
提供的服务
-
数据交付和差错检查
-
可靠数据传输(3.4-3.5节)
-
拥塞控制(3.6-3.7节)
-
-
-
-
-
-
3.2 Multiplexing/demultiplexing
-
define
-
multiplexing:源主机从不同套接字中收集数据块封装成报文段,然后将报文段传递到网络层
-
demultiplexing:将运输层报文段中的数据交付到正确的套接字
-
-
报文段中必须包含的字段:Source port number and destination port number
-
存在原因:运输层的多路复用要求每个报文段有特殊字段来指示报文段所要交付的套接字
-
端口号是一个16比特数,大小在0-65535之间
-
0-1023之间的端口号称为周知端口号,它们被保留给如HTTP之类的周知应用层协议来使用
-
-
无连接的多路复用与多路分解
-
运输层为每个UDP套接字分配一个端口号
-
UDP根据目的端口号把报文段交付给对应的套接字
-
-
面向连接的多路复用与多路分解
-
TCP套接字由一个四元组来标识,即源/目的IP地址、源/目的端口号
-
与UDP不同的是,两个具有不同源IP地址或不同源端口号的报文段将被定向到两个不同的套接字
-
-
-
3.3 UDP
-
使用UDP的原因
-
对应用层的控制更为精细
-
UDP能立即打包并发送数据,而TCP的拥塞控制机制可能会遏制发送方
-
TCP需要一直发送数据直到收到确认为止,而不管可靠交付需要用多长时间
-
实时应用不希望过分地延迟发送,且能容忍一些数据丢失,因此UDP更适合这类应用
-
-
无须建立连接:不会引人建立连接的时延
-
无连接状态
-
TCP需要在端系统中维护连接状态,包括接收和发送缓存、拥塞控制参数、序号与确认号等。这些信息对于可靠数据传输和拥塞控制是必要的
-
UDP不维护连接状态,从而能支持更多的活跃用户
-
-
分组首部开销小:UDP首部8字节,TCP首部20字节
-
-
3.3.1 UDP报文段结构
-
首部字段(8字节):源端口号、目的端口号、长度(首部加数据)、检验和
-
应用数据(报文)D
-
-
3.3.2 UDP checksum
-
checksum way
-
把报文段划分为16比特一组,依次累加这些16比特字
-
求和过程中,如果遇到溢出,则回卷(将溢出值加到最低位)
-
最后将累加结果取反,得到检验和
-
-
检测差错方法:在接收方,累加所有16比特字(包括检验和)。如果结果中存在是0的比特,那么说明出现了差错(正确结果应该是11...1)
-
端到端原则:某种功能(此处为差错检测)必须基于端到端实现,因为与在较高级别提供这些功能相比,在较低级别上提供它的代价可能冗余的
-
UDP不能进行差错恢复
-
-
-
3.4 principles of reliable data transfer
-
3.4.1 Reliable data transfer
-
rdt1.0: reliable transfer over a reliable channel
-
rdt2.0:channel with bit errors
-
自动重传请求(ARQ)协议:当接收方收到一个出错的分组时,自动发出一个重传错帧的请求
-
rdt2.0是一个停等协议,只有在收到上一个分组的ACK后,才会发送新的数据
-
-
rdt2.1
-
rdt2.0的缺陷:未考虑ACK或者NAK受损的可能性
-
解决方案:当发送方收到受损的ACK或NAK时,重传当前数据分组
-
产生的新问题:当接收方收到冗余分组(即发送方重传的分组)时,无法知道这是新的分组还是重传的分组
-
解决方案:在分组中添加1比特的序号字段。接收方只需检查序号就可以判断是新分组还是重传
-
-
rdt2.2:· 对于rdt2.1,用上次正确接收分组的ACK来代替本次的NAK,可以达到同样的效果(ACK分组中也需要有1比特序号字段)
-
rdt3.0: channels with errors and loss
-
发送方负责检测和恢复丢包工作
-
发送方选择一个时间值。如果此时间内没有收到ACK,则判定丢包并且重传该分组
-
因为分组序号在0和1之间交替,因此rdt3.0有时被称为比特交替协议
-
-
-
Pipelined protocols
-
rdt3.0的性能问题:它是一个停等协议,必须在收到ACK后才能发送下一个分组
-
流水线技术:允许发送方发送多个分组而无须等待确认
-
对可靠数据传输协议的影响
-
必须增加序号范围
-
发送方需要缓存已发送但没有确认的分组,接收方需要缓存已正确接收的分组
-
流水线的差错恢复的基本方法
-
回退N步(3.4.3)(GBN)
-
选择重传(3.4.4)(SR)
-
-
-
-
3.4.3 回退N步(GBN)
-
GBN协议的序号
-
基序号:最早未确认分组的序号
-
下一个序号:最小的未使用序号(即下一个待发分组的序号)
-
小于基序号的分组:已被确认收到
-
从基序号到下一个序号之间的分组:已发送但未被确认
-
下一个序号及更大序号的分组:还未被发送
-
-
滑动窗口
-
GBN协议维护一个长度为N的滑动窗口,里面存放从基序号起的N个分组。
-
已被发送但未被确认的分组都位于滑窗中,且不能超过滑窗大小。即:下一个序号的范围=[基序号, 基序号+N]
-
因此GBN协议也常被称为滑动窗口协议
-
-
GBN发送方必须响应三种类型的事件
-
上层的调用:当滑窗未满时,产生一个分组并发送。否则不发送
-
收到一个ACK:当收到序号为n的ACK时,说明接收方已正确收到所有序号不超过n的分组(这种确认方式叫作累积确认)(cumulative ack)
-
超时事件:如果出现超时,发送方重传所有已发送但未确认的分组
-
-
GBN接收方的动作:如果序号为n的分组被正确收到,且上一次发送的ACK序号为n-1,那么接收方发送序号为n的ACK。否则丢弃接收到的分组(接收方只接收按序到达的分组)
-
-
3.4.4 选择重传(SR)
-
GBN的性能问题:单个分组的差错能够引起大量分组的重传
-
SR协议同样维护一个长度为N的滑动窗口。滑窗中已收到ACK的分组会被标记(不再采用累积确认的方式)。重传时每次只重传未被确认的分组
-
发送方的事件与动作
-
从上层收到数据:同GBN
-
收到一个ACK
-
如果收到的ACK序号位于滑窗中,那么发送方将滑窗中的那个分组标记为已接收
-
如果该ACK序号等于基序号,那么将窗口基序号移动到第一个未被确认的分组处
-
-
超时:同GBN
-
-
接收方的事件与动作
-
接收方也有一个长度为N的窗口。当正确收到的分组位于窗口内时,发送一个ACK给发送方。如果是第一次收到该分组,那么缓存该分组。如果该分组的序号等于接受窗口的基序号,则把缓存中从基序号起的连续序号的分组交付给上层
-
当正确收到一个序号位于[基序号-N, 基序号-1]中的分组时,接收方也发送一个ACK(针对ACK丢失的情况)
-
忽略其他情况的分组
-
-
窗口长度必须小于序号空间大小的一半,否则接收方不能区分新的分组和重传
-
-
-
3.5 TCP
-
3.5.1 TCP连接
-
TCP连接是全双工(full duplex data)的(双向同时传输数据)、点对点(point-to-point)的(单个发送方和单个接收方)
-
TCP三次握手过程中,发送方和接收方都会设置缓存区。客户进程通过套接字传递数据流,TCP会把这些数据引导到该连接的TCP发送缓存里
-
TCP会在“它方便的时候”从缓存中取出一块数据进行发送。取出的数据数量受限于最大报文长度(MSS)。MSS由最大链路层帧长度(即最大传输单元(MTU))来设置。以太网和PPP(点对点)链路层协议都具有1500字节的MTU,因此MSS的典型值为1460字节(MSS不包括TCP/IP首部长度)
-
TCP给每块数据配上一个TCP首部,组成TCP报文段。TCP在另一端收到一个报文段后,其中的数据被放入该连接的接收缓存中。应用程序会从该缓存中读取数据流
-
-
TCP segment structure
-
序号和确认号
-
TCP隐式地对数据流中的每一个字节编号,并把此编号填入序号字段。
-
主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号。因此,TCP提供的是累积确认,即TCP只确认该流中至第一个丢失字节为止的字节
-
TCP未规定收到失序报文段时的处理原则。通常采用的方法:接收方保留失序字节,并等待缺少的字节以填补该间隔
-
服务器对客户所发数据的确认(即确认号)被装载在一个服务器发送给客户的报文段中。这种确认被称为是被*捎带*在服务器到客户的数据报文段中的
-
-
接收窗口:用于流量控制,指示接收方愿意接收的字节数量
-
首部长度:TCP首部的典型长度是20字节,因为选项字段通常为空
-
可选且变长的选项字段:用于发送方与接收方协商MSS,或用作窗口调节因子(见3.5.5节和3.7节)
-
6比特标志字段
-
ACK:指示确认字段中的值是有效的(该报文段中捎带着一个确认)
-
RST、SYN、FIN:用于连接建立和拆除(见3.5.6节)
-
PSH:指示接收方应立即将数据交给上层
-
URG
-
指示报文段中存在被发送端的上层实体置为“紧急”的数据
-
紧急数据的最后一个字节由16比特的紧急数据指针字段指出。此时TCP必须通知接收端的上层实体
-
比特可选标志位CWR、ECE:用于明确拥塞通告(见3.7.2节)
-
-
-
2比特可选标志位CWR、ECE:用于明确拥塞通告(见3.7.2节)
-
-
3.5.3 TCP round trip time(RTT), timeout
-
样本RTT(SampleRTT)
-
SampleRTT指从某报文段被发出(即交给IP)到对该报文段的确认被收到之间的时间量
-
大多数TCP的实现仅在某个时刻做一次SampleRTT的测量,而不是为每个发送的报文段都测量一个SampleRTT
-
TCP决不为已被重传的报文段计算SampleRTT
-
-
EstimatedRTT
-
TCP维持一个SampleRTT的均值(EstimatedRTT)。每次获得一个新SampleRTT时,TCP根据下列公式更新EstimatedRTT:EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT,其中参数α的推荐值为0.125
-
EstimatedRTT是SampleRTT的一个加权平均值。上述公式对最近样本赋予的权值大于对旧样本赋予的权值。意义:越近的样本越能反映网络当前的拥塞情况。从统计学观点讲,这种平均被称为*指数加权移动平均*(EWMA)
-
-
RTT偏差(DevRTT)
-
DevRTT用于估算SampleRTT偏离EstimatedRTT的一般程度:DevRTT = (1 - β) * DevRTT + β * |SampleRTT - EstimatedRTT|,其中参数β的推荐值为0.25
-
DevRTT是一个SampleRTT与EstimatedRTT之间差值的EWMA
-
-
重传超时间隔(TimeoutInterval)
-
TimeoutInterval应该大于等于EstimatedRTT。否则将造成不必要的重传。
-
TimeoutInterval不应该比EstimatedRTT大太多。否则当报文段丢失时,TCP不能很快地重传。
-
公式:TimeoutInterval = EstimatedRTT + 4 * DevRTT
-
推荐的初始TimeoutInterval值为1秒。每次出现超时后其值加倍。只要收到报文段并更新EstimatedRTT,就会根据公式重新计算TimeoutInterval
-
-
-
3.5.4 TCP reliable data transfer
-
对TCP发送方的高度简化的描述
-
当发送方从上层应用程序接收到数据时,生成并发送报文段。如果此时定时器(超时间隔为TimeoutInterval) 未运行,TCP就启动该定时器
-
当定时器超时时,TCP重传具有最小序号的未确认的报文段
-
当收到ACK,且其确认号大于基序号时,因为TCP采用的是累积确认,所以可以将基序号更新为确认号。如果此时存在未确认的报文段,那么TCP还要重新启动定时器
-
-
每次重传,超时间隔的值都会翻倍,呈指数型增长。因为定时器过期很可能是由网络拥塞引起的,所以这提供了一种形式受限(更复杂的形式见3.7节)的拥塞控制
-
快速重传(TCP fast retransmit)
-
当TCP接收方收到一个序号大于所期望序号的报文段时,它检测到了数据流中的一个间隔。这个间隔可能是由报文段丢失或重新排序造成的。此时接收方会发送一个冗余ACK(即对最后一个按序字节的重复确认)
-
当TCP发送方收到对相同数据的3个冗余ACK时,它会执行快速重传(即在报文段定时器过期之前进行重传)
-
-
TCP的差错恢复机制:GBN协议与SR协议的混合体
-
与GBN的类似之处
-
TCP确认是累积式的
-
TCP发送方仅需维护:已发送但未确认的字节的最小序号、下一个要发送的字节的序号
-
-
与SR的类似之处
-
TCP会缓存失序报文段
-
重传时不会重传所有未确认的报文段(TCP至多重传一个报文段)
-
-
对TCP是一种修改意见:选择确认
-
它允许TCP接收方有选择地确认失序报文段,而非累积确认
-
当该机制与选择重传机制结合使用时,TCP就很像通常的SR协议了
-
-
-
-
3.5.5 流量控制(flow control)
-
流量控制的目的:防止接收缓存溢出。因此流量控制是一个速度匹配服务,即要让发送方的发送速率与接收方应用程序的读取速率匹配
-
TCP通过让接收方维护一个称为接收窗口的变量来提供流量控制。接收窗口:用于向发送方指示接收方还有多少可用缓存空间
-
假设主机A通过TCP连接向主机B发送一个大文件。主机B为该连接分配了一个大小为RcvBuffer的接收缓存,且主机B丢弃所有失序的报文段
-
定义关于主机B的变量
-
LastByteRead:主机B上的应用程序从缓存中读出的数据流中的最后一个字节的序号
-
LastByteRcvd:已放入主机B接收缓存中的数据流的最后一个字节的序号
-
-
接收窗口rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)必须保证rwnd >= 0
-
主机A跟踪两个变量LastByteSent和LastByteAcked,显然LastByteSent-LastByteAcked表示已发送但未确认的数据量。主机A必须保证LastByteSent-LastByteAcked <= rwnd
-
一个小小的技术问题
-
TCP仅当它有数据或有确认要发时,才会发送报文段。当主机B遇到rwnd=0并通告给主机A后,主机A无法知道主机B的接收缓存何时被清空(此时主机B没有数据或确认要发)
-
解决方案(TCP规范已作要求):当主机B的rwnd=0时,主机A持续发送只有一个字节数据的报文段。当接收缓存开始清空时,确认报文里将包含一个非0的rwnd值
-
-
-
3.5.6 TCP连接管理(connection management)
-
三次握手(建立连接)
-
客户首先向服务器发送一个特殊的TCP报文段:SYN报文段。该报文段首部的SYN标志为被置为1。客户随机选择一个初始序号client_isn(目的是为了避免安全性攻击),放在序号字段中
-
服务器收到该SYN报文段后,为该TCP连接分配缓存和变量(这一步易受SYN洪泛攻击)。然后服务器发送允许连接的报文段:SYNACK报文段。SYNACK报文段中,SYN比特为1,确认号为client_isn+1,序号字段填写服务器自己选择的初始序号server_isn
-
客户收到SYNACK报文段后,也要为该连接分配缓存和变量。客户需要对服务器允许连接的报文段进行确认,即把server_isn+1填入确认号字段中。三次握手的前两步已经完成了对TCP连接的建立,因此第三步的报文段中可以携带客户到服务器的数据,且从此开始SYN比特都为0。
-
-
四次挥手(关闭连接)
-
客户发送一个FIN比特为1的报文段,服务器收到后回送一个确认报文段
-
然后服务器发送它自己的终止报文段,客户对这个报文段进行确认。此时两台主机上用于该连接的所有资源都被释放了
-
当客户发送对服务器的终止报文段的确认ACK后,会等待一段时间(典型值为30s、1min或2min),再关闭连接。如果确认ACK丢失,客户可以在这段等待时间内进行重传
-
-
连接失败的情况
-
当一个TCP报文段的端口号或源IP地址与该主机上的套接字都不匹配时,该主机将向源发送一个重置报文段。该报文段RST比特为1
-
当一个UDP分组的目的端口与主机的UDP套接字都不匹配时,主机会发送一个ICMP数据报(见第4章)
-
-
-
-
3.6 拥塞控制原理(principles of congestion control)
-
3.6.1 拥塞原因与代价
-
网络拥塞是因为有太多的源想以过高的速率发送数据。分组重传是网络拥塞的征兆,但它无法处理导致网络拥塞的原因
-
网络拥塞的代价/后果
-
当分组的到达速率接近链路容量时,分组将经历巨大的排队时延
-
发送方必须执行重传,以补偿因为路由器缓存溢出而丢失的分组
-
发送方在遇到大时延时会进行不必要的重传,这引起路由器利用链路带宽来转发不必要的分组副本
-
一条路径中,当一个分组被丢弃时,每个上游路由器用于转发该分组而使用的传输容量最终被浪费掉了
-
-
-
3.6.2 拥塞控制方法
-
端到端拥塞控制
-
TCP采用端到端的方法解决拥塞控制(见3.7.1节),因为IP层不会向端系统提供有关网络拥塞的反馈信息
-
TCP报文段的丢失(通过超时或3次冗余确认得知)被认为是网络拥塞的迹象,TCP会相应地减小其窗口长度
-
-
网络辅助的拥塞控制
-
路由器向发送方提供关于网络中拥塞状态的显示反馈信息,这种反馈可以简单地用一个比特来指示链路拥塞情况
-
拥塞信息从网络反馈到发送方的两种方式
-
第一种:直接反馈信息可以由网络路由器发给发送方
-
第二种(更为通用):路由器标记或更新从发送方流向接收方的分组中的某个字段,以此指示拥塞的产生。接收方收到后就会向发送方通知该网络拥塞指示。这种通知至少要经过一个完整的往返时间
-
-
-
-
-
3.7 TCP拥塞控制(TCP congestion control)
-
拥塞窗口cwnd
-
TCP拥塞控制机制跟踪一个变量:拥塞窗口cwnd,它满足:LastByteSent-LastByteAcked <= min(cwnd, rwnd)本节中假设TCP接收缓存足够大(即忽略rwnd),且发送方总有数据要发送(即拥塞窗口中的所有报文段都要被发送)
-
在每个RTT的起始点,上述限制条件允许发送方发送cwnd个字节的数据,在该RTT结束时发送方接收对数据的确认报文。因此,该发送方的发送速率大概是:cwnd/RTT 字节/秒
-
-
TCP拥塞控制算法
-
慢启动(Slow Start )
-
cwnd的初始值通常被置为一个较小值,如一个MSS值。每当传输的报文首次被确认,cwnd就增加一个MSS。因此每过一个RTT,发送速率(cwnd/RTT)就翻倍,呈指数增长
-
慢启动结束
-
情况1:出现超时
-
TCP的应对策略:重新设置变量:慢启动阈值ssthresh = cwnd/2,cwnd = 1然后TCP重传超时报文段,并重新开始慢启动过程**
-
-
情况2:cwnd >= ssthresh
-
TCP的应对策略:结束慢启动并进入拥塞避免状态(congestion avoidance)(TCP更为谨慎地增加cwnd而非直接令其翻倍)
-
-
情况3:检测到3个冗余ACK
-
TCP的应对策略:重新设置变量:ssthresh = cwnd/2,cwnd = ssthresh + 3 * MSS执行快速重传(见3.5.4节),然后进入快速恢复状态(quick recovery)
-
-
-
-
拥塞避免(congestion avoidance)
-
进入拥塞避免状态时,cwnd的值约是上次遇到拥塞时cwnd值的一半。此时采用的策略是:每个RTT,cwnd只增加一个MSS (线性增加 increase linearly)
-
通用的实现:发送方每收到一个确认,就将cwnd增加MSS*(MSS/cwnd)。因为一个RTT内会发送cwnd/MSS个报文段,所以正常情况下每个RTT只将cwnd增加一个MSS
-
导致拥塞避免结束的情况:出现超时或检测到3个冗余ACK。TCP的应对策略:同慢启动过程中对应的情况
-
-
快速恢复(quick recovery)
-
对于引起TCP进入快速恢复状态的缺失报文段,如果继续收到该冗余ACK,那么每收到一个,cwnd就增加一个MSS
-
当对缺失报文段的ACK最终到达时,设置cwnd=ssthresh,然后进入拥塞避免状态
-
出现超时事件时,处理策略同慢启动
-
快速恢复是TCP推荐的构件(非必需)。上述综合了快速恢复的拥塞控制算法是较新版本的Reno算法
-
-
加性增、乘性减(AIMD)
-
每个RTT内cwnd线性增加1MSS,出现3个冗余ACK时cwnd减半。因此TCP拥塞控制方式常常被称为AIMD拥塞控制方式
-
-
计算TCP吞吐量
-
高度简化的宏观模型
-
当丢包发生时,记拥塞窗口的值为W,那么TCP的传输速率在W/(2RTT)到W/RTT之间变化。
-
因此一条连接的平均吞吐量为0.75W/RTT
-
-
关于丢包率L、RTT、MSS的吞吐量公式:平均吞吐量 = 1.22 * MSS / (RTT * sqrt(L))
-
-
-
3.7.1 公平性
-
当多条TCP连接需要经过同一段瓶颈链路时,如果每条连接都得到相同份额的链路带宽,则认为拥塞控制机制是公平的
-
对具有相同RTT的多条连接,TCP拥塞控制是公平的。实践中发现,具有较小RTT的连接能够在链路空闲时更快地抢到可用带宽
-
UDP没有拥塞控制,可能会压制TCP流量
-
对于只使用一条TCP连接的应用而言,一个具有多条并行TCP连接的应用会导致不公平的带宽分配。即TCP拥塞控制对于每一条连接是公平的,但对于具有并行TCP连接的应用是不公平的
-
-
3.7.2 明确拥塞通告(ECN)
-
IP数据报首部TOS字段被用于ECN。路由器使用一种ECN比特指示该路由器正经历拥塞。当接收主机收到带拥塞指示的IP数据报时,接收主机TCP在ACK报文段中设置ECE(明确拥塞通告回显)比特,通知发送主机网络拥塞
-
当TCP发送方收到具有ECE拥塞指示的ACK时,发送方会像它对丢失报文段使用快速重传做出反应一样,并且在下一个报文段中对CWR(拥塞窗口缩减)比特进行设置
-
-
Chapter4 Network Layer:The Data Plane
-
4.1 Network Layer summary
-
Data plane:forwarding
-
Control Plane:routing
-
传统方法:路由器之间彼此通信,从而计算出转发表的值
-
SDN(软件定义网络)方法:通过远程控制器来计算和分发转发表
-
-
网络服务模型
-
可能提供的服务
-
确保交付
-
具有时延上界的确保交付
-
有序分组交付
-
确保最小带宽
-
安全性
-
-
因特网网络层的服务:尽力而为服务
-
-
-
4.2 What’s inside a router(路由器的工作原理)
-
路由器体系结构
-
输入端口(router input ports)
-
线路端接:物理层处理
-
数据链路处理(协议,拆封)
-
查找,转发,排队
-
-
交换结构(high-seed switching fabric):将输入端口连接到输出端口
-
输出端口(router output ports)
-
排队(缓存管理)
-
数据链路处理(协议,封装)
-
线路端接
-
-
路由选择处理器(routing processor):执行控制平面功能,负责与远程控制器通信
-
-
4.2.1 输入端口处理和基于目的地转发
-
查找:使用最长前缀匹配规则,在转发表中找到匹配的目的地址,然后向其相关联的链路转发分组
-
用三态内容可寻址存储器(TCAM)来更快地查找匹配的表项
-
其他操作
-
进行物理层和链路层处理
-
检查分组的版本号、检验和、寿命字段,并重写上述后两个字段
-
更新用于网络管理的计数器
-
-
-
4.2.2 交换
-
经内存交换(memory):分组先被读入到路由选择处理器内存,然后写出到输出端口
-
经总线交换(bus):分组经总线传输到所有输出端口,但只有目标端口会保存该分组
-
经互联网络交换(crossbar):互联网络中的节点会控制分组的传输,使其前往目标端口
-
-
4.2.3 输出端口处理
-
选择和取出排队的分组,进行传输
-
执行所需的链路层和物理层传输功能
-
-
4.2.4 何时出现排队
-
输入排队
-
在两个输入队列前端,各存在一个发往同一输出队列的分组。
-
线路前部(HOL)阻塞:输入队列中正在排队的一个分组(即使它的目标输出端口空闲)被其线路前部的另一个分组阻塞
-
-
输出排队
-
当交换结构的处理速率比端口线路快到一定程度时
-
应对策略:
-
主动队列管理(AQM)算法
-
弃尾:丢弃到达的分组
-
删除一个或多个已排队的分组,从而未新来的分组腾出空间
-
随机早期检测(RED)
-
-
-
-
4.2.5 分组调度
-
先进先出(FIFO),也称为先来先服务(FCFS):按照分组到达输出链路队列的顺序,将其输出到链路上
-
优先权排队(抢占式/非抢占式 priority):从最高优先权类中选择一个分组进行传输
-
循环排队规则(Round Robin (RR) scheduling:):依次传输第1个类中的1个分组,第2个类中的1个分组,……,第n个类中的1个分组,循环往复
-
加权公平排队(WFQ):循环处理每个类时,按其权重处理不同数量的分组
-
-
-
4.3 IP: Internet Protocol
-
4.3.1 IP datagram format
-
-
版本:IP协议版本号
-
首部长度:用于确定数据报中载荷(被封装的运输层报文段)实际开始的地方
-
服务类型(TOS):用于区分不同类型的IP数据报,如实时数据报和非实时流量
-
数据报长度:首部+数据的总长度(以字节计)
-
标识、标志、片偏移:与IP分片有关
-
寿命(TTL)
-
上层协议:当IP数据报到达目的地时,用于指示数据部分应该交给哪个运输层协议来处理
-
首部检验和:见3.3.2节
-
源和目的IP地址
-
选项:该字段允许IP首部被扩展
-
数据(有效载荷)
-
-
无选项字段的IPv4数据报首部长20字节。如果一个IPv4数据报承载一个TCP报文段,则该数据报共承载40字节的首部(TCP/IP)以及应用层报文
-
-
4.3.2 IPv4数据报分片
-
一个链路层帧能承载的最大数据量叫作最大传送单元(MTU)
-
当IP数据报长度大于出链路的MTU时,需要对IP数据报中的数据分片
-
-
4.3.3 IPv4 addressing
-
IP要求每台主机的接口和每台路由器的接口都拥有自己的IP地址
-
每个IP地址长32比特,用点分十进制表示
-
IP子网和子网掩码:如223.1.1.0/24,它指示32比特中的最左侧24比特是子网地址,“/24”记法被称为子网掩码
-
因特网的地址分配策略:无类别域间路由选择(CIDR),即用可变长子网掩码来进行任意长度的前缀分配
-
获取IP地址
-
对于一个组织,如果它的子网需要一块地址,那么它可以请求它的ISP从一个大地址块中提供一块地址
-
对于一台主机,它可以用动态主机配置协议(DHCP)从网络中得到一个临时IP地址。该协议是即插即用协议(零配置协议)
-
DHCP的步骤
-
DHCP服务器发现(DHCP discover):客户在UDP分组中向端口67发送DHCP发送报文,目的IP地址填写为广播地址255.255.255.255,源IP地址填写0.0.0.0
-
DHCP服务器提供(DHCP offer):服务器向子网所有节点广播DHCP提供报文,报文中包含向客户推荐的IP地址、IP地址的租用期等
-
DHCP请求(DHCP request):客户从一个或多个服务器中选择一个进行响应,回显服务器提供的配置
-
DHCP ACK(DHCP ack):服务器对DHCP请求报文进行响应,证实配置的参数
-
ICANN: Internet Corporation for Assigned Names and Numbers
-
-
-
-
4.3.4 NAT: network address translation
-
专用网络(具有专用地址的地域):其地址仅对该网络中的设备有意义的网络
-
NAT使路由器能够对专用地址和公用地址进行转换
-
NAT转换表的表项
-
WAN端:路由器IP地址+虚拟端口号
-
LAN端:专用地址+源端口号
-
-
-
4.3.5 IPv6
-
引入的变化
-
IP地址长度从32比特扩大到128比特
-
定长的40字节首部
-
流标签:用于对某些数据报给出优先权
-
-
-
版本:IP协议版本号
-
流量类型:与IPv4首部中的TOS字段类似
-
流标签
-
有效载荷长度:跟在数据报首部后面的字节数量
-
下一个首部:与IPv4首部中的协议字段相同
-
跳限制:与TTL类似
-
源地址和目的地址
-
数据
-
-
删除的IPv4中的字段
-
分片/重新组装:如果数据报太大,那么路由器向发送方发回一个“分组太大”的ICMP差错报文,从而让发送方重新发送一个较小长度的IP数据报
-
首部检验和:因为运输层和数据链路层执行了检验操作,所以网络层不再重复执行
-
选项:该字段并没有消失,它可能出现在“下一个首部”字段指示的位置上
-
-
从IPv4迁移到IPv6的方法:建隧道(Tunneling),即把IPv6数据报放在IPv4数据报的数据字段中
-
-
-
4.4 Generalized Forward and SDN
-
flow table
-
匹配+动作转发表在OpenFlow标准中称为流表
-
流表的表项
-
首部字段值的集合:入分组将与之进行匹配,匹配不上的分组将被丢弃或发送到远程控制器
-
计数器集合:计数器包括已经与该表项匹配的分组数量、该表项上次更新以来的时间
-
动作集合:包括单播、多播、丢弃、重写首部字段等动作
-
-
-
4.4.1 匹配:对协议栈的多个首部字段进行“匹配”
-
4.4.2 动作
-
转发
-
分组可能被转发到一个特定的输出端口
-
分组可能被广播到除入端口外的所有端口
-
分组可能通过所选的端口集合进行多播
-
分组可能被封装并发送到远程控制器
-
-
丢弃:没有动作的流表项表明某个匹配的分组应当被丢弃
-
修改字段(重写首部值)
-
-
4.4.3 匹配+动作中的OpenFlow例子
-
简单转发
-
负载均衡
-
充当防火墙
-
-
Chapter5 Network Layer:The Control Plane
-
5.1 introduction
-
转发表和流表的维护方法
-
Per-router control plane
-
每台路由器都运行路由选择算法
-
每台路由器都包含转发和路由选择功能
-
-
Logically centralized control plane
-
用逻辑集中式控制器计算转发表
-
控制器与每台路由器中的一个控制代理(CA)进行交互,以配置和管理该路由器的转发表
-
CA之间不能直接相互交互,也不能主动参与计算转发表
-
-
-
采用逻辑集中式控制器概念的SDN(软件定义网络)在生产部署中得到了越来越多的应用
-
-
5.2 routing protocols( 路由选择算法)
-
Routing algorithm classification
-
global/decentralized
-
static/dynamic
-
负载敏感/负载迟钝
-
-
5.2.1 A link-state routing algorithm(路由选择算法)
-
是一种集中式路由选择算法
-
具有全局状态信息,即所有节点都具有该网络的统一、完整的视图
-
可以用Dijkstra算法来实现
-
出现的问题:拥塞敏感导致的振荡
-
-
5.2.2 Distance vector algorithm(距离向量(DV)路由选择算法)
-
是一种迭代的、异步的、分布式的算法
-
用Bellman-Ford算法实现
-
出现的问题
-
链路开销改变可能会导致路由选择环路(无穷计数问题)
-
毒性逆转:可以解决特定环路中的无穷计数问题,但是涉及3个以上节点的环路可能检测不到
-
-
-
LS算法与DV算法的比较
-
message complexity
-
LS:一条链路开销改变时,需要向所有节点发送报文
-
DV:仅当新链路开销导致与该链路相连节点的最低开销路径发生改变时,才传播已改变的链路开销
-
-
speed of convergence
-
LS:每次链路开销改变时,要求发送O(|N||E|)个报文
-
DV:收敛较慢,且可能会遇到路由选择环路
-
-
robustness
-
LS:每个LS节点仅计算自己的转发表,因此路由计算在某种程度上是分离的,提供了一定程度的健壮性
-
DV:一个不正确的节点计算值会扩散到整个网络
-
-
-
-
5.3 因特网中自治系统内部的路由选择:OSPF
-
采用自治系统(AS)的原因
-
规模
-
随着路由器数目变得很大,涉及路由选择信息的通信、计算和存储的开销将高得不可实现
-
在大量路由器中进行的DV算法将永远无法收敛
-
-
管理自治
-
ISP通常希望按自己的意愿运行路由器
-
ISP也希望对外部隐藏其网络的内部组织面貌
-
-
RIP,OSPF,IGRP
-
-
OSPF (Open Shortest Path First)
-
(用来发现、计算路由)
-
是一种链路状态协议,使用洪泛链路状态信息和Dijkstra算法(LS)
-
各条链路开销由网络管理员配置
-
路由器会周期性地广播链路状态
-
OSPF的优点
-
安全:仅有受信任的路由器能参与AS内的OSPF协议
-
多条相同开销的路径:无须仅选择单一的路径来承载所有流量
-
对单播和多播路由选择的综合支持
-
支持在单个AS中的层次结构
-
-
-
-
5.4 Routing among the ISPs: BGP(边界网关协议)
-
(用来传递、控制路由)
-
eBGP: obtain subnet reachability information from neighboring ASes
-
iBGP: propagate reachability information to all AS-internal routers.
-
-
5.4.1 BGP的作用
-
把分组路由到一个CIDR化的前缀
-
从邻居AS获得前缀的可达性信息
-
确定到该前缀的“最好的”路由
-
-
5.4.2 通告BGP路由信息
-
目的前缀所在AS向邻居AS发送可达性信息,进而向更远处扩散
-
包含可达性信息的BGP报文会在传输过程中记录经过的AS,从而得到通向目的前缀的路径
-
-
5.4.3 确定最好的路由
-
路由器到目的前缀的BGP属性
-
AS-PATH:从路由器所在AS到目的前缀所在AS的路径(不包括路由器所在AS,包括目的前缀所在AS)
-
NEXT-HOP:AS-PATH起始的路由器接口的IP地址
-
-
热土豆路由选择(Hot Potato Routing):尽可能快地将分组送出其AS
-
路由器选择算法
-
优先选择具有最高本地偏好值(该属性由网络管理员设置)的路由
-
如果有多个具有最高本地偏好值的路由,那么从中选择最短AS-PATH的路由
-
如果仍然有多个选择,那么选择NEXT-HOP最近的路由
-
如果仍然有多个选择,那么该路由器使用BGP标识符来选择路由
-
-
BGP messages:
-
OPEN: opens TCP connection to remote BGP peer and authenticates sending BGP peer
-
UPDATE: advertises new path (or withdraws old)
-
KEEPALIVE: keeps connection alive in absence of UPDATES; also ACKs OPEN request
-
NOTIFICATION: reports errors in previous msg; also used to close connection
-
-
-
5.4.4 IP任播
-
BGP常被用于实现IP任播服务,该服务通常用于DNS中
-
当一个用户要访问一条DNS记录时,BGP可以将用户指向具有该记录的“最近的”服务器
-
-
5.4.5 路由选择策略:
-
设置本地偏好值,从而避免多宿接入ISP转发其邻居AS之间的流量
-
-
-
5.5 Software defined networking (SDN)
-
SDN体系结构的关键特征
-
generalized“ flow-based” forwarding (e.g., OpenFlow)
-
control, data plane separation
-
control plane functions external to data-plane switches
-
programmable control applications
-
-
5.5.1 SDN控制器
-
通信层:SDN控制器和受控网络设备之间的通信
-
网络范围状态管理层
-
对于网络控制应用程序层的接口
-
-
5.5.2 OpenFlow协议
-
OpenFlow协议运行在SDN控制器和受控交换机之间,且该协议运行在TCP之上
-
在控制器和受控交换机之间流动的重要报文包括
-
配置(configure):该报文允许控制器查询并设置交换机的配置参数
-
修改状态(modify-state):控制器发送该报文来修改交换机的状态
-
读状态(packet-in,packet-out):控制器从交换机的流表和端口收集数据
-
流删除(flow-removed):交换机通知控制器已删除一个流表项
-
端口状态(port status):交换机通知控制器其端口状态的变化
-
分组入(packet-in):交换机把分组发送给控制器
-
-
-
-
5.6 ICMP:因特网控制报文协议
-
used by hosts & routers to communicate network-level information
-
error reporting: unreachable host, network, port, protocol
-
echo request/reply (used by ping)
-
-
network-layer “above” IP:ICMP msgs carried in IP datagrams(ICMP通常被认为是IP的一部分。但从体系结构上讲它位于IP之上,因为它是作为IP有效载荷被承载的)
-
ICMP报文的应用实例:Traceroute程序
-
源主机中的TraceroutIPe程序向目的主机发送一系列IP数据报,每个数据报都携带了一个具有不可达UDP端口号的UDP报文段
-
第i个数据报的TTL值被设为i,当它到达第i台路由器时,TTL正好过期。于是第i台路由器丢弃该数据报,并发送一个ICMP警告报文给源主机。该警告报文包含了第i台路由器的名字和IP地址。源主机会根据该ICMP报文到达源主机的时间,计算出往返时延
-
当数据报正确到达目的主机时,目的主机会回发一个端口不可达的ICMP报文。当源主机收到这个报文时,它就知道不需要在发送另外的探测分组了
-
-
-
5.7 Network management and SNMP
-
5.7.1 网络管理的关键组件
-
管理服务器(managed device):执行网络管理活动的应用程序
-
被管设备
-
管理信息库(MIB):收集一个被管设备中每个被管对象的关联信息
-
网络管理代理:运行在被管设备中的一个进程,在管理服务器的命令下在被管设备中采取本地动作
-
网络管理协议:运行在管理服务器和被管设备之间的协议
-
-
简单网络管理协议(SNMP)
-
简单网络管理协议版本2(SNMPv2)是一个应用层协议
-
该协议用于在管理服务器和代表管理服务器执行的代理之间传递网络管理控制和信息报文
-
常用报文
-
请求响应模式:管理服务器查询或修改MIB对象值
-
陷阱报文:代理把通知管理服务器出现了异常情况
-
-
SNMP的报文一般称为协议数据单元(PDU),它们通常作为UDP数据报的载荷进行传输
-
-
Chapter6 The Link Layer and LANs
-
6.1 Link layer: introduction
-
6.1.1 Link layer services
-
成帧(framing):把网络层数据报用链路层帧封装起来
-
链路接入(link access):根据媒体访问控制(MAC)协议,在链路上传输帧
-
可靠交付(reliable delivery between adjacent nodes)
-
通常的实现方式:确认和重传(与运输层的类似)
-
适用情况:易于产生高差错率的链路
-
对于低比特差错的链路,该服务是一种不必要的开销。因此许多有线的链路层协议不提供该服务
-
-
差错检测和纠正:通常用硬件实现
-
-
6.1.2 Where is the link layer implemented?
-
in each and every host
-
主体部分实现于:网络适配器(网络接口卡)“adaptor” (aka network interface card NIC)
-
链路层控制器:封装/拆封数据报
-
物理传输
-
-
小部分实现于:主机CPU上的软件
-
-
-
6.2 error detection, correction
-
6.2.1 奇偶校验
-
一维奇偶校验:可以检测奇数个比特差错的情况
-
二维奇偶校验:可以检测和纠正单比特差错,以及检测(但不能纠正)两比特差错
-
-
6.2.2 检验和方法
-
6.2.3 循环冗余检测(CRC)
-
CRC编码的构成:高d位的数据比特D和低r位的CRC比特R
-
给定r+1位的生成多项式G,要求CRC编码用模2算术恰好能被G整除
-
计算R的公式:R = remainder ((D * 2^r) / G)
-
-
-
6.3 Multiple access links, protocols (多路访问链路和协议)
-
two types of “links”:
-
point-to-point(ppp):由链路一端的单个发送方和另一端的单个接收方组成
-
PPP for dial-up access
-
point-to-point link between Ethernet switch, host
-
-
broadcast (shared wire or medium):多个发送和接收节点都连接到相同的、单一的、共享的广播信道上
-
old-fashioned Ethernet
-
upstream HFC
-
802.11 wireless LAN
-
-
-
多路访问问题
-
问题描述:如何协调多个发送和接收节点对一个共享广播信道的访问
-
问题产生原因:当接收方同时收到多个帧(即帧在接收方处碰撞)时,涉及此次碰撞的所有帧都会丢失
-
协调节点传输的负责者:多路访问协议(multiple access protocol)
-
MAC protocols: taxonomy(MAC协议:分类)
-
channel partitioning
-
divide channel into smaller “pieces” (time slots, frequency, code)
-
allocate piece to node for exclusive use
-
-
random access
-
channel not divided, allow collisions
-
“recover” from collisions
-
-
“taking turns”
-
nodes take turns, but nodes with more to send can take longer turns
-
-
-
-
6.3.1 信道划分协议
-
时分多路复用(TDM)
-
频分多路复用(FDM)
-
码分多址(CDMA)
-
-
6.3.2 随机接入协议(Random access protocols)
-
Slotted ALOHA
-
当节点有一个新帧要发送时,它等到下一个时隙开始时传输该帧
-
如果没有碰撞,则该帧传输成功
-
如果有碰撞,那么节点会在时隙结束前检测到此次碰撞。
-
每当检测到碰撞时,节点以概率p在后续的每个时隙中重传该帧,直到成功传输
-
时隙ALOHA的最大效率
-
假设有N个节点,则给定一个时隙是成功时隙当且仅当一个节点传输而其他节点不传输
-
一个给定节点成功传送的概率为p(1-p)^(N-1),N个节点任意一个成功的概率为Np(1-p)^(N-1)
-
当p=1/N时,Np(1-p)^(N-1)取到最大值
-
当N趋近正无穷时,计算得最大效率为1/e
-
-
-
Pure (unslotted) ALOHA
-
与时隙ALOHA的区别:当帧到达时立即以概率p重传(不用等到下一个时隙开始)
-
最大效率计算
-
取帧传输时间为一个时间单元,假设一个帧在t时刻开始传输
-
该帧成功传输的条件是:在时间间隔[t-1, t]和[t, t+1]中,没有其他节点开始传输
-
因此给定节点的成功传输概率为p(1-p)^(2(N-1))
-
经过同样的计算,得到最大效率为1/(2e)
-
-
-
CSMA (carrier sense multiple access)(载波侦听多路访问)
-
listen before transmit
-
载波侦听多路访问(CSMA/CD)
-
一个节点在传输之前先听信道。如果信道空闲,则开始传输
-
如果来自另一个节点的帧正向信道上发送,那么节点等待。直到检测到一小段时间内信道空闲,再开始传输
-
-
碰撞检测(collision detection)
-
当一个节点传输时,一直侦听此信道
-
如果检测到另一个节点正在传输干扰帧,它就停止传输
-
在重复“侦听-当空闲时传输”循环之前,等待一段随机时间
-
-
当所有节点都进行载波侦听时,仍然会发生碰撞的原因
-
在时刻t,节点A侦听到信道空闲,发送一个帧
-
在时刻t+∆t,该帧尚未到达节点B。因此节点B侦听到信道空闲并发送一个帧
-
又经过一段时间后,A、B两节点的传输开始互相干扰
-
总结:广播信道的端到端信道传播时延越长,节点侦听不到其他节点已经开始传输的概率就越大
-
-
-
具有碰撞检测的载波侦听多路访问(CSMA/CD)
-
如果节点在传输时检测到干扰帧,那么它等待一个随机时间量,然后再次载波侦听和传输
-
二进制指数后退算法
-
当一个帧经历一连串的n次碰撞后,节点随机地从{0, 1, ..., 2^n-1}中选择一个K值
-
对于以太网,节点等待的实际时间量为K*512比特时间
-
a比特时间:a比特进入以太网所需的时间量
-
-
-
-
6.3.3 Taking turns” MAC protocols
-
轮询协议
-
定义
-
指定一个节点作为主节点,主节点以循环的方式轮询每个节点
-
-
轮询过程
-
主节点首先向节点1发送报文,告诉它能传输的帧的最大数量。
-
在节点1传输完一些帧后,主节点向节点2发送类似的报文,依次类推
-
-
-
缺点
-
引入了轮询时延,即通知一个节点“它可以传输”所需的时间
-
如果主节点有故障,那么整个信道都变得不可操作
-
-
例子:蓝牙协议(7.3.6节)
-
令牌传递协议
-
定义
-
用令牌(一个小的特殊帧)在节点之间以固定的次序进行交换
-
当一个节点收到令牌时,如果它有一些帧要发送,那么它发送最大数目的帧数,然后把令牌转发给下一个节点
-
如果该节点没有帧要发送,那么它立即向下一个节点转发令牌
-
-
存在的问题
-
一个节点的故障会可能会使整个信道崩溃
-
如果一个节点忘记释放令牌,那么必须调用某些恢复步骤使令牌返回到循环中来
-
-
-
-
6.3.4 用于电缆因特网(Cable access network)接入的链路层协议:数据经电缆服务接口规范(DOCSIS)
-
一个电缆接入网通常在电缆网头端将几千个住宅电缆调制解调器与一个电缆调制解调器端接系统(CMTS)连接
-
DOCSIS使用FDM将下行(CMTS到调制解调器)和上行(调制解调器到CMTS)网络段划分为多个频率信道
-
对于下行信道,因为仅有单一的CMTS在传输,所以不存在多路访问问题。但上行信道可能会出现碰撞
-
处理上行信道中碰撞的方法
-
使用TDM划分上行信道。每个时间间隔包含一个微时隙序列。
-
如果某个调制解调器需要向CMTS发送数据,那么它可以在每个时间间隔的一组特定微时隙内向CMTS发送请求。
-
CMTS收到请求帧后,通过下行信道发送报文,告诉该调制解调器可以在某些微时隙内传输数据
-
如果多个请求帧发生了碰撞,那么对应的调制解调器会收不到CMTS的回复,从而使用二进制指数回退延缓请求帧的发送
-
Summary of MAC protocols
-
channel partitioning, by time, frequency or code
-
Time Division, Frequency Division
-
-
random access (dynamic),
-
ALOHA, S-ALOHA, CSMA, CSMA/CD
-
carrier sensing: easy in some technologies (wire), hard
-
in others (wireless)
-
CSMA/CD used in Ethernet
-
CSMA/CA used in 802.11
-
-
taking turns
-
polling from central site, token passing
-
Bluetooth, FDDI, token ring
-
-
-
-
-
-
6.4 LANs
-
32-bit IP address: network-layer address for interfaceused for layer 3 (network layer) forwarding
-
48 bit MAC address (for most LANs) burned in NIC ROM, also sometimes software settable
-
each adapter on LAN has unique LAN address
-
MAC address allocation administered by IEEE
-
6.4.1 LAN addresses
-
MAC地址(LAN地址、物理地址)
-
任意两块适配器的MAC地址都不相同
-
MAC地址是固定的,不随位置变化而变化
-
-
地址解析协议(ARP)
-
用途:将一个IP地址解析为MAC地址(ARP只为同一个子网上的主机和路由器接口解析IP地址)
-
工作方式
-
每台主机或路由器在其内存中具有一个ARP表,包含某IP地址到其MAC地址的映射
-
如果发送主机要寻址的目标IP位于其ARP表中,那么可以直接从表中得到目标MAC地址
-
如果目标IP地址不在ARP表中,那么发送方广播一个ARP分组
-
ARP分组具有几个字段,包括发送和接收的IP地址及MAC地址
-
发送方填写除接收方MAC地址以外的其他字段,然后广播该ARP分组
-
接收方收到ARP分组后,发现自身的IP地址与ARP的目标IP地址匹配,于是向发送方回复一个响应ARP分组
-
发送方收到回复,得到了接收方的MAC地址
-
-
-
发送数据报到子网以外
-
当发送方要寻址的目标IP不在其子网中时,数据报中填写的MAC地址应该是其第一跳路由器的MAC地址
-
路由器收到该帧后,会先把它传递到路由器的网络层,然后查询其转发表(网络层协议),把数据报向目的地转发
-
-
-
6.4.2 以太网(Ethernet)
-
以太网帧结构(Ethernet frame structure)
-
数据字段(data)
-
该字段承载IP数据报
-
以太网的*最大传输单元*(MTU)是1500字节。如果IP数据报超过了MTU,那么主机需要将数据报分片
-
数据字段的最小长度是46字节。长度不足的IP数据报必须被填充到46字节
-
-
源/目的地址(addresses)
-
类型字段(type):该字段允许以太网复用多种网络层协议
-
CRC:循环冗余检测字段用于检测差错
-
前同步码(preamble):用于“唤醒”接收适配器(告知以太网帧的到来),并同步发送方和接收方的时钟
-
-
以太网的特性
-
无连接服务:发送帧之前不握手
-
不可靠服务:接收方执行完CRC校验之后,不会发生确认帧或否定确认帧
-
-
以太网技术:传输速率和物理媒体的历史演变
-
-
6.4.3 Ethernet switch
-
交换机对其子网中的主机和路由器来说是透明(transparent)的。即主机/路由器之间传输帧时,它们并不知道存在着一个交换机将转发该帧
-
交换机转发和过滤
-
交换机表的结构
-
MAC地址
-
通向该MAC地址的交换机接口
-
表项放入表中的时间
-
-
转发和过滤的工作过程
-
当交换机从接口x收到一个帧时,交换机取出帧的目标MAC地址
-
如果该MAC地址不在交换机表中,那么交换机向所有接口(除接口x外)广播该帧
-
如果该MAC地址在交换机表中,那么根据该地址从表中索引出对应的接口y
-
如果y与x是同一个接口,那么丢弃该帧(过滤)
-
否则交换机向接口y转发该帧(转发)
-
-
-
-
交换机的性质
-
自学习
-
交换机表初始为空
-
对于每个入帧,交换机在表中储存:该帧的源MAC地址、到达的接口、当前时间
-
如果一段时间后,交换机没有收到以该地址为源地址的帧,就从表中删除该表项
-
-
即插即用:不需要网络管理员或用户的干预
-
消除碰撞
-
交换机缓存帧,并且不会在网段上同时传输多于一个帧
-
因此,交换机的最大聚合带宽是其所有接口速率之和
-
-
异质的链路:交换机将链路彼此隔离,因此局域网中的不同链路能够:1. 以不同的速率运行 2.在不同的媒体上运行
-
便于管理
-
如果一个适配器工作异常并持续发送以太网帧,那么交换机能够检测到该问题,并且在内部断开异常适配器
-
交换机能够收集带宽使用的统计数据、碰撞率和流量类型,并使这些信息为网络管理者所用
-
-
-
交换机和路由器的比较
-
相同点
-
都是存储转发分组交换机
-
都使用“匹配加动作”的通用范式(4.4节)
-
-
不同点:交换机( link-layer devices )位于第二层,使用MAC地址转发分组;而路由器(network-layer devices)位于第三层,使用IP地址转发分组
-
优点和缺点
-
交换机
-
优点1:即插即用
-
优点2:具有相对高的分组过滤和转发速率。原因如下:1. 交换机必须处理高至二层的帧,而路由器必须处理高至三层的帧。2. 为了防止广播帧的循环,交换网络的活跃拓扑被限制为一棵生成树。3. 一个大型交换网络要求主机/路由器中有很大的ARP表,这将产生可观的ARP流量和处理量
-
缺点:交换机对广播风暴不提供任何保护措施。即当一台主机出了故障并传输没完没了的以太网广播帧流时,交换机将转发所有这些帧,使得整个以太网崩溃
-
-
路由器
-
优点1:分组不会通过路由器循环。因为网络寻址通常是分层次的 ,所以不会由于冗余路径而导致循环(即使路由器表被误配置,IP数据报也可以通过TTL字段来限制循环)
-
优点2:分组不会被限制到一棵生成树上,并可以使用源和目的地之间的最佳路径。所以它们允许以丰富的拓扑结构来构建因特网
-
优点3:对第二层的广播风暴提供了防火墙保护
-
缺点1:不是即插即用的,需要人为地配置IP地址
-
缺点2:路由器对每个分组的处理时间通常比交换机长,因为它们必须处理高至三层的字段
-
-
-
-
流行的互联设备(集线器、交换机、路由器)的特色比较
-
适用场景
-
几百台主机组成的小网络:交换机
-
几千台主机组成的更大网络:路由器
-
-
-
6.4.4 虚拟局域网(VLAN)
-
Port-based VLAN
-
网络管理员把一个交换机的端口划分为多个组,每个组构成一个VLAN
-
交换机软件仅在属于相同VLAN的端口之间交付帧
-
当两个VLAN之间需要通信时,可以将两个VLAN分别与一台外部路由器相连,使数据报从一个VLAN经过路由器到达另一个VLAN
-
VLAN干线连接:互联VLAN交换机
-
每台交换机上的一个特殊端口被配置为干线端口。可以用一条干线链路连接两个交换机的干线端口
-
假设有多个VLAN,以及两台交换机A和B。每个VLAN都有一些端口在A上,另一些端口在B上
-
干线端口属于所有VLAN。即在任意一个VLAN中,从A中端口发到B中端口的帧都会经过干线链路
-
跨越VLAN干线的帧格式:802.1Q,用于使干线端口得知该帧属于哪个VLAN
-
-
-
-
-
6.5 link virtualization: MPLS
-
多协议标签交换(MPLS)
-
对于一个MPLS加强的帧,它有一个MPLS首部。该首部位于链路层首部和网络层首部之间
-
因此,这类帧只能在两个均为MPLS使能的路由器(标签交换路由器)之间发送
-
MPLS首部中有一个“标签”字段。标签交换路由器将根据入帧的标签进行转发,并更新该帧的标签
-
MPLS能被用于实现虚拟专用网(VPN)。它把网络隔离为两部分:一部分是由用户的VPN使用的资源和寻址方式,另一部分是其他用户的资源和寻址方式
-
-
-
6.6 data center networking
-
负载均衡(load balancer)
-
负载均衡器根据数据中心的各台主机的负载,向合适的主机分发外部客户的请求
-
主机处理完请求后,向负载均衡器回送响应,再由负载均衡器中继给外部客户
-
负载均衡器还提供类似NAT的功能,将外部IP地址转换为内部适当主机的IP地址
-
-
路由器和交换机等级结构
-
未来发展趋势
-
全连接拓扑:用来代替路由器和交换机等级结构
-
每台第一层交换机都与所有第二层交换机相连
-
于是任意两台第二层交换机之间有n条不相交路径,可以改善主机到主机的容量
-
-
模块化数据中心
-
构建一个包含数千台主机的“迷你数据中心”,装在一个集装箱内
-
多个集装箱彼此互联,紧密地排列在机架上
-
当一个集装箱中,许多组件的性能下降到低于某个阈值时,整个集装箱会被移除
-
-
-