分层是抽象的自然结果,特别是在网络系统中,分层的总体思想是从底层硬件提供的服务开始,然后增加一系列的层,每一层都提供给更高级(更抽象)的服务(每一层本身也有很多种抽象)。高层提供的服务用底层提供服务来拓展实现。一个比较好的例子是:可以将网络简单设想为夹在应用程序和底层硬件之间的两层抽象(应用程序--进程对进程的信道--主机对主机的连接--硬件),硬件上的第一层提供主机到主机的连接,对两台主机之间任意复杂的网络拓扑进行抽象。上面一层基于主机到主机的通信服务,对进程到进程的信道提供支持,对网络偶尔出现丢失消息的事实进行抽象。
优点:
为更准确讨论网络的体系结构,构成网络系统分层的抽象对象成为协议
ISO是最早正式定义计算机互联通用方法的组织之一,它们的体系结构称为开放系统互联(OpenSystemInterconnection,OSI)体系结构,将网络按功能划分为七层,由一个或多个协议实现分配给某个特定层的功能。
第一层:物理层
在OSI参考模型中,物理层是参考模型的最低层,也是OSI模型的第一层。物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。
第二层:数据链路层
数据链路层(DataLinkLayer)是OSI模型的第二层,负责建立和管理节点间的链路。在计算机网络中由于各种干扰的存在,导致物理链路是不可靠的。因此这一层的主要功能是:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。
第三层:网络层
网络层(NetworkLayer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通信子网的最高一层,它在下两层的基础上向资源子网提供服务。其主要功能是:在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接,将数据设法从源端经过若干个中间节点传送到目的端(点到点),从而向传输层提供最基本的端到端的数据传输服务。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。数据链路层和网络层的区别为:数据链路层的目的是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。
第四层:传输层
OSI下3层的任务是数据通信,上3层的任务是数据处理。而传输层(TransportLayer)是OSI模型的第4层。该层提供建立、维护和拆除传输连接的功能,起到承上启下的作用。该层的主要功能是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。
第五层:会话层
会话层是OSI模型的第5层,是用户应用程序和网络之间的接口,该层的主要功能是:组织和协调两个会话进程之间的通信,并对数据交换进行管理。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。域名就是一种网络上使用的远程地址。会话层的具体功能如下:
第六层:表示层
表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。该层的主要功能是:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。表示层的具体功能如下:
第七层:应用层
应用层是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,该层的主要功能是:直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外该层还负责协调各个应用程序间的工作。应用层的具体功能如下:
因特网体系结构有时也称为TCP/IP体系结构,因为TCP和IP是它的两个主要协议。尽管七层OSI模型理论上能够应用于因特网,但实际上通常采用四层模型(如果是五层,则在最后补上物理层),而缺少的表示层和会话层功能,由应用层实现。
数据在不同层之间的称呼:
应用层:数据/报文(Message)
传输层:(1)TCP报文段(Segment)
(2)UDP数据段(Datagram)
网络层:分组/数据报(Packet)
数据链路层:帧(frame)
物理层:比特(bit)
网络边缘主要包含主机、应用程序(客户端和服务器)
主机,即端系统,其上运行着应用程序如Web、email(但这些其实算在网络的边缘)主机工作模式如下:
目标:在端系统之间传输数据
TCP–传输控制协议(TransmissionControlProtocol)Internet上面向连接的服务
TCP服务[RFC793]
可靠地、按顺序地传送数据
流量控制
拥塞控制
目标:在端系统之间传输数据
UDP–用户数据报协议(UserDatagramProtocol)[RFC768]
无连接不可靠数据传输无流量控制无拥塞控制
电路交换、分组交换
端到端的资源被分配给从源端到目标端的呼叫“call”:
独享资源:不同享(nosharing)
如果呼叫没有数据发送,被分配的资源就会被浪费
网络资源(如带宽)被分成片
为呼叫预留端-端资源
计算举例
电路交换不适合计算机之间的通信
以**分组为单位**存储-转发方式
资源共享,按需使用:
相当于多个电路交换,延迟更大(排队延迟,存储/转发延迟),而来换取了共享性
存储-转发
被传输到下一个链路之前,整个分组必须到达路由器:存储-转发在一个速率为Rbps的链路,一个长度为Lbits的分组的存储转发延时:L/Rs(注意不是L/R*2,传输和接受是同一个过程,只是对象不同而已)
排队和延迟:
如果到达速率>链路的输出速率:
统计多路复用
A&B时分复用链路资源A&B分组没有固定的模式->统计多路复用(本质是一种特殊的时分复用)
网络核心的关键功能
路由:决定分组采用的源到目标的路径
转发:将分组从路由器的输入链路转移到输出链路
分组交换与电路交换的区别
同样的网络资源,分组交换允许更多用户使用网络!
分组交换是“突发数据的胜利者”
分组交换按照有无网络层的连接分类
分组交换——分组的存储转发一段一段从源端传到目标端
数据报(datagram)的工作原理
虚电路(virtualcircuit)的工作原理
把网络边缘接入网络核心
Q:怎样将端系统和边缘路由器连接?
注意:
拨号调制解调器
接入网:digitalsubscriberline(DSL)
核心是将一段频率的信号,分解为多段,预留出音频信号的部分,取对称剩余部分,分为上行传输频率段和下行传输频率段
接入网:线缆网络
有线电视信号线缆双向改造(原有的只能单向传下行的电视信号)FDM:在不同频段传输不同信道的数据,数字电视和上网数据(上下行)
核心是将一段频率的信号,分解为多段,预留出电视信号的部分,取非对称剩余部分,分为上行传输频率段和下行传输频率段,一般上行会更长
fiberoptictransport——光纤传输
接入网:家庭网络
router,firewall,NAT
各无线端系统共享无线接入网络(端系统到无线路由器)
Bit:在发送-接收对间传播
物理链路:连接每个发送-接收对之间的物理媒体导引型媒体:信号沿着固体媒介被导引:同轴电缆、光纤、双绞线非导引型媒体:开放的空间传输电磁波或者光信号,在电磁或者光信号中承载数字数据
双绞线(TP)两根绝缘铜导线拧合:5类:100Mbps以太网,Gbps千兆位以太网6类:10Gbps万兆以太网
同轴电缆、光纤
同轴电缆:
光纤和光缆:
无线链路
无线链路类型:
按ISP划分互联网
问题:给定数百万接入ISPs,如何将它们互联到一起
将每个接入ISP都连接到全局ISP(全局范围内覆盖)?显然这是不可能的客户ISPs和提供者ISPs有经济合约
竞争:但如果全局ISP是有利可为的业务,那会有竞争者合作:通过ISP之间的合作可以完成业务的扩展,肯定会有互联,对等互联的结算关系Internetexchangepoint(IXP)
业务会细分(全球接入和区域接入),区域网络将出现,用于将接入ISPs连接到全局ISPs然后内容提供商网络(InternetContentProviders,ICPe.g.,Google,Microsoft,Akamai)可能会构建它们自己的网络,将它们的服务、内容更加靠近端用户,向用户提供更好的服务,减少自己的运营支出
在网络的最中心,一些为数不多的充分连接的大范围网络(分布广、节点有限、但是之间有着多重连接)
中心:第一层ISP(如UUNet,BBN/Genuity,Sprint,AT&T)国家/国际覆盖,速率极高
第二层ISP:更小些的(通常是区域性的)ISP
第三层ISP与其他本地ISP
一个分组要经过许多网络!
很多内容提供商(如:Google,Akamai)可能会部署自己的网络,连接自己的在各地的DC(数据中心),走自己的数据连接若干localISP和各级(包括一层)ISP,更加靠近用户
分组丢失和延时是怎样发生的?
在路由器缓冲区的分组队列分组到达链路的速率超过了链路输出的能力分组会在缓冲区排队,造成延时分组等待排到队头、被传输若队列已满则分组被丢失
四种分组延时
车队类比
情况一、
情况二、
汽车以1000km/hr的速度传播汽车收费站服务每辆车需1分钟Q:在所有的汽车被第一个收费站服务之前,汽车会到达第二个收费站吗?
Yes!7分钟后,第一辆汽车到达了第二个收费站,而第一个收费站仍有3辆汽车在整个分组被第一个路由器传输之前,第一个比特已经到达了第二个路由器!
R=链路带宽(bps)L=分组长度(bits)a=分组到达队列的平均速率
流量强度=La/RLa/R~0:平均排队延时很小La/R->1:延时变得很大,趋近无穷La/R>1:比特到达队列的速率超过了从该队列输出的速率,平均排队延时将趋向无穷大!设计系统时流量强度不能大于1!
Internet的延时和路由是什么样的呢Traceroute诊断程序:提供从源端,经过路由器,到目的的延时测量Foralli:沿着目的的路径,向每个路由器发送3个探测分组路由器i将向发送方返回一个分组发送方对发送和回复之间间隔计时
Traceroute是利用ICMP协议运作的
测试网址:www.traceroute.orgwww.linkwan.com
链路的队列缓冲区容量有限当分组到达一个满的队列时,该分组将会丢失丢失的分组可能会被前一个节点或源端系统重传,或根本不重传
瓶颈链路:端到端路径上,限制端到端吞吐的链路(吞吐量最小的链路)
吞吐量:互联网场景
链路上的每一段实际可用带宽Ri’=端到端吞吐量:min{Ri’}每个连接上的端到端吞吐:min(Rc,Rs,R/10)10个人在用实际上:Rc或者Rs经常是瓶颈
网络是一个复杂的系统!网络功能繁杂:数字信号的物理信号承载、点到点、路由、rdt、进程区分、应用等现实来看,网络的许多构成元素和设备:
模块化分解/分层
例子:两位异地哲学家的交流哲学家/翻译层/邮局
层次化方式实现复杂网络功能:将网络复杂的功能分层功能明确的层次,每一层实现了其中一个或一组功能,功能中有其上层可以使用的功能:服务(垂直关系)本层协议实体相互交互执行本层的协议动作(水平关系),目的是实现本层功能,通过接口为上层提供更好的服务在实现本层协议的时候,直接利用了下层所提供的服务本层的服务:借助下层服务实现的本层协议实体之间交互带来的新功能(上层可以利用的)+更下层所提供的服务
服务和服务访问点
服务(Service):低层实体向上层实体提供它们之间的通信的能力服务用户(serviceuser)服务提供者(serviceprovider)原语(primitive):上层使用下层服务的形式,高层使用低层提供的服务,以及低层向高层提供服务都是通过服务访问原语来进行交互的—形式比如socketAPI(一些类型的函数)服务访问点SAP(ServicesAccessPoint):上层使用下层提供的服务通过层间的接口—地点;
服务的类型
面向连接的服务和无连接的服务-方式
面向连接的服务(Connection-orientedService)也即TCP
无连接的服务(ConnectionlessService)也即UDP
服务和协议
服务与协议的区别
服务(Service):低层实体向上层实体提供它们之间的通信的能力,是通过原语(primitive)来操作的,垂直
协议(protocol):对等层实体(peerentity)之间在相互通信的过程中,需要遵循的规则的集合,水平
服务与协议的联系:
本层协议的实现要靠下层提供的服务来实现本层实体通过协议为上层提供更高级的服务
数据单元(DU,dataunit)
ICI:接口控制信息-InterfaceControlInformation
上层的PDU对于本层是SDU,封装后对于本层是PDU两者的封装关系:一对一、一个SDU分成多个再进行封装,成多个PDU(一对多)、多个SDU封装成一个PDU(多对一)
分层处理和实现复杂系统的好处?
对付复杂的系统
概念化:结构清晰,便于标示网络组件,以及描述其相互关系分层参考模型
结构化:模块化更易于维护和系统升级改变某一层服务的实现不影响系统中的其他层次对于其他层次而言是透明的如改变登机程序并不影响系统的其它部分改变2个秘书使用的通信方式不影响2个翻译的工作改变2个翻译使用的语言也不影响上下2个层次的工作
分层思想被认为有害的地方?效率相对较低
Internet协议栈
这些服务,如果需要的话,必须被应用实现
链路层交换机主要用于组建局域网,而路由器则主要负责连接外网并寻找网络中最合适数据传输的路径。
最后需要说明的是:路由器一般都具有防火墙功能,能够对一些网络数据包选择性的进行过滤。现在的一些路由器都具备交换机的功能,也有具备路由器功能的交换机,称为三层交换机。相比较而言,路由器的功能较交换机要强大,但是速度也相对较慢,价格较为昂贵,而三层交换机既有交换机的线性转发报文的能力,又有路由器的路由功能,因此得到了广泛的应用。
各层次的协议数据单元
应用层:报文(message)传输层:报文段(segment):TCP段,UDP数据报网络层:分组packet(如果无连接方式:数据报datagram)数据链路层:帧(frame)物理层:位(bit)
1980-1990:体系结构变化,网络数量激增,应用丰富
1983:TCP/IP部署NCP分化成2个层次,TCP/IP,从而出现UDP覆盖式IP解决网络互联问题主机设备和网络交换设备分开1982:smtpe-mail协议定义1983:DNS定义,完成域名到IP地址的转换1985:ftp协议定义1988:TCP拥塞控制
其他网络形式的发展新的国家级网络:Csnet,BITnet,NSFnet,Minitel1985年:ISO/OSI提出,时机不对且太繁琐,
100,000主机连接到网络联邦
TCP/IP极具包容性IPforeverything
1990,2000’s:商业化,Web,新的应用Web与超文本(杀手级应用登场)
网络应用的体系结构
可能的应用架构:
服务器:
客户端:
缺点:可拓展性差达到一定能限(阈值),性能暴跌,可靠性差
Napster
即时通信
进程:在主机上运行的应用程序
**客户端进程:发起通信的进程**
服务器进程:等待连接的进程
注意:P2P架构的应用也有客户端进程和服务器进程之分
问题1:进程标示和寻址问题(对于进程谁发/谁收,对等层实体之间)
问题2:传输层-应用层提供服务是如何(上下层间)
问题3:如何使用传输层提供的服务,实现应用进程之间的报文交换,实现应用(用户使用服务)
进程为了接收报文,必须有一个标识
即:SAP(发送也需要标示)
一些知名端口号的例子:
一个进程:用IP+port标示端节点
本质上,一对主机进程之间的通信由2个端节点构成
层间接口必须要携带的信息
传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装
TCPsocket:
TCPsocket是一个整数(类似文件描述符)代表一个四元组(我的IP和端口号对方的IP和端口号)便于管理使得穿过层间的信息量最小是应用层和传输层的一个约定本地会话的标识
对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标识
穿过层间接口的包括ICI和SDU
接口又称为服务访问点,从物理层开始,每一层都向上层提供服务访问点。也就是说没有接口,就无法提供服务。
服务数据单元(SDU),第n层的服务数据单元,记作n-SDU。
协议控制信息(PCI),第n层的协议控制信息,记作n-PCI。
接口控制信息(ICI),第n层的接口控制信息,记作n-ICU。
协议数据单元(PDU),第n层协议数据单元,记作n-PDU,表示同等层对等实体间传输的数据单元。
n-SDU+n-PCI=n-PDU
接口数据单元(IDU),第n层接口数据单元,记作n-IDU,表示相邻接口间传输的数据单元。
n-SDU+n-ICI=n-IDU
UDPsocket:
对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标识
套接字(Socket)
进程向套接字发送报文或从套接字接收报文
套接字<->门户
定义了:运行在不同端系统上的应用进程如何相互交换报文
应用协议仅仅是应用的一个组成部分Web应用:HTTP协议,web客户端,web服务器,HTML(超文本标记语言)
公开协议:
专用(私有)协议:
如何描述传输层的服务?
数据丢失率
延迟
吞吐
安全性
实体:实行网络协议的软件模块或硬件模块(运行中的)
TCP服务:
UDP服务:
Q:为什么要有UDP
UDP存在的必要性
安全TCP
TCP&UDP
SSL提供安全性
SSL在应用层(存疑的,也有说在传输层的,不好说)
SSLsocketAPI
一些术语
Web页:由一些对象组成(真正意义上都是对象哇)
对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等
Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)
通过URL对每个对象进行引用
URL格式:
HTTP:超文本传输协议
使用TCP:
HTTP是无状态的
维护状态的协议很复杂!
非持久HTTP
持久HTTP
非持久HTTP的缺点:
非流水方式的持久HTTP:客户端只能在收到前一个响应后才能发出新的请求每个引用对象花费一个RTT
流水方式的持久HTTP:HTTP/1.1的默认模式客户端遇到一个引用对象就立即产生一个请求所有引用(小)对象只花费一个RTT是可能的
注:流水式有点像并发?(不是并行啦)
两种类型的HTTP报文:请求、响应HTTP请求报文:
HTTP请求报文:通用格式
提交表单输入(向服务器提交信息)
Post方式:
URL方式:
参数:wd,cl参数值:XX+YY+zzz,3
方法类型
HTTP/1.0
HTTP/1.1
HTTP响应状态码
位于服务器→客户端的响应报文中的首行一些状态码的例子:
200OK
301MovedPermanently(一般说的重定向问题)
400BadRequest
404NotFound
505HTTPversionNotsupported
TryingoutHTTP(clientside)foryourself
大多数主要的门户网站使用cookies4个组成部分:
1)在HTTP响应报文中有一个cookie的首部行
2)在HTTP请求报文含有一个cookie的首部行
3)在用户端系统中保留有一个cookie文件,由用户的浏览器管理
4)在Web站点有一个后端数据库
例子:Susan总是用同一个PC使用InternetExplore上网她第一次访问了一个使用了Cookie的电子商务网站当最初的HTTP请求到达服务器时,该Web站点产生一个唯一的ID,并以此作为索引在它的后端数据库中产生一个项
Cookies:维护状态
Cookies能带来什么:
如何维持状态:
Cookies与隐私:
注:一个很好的例子,CDN(ContentDeliveryNetwork,内容分发网络),正向代理
目标:不访问原始服务器,就满足客户的请求
为什么要使用Web缓存?
缓存示例
假设
平均对象大小=100kb
机构内浏览器对原始服务器的平均请求率为=15请求/s
平均到浏览器的速率:1.5Mbps
机构内部路由器到原始服务器再返回到路由器的的延时(Internet延时)=2s
接入链路带宽:1.54Mbps
结果
LAN的流量强度=15%
接入链路上的流量强度=99%
总延时=LAN延时+接入延时+Internet延时=ms+分+2s
缓存示例:更快的接入链路
接入链路带宽:1.54Mbps——>154Mbps
接入链路上的流量强度=99%-->9.9%
总延时=LAN延时+接入延时+9.9%Internet延时=ms+分+2s
代价:增加了接入链路带宽(非常昂贵!)
这个方法是降低了排队延迟(钞能力是吧)
LAN利用率:15%
接入网络利用率:?
总体延迟=Howtocomputelinkutilization,delay
代价:web缓存(廉价!)
计算链路利用率,有缓存的延迟:
条件GET方法(对象版本和服务器版本一致性问题)
FTP:文件传输协议
命令样例:
返回码样例:
状态码和状态信息(同HTTP)
FTP协议是有状态的,FTP协议的控制命令和数据传输分别在两个TCP上进行
3个主要组成部分:
用户代理(客户端软件)
邮件服务器
举例:Alice给Bob发送报文
HTTP比较:
SMTP:交换email报文的协议RFC822:文本报文的标准:
报文格式:多媒体扩展
Base64常用于在处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。在MIME格式的电子邮件中,base64可以用来将二进制的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写拉丁字母各26个、数字10个、加号+和斜杠/,共64个字符,等号=用来作为后缀用途。
两推一拉
POP3协议用户确认阶段
事物处理阶段客户端:
用户确认阶段
事物处理阶段,
POP3
IMAP
DNS(DomainNameSystem)
从域名到IP地址的转换(主要功能)
DNS系统需要解决的问题
DNS(DomainNameSystem)的历史
DNS的主要思路
DNS主要目的
其它目的
DNS域名结构
DNS名字空间(TheDNSNameSpace)
域名(DomainName)
域名的管理
域与物理网络无关
一个名字服务器的问题
区域(zone)
权威DNS服务器:组织机构的DNS服务器,提供组织机构服务器(如Web和mail)可访问的主机和IP之间的映射组织机构可以选择实现自己维护或由某个服务提供商来维护
DNS记录
DNS:保存资源记录(RR)的分布式数据库
RR格式:(name,value,type,ttl)
信息1(叫什么)TYPE=NSName放的是子域的名字Value子域名字服务器(权威DNS服务器)的名字
信息2(在哪)Type=AName放的是名字(子域的名字)Value对应服务器的IP地址
一台设备上网必备的IP信息我的IP地址我的子网掩码我的localnameserve我的defaultgetway(路由器)
名字解析过程
目标名字在LocalNameServer中
当与本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD一直找到权威名字服务器
递归查询
迭代查询
DNS协议:查询和响应报文的报文格式相同
提高性能:缓存
在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名和域名服务器的地址(Type=NS、Type=A相当于指针)
在新增子域的名字服务器上运行名字服务器,负责本域的名字解析:名字->IP地址例子:在com域中建立一个“NetworkUtopia”
到注册登记机构注册域名networkutopia.com
在networkutopia.com的权威服务器中确保有
攻击DNS总的说来,DNS比较健壮
DDoS攻击
流量是分布式查询有几乎都有缓存,基本不需要根——>无根也基本安全
服务器传输:都是由服务器发送给peer,服务器必须顺序传输(上载)N个文件拷贝:
客户端:每个客户端必须下载一个文件拷贝
采用C-S方法将一个F大小的文件分发给N个客户端耗时Dc-s>max{NF/us(随着N线性增长),F/dmin}(瓶颈却决于服务器的性能和客户端性能的相对强弱)
服务器传输:最少需要上载一份拷贝
客户端:每个客户端必须下载一个拷贝
客户端:所有客户端总体下载量NF
采用P2P方法将一个F大小的文件分发给N个客户端耗时Dp2p>max{F/us,F/dmin,NF/(us+Sui)}
C-S线性P2P非线性性能高可拓展性强难管理(动态性强)
非结构化P2P任意连接DHT结构化P2P如:环形、树节点哈希内容哈希按一定规律存内容
例子
所有的对等方都是服务器=可扩展性好!
可能的方案
最初的“Napster”设计
集中式目录中存在的问题
文件传输是分散的,而定位内容则是高度集中的
覆盖网络:图
Gnutella:对等方加入(网络的建立)
每个对等方要么是一个组长,要么隶属于一个组长
组长跟踪其所有的孩子的内容
组长与其他组长联系
1.请求排队
2.激励优先权
3.并行下载
文件被分为一个个块256KB每个节点有一个bitmap(hash),用map标记是否具备,有则标识为1否则为0网络中的这些peers发送接收文件块,相互服务
Peer加入torrent:
请求块:
周期性的,Alice节点向邻居询问他们拥有哪些块的信息
Alice向peer节点请求它希望的块,稀缺的块(稀缺优先,对集体有利)
1、(集体提出)客户端优先请求稀缺的(稀缺优先,对集体有利)
2、(集体定的规则)优先向提供服务好的客户端服务(个人利益与集体利益绑定)
3、(造成个人遵守)客户端优先请求稀缺的(利他等于利己)
发送块:一报还一报tit-for-tat
更高的上载速率:发现更好的交易伙伴,获得更快的文件传输速率!
视频流化服务和CDN:上下文
多媒体:视频
视频:固定速度显示的图像序列
网络视频特点:
数字化图像:像素的阵列
编码:使用图像内和图像间的冗余来降低编码的比特数
CBR:(constantbitrate):以固定速率编码
DASH(DynamicAdaptiveStreamingoverHTTP动态自适应)
“智能”客户端:客户端自适应决定
挑战:服务器如何通过网络向上百万用户同时流化视频内容(上百万视频内容)
也即:相当简单,但是这个方法不可扩展
enterdeep:将CDN服务器深入到许多接入网
bringhome:部署在少数(10个左右)关键位置(到用户的跳数较多),如将服务器簇安装于POP附近(离若干1stISPPOP较近)
采用租用线路将服务器簇连接起来
Limelight
CDN:在CDN节点中存储内容的多个拷贝让内容靠近用户e.g.NetflixstorescopiesofMadMen
用户从CDN中请求内容(先从原服务器获取告知文件manifestfile,自适应选择块)(域名解析的重定向)重定向到最近的拷贝,请求内容
如果网络路径拥塞,可能选择不同的拷贝
互联网络主机-主机之间的通信作为一种服务向用户提供
OTT(互联网公司越过运营商,发展基于开放互联网的各种视频及数据服务业务),overthetop
案例学习:Netflix
Socket编程
应用进程使用传输层提供的服务能够交换报文,实现应用协议,实现应用TCP/IP:应用进程使用SocketAPI访问传输服务地点:界面上的SAP(Socket)方式:SocketAPI目标:学习如何构建能借助sockets进行通信的C/S应用程序
socket:分布式应用进程之间的门,传输层协议提供的端到端服务接口
2种传输层服务的socket类型:TCP:可靠的、字节流(bitStream)的服务UDP:不可靠、数据UDP数据报(dategram)服务
套接字:应用进程与端到端传输协议(TCP或UDP)之间的门户TCP服务:从一个进程向另一个进程可靠地传输字节流
服务器首先运行,等待连接建立
1:服务器进程必须先处于运行状态
2:创建客户端本地套接字(隐式捆绑到本地port)
3:当与客户端连接请求到来时
4:连接API调用有效时,客户端P与服务器建立了TCP连接
从应用程序的角度
TCP在客户端和服务器进程之间提供了可靠的、字节流(管道)服务
实际上,这里描述了C-S之间交互的动作次序
数据结构sockaddr_inIP地址和port捆绑关系的数据结构(标示进程的端节点)
structsockaddr_in{shortsin_family;//AF_INETu_shortsin_port;//portstructin_addrsin_addr;//IPaddress,unsignedlongcharsin_zero[8];//align校准};123456数据结构hostent域名和IP地址的数据结构
structhostent{char*h_name; //域名char**h_aliases; /别名inth_addrtype; inth_length;/*地址长度*/char**h_addr_list; //IP地址#defineh_addrh_addr_list[0];}12345678作为调用域名解析函数时的参数返回后,将IP地址拷贝到sockaddr_in的IP地址部分
系统自己默认使用了bind,自动分配
argv[1]主机的名字argv[2]端口号argv[0]程序的名字
UDP:在客户端和服务器之间没有连接没有握手发送端在每一个报文中明确地指定目标的IP地址和端口号服务器必须从收到的分组中提取出发送端的IP地址和端口号
UDP:传送的数据可能乱序,也可能丢失
进程视角看UDP服务UDP为客户端和服务器提供不可靠的字节组的传送服务
应用程序体系结构
应用程序需要的服务品质描述:
Internet传输层服务模式:
流行的应用层协议:
更重要的:学习协议的知识
应用层协议报文类型:请求/响应报文:
报文格式:
首部:关于数据信息的字段
数据:被交换的信息
控制报文vs.数据报文
带内(一个TCP传两种报文)、带外(两个TCP)
集中式vs.分散式
无状态vs.维护状态
可靠的vs.不可靠的报文传输
在网络边缘处理复杂性
一个协议定义了在两个或多个通信实体之间交换报文的格式和次序,以及就一条报文传输和接收或其他事件采取的动作
传输服务和协议
有些服务是可以加强的:不可靠->可靠;安全但有些服务是不可以被加强的:带宽,延迟
可靠的、保序的传输:TCP(字节流的服务)
不可靠、不保序的传输:UDP(数据报的服务)
都不提供的服务:延时保证带宽保证
多路复用/解复用(一个TCP/UDP实体上有很多应用进程借助其发送,也有一个进程下多个线程的数据复用到一个比特流/数据报里)
在发送方主机多路复用从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)
在接收方主机多路解复用根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)
多路解复用工作原理
无连接(UDP)多路解复用
当创建UDP段采用端口号,可以指定:
当主机接收到UDP段时:
面向连接(TCP)的多路复用
TCP套接字:四元组本地标识:
解复用:接收主机用这四个值来将数据报定位到合适的套接字
socket和message
UDP:UserDatagramProtocol用户数据报协议在IP(主机到主机)所提供的基础上增加了一个多路复用/解复用(进程到进程)的服务
UDP校验和目标:检测在被传输报文段中的差错(如比特反转)
发送方:
接收方:
注意:当数字相加时,在最高位的进位要回卷(加到最低位上),再加到结果上
目标端:校验范围+校验和=1111111111111111通过校验否则没有通过校验
注:求和时,必须将进位回卷到结果上
可靠数据传输(rdt)的原理rdt(ReliableDataTransfer)TCP是基于rdt的传输协议(rdt范围更大咯)
信道的不可靠特点决定了可靠数据传输协议(rdt)的复杂性
下层的信道是完全可靠的
发送方和接收方的FSM
发送方:接收–封装–打走
接收方:解封装–交付什么都不用干
下层信道可能会出错:将分组中的比特翻转,用校验和来检测比特差错
问题:怎样从差错中恢复:
rdt2.0中的新机制:
发送方接收nak(接收方检测出错),将之前封装的package重传,直到收到ack才开始下一轮的发送
如果ACK/NAK出错?
发送方不知道接收方发生了什么事情!
发送方如何做?
重传?可能重复
不重传?可能死锁(或出错)
需要引入新的机制
处理重复:
停等协议:发送方发送一个分组,然后等待接收方的应答
在分组中加入序列号
两个序列号(0,1)就足够了
一次只发送一个未经确认的分组
必须检测ACK/NAK是否出错
状态数变成了两倍
必须记住当前分组的序列号为0还是1
注意:接收方并不知道发送方是否正确收到了其ACK/NAK
rdt2.1的运行
NAKfree
rdt2.2的运行
1、Noerror2、packeterror3、ackerror
新的假设:下层信道可能会丢失分组(数据或ACK)
会死锁(死锁描述的是两个或多个线程由于相互等待而永远被阻塞的情况)
机制还不够处理这种状况:检验和序列号ACK重传
1、noloss
2、packetloss
3、ACKloss
4、prematuretimeout/delayedACK
rdt3.0可以工作,但链路容量比较大的情况下,性能很差
一次收发一个
pipeline
发送方缓冲:未得到确认,可能需要重传;
接收方缓存:上层用户取用数据的速率≠接收到的数据速率;接收到的数据可能乱序,排序交付(可靠)
两种通用的流水线协议:回退N步(GBN)和选择重传(SR)
发送缓冲区的大小:一次最多可以发送多少个未经确认的分组
发送缓冲区中的分组
采用相对移动方式表示,分组不动
可缓冲范围移动,代表一段可以发送的权力
发送窗口:发送缓冲区内容的一个范围
发送窗口的最大值<=发送缓冲区的值
一开始:没有发送任何一个分组
每发送一个分组,前沿前移一个单位
发送窗口前沿移动的极限:不能够超过发送缓冲区的大小
发送窗口后沿移动
条件:收到老分组的确认
结果:发送缓冲区罩住新的分组,来了分组可以发送
移动的极限:不能够超过前沿
接收窗口(receivingwindow)=接收缓冲区
例子:Wr=1,在0的位置;只有0号分组可以接收;向前滑动一个,罩在1的位置,如果来了第2号分组,则丢弃。
接收窗口的滑动和发送确认
发送窗口
接收窗口
相同之处
不同之处
GBN:接收窗口尺寸=1
SR:接收窗口尺寸>1
Go-back-N:
SelectiveRepeat:
发送窗口的最大值(发送缓冲区)限制发送未确认分组的个数
发送方
从上层接收数据:
timeout(n):
ACK(n)in[sendbase,sendbase+N]:
接收方
分组n[rcvbase,rcvbase+N-1]
分组n[rcvbase-N,rcvbase-1]
其它:
适用范围
窗口的最大尺寸
GBN:2^n-1SR:2^(n-1)例
如:n=2;序列号:0,1,2,3
SR的例子:
Q:序号大小与窗口大小之间的关系?
点对点:一个发送方,一个接收方
可靠的、按顺序的字节流:没有报文边界
管道化(流水线):TCP拥塞控制和流量控制设置窗口大小
发送和接收缓存
全双工数据:
面向连接:在数据交换之前,通过握手(交换控制报文)初始化发送方、接收方的状态变量
有流量控制:发送方不会淹没接收方
序号:报文段首字节的在字节流的编号
确认号:1、期望从另一方收到的下一个字节的序号2、累积确认
怎样设置TCP超时?
怎样估计RTT?
EstimatedRTT=(1-a)EstimatedRTT+aSampleRTT
指数加权移动平均过去样本的影响呈指数衰减推荐值:a=0.125
TCP在IP不可靠服务的基础上建立了rdt
管道化的报文段GBNorSR
通过以下事件触发重传
超时(只重发那个最早的未确认段:SR)
重复的确认
例子:收到了ACK50,之后又收到3个ACK50
首先考虑简化的TCP发送方:忽略重复的确认忽略流量控制和拥塞控制
从应用层接收数据:
超时:
收到确认:
TCP重传
ACK丢失过早超时对顺序收到的最高字节确认
产生TCPACK的建议
超时周期往往太长:
在重传丢失报文段之前的延时太长
通过重复的ACK来检测报文段丢失
发送方通常连续发送大量报文段
如果报文段丢失,通常会引起多个重复的ACK
如果发送方收到同一数据的3个冗余ACK,重传最小序号的段:
快速重传:在定时器过时之前重发报文段
它假设跟在被确认的数据后面的数据丢失了
第一个ACK是正常的;
收到第二个该段的ACK,表示接收方收到一个该段后的乱序段;
收到第3,4个该段的ack,表示接收方收到该段之后的2个,3个乱序段,段丢失了的可能性非常大
三重ACK接收后的快速重传
接收方控制发送方,不让发送方发送的太多、太快以至于让接收方的缓冲区溢出
接收方在其向发送方的TCP段头部的rwnd字段“通告”其空闲buffer大小
发送方限制未确认(“inflight”)字节的个数≤接收方发送过来的rwnd值
保证接收方不会被淹没
RcvWindow=缓冲区空间-已经接收到未读取的空间
在正式交换数据之前,发送方和接收方握手建立通信关系:
同意建立连接(每一方都知道对方愿意建立连接)
同意连接参数
2次握手的失败场景:
1、可能发送半连接(只在服务器维护了连接)2、老的数据被当成新的数据接收了seqx和x+1
TCP3次握手
解决方案:变化的初始序号+双方确认对方的序号(3次握手)
第一次:seq第二次:ACK+seq第三次:ACK
二次握手:可能发送半连接(只在服务器维护了连接)三次握手:客户端在第三次握手拒绝连接请求服务器二次握手后的连接请求
二次握手:老的数据被当成新的数据接收了三次握手:未建立连接(无半连接),故将发来的数据丢掉
扔掉:连接不存在,没建立起来;连接的序号不在当前连接的范围之内
拥塞:
拥塞的表现:
巨大延迟
理想化:发送端有完美的信息发送端知道什么时候路由器的缓冲是可用的只在缓冲可用时发送不会丢失:λ(in‘’)=λ(in)
理想化:掌握丢失信息分组可以丢失,在路由器由于缓冲器满而被丢弃如果知道分组丢失了,发送方重传分组
现实情况:重复分组可能丢失,由于缓冲器满而被丢弃发送端最终超时,发送第2个拷贝,2个分组都被传出
现实情况:重复分组可能丢失,由于缓冲器满而被丢弃发送端最终超时,发送第2个拷贝,2个分组都传到
拥塞的“代价”:
输出比输入少原因:1)重传的丢失分组;2)没有必要重传的重复分组
输出输入比降低,需要更多的输入包才能达到正常状态的输出包,其中发出了很多重复浪费的包
1、4个发送端
2、多重路径
3、超时/重传
又一个拥塞的代价:当分组丢失时,任何“关于这个分组的上游传输能力”都被浪费了
2种常用的拥塞控制方法:
端到端拥塞控制:
网络辅助的拥塞控制:
ABR:availablebitrate:
RM(资源管理)信元:
由发送端发送,在数据信元中间隔插入
RM信元中的比特被交换机设置(“网络辅助”)有无拥塞
NIbit:noincreaseinrate(轻微拥塞)速率不要增加了
CIbit:congestionindication拥塞指示
发送端发送的RM信元被接收端返回,接收端不做任何改变
在RM信元中的2个字节ER(explicitrate)字段多大带宽
拥塞的交换机可能会降低信元中ER的值
发送端发送速度因此是最低的可支持速率(交换机)
数据信元中的EFCIbit:被拥塞的交换机设置成1
如果在管理信元RM前面的数据信元EFCI被设置成了1,接收端在返回的RM信元中设置CIbit
总结:网络提供一些信息,包括一些标志位的置位以及字段(为两主机间的通信提供多大的带宽)
端到端的拥塞控制机制
路由器不向主机有关拥塞的反馈信息
路由器的负担较轻
符合网络核心简单的TCP/IP架构原则
端系统根据自身得到的信息,判断是否发生拥塞,从而采取动作
拥塞控制的几个问题
发送端如何探测到拥塞
某个段超时了(丢失事件):拥塞
原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)概率大
原因2:出错被丢弃了(各级错误,没有通过校验,被丢弃)概率小
一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的
有关某个段的3次重复ACK:轻微拥塞
段的第1个ack,正常,确认绿段,期待红段
段的第2个重复ack,意味着红段的后一段收到了,蓝段乱序到达
段的第2、3、4个ack重复,意味着红段的后第2、3、4个段收到了,橙段乱序到达,同时红段丢失的可能性很大(后面3个段都到了,红段都没到)
网络这时还能够进行一定程度的传输,拥塞但情况要比第一种好
如何控制发送端发送的速率
维持一个拥塞窗口的值:CongWin(主要手段)
发送端限制已发送但是未确认的数据量(的上限):LastByteSent-LastByteAcked<=CongWin
从而粗略地控制发送方的往网络中注入的速率
联合控制的方法:
连接刚建立,CongWin=1MSS
可用带宽可能>>MSS/RTT
当连接开始时,指数性增加发送速率,直到发生丢失的事件
当连接开始时,指数性增加(每个RTT)发送速率直到发生丢失事件
乘性减:丢失事件后将CongWin降为1(ss阶段通常可忽略,故相当于直接减少到CongWin/2),将CongWin/2作为阈值,进入慢启动阶段(倍增直到CongWin/2)
加性增:当CongWin>阈值时,一个RTT如没有发生丢失事件,将CongWin加1MSS:探测
当收到3个重复的ACKs:
当超时事件发生时:
出现丢失,Threshold设置成CongWin的1/2
状态转换
TCP的平均吞吐量是多少,使用窗口window尺寸W和RTT来描述忽略慢启动阶段,假设发送端总有数据传输
2个竞争的TCP会话:加性增加,斜率为1,吞吐量增加乘性减,吞吐量比例减少
往返延迟相同时,TCP会话竞争的最终,双方的有效的带宽将收敛到链路带宽的一半。所以相互竞争时应用建立的TCP会话越多,占有带宽一般越大。
公平性和UDP
公平性和并行TCP连接
2个主机间可以打开多个并行的TCP连接
Web浏览器
例如:带宽为R的链路支持了9个连接;
网络层功能:
旅行的类比:
在每一个路由器中的单独路由器算法元件,在控制平面进行交互紧耦合,难以修改
一个不同的(通常是远程的)控制器与本地控制代理(CAs)交互网络操作系统运行在集中的控制器上
Q:从发送方主机到接收方主机传输数据报的“通道”,网络提供什么样的服务模型?
在某些网络架构中是第三个重要的功能ATM,framerelay,X.25
在分组传输之前,在两个主机之间,在通过一些路由器所构成的路径上建立一个网络层连接涉及到路由器
网络层和传输层连接服务区别:网络层:在2个主机之间,涉及到路径上的一些路由器——有连接传输层:在2个进程之间,很可能只体现在端系统上(TCP连接)——面向连接
高层面(非常简化的)通用路由器体系架构
输入端口有个队列
3种典型的交换机构
第一代路由器:
同时并发转发多个分组,克服总线带宽限制
当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存
由调度规则选择排队的数据报进行传输
优先权调度-谁会获得最优性能,网络中立?
调度:选择下一个要通过链路传输的分组
优先权调度:发送最高优先权的分组
有红的不传绿的
RoundRobin(RR)scheduling:多类循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类现实例子
互联网的网络层主机,路由器中的网络层功能:
IP协议主要实现的是数据平面的转发功能
、
16-bitidentifierflgsfragmentoffset——分片/重组使用
flagflag——标识后面还有没有
长途链路——点到点的形式中国到日本的链路计算机局域网——多点连接的方式
方法:
子网掩码:11111111111111111111111100000000Subnetmask:/24
ClassA:126networks,16millionhosts
ClassB:16382networks,64Khosts
ClassC:2millionnetworks,254host
ClassD:multicast
ClassE:reservedforfuture
全0全1不用
CIDR:ClasslessInterDomainRouting(无类域间路由)
Q:主机如何获得一个IP地址
第二次是因为可能有多个DHCP服务器,要确认用哪一个
DHCP返回:
第一次握手
联网笔记本需要获取自己的IP地址,第一跳路由器地址和DNS服务器:采用DHCP协议DHCP请求被封装在UDP段中,封装在IP数据报中,封装在以太网的帧中以太网帧在局域网范围内广播(dest:FFFFFFFFFFFF)被运行DHCP服务的路由器收到以太网帧解封装成IP,IP解封装成UDP,解封装成DHCP
DHCP服务器生成DHCPACK,包含客户端的IP地址,第一跳路由器的IP地址和DNS域名服务器的IP地址DHCP服务器封装的报文所在的帧转发到客户端,在客户端解封装成DHCP报文客户端知道它自己的IP地址,DNS服务器的名字和IP地址,第一跳路由器的IP地址
第二次握手略
Q:如何获得一个网络的子网部分A:从ISP获得地址块中分配一个小地址块
ISP’sblock11001000000101110001000000000000200.23.16.0/20Organization011001000000101110001000000000000200.23.16.0/23Organization111001000000101110001001000000000200.23.18.0/23Organization211001000000101110001010000000000200.23.20.0/23………….….Organization711001000000101110001111000000000200.23.30.0/23
匹配冲突时候,采取的是最长前缀匹配
Q:一个ISP如何获得一个地址块A:ICANN:InternetCorporationforAssignedNamesandNumbers
实现:NAT路由器必须:
实际上就是用外网的某个IP代替内网里面的网络号,出去的时候替换原来IP和端口号进来的时候替换目标IP和端口号
客户端需要连接地址为10.0.0.1的服务器
方案1:静态配置NAT:转发进来的对服务器特定端口连接请求
方案2:UniversalPlugandPlay(UPnP)InternetGatewayDevice(IGD)协议.允许NATted主机可以:动态分配端口
i.e.,自动化静态NAT端口映射配置
IPv6数据报格式:
Priority:标示流中数据报的优先级FlowLabel:标示数据报在一个“flow.”(“flow”的概念没有被严格的定义)Nextheader:标示上层协议
类比:旅行
数据平面细节
控制平面整体
每个路由器上都有实现路由算法元件(它们之间需要相互交互)-形成传统IP实现方式的控制平面
控制平面式分布式的,由各个路由器的各自完成,难于管理
一个不同的(通常是远程)控制器和CA交互,控制器决定分组转发的逻辑(可编程),CA所在设备执行逻辑。
水平集成控制平面的开放实现(而非私有实现),创造出好的产业生态,促进发展
集中式实现控制逻辑,网络管理容易:
基于流表的匹配+行动的工作方式允许“可编程的”分组交换机
要买硬件就要买操作系统就要买专用的软件
Q:网管如果需要u到z的流量走uvwz,x到z的流量走xwyz,怎么办?
A:需要定义链路的代价,流量路由算法以此运算(IP路由面向目标,无法操作)(或者需要新的路由算法)!
链路权重只是控制旋钮,错!
Q:如果网管需要将u到z的流量分成2路:uvwz和uxyz(负载均衡),怎么办(IP路由面向目标)
A:无法完成(在原有体系下只有使用新的路由选择算法,而在全网部署新的路由算法是个大的事情)
Q:如果需要w对蓝色的和红色的流量采用不同的路由,怎么办?
A:无法操作(基于目标的转发,采用LS,DV路由)
数据平面交换机
SDN控制器(网络OS):
网络控制应用:
每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)
通用flow-bascd基于流的匹配+行动(c.g,DpcnFlow)
OpenFlow,一种网络通信协议,属于数据链路层,能够控制网上交换器或路由器的转发平面(forwardingplane),借此改变网络数据包所走的网络路径。
OpenFlow能够启动远程的控制器,经由网络交换器,决定网络数据包要由何种路径通过网络交换机。这个协议的发明者,将它当成软件定义网络(Software-definednetworking)的启动器。
OpenFlow允许从远程控制网络交换器的数据包转送表,透过新增、修改与移除数据包控制规则与行动,来改变数据包转送的路径。比起用访问控制表(ACLs)和路由协议,允许更复杂的流量管理。同时,OpenFlow允许不同供应商用一个简单,开源的协议去远程管理交换机(通常提供专有的接口和描述语言)。
OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。
OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。
问题:转发表(基于目标的转发)和流表(通用转发)是如何计算出来的?答案:通过控制平面(下一章)
回顾:2个网络层功能:
2种构建网络控制平面功能的方法:
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
一个不同的(通常是远程的)控制器与本地控制代理(CAs)交互.
上发状态,下发流表
N=路由器集合={u,v,w,x,y,z}E=链路集合={(u,v),(u,x),(v,x),(v,w),(x,w),(x,y),(w,y),(w,z),(y,z)}边有代价
c(x,x’)=链路的代价(x,x’)-e.g.,c(w,z)=5代价可能总为1或是链路带宽的倒数或是拥塞情况的倒数
路由的输入:拓扑、边的代价、源节点输出的输出:源节点的汇集树
路由选择算法的原则
全局或者局部路由信息
全局:所有的路由器拥有完整的拓和边的代价的信息“linkstate”算法
分布式:路由器只知道与它有物理连接关系的邻居路由器,和到相应邻居路由器的代价值叠代地与邻居交换路由信息、计算路由信息“distancevector”算法
静态或者动态的
配置LS路由选择算法的路由工作过程
LS路由的基本工作过程
发现相邻节点,获知对方网络地址一个路由器上电之后,向所有线路发送HELLO分组其它路由器收到HELLO分组,回送应答,在应答分组中,告知自己的名字(全局唯一)在LAN中,通过广播HELLO分组,获得其它路由器的信息,可以认为引入一个人工节点
组装一个分组,描述相邻节点的情况发送者名称序号,年龄列表:给出它相邻节点,和它到相邻节点的延迟
将分组通过扩散的方法发到所有其它路由器
顺序号:用于控制无穷的扩散,每个路由器都记录(源路由器,顺序号),发现重复的或老的就不扩散
具体问题1:循环使用问题
具体问题2:路由器崩溃之后序号从0开始
具体问题3:序号出现错误
解决问题的办法:年龄字段(age)
关于扩散分组的数据结构Source:从哪个节点收到LS分组Seq,Age:序号,年龄Sendflags:发送标记,必须向指定的哪些相邻站点转发LS分组ACKflags:本站点必须向哪些相邻站点发送应答DATA:来自source站点的LS分组
节点B的数据结构
通过Dijkstra算法找出最短路径
LS(linkstate)的应用情况
符号标记:c(i,j):从节点i到j链路代价(初始状态下非相邻节点之间的链路代价为∞)D(v):从源节点到节点V的当前路径代价(节点的代价)p(v):从源到节点V的路径前序节点N’:当前已经知道最优路径的的节点集合(永久节点的集合)
LS路由选择算法的工作原理
初始化
从所有临时节点中找到一个节点代价最小的临时节点,将之变成永久节点(当前节点)W——选择
对此节点的所有在临时节点集合中的邻节点(V)——更新
如D(v)>D(w)+c(w,v),则重新标注此点,(D(W)+C(W,V),W)
否则,不重新标注
开始一个新的循环——循环
例子:
算法复杂度:n节点每一次迭代:需要检查所有不在永久集合N中节点n(n+1)/2次比较:O(n2)有很有效的实现:O(nlogn)可能的震荡:e.g.,链路代价=链路承载的流量路径改变次数过多
动态路由算法之一
DV算法历史及应用情况
距离矢量路由选择的基本思想以每个点为中心更新路由表
递归风车
SPFA——优化后的Bellman-Ford
告诉B无穷,D真实值
消息复杂度(DV胜出)O(NE)
健壮性(LS胜出)节点之间影响较小
在1982年发布的BSD-UNIX中实现
如果180秒没有收到通告信息–>邻居或者链路失效
一个平面的路由
平面路由的问题
规模巨大的网络中,路由信息的存储、传输和计算代价巨大
管理问题:
(一个平面搞不定)
解决了
规模问题
管理问题
强化控制平面:可信、可靠、性能可扩展性、安全的分布式系统
网络、协议满足特殊任务的需求
互联网络范围内的扩展性
自治系统(autonomoussystems,aka“network”):1000多个相互的软件和硬件部件
其他复杂系统也需要被监视和控制:喷气飞机核电站其他例子?
“网络管理”包括了硬件、软件和人类元素的设置,综合和协调,以便监测,测试,轮询,配置,分析,评价和控制网络和网元资源,用合理的成本满足实时性,运行能和服务质量的要求;
WAN——广域网,LAN——局域网
WAN:网络形式采用点到点链路带宽大、距离远(延迟大)
带宽延迟积大如果采用多点连接方式竞争方式:一旦冲突代价大令牌等协调方式:在其中协调节点的发送代价大
点到点链路的链路层服务实现非常简单,封装和解封装
LAN一般采用多点连接方式连接节点非常方便接到共享型介质上(或网络交换机),就可以连接所有其他节点
多点连接方式网络的链路层功能实现相当复杂多点接入:协调各节点对共享性介质的访问和使用竞争方式:冲突之后的协调;令牌方式:令牌产生,占有和释放等
一些术语:
数据链路层负责从一个节点通过链路将(帧中的)数据报发送到相邻的物理节点(一个子网内部的2节点)
传输类比
Q:为什么在链路层和传输层都实现了可靠性?
一般化的链路层服务,不是所有的链路层都提供这些服务一个特定的链路层只是提供其中一部分的服务
在相邻节点间(一个子网内)进行可靠的转发
我们已经学习过(见第三章)!
在低差错链路上很少使用(光纤,一些双绞线)
在高差错链路上需要进行可靠的数据传送
高差错链路:无线链路:
Q:为什么要在采用无线链路的网络上,链路层做可靠数据传输工作;还要在传输层做端到端的可靠性工作?
原因:出错率高,如果在链路层不做差错控制工作,漏出去的错误比较高;到了上层如果需要可靠控制的数据传输代价会很大
——出错率较大的时候,传到上层再纠错代价大
流量控制:
错误检测:
差错纠正:
半双工和全双工:
发送方:
EDC=差错检测和纠正位(冗余位)
D=数据由差错检测保护,可以包含头部字段错误检测不是100%可靠的!
错误检测不是100%可靠的!
目标:检测在传输报文段时的错误(如位翻转),(注:仅仅用在传输层)
有更简单的检查方法全部加起来看是不是全1
1、模二运算——异或运算
2、位串的两种表示
3、生成多项式,r次方
G=X^3+1r+1位例子:1001
4、发送方:根据r位CRC计算r位冗余位,使得
D——发送的数据(左移r位)+R——冗余位(r位)
G——生成多项式(r-1次方)
remainder——余数、当余数R不足r位,补0
两种类型的链路(一个子网内部链路连接形式):
多路访问协议(介质访问控制协议:MAC)
必要条件:
3大类
检错冲突与冲突解决/冲突避免
时隙ALOHA的效率(Efficiency)
纯ALOHA的效率
CSMA冲突
CSMA/CD(冲突检测)
以太网CSMA/CD算法
CSMA/CD效率
无线局域网中的MAC:CSMA/CA
冲突避免
冲突避免:RTS-CTS交换
多点接入问题:对于一个共享型介质,各个节点如何协调对它的访问和使用
addressing,ARP
IP地址和MAC地址的作用不同a)IP地址是分层的——二层
b)mac地址是一个平面的
从IP的角度,是从一个路由器到另一个路由器。从链路层的角度,是从一个网卡当另一个网卡。
局域网上每个适配器都有一个唯一的LAN地址
全F的MAX地址是广播地址
问题:已知B的IP地址,如何确定B的MAC地址
发送方适配器在以太网帧中封装IP数据报,或其他网络层协议数据单元
前导码:
采用标准的以太帧格式允许点对点链路和共享广播信道物理编码:8b10b编码在共享模式,继续使用CSMA/CDMAC技术,节点间需要较短距离以提高利用率交换模式:全双工千兆可用于点对点链路站点使用专用信道,基本不会冲突,效率高除非发往同一个目标站点10Gbpsnow!
Q:交换机如何知道通过接口1到达A,通过接口5到达B’
A:每个交换机都有一个交换表switchtable,每个表项:
(主机的MAC地址,到达该MAC经过的接口,时戳)比较像路由表!
Q:每个表项是如何创建的?如何维护的?
有点像路由协议
交换机通过学习得到哪些主机(mac地址)可以通过哪些端口到达
帧的目标:A’,不知道其位置在哪:泛洪A’A
交换机可被级联到一起
Q:AtoG的发送–交换机S1如何知道经过从S4和S3最终达到FA:自学习!(和在一个交换机联接所有站点一样!)
假设C向I发送帧,I给C应答
Q:显示交换表和帧在S1,S2,S3,S4的转发
都是存储转发设备,但层次不同
都有转发表:
交换机:
维护交换表,按照MAC地址转发
路由器:续
考虑场景:
回顾:页面请求的历程
客户端有了IP地址,知道了DNS域名服务器的名字和IP地址第一跳路由器的IP地址
1.带宽(bandwidth)
2.吞吐量(throughput)
3.带宽与吞吐量的区别
吞吐量与带宽的区分:吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps。先来看两者对应的英语,吞吐量:throughput;带宽:bandwidth。当讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数,它取决于链路时钟速率和信道编码,在计算机网络中又称为线速。可以说以太网的带宽是10Mbps。但是需要区分链路上的可用带宽(带宽)与实际链路中每秒所能传送的比特数(吞吐量)。通常更倾向于用“吞吐量”一词来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。
带宽和速率虽然单位一样,说的目的物不一样。
速率说的是水流,也就是水流的速度。
也就是带宽说的是数据传输的载体,而速率说的是数据本身,吞吐量指的是实际传输的数据。
举个例子:
比如说一条宽带是200M(实际最高下载速率是25MB/s,带宽用的基础单位是位,8位等于1字节),就是运营商给你开了一个200M的口子。
但是你的下载速率未必能达到200M,这个取决于不同设备的带宽,比如你用的是百兆光猫,或者百兆路由(主要取决于WAN口的带宽),那么你的下载速率最高只能是100M带宽的速率,也就是12.5MB/s。
不同设备带宽的限制的原因是不一样的,这个展开说的太多了。
我简单说一下,而且因为我不是专业研究这个的,可能说的不准确,大家理解这个意思就行。
当然实际上不止是导线的材质,还有外皮的材质(是否能屏蔽干扰)等多个方面影响带宽。
频分复用
所谓频分复用是指按照频率的不同来复用多路信号的方法。在频分复用中,信道的带宽被分为若干个相互不重叠的频段,每路信号占用其中一个频段,因而在接受端可以采用适当的带通滤波器将多路信号分开,从而恢复出所需要的信号。频分复用系统组成原理,各路基带信号首先通过低通波滤器限制基带信号的带宽,避免他们的频谱出现相互混叠。然后,各路信号分别对各自的载波进行调制、合成后送入信道传输。在接收端,分别采用不同中心频率的带通滤波器分离出各路已调型号,解调后恢复出基带信号。
波分复用
在同一根光纤中同时让两个或两个以上的光波长信号通过不同光信道各自传输信息,称为光波分复用技术,简称WDM。
也即频分复用是一个信道分成多个不同频率的频段,而波分复用是将多个波长光波信号合成在一根光纤里传播
来自维基百科的解释:
传输时延
传播时延
传播时延和传输时延的比较
一种通俗的理解,传播是什么?我们经常说声音在空气中的传播,而不是说声音在空气中的传输,传播速率是与介质有关的。同理,回到计算机网络上,传播延迟,也就是指的在两台路由器之间的距离除以传播速率计算得到。
在分组交换网络中,具体分为数据报网络和虚电路网络
简单的理解:数据报是按地址找人,不事先确定路好不好走;虚电路是先去一次,熟悉一下路线,再进行发送。
首先要明白这里的2.4G是指频段,2.4Ghz=2400Mhz
交换机和路由器的区别:
1.路由器可以给你的局域网自动分配IP,虚拟拨号,就像一个交通警察,指挥着你的电脑该往哪走,你自己不用操心那么多了。交换机只是用来分配网络数据的。
2.路由器在网络层(第三层),路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以。
3.交换机在中继层(第二层数据链路层),交换机根据MAC地址寻址。路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP。
4.路由器提供防火墙的服务,交换机不能提供该功能。集线器、交换机都是做端口扩展的,就是扩大局域网(通常都是以太网)的接入点,也就是能让局域网可以连进来更多的电脑。路由器是用来做网间连接,也就是用来连接不同的网络。
交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
路由器和交换机的区别一:交换机是一根网线上网,但是大家上网是分别拨号,各自使用自己的宽带,大家上网没有影响。而路由器比交换机多了一个虚拟拨号功能,通过同一台路由器上网的电脑是共用一个宽带账号,大家上网要相互影响。路由器和交换机的区别二:交换机工作在中继层,交换机根据MAC地址寻址。路由器工作在网络层,根据IP地址寻址,路由器可以处理TCP/IP协议,而交换机不可以。
路由器和交换机的区别三:交换机可以使连接它的多台电脑组成局域网,如果还有代理服务器的话还可以实现同时上网功能而且局域网所有电脑是共享它的带宽速率的,但是交换机没有路由器的自动识别数据包发送和到达地址的功能。路由器可以自动识别数据包发送和到达的地址,路由器相当于马路上的警察,负责交通疏导和指路的。
路由器和交换机的区别四:举几个例子,路由器是小邮局,就一个地址(IP),负责一个地方的收发(个人电脑,某个服务器,所以你家上网要这个东西),交换机是省里的大邮政中心,负责由一个地址给各个小地方的联系。简单的说路由器专管入网,交换机只管配送,路由路由就是给你找路让你上网的,交换机只负责开门,交换机上面要没有路由你是上不了网的。
路由器和交换机的区别五:路由器提供了防火墙的服务。路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。
以下来自维基百科:
在互联网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符的语法是一般的,可扩展的,它使用美国信息交换标准代码的一部分来表示因特网的地址。统一资源定位符的开始,一般会标志着一个计算机网络所使用的网络协议。
统一资源定位符的标准格式如下:
统一资源定位符的完整格式如下:
其中[访问凭证信息]、[端口号]、[查询]、[片段ID]都属于选填项。
语法:
超文本传输协议的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如“www”。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。
什么是ip地址?
IP是32位二进制数据,通常以十进制表示,并以“.”分隔。IP地址是一种逻辑地地址,用来标识网络中一个个主机,IP有唯一性,即每台机器的IP在全世界是唯一的。
IP地址=网络地址+主机地址。
什么是子网掩码?
子网掩码不是单独存在的,它用于计算一个ip地址所归属的网络地址以及主机地址。通俗的说,判断两个ip是否在同一个子网下。
网络地址计算方法:ip地址的二进制和子网掩码的二进制作与运算。
主机地址计算方法:ip地址的二进制和(子网掩码取反之后)的二进制作与运算。
为什么需要网络地址?
网络地址用于判断不同主机是否位于同一个网络下,如果是,则不同主机之间才能进行通信。
为什么需要主机地址?
主机地址用于标识不同主机在网络中的位置,只有明确了位置,不同主机之间才可以明确是和谁在进行通信。
可以这么来理解,网络地址相当于我们位于同一个小区,主机地址相当于小区里每个住户的门牌号。只有在这个小区里的住户才能够通信,而且谁跟谁通信可以通过门牌号进行识别。
什么是网关?
网关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。可以这么理解,现在有另外一个小区,他想和我们现在的小区进行通信,那应该怎么做呢?就是通过网关,网关可以是除全0的网络地址和全1的广播地址之外的其它ip地址。可以这么理解,每个住户有很多门,这些门控制着和其他小区住户之间的通信。也就是说每个主机可以有多个网关,如果没有设置网关,会有一个默认网关,一些信息会默认从这里发送出去。这里我有个疑问,如果是同一个小区之间呢,也需要网关吗?我去查了下,有这么两道题:
说明在同一个网络中是可以直接进行通信的。
什么是DNS服务器?
DNS是和ip地址是一一对应的。我们很容易区分不同的域名,比如www.baidu.com,但是机器它不是呀,所以通过DNS,可以将域名解析为Ip地址,进而找到所通信的位置。可以这么理解,小区A中住户1需要和小区B中住户1进行通信,但是A中住户1只知道B中住户1的名字,但不知道它的具体位置,于是A中住户1发消息(B中住户名字)给DNS,DNS从名字找到其对应的位置(ip地址),然后就可以通信啦。
具体流程如下:
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。
SSH的安全机制
SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。
传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:
什么是互联网(internet注意i小写)?凡是能彼此通信的设备组成的网络就叫互联网,可以看出,这里互联网的范围很广。
什么是因特网(Internet注意I大写)?是网络与网络之间所串连成的庞大网络,这些网络以一组标准的网络TCP/IP协议族相连,下图展示的是TCP/IP协议族:
什么是万维网(WorldWideWeb)?
万维网是文件、图片、多媒体和其他资源的集合,资源通过超链接互相连接形成网络,并使用统一资源标志符(URL)标识。HTTP是万维网的主要访问协议。
其实大家平常使用的浏览器根据维基百科上的解释,可以称为:万维网浏览器软件,如chrome,firefox
区别总结:
目前由于因特网的广泛使用,因此互联网有时直接指代因特网,但是我们可以从英语名字中看出不同,互联网:internet,因特网:Internet。广义上的互联网是很大的,两台电脑组成的网络也能称为互联网,但是不能称为因特网。
万维网也称为Web,是因特网中的一项服务(web服务),除了万维网,因特网还包括了许多其他服务,例如:电子邮件服务,FTP,Telnet等等。
参考:
URI的全称为UniformResourceIdentifier,即统一资源标志符,URL的全称为UniversalResourceLocator,即统一资源定位符。
URL是URI的子集,也就是说每个URL都是URI,但不是每个URI都是URL。那么,怎样的URI不是URL呢?URI还包括一个子类叫作URN,它的全称为UniversalResourceName,即统一资源名称。URN只命名资源而不指定如何定位资源,比如urn:isbn:0451450523指定了一本书的ISBN,可以唯一标识这本书,但是没有指定到哪里定位这本书,这就是URN。URL、URN和URI的关系可以用图2-1表示。
图2-1URL、URN和URI关系图
但是在目前的互联网中,URN用得非常少,所以几乎所有的URI都是URL,一般的网页链接我们既可以称为URL,也可以称为URI
维基百科的补充
与URL和URN的关系
URL方案分类图。URL(定位符)和URN(名称)方案属于URI的子类,URI可以为URL或URN两者之一或同时是URI和URN。技术上讲,URL和URN属于资源ID;但是,人们往往无法将某种方案归类于两者中的某一个:所有的URI都可被作为名称看待,而某些方案同时体现了两者中的不同部分。
URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。
用于标志唯一书目的ISBN系统是一个典型的URN使用范例。例如,ISBN0-486-27557-4无二义性地标志出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。为获得该资源并阅读该书,人们需要它的位置,也就是一个URL地址。在类Unix操作系统中,一个典型的URL地址可能是一个文件目录,例如file:///home/username/RomeoAndJuliet.pdf。该URL标志出存储于本地硬盘中的电子书文件。因此,URL和URN有着互补的作用。
技术观点
MTU:MaximumTransmitUnit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500Byte,这是以太网接口对IP层的约束,如果IP层有<=1500byte需要发送,只需要一个IP包就可以完成发送任务;如果IP层有>1500byte数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IPHeaderID相同。
MSS:MaximumSegmentSize,TCP提交给IP层最大分段大小,不包含TCPHeader和TCPOption,只包含TCPPayload,MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU=1500byte,则MSS=1500-20(IPHeader)-20(TCPHeader)=1460byte,如果application有2000byte发送,需要两个segment才可以完成发送,第一个TCPsegment=1460,第二个TCPsegment=540。
如上图端口53842为A;端口80为B。
见上图,TCPSYN消息,A发送给B的MSS=1460,告诉B,B发给A最大segment为1452byte.
以后每次通讯,可以看出发送的数据都是1452byte。
由上图,可以发现MSS的值,取决与发送端和接收端两者较小的MSS的值。
1.当年设计IP地址的目的是什么呢
当年设计出IP地址就是因为随着网络中的设备逐渐增多,人们发现路由(也就是寻找数据包从发送方到接收方的路径)变得越来越困难了,于是人们想了一个办法,就是把网络划分成很多个子网。这样,在路由的时候,路由器可以把其他子网看成一个整体来进行计算。对于目的地在其他子网的数据包,路由器只需要让数据包到达那个子网即可,而剩下的工作由子网内部解决。虽然这种方法只能让寻找到的路径接近最优而不保证最优,不过它大大减少了路由器的计算量,利大于弊,所以被采用了。
2.那么为什么我们需要IP地址呢
3.既然IP地址不能去掉,那么能不能去掉MAC地址呢
也不能。因为IP地址是要设备上线以后才能根据他进入了哪个子网来分配的,在设备还没有IP地址的时候(或者分配IP地址的过程中),我们还需要用MAC地址来区分不同的设备。
总之,MAC地址就像自己的ID号,而IP地址就像带着邮政编码的住址,有各的用途。所以我们需要两个地址,缺一不可。
本文也从寻址这个很有趣的角度阐述了集线器、交换机一直到路由器的发展思路。
说说我的理解,最初的局域网,MAC足够,慢慢节点越来越多,引入了集线器、交换机,但随着越来越多局域网构成了广域网,2^48大小的MAC数量,交换器受不了。不得已,广域网下将各个局域网都看做子网,只去记录子网位置信息,而MAC是生而不变的,咋办呢?IP登场了,在整个广域网中,IP寻址方便很多了,而路由器中通过各种路由算法和人工配置,IP查找更加方便,大大提高了网络效率。那发展到这一步了,是不是可以丢弃掉MAC了呢?关于丢掉MAC地址,其实把交换机的功能(自学习)从MAC上转到IP,再引入一些其实标识或者信息,完成DHCP动态申请IP等信息也肯定能办到,所以理论上,丢掉MAC也无不可。但很显然...数据链路层的设配去干网络层的事了,这对于分层的网络架构,不够优雅!而且最关键的是,现在留着MAC的代价不大,反倒是优化空间有限,权衡之下,留着也没问题?