计算机网络
2023-08-30 22:23:55 0 举报
AI智能生成
登录查看完整内容
计算机网络全书思维导图
作者其他创作
大纲/内容
分支主题
节点和边之间的关联关系
网络
联网的计算机所构成的系统
主机连接到互联网的链路(和方的有关的链路)
接入网链路
路由器间的链路(圆的接在一起)
主干链路
将各种节点连在一起
性能指标:带宽(bps)=传输速度
通信链路
电脑,手机,web服务器,联网的冰箱等等
是源,也是目标
主机节点(方形)(端系统=主机)(end system\\host)
工作在网络层
路由器(圆的)
对等层实体在通信过程中应该遵守的规则的集合,包括语义、语法和时序
TCP、IP、HTTP、FTP、PPP
协议定义了在两个或者多个通信实体之间交换的报文格式(语法、语义)和次序,以及在报文传输和/或接受或者其他事件方面所采取的动作
控制发送、接受信息
协议
工作在链路层
交换机(方的)
中继器
既不是源也不是目标,是数据的中转节点
数据交换节点(圆形)
节点
计算机网络
以TCP协议和IP协议为主的一簇协议来支撑工作的网络(是计算机网络的一种)
网络的网络,一堆网络通过网络互联设备连在一起的网络
公共网Internet vs 专用intranet
Web、VoIP、email、分布式游戏、电子商务、社交网络
使用通信设施进行通信的分布式应用
将发送和接受数据的apps与互联网连接起来
无连接不可靠服务(UTP)
面向连接的可靠服务(TCP ip)
为app应用提供服务选择,类似于邮政服务
通信基础设施为apps提供编程接口(通信服务)
从服务的角度:互联网是分布式应用以及为分布式应用提供通讯的基础设施(基础设施为应用进程提供服务的形式是API,分布式应用是网络存在的理由,应用层以下都是基础设施)
互联网
REC文档在IEFT上发布
协议通过RFC格式发布,一个协议可能涉及很多RFC文档
RFC:request for comments
IETF: internet engineering task force(互联网工程任务组)
Internet·标准
主机
(主机上的)应用程序(客户端和服务器)(边缘系统的网络应用是网络存在的理由)
网络边缘(edge)
网络的网络
互联着的路由器
把所有的边缘节点接在一起,让任意两个端系统可以相互通信(数据交换)
网络核心(core)
有线或者无线通信链路
把边缘接入到网络核心
接入网、物理媒体(access)
结构图
网络结构
1.1什么是Internet
在“网络的边缘”
运行应用程序,如Web、email
端系统(主机)
如Web浏览器/服务器:email客户端/服务器
服务端为主,有所有资源的客户端为从,它请求的资源都来自服务端(比如发送电子邮件,我的电子邮件的应用是客户端,是这种应用的客户端,电子邮件的服务器是服务端)(客户端是主动的,服务器是被动的,服务器必须对客户端有所反应)(客户端后运行,服务端先运行)
客户端向服务器请求、接收服务
存在可扩展性问题和可靠性问题
客户/服务器(C/S)模式
如Gnutella、kaZaA、EMule
很少(甚至没有)专门的服务器
每个节点既是客户端又是服务器
可扩展性强,分布式通信
对等(peer-peer)模式(P2P)
模式
在端系统之间传输数据,中间的路由器不用维护主机间的通信关系
目标
在数据传输之前做好准备
握手
Internet上面面向连接的服务
确认和重传
可靠:不重复、不丢失、不出错、不失序
可靠地、按顺序地传送数据
发送方不会淹没接收方
流量控制
当网络拥塞时,发送方降低发送速率
拥塞控制
特性
TCP服务(RFC 793)
HTTP(Web)、FTP(文件传送)、TeInet(远程登录)、SMTP(email)
应用
TCP-传输控制协议(Transmission Control Protocol)
采用网络设施的面向连接服务
在端系统之间传输数据
无连接服务
不握手,直接发送
无连接
不可靠数据传输
无流量控制
无拥塞控制
实时多媒体/流媒体、远程会议、DNS、Internet电话、查询
UDP-用户数据报协议(User Datagram Protocol)
采用基础设施的无连接服务
服务
1.2 网络边缘
路由器的网状网络
为每个呼叫预留一条专有电路:如电话网
独享资源:不共享
每次呼叫一旦建立起来就能够保证性能
如果呼叫没有数据发送,被分配的资源就会被浪费
如果某次呼叫没有数据,则其资源片处于空闲状态
为呼叫分配片
端到端的资源被分配给从源端到到目标端的呼叫叫“call”
频分复用(Frequency-division-multiplexing)
时分复用(Time-division-multiplexing)
波分复用(Wave-division-multiplexing)
网络资源(如带宽)被分成片
连接建立时间长
计算机之间的通信有突发性,如果使用电路交换,则浪费的片较多
即使这个呼叫没有数据传递,所占据的片也不能被别的呼叫使用
原因
电路交换不适合计算机之间的通信
电路交换
分组:将要传送的数据分成一个个单位
将分组从一个路由器传到相邻路由器(hop),一段段最终从源端传到目标端
每段:采用链路的最大传输能力(带宽)
网络带宽资源不再分位一个个片,传输时使用全部带宽
在转发之前,节点必须收到整个分组
在传输到下一个链路之前,整个分组必须到达路由:存储-转发
延迟比电路交换(线路交换)要大
分组就会排队,等待传输
如果路由器的缓冲用完了,分组就会被抛弃
如果到达速率>链路的输出速率:
排队时间
存储-转发:分组每次移动一跳(hop)
资源共享,按需使用
随机划分时间片,没有固定模式(电路交换的TDM时间划分是固定的)
统计多路复用(特殊的时分)
允许更多的用户使用网络
不要维护主机之间的通讯关系
无连接(在通信之前无需建立起一个连接,有数据就会传输)
路由器根据分组的目标地址进行路由
分组的目标地址决定下一跳
每一次分组都单独路由(路径不一样,可能失序)
在不同阶段,路由可以改变
类似:问路
数据报网络
要维护主机之间的通讯关系
有连接,网络层的连接(在呼叫建立时决定路径,在整个呼叫中路径保持不变)
每次分组都带有标签(虚电路标识 VCID),标签决定下一跳
路由器维持每一个呼叫的状态信息
虚电路网络
分组方式(按照有无网络层的连接)
分组交换
适合对突发式数据传输
资源共享
简单,不用建立呼叫
分组交换是“突发数据的胜利者”
对可靠地数据传输需要协议来约束:堵塞控制
分组交换过度使用会造成网络堵塞:分组延时和丢失
保证音频/视频应用需要的带宽
电路交换服务
预约服务(线路交换)vs 按需服务(分组交换)
分组交换 vs 电路交换
基本问题:数据怎样通过网络进行传输
路由算法
决定分组采用的源到目标的路径
路由(全局)routing
查路由表决定怎么走
将分组从路由器的输入链转到输出链路
转发(局部)forwarding
核心功能
FDM(好像跑道)
TDM(好像跳大绳,一人一过)
WDM
电路交换网络
分组交换网络
网络的分类
1.3网络核心
56Kbps的速率直接接入路由器(通常更低)
不能同时上网和打电话;不能总是在线
拨号调制解调器(modulate-demodulate)
调频
调幅
调相位
综合调剂
将上网数据调制加载音频信号上,在电话线上传输,在局端将其中的数据解调出来;反之亦然
modem
越往上越是光纤,越往下越是同轴电缆
有线电视信号线缆双向改造
数字电视和上网数据(上下行)
FDM:在不同的频段传输不同信道的数据
非对称:最高30Mbps的下行传输速率,2Mbps上行传输速率
混合光纤同轴电缆 HFC(hybrid fiber coax)
线缆和光纤网络将各个家庭用户接入到 ISP(因特网服务提供商)路由器
与DSL不同,DSL每个用户一个专用线路到CO(central office)(中心局,电话总局)
各用户共享到线缆头端的接入网络
线缆网络(电视)
电缆模式(电视)
光纤到户
FTTH
DSL线路上的数据被传到互联网
DSL线路上的语音被穿到电话网
采用现存的交换局DSLAM的电话线
2.5 Mbps上行传输速率(typically < 1 Mbps)
24 Mbps下行传输速率(typically < 10 Mbps)
DSL(digital subscriber line)用户数字电路,电话服务
家庭网络
住宅接入网络
10 Mbps,100Mbps,1Gbps,10Gbps传输率
现在,端系统经常直接接到以太网交换机上
经常被企业或者大学等机构采用
Ethernet(以太网)
802.11b/g(WiFi):11,54 Mbps传输速率
无线局域(WLAN)
以基站位中心(base station)
(由电信运营商提供)cellular:蜂窝网
通信距离:10-20km
1-10 Mbps
3G,4G,LTE
无线广域
各无线端系统共享无线接入网络(端系统到无线路由器)-------通过基站或者叫接入点
无线接入网络
单位接入网络(学校,公司)
怎样将端系统和边缘路由连接(从历史角度分类)
接入网
看得见摸得着
传送得更远
5类:100Mbps以太网,Gbps千兆以太网
6类:10Gbps万兆以太网
两根绝缘铜导线拧合
屏蔽双绞线
非屏蔽双绞线
分类
双绞线(twisted pair)TP
两根同心的铜导线
双向
共享的媒介
电缆上一个单个通道
Ethernet
基带电缆
电缆上有多个通信信号
HFC
宽带电缆
同轴电缆(coaxial cable)
光脉冲,每个脉冲表示一个bit,在玻璃纤维中传输
点到点的高速传输(如10 Gbps-100Gbps传输速率)
高速(带宽极宽)
在两个中继器之间有很长的距离,不受电磁噪声干扰
低误码率
安全
光缆(fiber optic cable)
同轴电缆、光纤、双绞线
信号沿着固体媒介被导引
导引型媒体(guided media)
开放的空间传输电磁波或者光信号,在电磁波或者光信号中承载数字数据
反射
吸收
干扰
传播环境效应(传输过程受干扰)
无需物理”线缆“
地面微波
WiFi
WLAN(无线局域网)
蜂窝(cellular)
wide-area
kbps-45Mbps每个通道(或者多个聚集通道)
270msec 端到端延迟
同步静止卫星和低轨卫星
卫星
类型
非导引型媒体(unguided media)
连接每个发送-接收对之间的物理媒体
定义
物理媒体
1.4 接入网和物理媒介
住宅、公司、学校的ISPs
端系统通过接入ISPs(Internet Service Providers)连接到网络
因此任何两个端系统可互相发送分组到对方
接入ISPs相应的必须是互联的
发展和演化是通过经济的和国家的政策来驱动的
导致的”网络的网络“非常复杂
让我们采用渐进方法来描述当前互联网的结构
互联网的结构:网络的网络
例如:Level 3、Sprint、AT&T、NTT
国家或者国际的覆盖
”tier-“commercial ISPs(商业ISPs)
例如:Google
将它们的数据中心接入ISP,方便周边用户访问;通常私有网络之间用专网绕过第一层ISP和区域ISPs
content provider network(内容提供商网络)
在网络的最中心,一些为数不多的充分连接的大范围网络(分布广、节点有限、但是很多之间有着多重连接)
不可扩展(Scalability)
需要n平方复杂度的连接
将每两个ISPs直接相连
1.全连接
客户ISPs和提供者ISPs有经济合约
2.将每个接入ISP都连接到全局ISP(global ISP)(全局范围内覆盖)
竞争:但是,如果全局ISP是可行的业务,就会有竞争者(有利可图就有竞争者)
合作:通过ISP之间的合作可以完成业务的扩展,会有互联,对等互联的结算关系
access net:接入网--------peering link:互联-----------Internet exchange point:互联网交换点
3.合作&竞争
regional net:区域网
4.细分:业务会有细分(全球接入和区域接入),区域网络将出现,用于将接入ISPs连接到全局ISPs
例如:Google、Microsoft、Akamai
会构建它们自己的网络,将它们的服务、内容更加靠近用户端,向用户提供更好的服务,减少自己的运营支出
也要接入ISP
5. 内容提供商网络(Internet Content Provider)ICP
发展过程
总结
给定数百万接入ISPs,如何将它们互联到一起
通过peer或者IXP相连接
直接与其他第一层ISP相连
与大量的第二层ISP和其他客户网络相连
与一个或者多个第一层ISPs,也可能与其他第二层ISP相连
第二层ISP:更小一些的(通常是区域性的)ISP
接入网(access net)(与端系统最近)或者本地ISP(local ISP)
第三层ISP与其它本地ISP
一个分组要经过许多网络
最后接入终端
结构:松散的层次结构
很多内容提供商(如:Google、Akamai)可能会部署自己的网络,连接自己的在DC(数据中心),走自己的数据
连接若干local ISP和各级(包括一层)ISP,更加靠近用户
经济考虑:少付费----------用户体验考虑:更快
ICP
例如:一个低层ISP接入多个高层ISP,多宿(multi home)
高一层ISP面向客户网络的接入点,涉及费用结算
POP
两个ISP对等互接,不涉及费用结算
对等接入
多个对等ISP互联互通之处,通常不涉及费用结算
IXP
ICP自己部署专用网络,同时和各级ISP连接
ISP之间的连接
1.5 Internet结构和ISP
分组到达链路的速率超过了链路输出的能力
延迟:分组等待排到队头,然后再传输
延迟:传输也有时间
丢失:可用的缓冲区有限---------分组到达时,如果没有可用的缓冲区,则该分组被丢掉
在路由器缓冲区的分组列队的时候
检查bit级错误
检查分组首部和决定将分组导向何处
节点处理 延时
在输出链路上等待输出的时间
依赖于路由器的拥塞程度
R=链路宽度(bps)
L=分组长度(bits)
a=分组到达队列的平均速率(单位时间内到达的分组数)
平均排队延时很小(到的速度小,出的速度大)
La/R~0
延时变得很大
La/R->1
比特到达队列的速率超过了从该队列输出的速率,平局排队延时趋向无穷大
La/R>1
流量强度=La/R
设计系统时,流量强度不能大于1!
排队 延时
R=链路带宽(bps)
将分组发送到链路上的时间=L/R
存储转发延时
传输 延迟
d=物理链路的长度
s=在媒体上的传播速度(~2x10^8 m/sec)
传播延时=d/s
传播延时
WAN
LAN
上述延时可用车队类比
四种分组延时
处理时延影响吞吐量
每一跳延时时间
延时
例如:traceroute:gaia.cs.umass.edu to www.eurecom.fr
提供从源端,经过路由器,到目的地的延时测量
Traceroute诊断程序
链路的队列缓冲区容量有限
当一个分组到达一个满的队列时,给分组将会丢失
以太网不提供上一节点重传服务(主要看链路认为自己是否可靠,以太网认为自己的底层很可靠,所以没有重传机制;wifi、无线链路认为自己的底层不可靠,所以提供重传机制)
通过UDP放出去的分组,源端系统也不会重传(TCP会重传)
只有应用层会发起重传,网络层和链路层没有重传机制
丢失的分组可能会被前一个节点或源端系统重传,或根本不重传
丢失
分组丢失和延时是怎样发生的
在一个时间点的速率
瞬间吞吐量
在一个长时间内的平均值
平均吞吐量
指A到B,单位时间内传输出去,对方能够收到的有效输出量
取决于Rs---------取决于RC(吞吐量)
端到端路径上,限制端到端吞吐的链路
瓶颈链路
多链路
在源端和目标端之间传输的速率(数据量/单位时间)
吞吐量(性能指标之一)
1.6 分组延时、丢失和吞吐量
网络功能繁杂:数字信号的物理承载、点到点、路由、rbt、进程分区、应用等
路由器
各种媒体的链路
硬件、软件
现实来看,网络的许多构成元素和设备
将网络复杂的功能,分为功能明确的层次,每一层实现了其中一个或一组的功能,功能中有其上层可以使用的功能:服务(服务是功能的一部分)
协议及协议的功能:本层协议实体互相交互,执行本层的协议动作,目的是实现本层功能,通过接口为上层提供更好的服务
协议的实现方式:在实现本层协议的时候,直接利用了下层所提供的服务
协议是对等的水平关系,服务是垂直的关系
借助下层服务实现本层协议实体之间交互带来的新功能(上层可以利用)+更下层所提供的服务
本层服务
层次化方式实现复杂网络功能
问题是:如何组织和实现这个功能复杂的网络功能
网络是一个非常复杂的系统
服务提供者(Service provider)
服务用户(Service user)
低层实体向上层实体提供它们之间的通信能力
服务(Service)
下层使用下层服务的形式,高层使用低层提供的服务,以及下层向高层提供服务都是通过服务访问原语来进行交互的-----形式
就是提供服务的形式(到底需要什么服务)
原语(primitive)
例子:邮箱
下层的一个实体支撑着上层的多个实体,SAP有标志不同上层实体的作用
地址(address)
用于下层的服务提供者,区分不同的上层用户,传递信息
例子:传输层的SAP:端口(port)
上层使用下层提供的服务通过层间的接口-------地点
服务访问点SAP(Service Access Point)
服务和访问点
两个通信实体为进行通信而建立的一种结合
连接(Connection)
建立连接、通信、拆除连接
过程
网络层的连接被成为虚电路
TCP
例子
适合大的数据块的传输,不适合小的零星报文
适用范围
保守
特点
传送页面(可靠的获得,通过接收方的确认)
可靠的数据流
远程登录
可靠的字节流
数字化声音
不可靠的连接
服务类型
面向连接的服务(Connection-oriented Service)
两个对等层实体在通信前不需要建立一个连接,不预留资源;不需要通信双方都是活跃的(例:寄信)
不可靠
可能重复
可能失序
IP分组,数据包
UPD
适合传输零星数据
电子方式的函件
不可靠的数据报
挂号信
有确认的数据报
信息查询
请求回答
无连接的服务(Connectionless Service)
服务的类型(服务的形式)
服务(Service):低层实体向上层实体提供它们之间的通信的能力,是在SAP上通过原语(primitive)来操作(SAP告诉向哪个上层提供服务,原语告诉提供什么服务),垂直
协议(protocol):对等层实体(peer entity)之间互相通信的过程,需要遵循的规则的集合,水平
服务和协议的区别
本层协议的实现要靠下层提供的服务来实现
本层实体通过协议为上层提供更高级的服务
服务和协议的联系
1对多的关系:上层发送的SDU太大了,在下层拆解成几个小的SDU
多对1的关系:上层发送了很多非常小的SDU,下层将它们组合
1对1的关系:理想,非常好的状态
上层要传的数据对于本层来说是SDU(服务数据单元),本层的SDU加上头部信息就是PDU(协议数据单元),头部信息有一部分是ICI转换过去的,有一部分是本层附加上去的
数据单元(DU )
分层参考模型
结构清晰,便于标识网络组件,以及描述其互相关系
概念化
对于其他层次而言是透明的(指不可见)
改变某一层次服务的实现不影响系统中的其他层次
改变两个秘书使用的通信方式不影响2个翻译的工作
改变两个翻译使用的语言也不影响上下2个层次的工作
如改变登记程序并不影响系统的其他部分
模块化更易于维护和系统升级
结构化(化繁为简)
效率比较低
分层思想被认为有害的地方
分层处理和实现复杂系统的好处
为人类用户或其他应用进程提供网络应用服务
FTP、SMTP、HTTP、DNS
应用层可以在传输层所提供的服务的基础上,完成应用报文和应用报文之间的交互,完成以后想干嘛干嘛
应用层:网络应用(报文message)
在网络层提供的端到端通信的基础上,细分为进程到进程,将不可靠的通信变成可靠的通信
TCP、UDP
传输层在网络层之上,在网络层主机到主机的服务的基础之上,完成进程到进程的区分,并把网络层所提供的不可靠的通信服务变成可靠的通信服务
可靠:不出错,不重复、不丢失、不失序
传输层:主机之间的数据传输(报文段segment)
主机主机之间的通信,端到端通信不可靠
IP(做转发)、路由协议(做路由)
重要的两个功能:转发(局部)和路由(全局)
在链路层所提供的,在相邻两点间数据传输的基础之上,传输以分组为单位的端到端的数据传输(源主机到目标主机)E2E(end system to end system)
网络层:为数据报从源到目的地选择路由(分组packet/datagram数据报)
点对对协议PPP、802.11(WiFi)、Ethernet
在物理层所提供的服务的基础上,在相邻的两点之间传输以帧为单位的数据(P2P point to point)
链路层:相邻网络节点间的数据传输(帧frame)
把数字数据转换成物理信号,承载在媒体之上,从一点传到相邻的另外一点,对方的物理层再将接收到的物理信号反转回数字信号
完成相邻两点之间bit的传输
物理层:在线路上传送bit
Internet协议栈(从下而上理解)
通常链路层和物理层封装在网卡中,链路层协议和物理层协议是配套的
例如:加密、压缩、机器相关的表示转换
允许应用解释传输的数据
表示层
数据交换的同步,检查点,恢复
会话层
这些服务,如果需要的话,必须被应用层实现
互联网协议栈没有上述两层
ISO/OSI参考模型(ISO国际标准化组织----提出-----OSI开放系统互联
在源端做一个大的封装,到交换机的时候两层解封装再封装,到路由器的时候三层解封装再封装,到目标主机完成一个大的解封装
报文(message)
应用层
报文段(segment):TCP段、UDP段
传输层
分组(packet)(如果无线连接:数据报datagram)
网络层
帧(frame)
链路层
位(bit)
物理层
各层次的协议数据单元PDU
1.7 协议层次服务模型
Internet
什么是协议
分组交换vs电路交换
网络边缘、核心、接入网络
Internet/ISP结构
性能:丢失、延时、吞吐量、速率带宽
层次模型和服务模型
小结
端系统(包括应用)+接入网
边缘
核心:网络交换设备+通信链路
格式,次序、动作;语义、语法、时序
协议:对等层的实体通信过程中遵守的规则的集合
从组成角度看 什么是互联网
应用层、传输层、网络层、数据链路层、物理层
协议数据单元:报文(message)、报文段(segment)、分组(packet)、帧(frame)、位(bit)
为了实现复杂的网络功能,采用分层方式设计、实现和调试
提供的通信服务:面向连接、无连接
通信服务基础设施
从服务的角度 看互联网
C/S模式
P2P模式
应用之间的交互
小结1
数据交换
比较 线路交换和分组交换
虚电路
数据报
分组交换的2种方式
ADSL、拨号、cable modem
住宅
以太网
单位
无线接入方式
接入网技术
光纤、同轴电缆、以太网、双绞线
物理媒介
接入网和物理媒介
ISP层次模型
小结2
延迟的组成:处理、排队、传输、传播
分组交换网络延迟和丢失是如何发生的
分层体系结构
协议数据单元
封装与解封转
网络的分层体系结构
小结3
第一章 概论
在不同的端系统上运行
通过网络基础设施提供的服务,应用进程彼此通信
Web服务器软件与浏览器软件通信
如Web
编程
网络核心没有应用层功能
网络应用只在端系统上存在,快速网络应用开发和部署
网络核心中没有应用层软件
创建一个新的网络应用
一直运行
固定的IP地址和周知的端口号(约定)
数据中心进行扩展
扩展性差
扩展性:服务器场
服务器
主动与服务器通信
与互联网有间歇性的连接
可能是动态的IP地址
不直接与其他客户端通信
客户端
随着访问用户的增加,性能达到一定阈值之后,会急剧性的下降
可扩展性比较差
可靠性比较差
客户-服务器模式(C/S:client/server)
(几乎)没有一直运行的服务器
任意端系统之间可以进行通信
新peer节点带来新的服务能力,当然也带来新的服务请求
自扩展性
每一个节点既是客户端又是服务器
难管理
参与的主机间歇性连接且可以改变IP地址
例如:GnutElla、迅雷
对等模式(P2P:Peer To Peer)
主机在中心服务器上注册其资源
主机向中心服务器查询资源位置
文件搜索:集中
任意peer节点之间
文件传输:P2P
Napster
当用户上线时,向中心服务器注册其IP地址
用户与中心服务器联系,以找到其在线好友的位置
在线检测:集中
两个用户之间的聊天:P2P
即时通信
混合体:客户-服务器和对等体系结构
网络应用的体系结构(按照应用进程和应用进程的沟通方式来看)
在主机上运行的应用程序
进程
发起通信的进程
客户端进程
等待连接的进程
服务器进程
在同一个主机内,使用进程间通信机制通信(操作系统定义)
使用OS提供的通信服务
借助传输层提供的服务
按照通信协议交换报文
不同主机,通过交换报文(Message)来通行
注意:P2P架构的应用也有客户端进程和服务器进程之分
进程通信
仅仅有IP地址不能够唯一的标示一个进程,在一台端系统上有很多应用进程在运行
主机:唯一的32位IP地址
所采用的传输层协议:TCP or UDP
端口号(Port Numbers)(16个bit)
进程为了接收报文,必须有一个标示,即SAP(发送也需要标示)
HTTP:TCP 80 Mail:TCP25 ftp:TCP 2
一些知名端口号的例子
一个进程:用IP+port标示 端节点
本质上,一些主机进程之间的通信由2个端节点构成
IP地址+TCP/UDP端口号
解决方法
问题一:进程标示和寻址问题(服务客户)
位置:层间界面的SAP(TCP/IP:socket)
形式:应用进程接口API(TCP/IP:socket API)
问题二:传输层-应用层提供服务是如何(服务)
要传输的报文(对于本层来说:SDU)
谁传的:对方的应用进程的标示:IP+TCP/UDP 端口号
传给谁:对方应用进程的标示:IP+TCP/UDP 端口号
层间接口必须携带的信息
源端口号,目标端口号,数据等
将IP地址往下交IP实体,用于封装IP数据报:源IP、目标IP
传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装
如果Socket API每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理
用一个代号标示通信双方或者单方:socket(socket 就是一个整数)
对句柄的操作,就是对文件的操作
就像OS打开文件返回的句柄一样
两个进程通信会持续一段时间,通信关系稳定
TCP服务,两个进程之间的通信前,要建立连接
可以用一个整数表示两个应用实体之间的通信关系,本地标示
穿过层间接口的信息量最小
TCP socket:源IP,源端口,目标IP,目标端口
4元组:(源IP,源port,目标IP,目标port)
唯一的指定了一个会话(两个进程之间的会话关系)
应用使用了这个标示,与远程的应用进程通信
就好像应用层和传输层对常用进程会话的暗号,只有应用层和·传输层自己知道
就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名、文件名
简单、便于管理
对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标示
TCP socket
每个报文都是独立传输的
前后报文可能给不同的分布式进程
UDP服务,两个应用进程之间的通信前,无需建立连接
因为这个报文可能传给另外一个分布式进程
因此,只能用一个整数表示本应用实体的标示
穿过层间接口的信息大小最小
UDP socket:本IP、本端口
接收报文时:传输层需要上传对方的IP、port
但是传输报文时:必须要提供对方IP、port
2元组:IP、port(源端指定)
UDP套接字指定了应用所在的一个端节点(end point)
发送数据是,采用创建好的本地套接字(标示ID),就不必在发送每一个报文中指明自己所采用的IP、port
但是发送报文时,必须要指定对方的ip和udp port(另一个端节点)
对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示
UDP socket
进程向套接字发送报文或者从套接字接收报文
发送进程将报文推出门户,发送进程依赖于传输层设施在另一侧的门将报文交付给接受进程
接收进程从另一端的门户收到报文(依赖于传输层设施)
套接字<-->门户
套接字(Socket)
定义应用层协议:报文格式、解释、时序等
编制程序,使用OS(操作系统)提供的API(应用程序接口),调用网络基础设施提供的通信服务报文,实现应用时序等
问题三:如何使用传输层提供的服务,实现应用进程之间的报文交换,实现应用(用户使用服务)
分布式进程通信需要解决的问题
交换的报文类型:请求和应答报文
各种报文类型的语法:报文中的各个字段及其描述
字段的语义:即字段取值的含义
进程何时、如何发送报文及对报文进行相应的规则
定义了:运行在不同端系统上的应用进程如何互相交换报文
Web应用:HTTP协议、web客户端、web服务器、HTML
应用协议仅仅是应用的一个组成部分
由RFC(request for comments)文档定义
允许互相操作
如HTTP、SMTP
公开协议
协议不公开
如:Skype(通过互联网打电话)
专用(私有)协议
应用层协议
有些应用则要求100%的可靠数据传输(如文件)
有些应用(如音频)能容忍一定比例以下的数据丢失
数据丢失率
Internet电话、交互式游戏
延迟、延迟差
一些应用出于有效性考虑,对数据传输有严格的时间限制
延迟
一些应用(如多媒体)必须需要最小限度的吞吐,从而使得应用能够有效运转
一些应用能充分利用可供使用的吞吐(弹性应用)
吞吐
机密性
完整性
可认证性(鉴别)
安全性
常见应用对传输服务的要求
衡量指标:应用层需要传输层提供什么样的服务
可靠的传输服务
流量控制:发送方不会淹没接收方
拥塞控制:当网络出现拥塞时,能抑制发送方
不能提供的服务:时间保证、最小吞吐保证和安全
面向连接:要求在客户端进程和服务器进程之间建立连接
TCP服务
不提供的服务:可靠,流量控制,拥塞控制,时间、宽带保证、建立连接
UDP服务
在IP提供的主机到主机、端到端功能的基础上,区分了主机的应用进程
能够区分不同的进程,而IP服务不能
无需建立连接,省去了建立连接的时间,适合事务性的应用
因为为了实现可靠性(准确性、保序等),必须付出时间的代价(检错重发)
不做可靠性的工作,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用
而在TCP上面的应用,应用发送数据的速度和主机向网络发送的实际速度不一致的,因为有流量控制和拥塞控制
没有拥塞控制和流量控制,应用能够按照设定的速度发送数据
UDP存在的必要性
为什么要有UDP
Internet传输层提供的服务
Internet应用及其应用协议和传输协议
都没有加密
明文通过互联网传输,甚至密码
TCP&UDP
在TCP上面实现,提供加密的TCP连接
私密性
数据完整性
端到端的鉴别
HTTPS
SSL
应用采用SSL库,SSL库使用TCP通信
SSL在应用层
应用通过API将明文交给socket,SSL将其加密在互联网上传输
SSL socket API
安全TCP
2.1 应用层协议原理
对象可以是HTML文件,JPEG图像、Java小程序、声音剪辑文件等
Web页:由一些对象组成
Web页含有一个基本的HTML文件,该HTML文件又包含若干对象的引用(链接)
访问协议、用户名、口令号、端口等
通过URL(通用资源定位符)对每个对象进行引用
URL格式
http默认80号端口,ftp默认21号端口
一些术语
Web的应用层协议
客户:请求、接收和显示Web对象的浏览器
服务器:对请求进行响应,发送对象的Web服务器
客户端/服务器模式
HTTP 1.0:RFC 1945
HTTP1.1:RFC 2068
客户端发起一个与服务器的TCP连接(建立套接字),端口号为80
服务器接受客户的TCP连接
在浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP报文(应用层协议报文)
TCP连接关闭
使用TCP
必须维护历史信息(状态)
如果服务器/客户端死机,它们的状态信息必须是一致
无状态的服务器能够支持更多的客户端
维护状态的协议很复杂
服务器并不维护关于客户的任何信息
HTTP是无状态的
最多只有一个对象在TCP上发送
下载多个对象需要多个TCP连接
HTTP/1.0使用非持久连接
每个对象要2个RTT
操作系统必须为每个TCP连接分配资源
但浏览器通常打开并行TCP连接,以获取引用对象
缺点
非持久HTTP
往返时间RTT(round-trip-time):一个小的分组从客户端到服务器,再回到客户端的时间(传输时间忽略)
一个RTT用来发起TCP连接
一个RTT用来HTTP请求并等待HTTP响应
文件传输时间
响应时间:
共:2RTT+传输时间
响应时间模型
多个对象可以在一个(在客户端和服务器之间的)TCP上连接
HTTP/1.1默认使用持久连接
服务器在发送响应后,仍保持TCP连接状态
在相同客户端和服务器之间的后续请求和响应报文通过相同进行传送
客户端在遇到一个引用的时候,就可以尽快发送该对象的请求
HTTP/1.1的默认模式
客户端遇到一个引用对象就立即产生一个请求
所有引用(小)对象只花费一个RTT是可能的
流水(pipeline)方式的持久HTTP
客户端只能在收到前一个响应后才能发出新的请求
每个引用对象花费一个RTT
非流水方式的持久HTTP
持久HTTP
概要
HTTP连接
两种类型的HTTP报文:请求、响应
ASCII(人能阅读)
子主题
请求行
首部行
结束行
三部分
实体体
报文格式
通用格式
HTTP请求报文
网页通常包括表单输入
包含在实体主体(entify body)中的输入被提交到服务器
客户端向服务器提供相应的信息
Post方式
方法:GET
输入通过请求行的URL字段上载
URL方式
提交表单输入
获取,客户端向服务器请求
GET
客户端向服务器提交
POST
要求服务器在响应报文中不包含请求对象->故障跟踪
维护或者建立索引的时候用
客户端仍然向服务器请求,但请求的是HTML的头部(HTML对象包括头部和body)
HEAD
HTTP1.0常用的命令
GET、POST、HEAD
将实体主体的文件上载到URL字段规定的路径
通常做网页内容的维护
像服务器提交相应的对象
PUT
删除URL字段规定的文件
删除相关的对象
DELETE
HTTP1.1
方法类型
put一般是修改,get是查询,post是增加,delete是删除
位于服务器->客户端响应报文中的首行
请求成功,请求对象包含在响应报文的后续部分
200 OK
请求的对象已经被永久转移了:新的URL在响应报文的Location:首部行中指定
客户端软件自动用更新的URL去获取对象
301 Moved Permanently
一个通用的差错代码,表示该请求不能被服务器解读
400 Bad Request
请求的文档在该服务器上没有找到
404 Not Found
505 HTTP Version Not Supported
HTTP响应状态码
HTTP响应报文
HTTP:超文本传输协议
大多数主要的门户网站使用cookies
1)在HTTP响应报文中有一个cookie的首部行
2)在HTTP请求报文中有一个cookie的首部行
3)在用户端系统中保留有一个cookie文件,由用户的浏览器管理
4)在Web站点有一个后端数据库
4个组成部分
Susan总是用同一个PC使用Internet Explore上网
她第一次访问了一个使用了Cookie的电子商务网站
当最初的HTTP请求到达服务器时,该Web站点产生一个唯一的ID,并以此作为索引在它的后端数据库中产生一个项
用户验证
购物车
推荐
用户状态(Web e-mail)
Cookies能够带来什么
协议端节点:在多个事务上,发送端和接收端维持状态
cookies:http报文携带状态信息
如何维护状态
Cookies允许站点知道许多关于用户的信息
可能将它知道的东西卖给第三方
如果通过某个用户在大量站点上的行为,了解其个人浏览方式的大致模式
使用重定向和cookie的搜索引擎还能知道用户更多的信息
广告公司从站点获取信息
Cookies与隐私
改进HTTP的无状态-----用户-服务器状态:cookies
HTTP概述
不访问原始服务器,就满足客户的请求
用户设置浏览器:通过缓存访问Web
在缓存中的对象,缓存直接返回对象
如果对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端
浏览器将所有的HTTP请求发给缓存
缓存既是客户端又是服务器
通常缓存是由ISP安装(大学、公司、居民区ISP)
降低客户端的请求响应时间
可以大大减少一个机构内部网络与Internet接入链路上的流量
(服务器负载降低)互联网大量采用了缓存:可以使较弱的ICP也能够有效提供服务
为什么要使用web缓存?
解决方法1---------贵
解决方法2------缓存
缓存示例
Web缓存(代理服务器)
如果缓存器中的对象拷贝是最新的,就不要发送对象
目标:
对缓存的改进:条件GET方法
2.2 Web and HTTP
向远程主机上传输文件或从远程主机接收文件
客户端:发起传输的一方
服务器:远程主机
客户/服务器模式
ftp:RFC 959
ftp服务器:端口号为21
FTP客户端与FTP服务器通过端口21联系,并使用TCP为传输协议
客户端通过控制连接获得身份确认
客户端通过控制连接发送命令浏览远程目录
收到一个文件传输命令时,服务器打开一个到客户端的数据连接
一个文件传输完成后,服务器关闭连接
服务器打开第二个TCP数据连接用来传输另一个文件
控制连接:带外(out of band)传送
FTP服务器维护用户的信息状态:当前路径、用户账号与控制连接对应
控制连接与数据连接分开
FTP命令、响应
文件传输协议FTP
2.3 FTP
又名“邮件阅读器
撰写、编辑和阅读邮件
如Outlook、Foxmail
输出和输入邮件保存在服务器上
用户代理(客户端软件)
邮箱中管理和维护发送给用户的邮件
输出报文列队保持待发送邮件报文
客户:发送方邮件服务器
服务器:接收方邮件服务器
邮件服务器之间的SMTP协议:发送email报文
邮件服务器
使用TCP在客户端和服务器之间的传送报文,端口号为25
直接传输:从发送方服务器到接收方服务器
传输报文
关闭
传输的3个阶段
命令:ASCII文本
响应:状态码和状态信息
命令/响应交互
报文必须是7为ASCII码
1)Alice使用用户代理撰写邮件并发送给bob@someschool.edu
2)Alice的用户代理将邮件发送到她的邮件服务器:邮件放在报文列队中
3)SMTP的客户端打开到Bob邮件服务器的TCP连接
4)SMTP客户端通过TCP连接发送Alice的邮件
5)Bob的邮件服务器将邮件放到Bob的邮箱
Bob调用他的用户代理阅读邮件
举例:Alice给Bob发送报文
简单的SMTP交互
SMTP:交换email报文的协议
RFC 822:文本报文的标准
邮件报文格式
MIME:多媒体邮件扩展(multimedia mail extension)
RFC 2045、2056
在报文首部用额外的行申请MIME内容形式
将不在ACSCII码字符范围内字符,编码为长一点的ASCII码,来隐性代表原字符
报文格式:多媒体扩展
SMTP:传送到接收方的邮件服务器
用户身份确认(代理<->服务器)并下载
端口号110
无状态
如果改变客户机,Bob不能阅读文件
上述例子使用”下载并删除”模式
下载并保留:不同客户机上为报文的拷贝
POP:邮局访问协议(Post Office Protocol)【RFC 1939】
更多特性(更复杂)
在服务器上处理存储的报文
有状态
IMAP:Internet邮件访问协议(Internet Mail Access Protocol)【RFC 1730】
POP3在会话中是无状态的
POP3是本地文件管理文件夹
IMAP服务器将每个报文与一个文件夹联系起来
IMAP允许用户用目录来组织报文
IMAP允许用户读取报文组件
目录名、报文ID与目录名之间的映射
IMAP在会话过程中保留用户的状态
IMAP是远程管理文件夹
POP3 vs IMAP
方便
HTTP:Hotmail、Yahoo!Mail等
邮件访问协议:从服务器访问邮件
邮件访问协议
SMTP使用持久连接
SMTP要求报文(首部和主体)为7位ASCII编码
SMTP服务器使用 CRLF.CRLF决定报文尾部
HTTP:拉(pull)
SMTP:推(push)
二者都是ASCII形式的命令/相应交互、状态码
HTTP:每个对象封装在各自的响应报文中
SMTP:多个对象包含在一个报文中
SMTP vs HTTP
简单邮件传输协议:SMTP【RFC 2821】
3个主要组成部分
2.4 Email
IP地址标识主机、路由器
但IP地址不好记忆,不便于人类使用(没有意义)
人类一般倾向于使用一些有意义的字符串来标识Internet上的设备
存在着“字符串\"-IP地址转换的必要性
人类用户提供要访问机器的”字符串“名称
有DNS负责转换成为二进制的网络地址
DNS的必要性
用有意义的字符串:好记、便于人类使用
解决一个平面命名的重名问题:层次化命名
问题1:如何命名设备
分布式的数据库维护和响应名字查询
问题2:如何完成名字到IP地址的转换
问题3:如何维护:增加或者删除一个域,需要在域名系统中做哪些工作
DNS需要解决的问题
主机名:没有层次的一格字符串(一个平面)
存在着一个(集中)维护站:维护着一张主机名-IP地址的映射文件:Hosts.txt
每台主机定时从维护站取文件
ARPANET的名字解决方案
没有层次的主机名很难分派
文件的管理、发布、查询都很麻烦
当网络中主机数量很大时
ARPANET解决方案的问题
DNS的历史
分层的、基于域的命名机制
若干分布式的数据库完成名字到IP地址的转换
不要握手,直接查询
运行在UDP之上的端口号为53的应用服务
在网络边缘处理复杂性
核心的Internet功能,但以应用层协议实现
DNS的主要思路
实现主机名-IP地址的转换(name/IP translate)
主机别名到规范名字的转换:host aliasing
邮件服务器别名到邮件服务器正规名字的转换:Mail server aliasing
负载均衡:Load Distribution
其他目的
DNS主要目的
DNS总体思想和目标
一个层面命名设备会有很多重名
采用层次树状结构的命名方式
.com--.edu--.gov--.int--.mil--.net--.org--.firm--.hsop--.web--.arts--.rec
通用的(generic)
.cn--.us--.nl--.jp
国家的(countries)
Internet根被划分为几百个顶级域(top lever domains)
每个(子)域下面可划分为若干子域(subdomains)
树叶是主机
DNS域名结构
根名字服务器:共有13个根名字服务器(中国没有,日本有)
从本域往上,直到树根
中间使用”.“间隔不同的级别
snnu.edu.cn
jwxt.snnu.edu.cn
例如:
域名的域名:可以用于表示一个域
主机的域名:一个域上的一个主机
域名
.jp划分为 ac.jp co.jp
.cn划分为edu.cn com.cn
一个域管理其下的子域
创建一个新域,必须征得它所属域的同意
域名的管理
一个域的主机可以不在一个网络
一个网络的主机不一定在一个域
域遵从组织界限,而不是物理网络
域的划分是逻辑的,而不是物理的
域与物理网络无关
问题1:DNS名字空间(The DNS Name Space)
可靠性问题:单点故障
扩展性问题:通信容量
维护问题:远距离的集中式数据库
一个名字服务器的问题
区域的划分由区域管理者自己决定
将DNS名字空间划分为互不交互的区域,每个区域都是树的一部分
每个区域都有一个名字服务器,维护者所管辖区域的权威信息(authoritative record)
名字服务器允许被放置在区域之外,以保障可靠性
名字服务器
权威DNS服务器:组织机构的DNS服务器,提供组织机构服务器(如Web和mail)可访问的主机和IP之间的映射
组织机构可以选择实现自己维护或由某个服务提供商来维护
名字空间划分为若干区域:Zone
Network solutions公司维护com TLD服务器
Educause公司维护 edu TLD服务器
顶级域(TLD)服务器:负责顶级域名(如com、org、net)和所有国家级的顶级域名(如cn、jp、uk)
TLD服务器
作用:维护 域名-IP地址(其他)的映射关系
位置:Name Server的分布式数据库中
资源记录(recourse records)
domain_name:域名
ttl:time to live:生存空间(权威(时间很长很长的无限大),缓冲记录(时间有限)
class类别:对于Internet,值为IN
Value值:可能是数字,域名或ASCII串
Type类别:资源记录的类型
RR格式:(domain_name,ttl,type,class,Value)
区域名字服务器维护资源记录
区域(zone)
应用调用 解析器(resolver)
解析器为客户 向Name Server发出查询报文(封装在UDP段中)
Name Server返回响应报文(name/ip)
并不严格属于层次结构
也称”默认名字服务器“
每个ISP(居民区的ISP、公司、大学)都有一个本地DNS服务器
起着代理作用,将查询转发到层次结构中
当一个主机发起一个DNS查询时,查询被送到器本地DNS服务器
情况1:查询的名字在该区域内部
情况2:缓存(cashing)
目标名字在Local Name Server中
当本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD一直找到权威名字服务器
名字解析负担都放在当前联络的名字服务器上
问题:根服务器的负担太重
解决:迭代查询(iterated queries)
递归查询
名字解析过程
本地名字服务器(Local Name Server)
DNS大致工作过程
问题2:解析问题-名字服务器(Name Server)
DNS协议:查询和响应报文的报文格式相同
DNS协议、报文
一旦一个服务器学到了一个映射,就将该映射缓存起来
使得根服务器不经常被访问
根服务器通常都在本地服务器中缓存着
目的:提高效率
可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致
解决方案:TTL(默认2天)
提高性能:缓存
在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名 和 域名服务器的地址
在新增子域的 名字服务器上,运行名字服务器,负责本域的名字解析:名字->IP地址
例子:在com域中建立一个”Network Utopia“
需要向该机构提供权威DNS服务器(基本的、和辅助的)的名字和IP地址
登记机构在com TLD服务器中插入两条RR记录
到注册登记机构注册域名networkutopia.com
服务器的www.networkutopia.com的类型为A的记录
用于邮件服务器mail.networkutopia.com的类型为MX的记录
在networkotopia.com的权威服务器中确保有
问题3:维护问题:新增一个域ICANN
攻击DNS
2.5 DNS(Domain Name System)域名系统
没有或(极少)一直运行的服务器
任意端系统都可以直接通信
利用peer的服务能力
peer节点间歇上网,每次IP地址都有可能变化
如何定位所需资源
如何处理对等方的加入与离开
两大问题:
文件传输是分散的,而定位内容是高度集中的
最初的“Napster”设计
IP地址
内容
1)当对等方连接时,它告知中心服务器(下线也要告诉服务器)
2)Alice查询“双节棍.MP3”
3)Alice从Bob处请求文件
P2P:集中式目录
单点故障
性能瓶颈
侵犯版权
存在的问题
集中
没有中心服务器
全分布式
开放文件共享协议
类似于HTTP有许多的浏览器
许多GnutElla客户端实现了GnutElla协议
如果X和Y之间有一个TCP连接,则两者之间存在一条边
所有活动的对等方和边就是覆盖网络
边不是物理链路
给定一个对等方,通常所连接的节点少于10个
覆盖网络:图
在已有的TCP连接上发送查询报文(向所有的邻居发出查询)
对等方转发查询报文(对方也向所有的邻居发出查询)
以反方向返回查询命令
可扩展性:限制范围的洪泛查询
GnutElla:协议
自己维护一张对等方列表(经常开机的对等方IP)
联系维护列表的GnutElla站点
1.对等方X必须首先发现,某些已经在覆盖网络中的其他对等方:使用可用对等方列表
2.X试图与该列表上的对等方建立TCP连接,直到与某个对等方Y建立连接
X向Y发送一个Ping(加入请求)报文,Y转发该Ping报文
4.所有收到Ping报文的对等方以Pong报文响应IP地址,共享文件的数量及总字节数
5.X收到许多Pong报文,然后它能建立其他TCP连接
GnutElla:对等方加入
完全分布式:查询洪泛:GnutElla
分散
对等方与其组长之间有TCP连接
组长对之间有TCP连接
每个对等方要么是一个组长,要么隶属于一个组长
组长跟踪其所有的孩子的内容
转发查询到其他组长%
获得其他组长的数据拷贝
组长与其他组长联系
每个文件有一个(Hash)散列标识码和一个描述符
对每个匹配:元数据、散列标识码和IP地址
组长用匹配进行响应
Torrent(洪流):节点的组,节点之间交换文件块
如果组长将查询转发给其他组长,其他组长也以匹配进行响应
向拥有文件的对等方发送一个带散列标识码的HTTP请求
客户端选择要下载的文件
KaZaA:查询
混合体:利用不匀称性:KaZaA
一个文件被分为一个个块246KB
tracker:跟踪torrent中的参与节点
一开始没有块,但是将会通过其他节点,积累文件块
向跟踪服务器注册,获得peer节点列表,与部分peer节点构成邻居关系(“连接”)
peer加入torrent
当peer下载时,该peer可以同时向其他节点提供上载服务
peer可能会变换用于交换块的peer节点
扰动churn:peer节点可能会上线或者下线
一旦一个peer拥有整个文件,它会(自私的)离开或者保留(利他主义)在torrent中
客户端向其组长发送关键字查询
网络中的这些peers发送和接受文件块,互相服务
在任何给定时间,不同peer节点拥有一个文件块的子集
周期性的,Alice节点向邻居询问他们的拥有哪些文件块的信息
Alice向peer节点请求它希望的文件块,稀缺的文件块
请求块
其他peer被Alice阻塞(将不会从Alice出获得服务)
每10秒重新评估一次:前4位
Alice向4个peer发送块,这些块向它提供自己最大的带宽服务
“优化疏通”这个节点
新选择的节点可以加入这个top4
每个30秒:随机选择其他peer节点,向这个节点发送块
发送块:一报还一报tit-for-tat
请求、发送文件块
(1)Alice“优化疏通”Bob
(2)Alice变成了Bob的前四位提供者;Bob答谢Alice
(3)Bob变成了Alice的前四位提供者
tit-for-tat
更高效的上载速度:发现更好的交易伙伴,获得更快的文件传输速率
稀缺资源优先,最高传输速率优先
非结构化的P2P:混合体:BitTorrent:P2P文件分发
半分散
可能的方案(非结构化P2P)
哈希表
DHT方案
环形DHT 以及覆盖网络
Peer波动
结构化的P2P:DHT(Distributed Hash Table)
P2P文件共享
peer节点上下载能力是有限的资源
数量非常少的客户端在请求服务器服务的时候,客户端的下载能力是瓶颈;随着用户数量的增加,服务器的上载带宽是瓶颈
问题:从一台服务器分发文件(大小F)到N个peer需要多少时间
C/S vs P2P
文件分发(BitTorrent)
流媒体(KanKan)
VoIP(Skype)
纯P2P架构
2.6 P2P应用
Netflix,YouTube,16%的ISP下行流量
~1B YouTube用户,~75M Netflix用户
视频流量:占据着互联网大部分的宽带
单个超级服务器无法提供服务(为什么)
挑战:规模性---如何服务~1B 用户
不同的用户拥有不同的能力(例如:有线接入和移动用户;带宽丰富和受限用户)
解决方案:分布式的,应用层面的基础设施
24 images/sec
视频:固定速度显示的图像序列
高码率:>10x于音频,高的网络带宽需求
可以被压缩
90%以上的网络流量是视频
网络视频特点
每个像素被若干bits表示
数字化图像:像素的阵列
空间冗余(图像内)
时间冗余(相邻的图像间)
编码:使用图像内和图像间的冗余来降低编码的比特数
多媒体:视频
将视频文件分割成多个块
每个块独立存储,编码于不同码率(8-10种)
告示文件(manifest file):提供不同块的URL
服务器:
先获取告示文件
周期性地测量服务器到客户端的带宽
如果带宽足够,选择最大码率的视频块
会话中的不同时刻,可以切换请求不同的编码快(取决于当时的可用带宽)
查询告示文件,在一个时刻请求一个块,HTTP头部指定字节范围
客户端:
什么时候去请求块(不至于缓存挨饿或者溢出)
请求什么编码速率的视频块(当带宽够用时,请求高质量的视频块)
哪里去请求快(可以向离自己近的服务器发送URL,或者向高可用带宽的服务请求)
“智能”客户端:客户端自适应决定
DASH:Dynamic Adaptive Streaming over HTTP(在HTTP上的动态自适应流化)
多媒体流化服务:DASH
存储视频的流化服务
服务器到客户端路径上跳数较多,瓶颈链路带宽小导致停顿
“二八规律”决定了网络同时充斥着同一个视频的多个拷贝,效率低(付费高、带宽浪费、效果差)
单点故障、性能瓶颈
周边网络的拥塞
评述:相当简单,但是这个方法不可扩展
选择1:单个的、大的超级服务中心“mega-server”
更接近用户,数量少,离用户近,管理困难
Akamai,1700个位置
enter deep:将CDN服务深入到许多接入网
采用租用线路将服务器簇连接起来
Limelight
bring home:部署在少数(10个左右)关键位置,如将服务器安装于POP附近
在CDN节点中存储内容的多个拷贝
重定向到最近的拷贝,请求内容
如果网络路径堵塞,可能选择不同的的拷贝
用户从CDN中请求内容
让内容靠近用户,内容加速
互联网络主机-主机之间的通信作为一种服务向用户提供(CDN在网络边缘,应用层)
从哪个CDN节点中获取内容
用户在网络拥塞时的行为
在哪些CDN节点中存储内容
OTT挑战:在拥塞的互联网上复制内容
选择2:通过CDN,全网部署缓存节点,存储服务内容,就近为用户提供服务,提高用户体验
挑战:服务器如何通过网络向上百万用户同时流化视频内容(上百万视频内容)
视频流化服务和CDN:上下文
2.7 CDN(Content Distribution Networks)内容分发网络
2.8 TCP套接字(Socket)编程
2.9 UDP套接字编程
第二章 应用层
为运行在不同主机上的应用进程提供逻辑通信
发送方:将应用层的报文分成报文段,然后传递给网络层
接收方:将报文段重组成报文,然后传递给应用处
传输协议运行在端系统
Internet: TCP和UDP
有多个传输层协议可供选择
传输服务和协议
网络层服务:主机之间的逻辑通信
延时、带宽
依赖于网络层的服务
数据丢失、顺序混乱、加密
并对网络层的服务进行增强
传输层服务:进程之间的逻辑通信
主机=家庭
进程=小孩
应用层报文=信封中的信件
为家庭小孩提供复用解复用服务
传输协议=Ann和Bill
家庭=家庭的邮包传输服务
网络层协议=邮政服务
Ann家的12个小孩给Bill家的12个小孩发信
类比:东西2个家庭的通信
有些服务是可以加强的:不可靠->可靠:安全 但有些服务是不可以被加强的:带宽,延迟
传输层vs网络层
多路复用、解复用
建立连接
可靠的、保序的传输:TCP
没有为尽力而为的IP服务添加更多的其他额外服务
不可靠、不保序的传输:UDP
延时保证
带宽保证
都不提供的服务
Internet传输层协议
3.1 概述和传输层服务
从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)
在发送方主机多路复用
根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)
在接收方主机多路解复用
解复用作用:TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程
每个数据报有源IP地址和目标IP地址
每个数据报承载一个传输层报文段
每个报文段有一个源端口号和目标端口号
主机收到IP数据报
主机联合使用IP地址和端口号将报文段发送给合适的套接字
多路解复用工作原理
服务器端创建本地套接字,客户端创建本地套接字
创建套接字
在接收端,UDP套接字用二元组标识(目标IP地址,目标端口号)
检查报文段的目标端口号
用该端口号将报文段定位给套接字
当主机接收到UDP报文段
如果两个不同源IP地址/源端口号的数据报,但是有相同的目标IP/目标端口号,则被定位到相同的套接字
创建拥有本地端口号的套接字
目标IP地址
目标端口号
当创建UDP段采用端口号,可以指定
检查UDP段中的目标端口号
将UDP段交给具备那个端口号的套接字
当主机接收到UDP段时
回顾:
无连接(UDP)多路解复用
源IP地址
源端口号
TCP套接字:四元组本地标示
解复用:接收主机用这四个值来将数据报定位到合适的套接字
每个套接字由其四元组标识(有不同的源IP和源PORT)
服务器能够在一个TCP端口同时多个TCP套接字
非持久对每个请求有不同的套接字
web服务器对每个连接客户端有不同的套接字
一个进程下面可能有多个线程:由多个线程分别为客户提供服务
在这个场景下,还是根据4元组决定将报文段内容同一个进程下的不同线程
解复用到不同线程
多线程web server
面向连接(TCP)的多路复用
3.2 多路复用和解复用
“no frills”,“bare bones”Internet传输协议
送到应用进程的报文乱序
“尽力而为”的服务,报文段可能
UDP发送端和接收端之间没有握手
每个UDP报文段都被独立的处理
流媒体(丢失不敏感,速率敏感,应用可控制传输速率)
DNS
SNMP(简单网络管理协议)
UDP被用于
在应用层增加可靠性
应用特定的差错恢复
在UDP上实现可靠传输
UDP报文格式:
不建立连接(会增加延时)
简单:在发送端和接收端没有连接状态
报文段的头部很小(开销小)
应用->传输速率=主机->网络速率
UDP可以尽可能快的发送报文段
无拥塞控制和流量控制
目标:检测在被传输报文段中的差错(比如特反转)
加反加判,溢出回卷
将报文段的内容视为16bit的整数
校验和:报文段加法和(1的补运算)
发送方将校验和放在UDP的校验和字段
发送方:
计算接收到的报文段的校验和
不相等:检测到差错
相等:没有检测到差错(但也许还是有差错---残存错误)
检查计算出校验和与校验和字段的内容是否相等
接收方
UDP校验和
UDP(User Datagram Protocol用户数据报协议)
3.3 无连接传输UDP
rdt在应用层、传输层和数据链路层都很重要
是网络top 10问题之一
信道的不可靠特点决定了可靠数据传输协议(rdt)的复杂性
渐增式地开发可靠数据传输协议(rdt)的发送方和接收方
但控制信息是双向流动的
只考虑单向数据传输
双向的数据传输问题实际上是2个单向数据传输问题的综合
在该状态时,下一个状态只由下一个事件唯一确定
状态
引起状态变迁的事件/状态变迁时(协议)采取的动作
使用有限状态机(FSM)来描述发送方和接收方
我们将
问题描述
没有比特出错
没有分组丢失
下层的信道是完全可靠的
发送方将数据发送到下层信道
接收方从下层信道接收数据
接收方和发送方的FSM
Rdt1.0:在可靠信道上的可靠数据传输
用 校验和 来检验 比特差错
下层信道可能会出错:将分组中的比特翻转
确认(ACK):接收方显式地告诉发送方分组已被正确接收
发送方接收到NAK后,发送方重传分组
否定确认(NAK):接收方显式地告诉发送方分组发生了差错
发送方 差错控制编码、缓存
接收方使用编码检错
接收方的反馈:控制报文(ACK、NAK):接收方->发送方
接收方收到反馈相应的动作
Rdt2.0中的新机制:采用 差错控制编码 进行差错检测
数据、校验和
问题:怎样从差错中恢复
1.
2.
3.
4.
5.
rdt2.0:没有出错的操作
Rdt2.0:具有比特差错的信道
分组的序号,数据,校验和
发送方处理出错的ACK/NAK(4个状态)
接收方处理出错的ACK/NAK(2个状态,一个状态可能有3种事件 )
在分组中加入序列号
一次只发送一个未经确认的分组
必须检错ACK/NAK是否出错(需要EDC)
必须记住当前分组的序列号为0还是1
状态数变成两倍
发送方
状态会指示希望接收到的分组的序号为0还是1
必须检错接收到的分组是否是重复的
发送方不对收到ack/nak给确认,没有所谓的确认的确认
老分组P0,则ack错误
下一个分组P1,ack正确
接收方发送ack,如果后面接收方收到的是
注意:接收方并不知道发送方是否正确收到了ACK/NAK
讨论
Rdt2.1
功能同Rdt2.1,但只是用ACK(ack要编号)
接收方必须显式地包含被正确接收分组的序号
接收方对最后确认接收的分组发ACK,以替代NAK
但收到重复的ACK(如:再次收到ACK0)时,发送方与收到NAK采取相同的动作:重传当前分组
一次能够发送多个
每一个应答都有:ACK、NAK:麻烦
使用对前一个数据单元的ACK,替代本数据单元的NAK
确认信息减少一半,协议处理简单
为后面的一次发送多个数据单元做一个准备
Rdt2.2:无NAK的协议
会死锁
检验和
序列号
ACK
重传
机制还不够处理这种状况
新的假设:下层信道可能会丢失分组(数据或ACK)
发送端超时重传:如果到时没有收到ACK->重传
重传可能会导致数据重复,但利用序列号已经可以处理这个问题
接收方必须指明被正确接收的序列号
问题:如果分组(或ACK)只是被延迟了
需要一个倒计时定时器
方法:发送方等待ACK一段合理的时间
链路层的timeou时间是确定的,传输层timeout时间是适应的
过早超时(延迟的ACK)也能正常工作,但是效率较低,一半的分组和确认是重复的;设置一个合理的超时时间比较重要
链路容量比较大,一次发一个PDU的不能够充分利用链路的传输能力
rdt3.0可以工作,但链路容量比较大的情况下,性能较差
rdt3.0的性能
rdt3.0 停-等操作
Rdt3.0:具有比特差错和分组丢失的信道
瓶颈转移了->链路带宽
流水线:提高链路利用率
必须增加序号的范围:用多个bit表示分组的序号
发送方缓冲:未得到确认:可能需要重传
接收方缓冲:上层用户取用数据的速率 不等于 接收到的数据速率:接收到的数据可能乱序,排序交付(可靠)
在发送方/接收方要有缓冲区
流水线:允许发送方在未得到对方确认的情况下一次发送多个分组
两种通用的流水线协议:回退N步(GBN)和选择重传(SR)
形式:内存中的一个区域,落入缓冲区的分组可以发送
功能:用于存放已发送,但是没有得到确认的分组
必要性:需要重发时可用
发送缓冲区
停止等待协议=1
流水线协议>1,合理的值,不能很大,链路利用率不能够超过100%
发送缓冲区的大小:一次最多可以发送多个未经确认的分组
未发送的:落入缓冲区的分组,可以连续发送出去
已经发送出去的、等待对方确认的分组:发送缓冲区的分组只有得到确认才能删除
发送缓冲区中的分组
SW(发送窗口)RW(接收窗口)S-W(停止等待协议)
可采用相对移动方式表示,分组不动
可缓冲范围移动,代表一段可以发送的权利
那些以及发送但是未经确认分组的序号构成的空间
发送窗口的最大值<=发送缓冲区的值
后沿=前沿
之间为发送窗口的尺寸=0
一开始:没有发送任何一个分组
每发送一个分组,前沿前移一个单位
发送窗口前沿移动的极限:不能够超过发送缓冲区
发送窗口的移动->前沿移动
条件:收到老分组的确认
结果:发送缓冲区罩住新的分组,来了分组可以发送
移动的极限:不能够超过前沿
发送窗口的移动->后沿移动
全部过程
发送窗口:发送缓冲区内容的一个范围
只有收到的分组序号落入到接收窗口内才允许接收
若序号在接收窗口内,则丢弃
接收窗口用于控制哪些分组可以接收
GBN:接收窗口尺寸Wr=1,则只能顺序接收
但提交给上层的分组,要按序
SR:接收窗口尺寸Wr>1,则可以乱序接收
Wr=1,在0的位置;只有0号分组可以接收
向前滑动一个,罩在1的位置,如果来了第2号分组,则丢弃
低序号分组到来,接收窗口移动
高序号分组乱序到,缓存但不交付(因为要实现rdt,不允许乱序),不滑动
滑动:
接收窗口尺寸=1:发送连续收到的最大的分组确认(累计确认)
接收窗口尺寸>1:收到分组,发送那个分组的确认(非累计确认)
发送确认:
接收窗口的滑动和发送确认
接收窗口(receiving window)=接收缓冲区
接收窗口
有新的分组落入到发送缓冲区范围,发送->前沿移动
来了老的低序号分组的确认->后沿向前滑动->新的分组可以落入发送缓冲区的范围
发送窗口
收到分组,落入到接收窗口范围内,接收
是低序号,发送确认给对方
发确认
接收窗口滑动
发送窗口滑动
发送端上面来了分组
正常情况下的2个窗口互动
新分组落入到发送缓冲区范围,发送->前沿滑动
超时重传机制让发送端将发送窗口中的所有分组发送出去
来了老分组的重复确认->后沿不向前滑动->新的分组无法落入发送缓冲区的范围(此后如果发送缓冲区有新的分组可以发送)
收到乱序分组,没有落入到接收窗口范围内,抛弃
(重复)发送老分组的确认,累计确认
异常情况下GBN的2窗口互动
新分组落入发送缓冲区,发送->前沿移动
超时重传机制让发送端将超时的分组重新发送
来了乱序分组的确认->后沿不向前滑动->新的分组无法落入发送缓冲区的范围(此时如果发送缓冲区有新的分组可以发送)
收到乱序分组,落入到接收窗口范围内,接收
发送该分组的确认,单独确认
异常情况下SR的2窗口互动
发送窗口滑动过程-相对表示方法
通用:滑动窗口(slide window)协议
发送窗口>1
一次能够发送多个未经确认的分组
相同之处
接收窗口尺寸=1
接收端:只能顺序接收
简单,所需资源少(接收方一个缓存单元)
优点:
一旦出错,回退N步代价大
出错率低:比较适合GBN,出错非常罕见,没有必要用复杂的SR,为罕见的事件做日常的准备和复杂处理
GBN
接收窗口尺寸>1
接收端:可以乱序接收
优点:出错时,重传一个代价小
缺点:复杂,所需资源多(接收方多个缓存单元)
链路容量大(延迟大,带宽大):比较适合SR而不是GBN,一点出错代价太大
SR
不同之处
GBN协议和SR协议的异同
发送端最多在流水线中有N个未确认的分组
接收方如果发现gap,不确认新到来的分组
接收端只是发送累计型确认cumulative ack
只需设置一个定时器
当定时器到时的时候,重传所有未确认的分组
发送端拥有对最老的未经确认分组的定时器
base-下沿 nextseqnum-上沿
Go-Back-N:
发送端最多在流水线中有N个未经确认的分组
接收方对每个到来的分组单独确认individu ack(非累计确认)
当超时定时器到时,只是重发到时的未确认分组
发送方为每个未确认的分组保持一个定时器
Selective Repeat:
发送窗口的最大值
流水线协议
3.4 可靠数据传输的原理
一个发送方,一个接收方
点对点:
没有报文边界
可靠的,按顺序的字节流
TCP拥塞控制和流量控制设置窗口大小
管道化(流水线)
发送和接收缓存
在同一连接中数据双向流动
MSS:最大报文段大小
全双工数据
在数据交换之前,通过握手(交换控制报文)初始化发送方、接收方的状态变量
面向连接
有流量控制
概述
报文段首字节在字节流的编号
序号
期望从另一方收到下一个字节的序号
累计确认
确认号
TCP序号,确认号
TCP报文段结构
但RTT是变化的
比RTT要长
不必要的重传
太早超时
太短
对报文段的丢失反应慢,消极
太长
怎样设置TCP超时
测量从 报文段发出到收 到 确认接收 的时间
SampleRTT
对几个最近的测量值求平均,而不是仅用当前的SampleRTT
SampleRTT会变化,因此估计的RTT应该比较平滑
怎样估计RTT
TCP往返延时(RTT)和超时
GBN or SR
管道化的报文
累计确认(像GBN)
单个重传定时器(像GBN)
是否可以接收乱序的,没有规范
TCP在IP不可靠服务的基础上建立了Rdt
超时(只重发那个最早的未确认段:SR)
例子:收到了ACK50,之后来又收到3个ACK50
序号最小的报文没有被收到,后面的几个先收到了,接收方三次收到比期望序号大的数据都会发送一次期望序号的(最老)ACK
重复的确认
通过以下事件触发重传
忽略重复的确认
忽略流量控制和拥塞控制
首先考虑简化TCP发送方
用nextseq创建报文段
用序号nextseq为报文段首字节的字节流编号
定时器与最早未确认的报文段关联
时间间隔:TimeOutInterval
如果还没有运行,启动定时器
重传后沿最老的报文段
重新启动定时器
超时:
更新已被确认的报文序号
如果当前有未确认的报文段,重新启动定时器
如果是对尚未确认的报文段确认
收到确认
从应用层接受数据
TCP发送方事件
TCP:重传
所期望序号的报文段按序到达。所有在期望序号之前的数据都已经被确认
有期望序号的报文段到达。另一个按序报文段等待发送ACK
比期望序号大的报文段乱序到达。检测出数据流中的间隔
能部分或完全填充接收数据间隔的报文段到达
接收方的事件
延迟的ACK。对另一个按序报文段的到达最多等待500ms。如果下一个报文段在这个时间间隔内没有送达,则发送一个ACK
立即发送单个累积ACK,以确认两个按序报文段
立即发送重复的ACK,指明下一个期待字节的序号
若该报文段起始于间隔(gap)的低端,则立即发送ACK
TCP接收方动作
产生TCP ACK的建议
在重传丢失报文段之前的延时太长
超时周期往往太长:
发送方通常连续发送大量报文段
如果报文段丢失,通常会引发多个重复的ACK
通过重复的ACK来检测报文段丢失
快速重传:在定时器过时之前重发报文段
第一个ACK是正常的
收到第二个该段的ACK,表示接收方收到该段后的乱序段
它假设跟在被确认的数据后面的数据丢失了
如果发送方收到同一数据的3个冗余ACK,重传最小序号的段
快速重传
TCP:可靠数据传输
接收方控制发送方,不让发送方发送太多、太快以至于让接收方缓冲区溢出
RcvBuffer大小通过socket选项设置(典型默认大小为4096字节)
很多操作系统自动调整RcvBuffer
接收方在其向发送方的TCP段头部的rwnd字段“通告”其空闲buffer大小
发送方限制未确认字节的个数<=接收方发送过来的rwnd值
保证接收方不会被淹没
TCP 流量控制
同意建立连接(每一方都知道对方愿意建立连接)
同意连接参数
在正式交换数据之前,发送方和接收方握手建立通信关系:
变化的延时(连接请求的段没有丢,但可能超时)
由于丢失造成的重传
报文乱序
互相看不到对方
在网络中,2次握手建立连接总是可行吗
同意建立连接 2次握手
3次握手
连接建立
发送端FIN bit=1的TCP段
客户端,服务器分别关闭它自己这一侧的连接
接到FIN段,ACK可以和它自己发出的FIN段一起发出
一旦收到FIN,用ACK回应
可以处理同时的FIN交换
关闭连接
连接管理
3.5 面向连接的传输:TCP
非正式的定义:“太多的数据需要网络传输,超过了网络的处理能力”
与流量控制不同
分组丢失(路由器缓冲区溢出)
分组经历比较长的延迟(在路由器的列队中排队)
拥塞的表现:
网络中前10位的问题
拥塞
场景1
重传的丢失分组
没有必要重传的重传分组
输出比输入小的原因:
场景2
场景3
拥塞的原因/代价
没有来自网络的显示反馈
端系统根据延迟和丢失事件推断是否有拥塞
TCP采用的方法
端到端拥塞控制:
单个bit置位,显示有拥塞(SNA,DECbit,TCP/IP ECN,ATM)
显示提供发送端可以采用的速率
路由器提供给端系统以反馈信息
网路辅助器的拥塞控制:
两种常用的拥塞控制方法
拥塞控制方法
“弹性服务”
如果发送端的路径“轻载”,发送方使用可用的带宽
如果发送方的路径拥塞了,发送方限制其发送的速度到一个最小保障速率上
ABR:available bit rate
由发送端发送,在数据信元中间隔插入
NI bit:no increase in rate(轻微拥塞)速率不要增加了
CI bit:congestion indication 拥塞指示
RM信元中的bit被交换机设置(“网络辅助”)
发送端发送的RM信元被接收端返回,接收端不做任何改变
拥塞的交换机可能会降低信元中ER值
发送端发送速度会因此是最低的可支持速率
在RM信元中的2个字节ER(explicit rate)字段
如果在资源管理信元RM前面的数据信元EFCI被设置成了1,接收端在返回的RM信元中设置CI bit
数据信元中的EFCI bit:被拥塞的交换机设计成了1
RM(资源管理)信元
案例学习:ATM ABR 拥塞控制
3.6 拥塞控制原理
路由器的负载比较轻
符合网络核心简单的TCP/IP架构原则
路由器不向主机提供有关拥塞的发聩信息
端系统根据自身得到的信息,判断是否发生拥塞,从而采取动作
端到端的拥塞控制机制
轻微拥塞
如何检测拥塞
轻微拥塞,如何降低
拥塞时,如何降低
在拥塞发生时如何动作,降低速率
在拥塞缓解时,如何动作,增加速率
控制策略
拥塞控制的几个问题
机制
超时时间到,某个段的确认没有来
原因一:网络拥塞(某个路由器缓冲区没空间了,被丢失)概率大
原因二:出错被丢失了(各级错误,没有通过校验,被丢弃)概率小
一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的
某个段超时了(丢失事件):拥塞
段的第一个ack,正常,确认绿段,期待红段
段的第二个重复ack,意味着红段的后一段收到了,蓝段乱序到达
网络这时还能够进行一定程度的传输,拥塞但情况比第一种好
有关某个段的3次重复ACK:轻微拥塞
发送端如何探测到拥塞
TCP拥塞控制:拥塞感知
维持一个拥塞窗口的值:CongWin
发送端限制已发送但未确认的数据量(的上限)
从而粗略地控制发送方往网络中注入的速率
超时时:CongWin降为1MSS(最大报文段长度),进入ss阶段然后再倍增到CongWin/2(每个RTT),从而进入CA阶段
3个重复ACK:CongWin降为CongWin/2,CA阶段
超时或者3个重复ACK,CongWin下降
ss(慢启动)阶段:加倍增加(每个RTT)
CA(拥塞避免)阶段:线性增加(每个RTT)
否则(正常收到ACK,没有发生以上情况):CongWin跃跃欲试
CongWin是动态的,是感知到网络拥塞程度的函数
如何控制发送端发送的速率
TCP拥塞控制:速率控制方法
发送端控制 发送但未确认的字节数量 同时也不能超过接收窗口,满足流量控制要求
sendWin=min(CongWin,RecvWin)
同时满足 拥塞控制和流量控制要求
联合控制的方法
TCP拥塞控制和流量控制的联合动作
慢启动
AIMD:线性增加、乘性减少
超时事件后的保守策略
拥塞控制策略
TCP拥塞控制:策略概述
TCP吞吐量
如果K个TCP会话分享一个链路为R的瓶颈,每个会话的有效带宽为R/K
公平性目标:
TCP公平性
3.7 TCP拥塞
第三章 传输层
在发送主机和接收主机之间传送报文段(segment)
在发送端将报文段封装到数据报(datagram)中
在接收端,将报文段上交给传输层实体
网络层协议存在于每一个主机和路由器
路由器检查每一个经过它的IP数据报的头部
网络层服务
将分组从路由器的输入接口转发到合适的输出输出接口
转发(数据平面):
路由选择算法
路由选择协议
使用路由算法来决定分组从发送主机到目标接收主机的路径
路由(控制平面):
网络层的功能
转发:通过单个路口的过程
路由:从源到目的地的路由规划过程
旅行类比
网络层的关键功能
本地,每个路由器功能
决定从路由器输入端口到达的分组如何转发到输出端口
基于目标地址+转发表
传统方式
基于多个字段+流表
SDN方式
转发功能
数据平面
网络范围内的逻辑
决定数据报如何在路由器之间路由,决定数据报从源到目标主机之间端到端的路径
在路由器中被实现
传统的路由算法:
software-defined networking(SDN)软件定义网络:在远程的服务器中实现
控制平面的方法
控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
控制平面和数据平面在一个设备上实现(控制平面和数据平面紧耦合)
每个路由器既可以转发也可以路由
分布式路由
控制平面:路由算法决定端到端的路径
数据平面:IP协议根据转发表决定了IP数据报在此路由器上的局部转发
僵化,不灵活,不可编程
一个不同的(通常是远程的)控制器与本地控制代理(CAs)交互
集中式路由
SDN方式:逻辑集中的控制平面
网络层:数据平面、控制平面
可靠传送
延迟保证:如:少于40ms的延迟
对于单个数据报的服务
保序数据报传送
保证流的最小带宽
分组之间的延迟差
对于数据报流的服务
从发送方主机到接收端主机传输数据报的“通道”,网络提供怎样的服务模型
网络服务模型
ATM、fram、relay、X.25
在某些网络架构中是第三重要的功能
涉及路由器
在分组传输之前,在两个主机之间,在通过一些路由器所构成的路径上建立一个网络层连接
在两个主机之间,涉及到路径上的一些路由器
在2个进程之间,很可能只体现在端系统上(TCP连接 )
网络层和传输层连接服务的区别
4.1 导论
运行路由选择算法/协议(RIP、OSPF,BGP)---生成路由表
路由:
从输入到输出链路交换数据报---根据路由表进行分组的转发
转发:
高层面(非常简化的)通用路由器体系架构
根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找适合的输出端口(匹配+行动)
基于目标的转发:仅仅依赖于IP数据报的目标IP地址(传统方法)
通用转发:基于头部字段的任意集合进行转发
输入端口功能
当交换机构的速率小于输入端口的汇聚速率时--->在输入端口可能要排队
排队延迟以及由于输入缓存溢出造成丢失
Head Of Line(HOL)blocking(头端阻塞):排在队头的数据报阻止了队列中其他数据报向前移动
输入端口缓存
将分组从输入缓存区传输到合适的输出端口号
运行速度经常是输入/输出链路速率的若干倍
N个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈
交换速率:分组可以按照该速率从输入传输到输出
在CPU直接控制下的交换,采用传统的计算机
分组被拷贝到系统内存,CPU从分组的头部提取出目标IP地址,查找转发表,找到对应的输出端口,拷贝到输出端口
转发速率被内存的带宽限制(数据报通过BUS两遍)
一次只能转发一个分组
第一代路由器
通过内存交换
数据报通过共享总线,从输入端转发到输出端口
总线竞争:交换速度受限于总线带宽
1次处理一个分组
32Gbps,Cisco5600:对于接入企业或企业级路由器,速度足够(但不适合区域或骨干网络)
第二代路由器
通过总线交换
同时并发转发多个分组,克服总线带宽限制
Banyan(榕树)网络,crossbar(纵横)和其他的互联网被开发,将多个处理器连接成多处理器
当分组从端口A到达,转给端口Y;控制器短路相应的两个总线
高级设计:将数据报分片为固定长度的信元,通过交换网络交换
Cisco12000:以60Gbps的交换速率通过互联网
通过互联网络(crossbar等)的交换
交换结构
当数据报从交换机构的到达速率比传输速率快就需要输出端口缓存
调度:选择下一个要通过链路传输的分组
FIFO(fist in fist out)scheduling:按照分组到来的次序发送
tail pop:丢弃刚到达的分组
priority pop:根据优先权丢弃/移除分组
random:随机的丢弃/移除
丢弃策略:如果分组到达一个满的队列,哪个分组将会被抛弃
调度机制
优先权丢度:发送最高优先权的分组
先传高优先级的队列中的分组,除非没有
高(低)优先权中的分组传输次序:FIFO
多类,不同类别有不同的优先权
调度策略:优先权
多类
循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
Round Robin(RR)scheduling
一般化的Round Robin
在一段时间内,每个队列得到的服务时间是:Wi/(XIGMA(Wi))*t,和权重成正比
每一个类在每一个循环中获得不同权重的服务量
Weight Fair Queuing(WFQ)
调度策略:其他的
由调度规则选择排队的数据报进行传输
数据报(分组)可能会被丢弃,由于拥塞,缓冲区没有空间
输出端口
路由器结构概述
4.2 路由器组成
IP数据报格式
不同的链路类型
不同的MTU
网络链路层有MTU(最大传输单元)--链路层帧所携带的最大数据长度
相同的ID
不同的偏移量
最后一个分片标记为0
一个数据报被分割成若干个小的数据报(八个字节的整数切割)
大的IP数据报在网络中被分片(fragmented)
”重组“只在最终的目标主机进行
IP头部的信息被用于标识,排序相关的分组
IP分组和重组(Fragmentation&&Reassembly)
IP地址:32位标示,对主机或者路由器的接口编址
路由器通常有多个接口
主机也有可能有多个接口
IP地址和每个接口关联
接口:主机/路由器和物理链路的连接处
一个IP地址和一个接口相关联
这些接口是如何连接的
引论
子网部分(高位bit)
主机部分(地位bit)
一个子网内的节点(主机或者路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网
无需路由器接入,子网内各个主机可以在物理上互相直接到达(一跳可达,可以借助交换机)
什么是子网(subnet)
要判断一个子网,将每一个接口从主机或者路由器上分开,构成了一个个网络的孤岛
每一个孤岛(网络)都是一个都可以被称为subnet
判断方法
6个
子网(Subnets)
IP地址分类
子网部分:全为0-------本网络
主机部分:全为0-------本主机
主机部分:全为1-------广播地址,这个网络的所有主机
网络部分:全为1-------回路地址
一些约定
地址空间的一部分供专用地址使用
只在局部网络中有意义,区分不同的设备
永远不会被当做公共地址来分配,不会与公共地址重复
路由器不对目标地址是专用地址的分组进行转发
专用地址范围
专用地址:
内网(专网)IP地址
特殊的IP地址
子网部分可以在任意位置
地址格式:a.b.c.d/x,其中x是地址中子网号的长度
子网掩码中1代表网络号,0代表主机号(ip地址与子网掩码做与运算,只保留子网部分)
路由表只有四个表项(目标子网号--子网掩码--下一跳--端口)
获得IP数据报的目标地址
如(IP Des addr)&(mask)==destination,则按照表项对应的接口转发该数据报
如果没有找到,则使用默认表项转发该分组
对于转发表(路由表)的每一个表项
转发表和转发算法
DHCP:动态主机配置协议---自动获取IP、子网掩码、网关(自己家的网关是路由器的IP地址,或者猫的IP地址)、本地DNS
可以更新对主机在用IP地址的租用期--租期快到了
重新启动时,允许重新使用以前用过的IP地址
支持移动用户加入该网络(短期在网)
目标:允许主机在加入网络的时候,动态地从服务器哪里获得IP地址
类似于有没有活着的DHCP服务器啊
主机广播“DHCP discover”报文【可选】
服务器回应“我活着”
DHCP服务器用“DHCP offer”提供报文响应【可选】
主机请求IP地址:发送“DHCP request”报文
DHCP服务器发送地址:“DHCP ack”报文
client没有IP地址,IP地址先取0.0.0.0
Client用32位全1的广播地址来问所有DHCP服务器
DHCP工作概述(UDP上的一个服务)
DHCP实例
DHCP
主机如何获得一个IP地址
从ISP获得地址块中分配一个小地址块
一个ISP如何获得一块地址
如何获得一个网络的子网部分
层次编址允许路由信息的有效广播
层次编址:路由聚集(route aggregation)
最长前缀匹配
层次编址:特殊路由信息(more special route)
网络地址转换---出去的时候把源(内网)地址转换为ISP统一的IP地址;回来的时候把机构对应的IP地址转回内网地址
不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备---省钱
可以在局域网 改变设备地址 的情况下而 无需通知外界
可以改变ISP(地址变化)而不需要改变内部设备地址
局域网内部的设备没有明确的地址,对外是不可见的----安全
动机:本地网络只有一个有效IP地址
远端的C/S将会用NAT IP地址,新端口号作为目标地址
外出数据包:替代源地址和端口号为NAT IP地址和新的端口号,目标IP和目标端口号不变
源IP、端口 vs NAT IP、新端口
记住每一个转换替换对(在NAT转换表中)
进入数据报:替换目标IP地址和端口号,采用存储在NAT转换表的mapping表项,用(源IP、端口)
实现:NAT路由器必须
6万多个同时连接,一个局域网
16-bit端口字段
路由器只应该对第三层做信息处理,而这里对端口号(四层)作了处理
端到端原则:复杂性放到网络边缘
无需借助中转和变换,就可以直接传送到目标主机
NAT可能被一些应用设计者考虑,例如:P2P application
外网的机器无法主动连接到内网的机器上
违反了end-to-end原则
地址短缺问题可以被IPv6解决
3.中继
2.UPnP协议(也叫IGD协议),允许内网的设备查询/增加/删除NAT的表项
1.静态配置NAT(把NAT表静态的写死)
NAT穿越:如果客户端需要连接在NAT后面的服务器,如何操作
对NAT是有争议的:
NAT(Network Address Translation)
如何获得一个IP地址
CIDR(Classless InterDomain Routing)无类域间路由
IP编址
初始动机:32-bit地址空间将会被很快用完
TTL-1
头部checksum
分片
头部格式改变帮助加速处理和转发
头部格式改变帮助QoS
另外的动机:
固定的40字节头部
太大了IPv6协议会发送错误报告给源主机,让它自己把分组弄小一点
数据报传输过程中,不允许分片
IPv6数据报格式
动机
Priority:标示流中数据报的优先级
Flow Label:标示数据报在一个“flow”(“flow”的概念没有被严格的定义)
Next header:标示上层协议
hop limit相当于IPv4里面的time to live(每过一个路由器-1)
头部(Cont)
Checksum:被移除掉,降低在每一段中处理的速度
Options:允许,但是在头部之外,被“Next header”字段标示
附加了报文类型 例如:Packet Too Big
多播组管理功能
ICMPv6:ICMP的新版本
和IPv4的其他变化
没有一个标记日“flag days”
在IPv4和IPv6路由器混合时,网络如何运转
不是所有的路由器都能够同时升级的
隧道:在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
从IPv4到IPv6的平移
IPv6
4.3 IP:Internet Protocol
每个路由器上都有实现路由算法的元件(它们之间相互交互)---形成传统IP实现方式的控制平面
算出路由表之后交给IP实体,由IP实体实现转发
每台设备上既实现控制功能,又实现数据平面
控制功能分布式实现
路由表--粘连(控制平面和数据平面粘连在一起)
IP转发:对于到来的分组按照路由表决定如何转发,数据平面
路由:决定路径,计算路由表;处于控制平面
路由器的网络层功能
交换机;防火墙;NAT;IDS;负载均衡设备
未来:不断增加的需求和相应的网络设备
每台设备集成了控制平面和数据平面的功能
控制平面分布式地实现了各种控制平面功能
升级和部署网络设备非常困难
需要不同的设备去实现不同的网络功能
还有其他种类繁多的网络设备(中间盒)
数量众多、功能各异的中间盒
硬件、在私有的操作系统
互联网标准协议(IP、RIP、IS-IS、OSPF、BGP)的私有实现
从上到下都由一个厂商提供(代价大、被设备“绑架”)
垂直集成:每台路由器或者其他网络设备,包括:
控制平面的功能是分布式实现的
每个设备都实现了数据平面和控制平面的事情
设备基本上只能(分布式升级困难)按照固定方式工作,控制逻辑固化。不同的网络功能需要不同的“middleboxes”:防火墙、负载均衡器、NATboxes,····
代价大;升级困难;管理困难
(数据+控制平面)集成--->(控制逻辑)分布--->固化
互联网网络设备:传统方式都是通过分布式,每台设备的方法来实现数据平面和控制平面功能
网络设备控制平面的实现方式特点
缺陷
问题
每个路由器(Per Route)的控制平面
一个不同的(通常是远程的)控制器与CA(控制代理)交互,控制器决定分组转发的逻辑(可编程),CA所在设备执行逻辑
网络设备数据平面和控制平面分离
将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(有控制平面设置的控制逻辑)进行PDU(帧或分组)动作(包括转发、丢失、拷贝、泛洪、阻塞)
统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
数据平面--分组交换机
集中、分离
计算和下发控制逻辑:流表
控制平面--控制器+网络应用
SDN的主要思路
分组交换机、控制器和各种控制逻辑网络应用app可由不同产商生产,专业化,引入竞争形成良好的生态
水平集成控制平面的开放实现(而非私有实现),创造出好的产品产业,促进发展
集中控制器了解网络状况,编程简单,传统方式困难
避免路由器的误配置
集中实现控制逻辑,网络管理容易
实现流量工作等高级特征
在此框架下实现各种新型(未来)的网络设备
基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
SDN数据平面和控制平面分离的优势
流量工程:传统路由比较困难
1.通用“flow-based”基于流的匹配+行动
2.控制平面和数据平面分离
3.控制平面功能在数据交换设备之外实现
在控制器之上以网络应用形式实现各种网络功能
4.可编程控制应用
SDN特点
快速、简单,商业化交换设备采用硬件实现通用转发功能
流表被控制器计算和安装
定义了哪些可以被控制哪些不能
基于南向API(例如OpenFlow),SDN控制器访问基于流的交换机
也定义了和控制器的协议(例如:OpenFlow)
数据平面交换机(分组交换机)
维护网络状态信息
通过上面的北向API和网络控制应用应用交互
通过下面的南向API和网络交换机交互
逻辑上集中,但是在实现上通常由于性能、可扩展性、容错性以及鲁棒性采用分布式方法
网络OS
SDN控制器
路由器 交换机
接入控制 防火墙
负载均衡
其他功能
控制的大脑:采用下层提供的服务(SDN控制器提供的API)实现网络功能
非绑定:可以被第三方提供,控制器厂商通常不同,与分组交换机厂商也可以不同
网络控制应用
控制应用
SDN架构
每一个路由器包含一个流表(被逻辑上集中的控制器计算和分发)
流:由分组(帧)头部字段所定义
模式:将分组头部字段和流表进行匹配
行动:对于匹配上的分组,可以是丢弃、转发、修改、将匹配的分组发送给控制器
优先权Priority:几个模式匹配了,优先采用哪个,消除歧义
计数器Counters:#bytes以及#packets
路由器中的路由表定义了路由器的匹配+行动规则(流表由控制器计算并下发)
通用转发:简单的分组处理规则
表项结构
Open Flow 数据平面抽象
控制器和SDN交换机交互的协议
加密可选
采用TCP来交换报文
控制器>交换机
异步(交换机>控制器))
对称
3种OpenFlow报文类型
控制器-交换机报文
OpenFlow协议
SDN:逻辑上集中的控制平面
4.4 通用转发和SDN
第四章 网络层:数据平面
路径:路由器的序列,分组将会沿着该序列从源主机到达最后的目标主机
“较好”:最小“代价”,“最快的”,“最不拥塞”
路由:一个“top 10”网络挑战
路由协议的目标:确定从发送主机到接收主机之间,通过路由器的网络“较好”的路径(等价于路由器的序列)
较好路径:按照某种指标较小的路径
指标:站数,延迟,费用,队列长度等,或者是一些单纯指标的加权平均
采用什么样的指标,表示网络使用者希望网路在什么方面表现突出,什么指标网络使用者比较重视
路由:按照某种指标(传输延迟,所经过的站点数目)等找到一条从源节点到目标节点的较好路径
路由器连接子网,子网到路由器之间的跳数就一跳,必须要走
路由器到下一跳路由器(节点到节点)之间的最优路径找到了
也就找到了从源子网向目标子网所有主机对之间的最优路径
大大降低了路由计算的规模
在路由计算中按照子网到子网的路径计算为目标,而不是主机到主机
路由器---路由器之间的最优路径=主机对之间的最优路径
路由选择算法(routing algorithm):网络层软件的一部分,完成路由功能
路由(route)的概念
网络的图抽象
最优化原则(optimality principle)
算法必须是正确的和完整的,使分组一站一站接力,正确发向目标站;完整:目标所有的站地址,在路由表中都能找到相应的表项;没有处理不了的目标站地址
正确性(correctness)
算法在计算机上应简单:最优但复杂的算法,时间上延迟很大,不实用,不应为了获取路由信息增加很多的通信量
简单性(simplicity)
算法应能适应通信量和网络拓扑的变化:通信量变化,网络拓扑的变化算法能很快适应;不向很拥塞的链路发数据,不向断了的链路发送数据
健壮性(robustness)
产生的路由不应该摇摆
稳定性(stability)
对每一个站点都公平
公平性(fairness)
某个指标的最优,时间上、费用上等指标,或者综合指标;实际上,获取最优的结果代价比较高,可以是次优的
最优性(optimality)
路由选择算法的原则
原则
所有的路由器拥有完整的拓扑和边的代价
“link state”算法
全局
路由器只知道与它有物理连接关系的邻居路由器,和到相应邻居路由器的代价值
迭代地与邻居交换路由信息、计算路由信息
“distance vector”算法
分布式
全局或者局部路由信息
路由随时间变化缓慢
非自适应算法(non-adaptive algorithm):不能适应网络拓扑和通信量的变化,路由表是事先计算好的
静态
周期性更新
根据链路代价的变化而变化
路由变化很快
能适应网络拓扑和通信量的变化
自适应路由算法(adaptive algorithm)
动态
动态或者静态
路由算法的分类
Dijkstra算法的讨论
link state(链路状态)
无穷计算问题
distance vector(距离矢量)
局部的路由信息,全局传播
LS:有n个节点,E条链路,发送报文O(nE)个
全局的路由信息,局部传播
DV:只和邻居交换信息
消息复杂度(DV胜出)
LS:O(n^2)算法,有可能震荡
DV:收敛较慢,可能存在路由环路、count-to-infinity问题
收敛时间(LS胜出)
节点会通告不正确的链路代价
每个节点只计算自己的路由表
错误信息影响较小,局部,路由较健壮
LS:
DV节点可能会通告对全网所有节点的不正确路径代价
每一个节点的路由表可能被其他节点使用
错误可能扩散全网
DV
健壮性:路由器故障会发生什么(LS胜出)
两种路由选择算法都有其优点,而且在互联网上都有应用
LS和DV算法的比较
5.1 路由选择算法
距离矢量:每条链路cost=1,# hops(max=15 hops)跳数
DV每隔30s和邻居交换DV,通告
每个通告包括,最多25个目标子网
DV算法
定期,而且在改变路由的时候发送通告报文
在对方的请求下可以发送通告报文
DV:在邻居之间每隔30s交换通告报文
目标网络+跳数
一个公告最多25个子网,最大跳数为16
每一个通告:至多AS内部的25个目标网络的DV
RIP通告(advertisements)
如果180s没有收到通告信息---->邻居或者链路失效
发现经过这个邻居的路由失效
新的通告报文会传递给邻居
邻居因此发出新的通告(如果路由变化的话)
链路失效快速(?)地在整网中传输
使用毒性逆转(poison reverse)阻止ping-pong回路(不可达的距离:跳数无限=16段)
链路失效和恢复
RIP以应用进程的方式实现:route-d(daemon)
通告报文通过UDP报文传送,周期性重复
网络层的协议使用了传输层的服务,以应用层实体的方式实现
RIP进程处理
RIP(Routing Information Protocol)
“open”:标准可公开获得
LS分组在网络中(一个AS内部)分发
全局网络拓扑、代价在每一个节点中都保持
路由算法采用Dijkstra算法
使用LS算法
OSPF通告信息中携带:每一个邻居路由器一个表项
在IP数据报上直接传送OSPF报文(而不是通过UDP和TCP)
通告信息会传遍AS全部(通过泛洪)
IS-IS路由协议:几乎和OSPF一样
安全:所有的OSPF报文都是经过认证的(防止恶意的攻击)
允许有多个代价相同的路径存在(在RIP协议中只有一个)
例如:卫星链路代价对于尽力而为的服务代价设置比较低,对实时服务代价设置的比较高
支持按照不同的代价计算最优路径,如:按照时间和延迟分别计算最优路径
对于每一个链路,对于不同的TOS有多重代价矩阵
对单播和多播的集成支持
在大型网络中支持层次性OSPF
OSPF“高级”特性(在RIP中没有的)
OSPF(Open Shortest Path First)
5.2 自治系统内部的路由选择
一个网络中的所有路由器的地位一样
通过LS,DV,或者其他路由算法,所有路由器都要知道其他所有路由器(子网)如何走
所有路由器在一个平面
一个平面的路由
DV:距离矢量很大,且不能够收敛
LS:几百万个节点的lS分组的泛洪传输,存储以及最短路径算法的计算
规模巨大的网络中,路由信息的存储、传输和计算机代价巨大
不同的网络所有者希望按照自己的方式管理网络
希望对外隐藏自己网络的细节
当然,还希望和其他网络互联
管理问题
平面路由的问题
某个区域内的路由器集合,自治系统“autonomous systems”(AS)
一个AS用AS Number(ASN)唯一标示
一个ISP可能包括1个或者多个AS
层次路由:将互联网分成一个个AS(路由器区域)
“intra-AS” routing protocol:内部网关协议
不同的AS可能运行着不同的内部网关协议
能够解决规模和管理问题
如:RIP,OSPF,IGRP
网关路由器:AS边缘路由器,可以连接到其他AS
AS内部路由:在同一个AS内部路由器运行形同的路由协议
解决AS之间的路由问题,完成AS之间的互联互通
“inter-AS”routing protocol:外部网关协议
AS间运行AS间路由协议
路由变成了:2个层次路由
如AS节点太多,可分割AS,使得AS内部节点数量有限
内部网关协议解决:AS内部数量有限的路由器互相到达的问题,AS内部规模可控
增加一个AS,对于AS之间的路由从总体上来说,只是增加了一个节点=子网(每个AS可以用一个点来表示)
对于其他AS来说只是增加了一个表项,就是这个新增的AS如何走的问题
扩展性强:规模增大,性能不会减的太多
AS之间的路由规模问题
解决了规模问题
各个AS内部可以运行不同的内部网关协议
可以使自己网络的细节不向外透露
解决了管理问题
优点
层次路由
将互联网各个AS粘在一起的胶水
BGP(Border Gateway Protocol):自治区域间路由协议“事实上的”标准
eBGP:从相邻的ASes那里获得子网可达信息
iBGP:将获得的子网可达信息传输到AS内部的所有路由器
根据子网可达信息和策略来决定到达子网的“好”路径
BGP提供给每个AS以下方法
允许子网向互联网其他网络通告“我在这里”
不仅仅是距离矢量,还包括到达各个目标网络的详细路径(AS序号的列表)能够避免简单DV算法的路由环路问题
基于距离矢量算法(路径矢量)
互联网AS间路由:BGP
通告向不同目标子网前缀的“路径”(BGP是一个“路径矢量”协议)
BGP会话:2个BGP路由器(“peers”)在一个半永久的TCP连接上交换BGP报文
prefix+attributes=”route\"
当通告一个子网前缀时,通告包括BGP属性
检测路由环路:多路径选择
在向其他AS转发时,需要将自己的AS号加在路径上
AS-PATH:前缀的通告所经过的AS列表
NEXT-HOP:从当前AS到下一跳AS有多个链路,在NEXT-HOP属性中,告诉对方通过哪个I转发
其他属性:路由偏好指标,如何被插入的属性
两个重要的属性:
过滤原因1:不想经过某个AS,转发某些前缀的分组
过滤原因2:已经有了一条前往某前缀的偏好路径
当一个网关路由器接收到一个路由通告,使用输入策略来接受或过滤(accept or decline)
策略也决定了是否向它别的邻居通告收到的这个路由信息
基于策略的路由
路径属性&路由
BGP路径通告
BGP基础
使用TCP协议交换BGP报文
OPEN:打开TCP连接,认证发送方
UPDATE:通告新的路径(或者撤销原路径)
KEEPALIVE:在没有更新时保持连接,也用于对OPEN请求确认
NOTTIFICATION:报告以前消息的错误,也用来关闭连接
BGP报文:
BGP通告
路由表表项由:AS内和AS间的路由共同决定
BGP,OSPF,转发表表项
1.本地偏好值属性:偏好策略决定
2.最短AS-PATH:As的跳数
3.最近的NEXT-HOP路由器:热土豆路由
4.附加的判据:使用BGP标示
路由器可能获得一个网络前缀的多个路径,路由器必须进行路径选择,路由器选择可以基于
一个前缀对应这多种路径,采用消除规则直到留下一条路径
BGP路径选择
Inter-AS:管理员需要控制通信路径,谁在使用它的网络进行数据传输
AS内部的各子网的主机尽可能地利用资源进行快速路由
Intra-AS:一个管理者,所以无需策略
策略:
AS间路由必须考虑规模问题,以便支持全网的数据转发
如果AS太大,可将此AS分成小的AS:规模可控
或者AS内部路由支持层次性,层次性路由节约了空间,降低了更新数据流量
AS内部路由规模不是一个大的问题
规模
Intra-AS(AS内)关注性能
Inter-AS(AS间):策略可能比性能更重要
性能
为什么内部网关协议和外部网关协议如此不同
5.3 ISP之间的路由选择:BGP
第五章 网络层控制平面
点到点连接
共享性介质
通过网络交换机
多点连接
带宽大、距离远(延迟大)
竞争方式:一旦冲突代价大
令牌协调方式:在其中协调节点的发送代价大
如果采用多点连接方式
点到点链路的链路层服务实现非常简单,封装和解封装
WAN(广域网):网络形式采用点到点链路
连接节点非常方便
接到共享型介质上(或网络交换机),就可以连接所有其他节点
多点接入:协调各节点对共享性介质的访问和使用
竞争方式:冲突之后的协调
令牌方式:令牌产生,占有和释放等
多点连接方式网络的链路层功能实现相当复杂
LAN(局域网):一般采用多点连接方式
连接实例
网络节点的连接方式
主机和路由器是节点(网桥和交换机也是):nodes
有线链路
无线链路
局域网,共享性链路
沿着通信路径,连接各个相邻节点通信信道的链路:links
第二层协议数据单元帧frame,封装数据报
数据链路层负责从一个节点通过链路将(帧中的)数据报发送给物理相邻节点
第一跳链路:以太网
中间链路:帧中继链路
最后一跳802.11(无线局域网)
数据报(分组)在不同的链路以不同的链路协议传送
例如:在链路层上提供(或没有)可靠数据传输
不同的链路协议提供不同的服务
轿车:princeton to JFK
飞机: JFK to Geneva
火车:Geneva to Lausanne
从Princeton到Lausanne
旅行者=数据报datagram
交通段=通信链路 communication link
交通模式=链路层协议:数据报链路层和局域网
票务代理=路由算法 routing algorithm
传输类比
将数据报封装在帧中,加上帧头、帧尾部
如果采用的是共享性介质,信道接入获得信道访问权
不同于IP地址
在帧头部使用“MAC”(物理)地址来标示源和目标
成帧,链路接入:
发送端对每一帧进行差错控制编码,根据反馈做出响应动作
接收端进行控制解码,反馈给发送端(ACK,NAK)
出错率低,没有必要在每一个帧中做差错控制工作,协议复杂
在本层放弃可靠控制工作,在网络层或者传输层做可靠控制的工作,或者根本不做可靠控制工作
在低出错率的链路上(光纤和双绞线电缆)很少使用
原因:出错率高,如果在链路层不做差错控制工作,漏去的错误比较高
到了上层如果需要可靠控制的数据传输代价很大
在传输层还要进行可靠数据传输
在无线链路上经常使用:出错率较高
在相邻两个节点完成可靠数据传递
使得相邻的发送和接受节点速度匹配
流量控制:
差错由信号衰减和噪声引起
通知发送端进行重传或丢弃帧
接收方检测出的错误
差错检测
接收端检查和纠正bit错误,不通过重传来纠正错误
差错纠正
半双工:链路可以双向传输,但一次只有一个方向
半双工和全双工
也在每一个路由器上
交换机的每一个端口上
在每一个主机上
在网卡(适配器)(NIC)实现
以太网,802.11网卡;以太网芯片组
实现链路层和响应物理层功能
链路层功能在“适配器”上实现(aka network interface card/NIC)或者一个芯片组上
接收到主机的系统总线上
硬件、软件和固件的综合体
实现
在帧中封装数据报
加上差错控制编码,实现RDT和流量控制功能等
检查有无出错,执行rdt和流量控制功能等
解封装数据报,将其交给上层
适配器(网卡)通信
6.1 引论
EDC=差错检测和纠正位(冗余位)
协议会检漏一些错误,但是很少
更长的EDC字段可以得到更好的检测和纠正效果
检错不是100%可靠
D=数据由差错检测保护,可以包含头部字段
错误检验
检测单个bit级错误
单bit奇偶校验
检测和纠正单个bit错误
二维奇偶校验
奇偶校验
强大的差错检验码
将数据比特D,看成是二进制的数据
生成和检验所使用的位模式
生成多项式G:双方协商r+1位模式(r次方)
<D,R>正好被G整除
接收方知道G,将<D,R>除以G,如果非0余数:检查出错误
能检查所有少于r+1位的突发错误
目标:选择r位CRC附加位R,使得
实际中广泛使用(以太网、802.11 WIFI、ATM)
突发错误和突发长度
能够检查出所有的1bit错误
能够检查出所有的双bit错误
能够检查出所有长度=r或者<r位的错误
CRC检错性能描述
性能分析
检验和:CRC(循环冗余校验)
6.2 差错检测和纠正
拨号访问的PPP
以太网交换机和主机之间的点对点链路
点对点
传统以太网
HFC上行链路
802.11无线局域网
广播(共享线路和媒体)
两种类型的链路(一个子网内部链路连接形式)
单个共享的广播型链路
多个节点在同一时刻发送,则会收到2个或多个信号叠加
2个或更多站点同时传送:冲突(collision)
引入
分布式算法--决定节点如何使用共享信道,即:决定节点什么时候发送
没有带外的信道,各节点使用其协调信道使用
用于传输控制信息
关于共享控制的通信必须用借助信道本身传输
多路访问协议(介质访问控制协议:MAC)
给定:Rbps的广播信道
1.当一个节点要发送时,可以R速率发送
2.当M个节点要发送时,每个可以以R/M的平均速率发送
没有特殊节点协调发送
没有时钟和时隙的同步
完全分布的
简单
必要条件
理想的多路访问协议
把信道划分成小片(时间、频率、编码)
分配片给每个节点专用
信道划分
轮流使用信道,信道的时间分为周期
每个站点使用每周期中固定的时隙(长度=帧传输时间)传输帧
如果站点无帧传输,时隙空闲--->浪费
如:6站LAN,1、3、4有数据报,时隙2、5、6空闲
TDMA(time division multiple access)
信道的有效频率范围被分成一个个小的频段
每个站点被分配一个固定的频段
分配给站点的频段如果没有被使用,则空闲
例如:6站LAN,1、3、4有效数据报,频段2、5、6空闲
FDMA(frequency division multiple access)
所有站点在整个频段上同时进行传输,采用编码原理加以区分
完全无冲突
假定:信号同步很好,线性叠加
CDMA(code division multiple access)码分多路访问
TDM:不同的人在不同时刻说话
FDM:不同的组在不同的小房间里通话
CDMA:不同的人使用不同的语言讲话
比方
信道不划分,允许冲突
冲突后恢复
随机访问
以信道带宽全部Rbps发送
没有节点间的预先协调
当节点有帧要发送时
两个或者更多节点同时传输,会发生----冲突(collision))
如何检测冲突
如何从冲突中恢复(如:通过稍后的重传)
所有帧是等长的
时间被划分成相等的时隙,每个时隙可以发送一帧
节点只在时隙开始时发送
节点在时钟上是同步的
如果两个或多个节点在一个时隙传输,所有的站点都能够检测到冲突
假设
当节点获取新的帧,在下一个时隙传输
节点能够在下一时隙发送新帧
传输时没有检测到冲突,成功
节点在每一个随后的时隙以概率p重传帧知道成功
如果检测到冲突,失败
运行
节点可以以信道带宽全速连续传输
高度分布:仅需要节点之间在时隙上的同步
存在冲突,浪费时隙
即使有帧要发送,仍然有可能存在空闲的时隙
必须传完
节点检测冲突的时间<帧传输的时间
需要时钟上同步
效率
时隙ALOHA
(纯ALOHA)无时隙ALOHA:简单、无需节点间在时间上同步
当帧需要传输:马上传输
帧在t0发送,和其他在【t0-1,t0+1】区间内开始发送的帧冲突
和当前帧冲突的区间(其他帧在此空间开始传输)增大了一倍
冲突的概率增加
ALOHA
冲突仍然可能发生
由于传播延迟造成:两个节点可能侦听不到正在进行的传输
整个冲突帧在传输时间都被浪费了,是无效的传输(红黄区域)
冲突
传播延迟决定了冲突的概率
注意
节点根据本地信息使用情况来判断全部信道的使用情况
CSMA冲突(事前侦听)
载波侦听CSMA:和在CSMA中一样,发送前侦听信道
没有传送完一个帧就可以在短时间内检测到冲突
冲突发生时则传输终止,减少对信道的浪费
检测信号强度,比较传输与接收的信号是否相同
通过周期的过零点检测
冲突检测CD技术,有线局域网中容易实现
礼貌的对话人
人类类比
1.适配器获取数据报,创建帧
闲:开始传送帧
忙:一直等到闲再发送
2.发送前:侦听信道CS
没有冲突:成功
检测到冲突:放弃,之后尝试重发
3.发送过程中,检测冲突CD
强化冲突:让所有站都知道冲突
4.发送方适配器检测到冲突,除放弃以外,还发送一个Jam信后,所有听到冲突的适配器也是如此
目标:适配器试图适应当前负载,在一个变化的碰撞窗口中随机选择时间点尝试重发
高负载:重传窗口时间大,减少冲突,但是等待时间长
低负载:重传窗口时间少,冲突概率大,但等待时间少
exponential backoff(二进制指数退避算法)
5.如果放弃,适配器进入指数退避状态
以太网CSMA/CD算法
比ALOHA更好的性能,而且简单、廉价、分布式
CAMA/CD(冲突检测)(边说边听)
基站:AP
移动主机节点
WLAN构成
冲突:2+站点(或AP)在同一时刻发送
不会和其他节点正在进行的传输发生冲突
802.11:CSMA---发送前侦听信道
无法检测冲突:自身信号远远大于其他节点信号
即使能CD:冲突!=不成功
无法CD,一旦发送一股脑全部发送完毕,不CD
为了避免无CD带来的信道利用率低的问题,事前进行冲突避免
目标:avoid collisions:CSMA/CA
802.11:没有冲突检测(CD)
1.如果站点侦听到信道空闲持续DIFS长,则传输整个帧(Not CD)
回退值到0时(只生在信道空闲时)发送整个帧,如果没有收到ACK,增加回退值,重复2
2.如果侦测到信道忙碌,那么 选择一个随机回退值,并在信道空闲时递减该值;如果信道忙碌,回退值不会变化
如果帧正确,则在SIFS后发送ACK
802.11接收方
CSMA/CA
需要每帧确认
例如:由于隐藏终端问题,在接收端可能形成干扰,接收方没有正确地接收到。
链路可靠机制
无线链路特性
两个站点有数据帧需要发送,第三个节点正在发送
让二者听完第三个节点发送完,立即发送
冲突:放弃当前的发送,避免了信道的浪费于无用冲突帧的发送
代价不昂贵
LAN CD
无法CD:一旦发送就必须发完,如冲突信道浪费严重,代价高昂
思想:尽量事先避免冲突,而不是在发生冲突时放弃然后重发
不同的随机值,一个站点会胜利
失败站点会冻结计数器,当胜利节点发完再发
听到发送的站点,分别选择随机值,回退到0发送
WLAN CA
在count down时,侦听到了信道空闲为什么不发送,而要等到0时发送
A、B互相隐藏,C在传输
A、B选择了随机回退值
一个节点如A胜利了,发送
而B节点收不到,顺利count down 到0发送
A、B的发送在C附近形成了干扰
两个站点互相隐藏
A、B选择的值非常近
A到0后发送
但是这个信号还没有到B时
B也到0了,发送
选择了非常靠近的随机回退值
无法完全避免冲突
无线局域网CSMA/CA(冲突避免)
CSMA、CSMA/CD、CSMA/CA
随机MAC协议
随机存取协议规定
随机存取协议
下行:通过FDM分成若干信道,互联网、数字电视等
互联网信道:只有1个CMTS在其上面传输
多个40Mbps下行(广播)信道,FDM
多路访问:所有用户使用;接着TDM分成微时隙
部分时隙:分配;部分时隙:竞争
多个30Mbps上行信道,FDM
采用TDM的方式将上行信道分成若干微时隙:MAP指定
站点采用分配给它的微时隙上行数据传输:分配
各站点对于该时隙的使用是随机的
一旦碰撞(请求不成功,结果是:在下行的MAP中没有为它分配,则二进制退避)选择时隙上传
在特殊的上行微时隙中,个站点请求上行微时隙:竞争
DOCSIS:TDM上行信道
上行信道预约时隙,下行信道分配时隙
线缆接入网络(信道划分和随机访问的综合)
节点依次轮流
但是有很多数据传输的节点可以获得较长的信道使用权
依次轮流
共享信道在高负载时是有效和公平的
只能等到自己的时隙开始发送或者利用1/N的信道频率发送
当只有一个节点有帧传送时,也只能够得到1/N个带宽的分配
在低负载时效率低下
信道划分MAC协议
在低负载时效率高:单个节点可以完全利用信道全部带宽
高负载时:冲突开销大,效率极低,时间很多浪费在冲突中
随机访问MAC协议
有二者的优点
主节点邀请从节点依次传送
从节点一般比较“dumb”
轮询开销:轮询本身消耗信道带宽
等待时间:每个节点需等到主节点轮询后开始传输,即使只有一个节点,也需要等到轮询一周后才能够发送
单点故障:主节点失效造成整个系统无法工作
轮询
控制令牌(token)循环从一个节点到下一个节点传递
令牌报文:特殊的帧
令牌帧变为数据帧,被接收方复制,再回到发送方,令牌谁发谁接(因为可能有多个接收方)
令牌开销:本身消耗带宽
延迟:只有等到抓住令牌,才可传输
令牌丢失系统故障,整个系统无法传输
复杂机制重新生成令牌
单点故障(token):
令牌传递
轮流(Taking Turns)MAC协议
MAC(媒体访问控制)协议:分类
多点接入问题:对于一个共享型介质,各个节点如何协调对它的访问和使用
TDMA、FDMA、CDMA
信道划分:按时间、频率或者编码
ALOHA,S-ALOHA、CSMA、CSMA/CD、CSMA/CA
载波侦听:在有些介质上很容易(有线介质),但有些介质比较困难(无线)
CSMA/CD:802.3 Ethernet中使用
CSMA/CA:802.11WLAN中使用
随机访问(动态)
集中:由一个中心节点轮询;分布:通过令牌控制
蓝牙、FDDI、令牌环
依次轮流协议
6.3 多点访问协议
网络层地址
用于使数据报到达目标IP子网:前n-1跳
从而到达子网中的目标节点:最后一跳
32位IP地址
用于使帧从一个网卡传递到其物理连接的另一个网卡(在同一物理网络中)
48bitMAC地址固化在适配器的ROM,有时也可以通过软件设定
理论上全球任何2个网卡的MAC地址都不相同
例如:1A-2F-BB-76-09-AD(16进制表示,一位4bit)
LAN(MAC/物理/以太网)地址
IP地址和MAC地址的作用不同
一个子网所有站点网络号一致,路由聚集,减少路由表项
需要一个网络中的站点地址网络号一致,如果捆绑需要定制网卡非常麻烦
希望网络层地址是配置的:IP地址完成网络到网络的交付
IP地址是分层的
网卡在生产时不知道被用于哪个网络,因此给网卡一个唯一的标示,用于区分一个网络内部不同的网卡即可
可以完成一个物理网络内部的节点到节点的数据交付
MAC地址是一个平面
网卡坏了,ip不变,可以捆绑到另一个网卡的MAC上
物理网络还可以除IP以外支持其他网络层协议,链路协议为任意上层网络协议服务,如IPX等
分离的好处
如果仅仅使用IP地址,不用MAC地址,那么它仅支持IP协议
每次上电都要重新写入网卡IP地址
另外一个选择就是不使用任何地址:不用MAC地址,则每到来一个帧都要上传到IP层次,由它判断是不是需要接收,干扰一次
捆绑的问题
网络地址和MAC地址分离
局域网上每个适配器都有一个唯一的LAN地址
MAC地址由IEEE管理和分配
制造商购入MAC地址空间(保证唯一性)
MAC地址:身份证号
IP地址:通讯地址
类比:
可以将网卡接到其他网络中
MAC平面地址--》支持移动
依赖于节点连接的IP子网,与子网的网络号相同(有与其相连的子网相同的网络前缀)
IP地址有层次--》不能移动
LAN地址和ARP
已知B的IP地址,如何确定B的MAC
在LAN上的每个IP节点都有一个ARP表
ARP表:包括一些LAN节点IP/MAC地址的映射
<IP address ; MAC address ; TTL >(TTL是指地址映射失效的时间)典型是20min
A要发送帧给B(B的IP地址已知),但B的MAC地址不在A的ARP表中
Dest MAC address=FF-FF-FF-FF-FF-FF
LAN上的所有节点都会收到该查询包
A广播包含B的IP地址的ARP查询包
帧发送给A
用A的MAC地址(单播)
B接收到ARP包,回复A自己的MAC地址
软状态:靠定期刷新维持的系统状态
定期刷新周期之间维护的状态信息可能和原有系统不一致
A在自己的ARP表中,缓存IP-to-MAC地址映射关系,直到信息超时
节点自己创建ARP的表项
无需网络管理员的干预
ARP是即插即用的
ARP协议:在同一LAN
walkthrough:发送数据报:由A通过R到B,假设A知道B的IP地址
在R上有两个ARP表,分别对应两个LAN
在源主机的路由表中,发现到目标主机的下一跳时111.111.111.110
在源主机的ARP表中,发现其MAC地址是E6-E9-00-17-BB-4B
A创建数据报,源IP地址:A;目标IP地址:B
帧从A发送到R
在R接收到,从中提取出IP分组,交给上层IP协议实体
R转发数据报,数据报源IP地址为A,目标IP地址为B
R创建一个链路层的帧,目标MAC地址为B,帧中包含A到B的IP数据报
ARP(Address Resolution Protocol)
目前最流行的LAN技术:98%占有率
廉价:30元RMB 100Mbps
最早广泛应用的LAN技术
比令牌网和ATM网络简单、廉价
带宽不断提升:10M、100M、1G、10G
在上个世纪90年代中期很流行
所有节点在一个碰撞域内,一次只允许一个节点发送
可靠性差,如果介质破损,截面形成信号反射,发送节点误认为是冲突,总是冲突
总线
目前最主流
连接选择:hub或者Switch
现在一般是交换机在中心
每个节点以及相连的交换机端口使用(独立的)以太网协议(不会和其他节点的发送产生碰撞)
星型
物理拓扑
发送方适配器在以太网帧中封装IP数据报,或者其他网络层协议数据单元
如:帧目标地址=本站MAC地址,或是广播地址;接收、递交帧中的数据到网络层
否则,适配器忽略该帧
地址:6字节源MAC地址,目标MAC地址
类型:指出高层协议(大多数是IP,但也支持其他网络层协议Novell IPX 和 Apple Talk)
如果没有通过校验,丢弃错误帧
CRC:在接收方校验
前导码+目标地址+源地址+类型(如IP,IPX)+ 数据报+循环冗余校验
7B 10101010+1B 10101011
用来同步接收方和发送方的时钟频率
使得接收方将自己的时钟调到发送端的时钟
从而可以按照发送端的时钟来接收发送的帧
前导码:
以太帧结构
无连接:帧传输前,发送方和接收方之间没有握手
递交给网络层的数据报流可能有gap(间隔,有些数据丢了)
如上层使用像传输层TCP协议这样有rdt,gap会被补上(源主机,TCP实体)
否则,应用层就会看到gap
不可靠:接收方适配器不发送ACKs或者NAKs给发送方
以太网的MAC协议:采用二进制退避的CSMA/CD介质访问形式
无连接、不可靠的服务
很多不同的以太网标准
相同的MAC协议(介质访问控制)和帧结构
不同的速率:2Mbps、10Mbps、100Mbps、1Gbps、10Gbps
不同的物理层标准
不同的物理层媒介:光纤,同轴电缆和双绞线
802.3以太网标准:链路和物理层
没有时隙
NIC如果侦听到其他NIC在发送就不发送:载波侦听(carrier sense)
发送时,适配器当侦听到其他适配器在发送就放弃对当前帧的发送,冲突检测(CD)
冲突后尝试重传,重传前适配器等待一个随机时间,随机访问(random access)
使用CSMA/CD
100 mbps速率也被称为“fast Ethernet”
T代表双绞线
逻辑上是总线型,盒中总线
节点连接到HUB上:“star topology”物理上星型
节点和HUB间的最大距离是100m
hubs本质上是物理层的中继器
从一个端口收,转发到所有其他端口
速率一致
没有帧的缓存
在hub端口上 有CSMA/CD机制:适配器检测冲突
提供网络管理功能
HUB
在10BaseT中使用
每一个bit的位时中间有一个信号跳变
节点间不需要集中和全局的时钟
允许在接收方和发送方节点之间进行时钟同步
10Mbps,使用20M带宽,效率50%
Manchester编码
100BaseT and 10BaseT
采用标准的以太帧格式
千兆以太网
MAC地址和ARP
6.4 LANs
第六章 链路层和局域网
自由主题
0 条评论
回复 删除
下一页