计算机网络:从物理层到应用层的五层模型
第一章 概述
计算机网络基本概念
计算机网络的重要功能:连通性——彼此联通,交换信息;
共享——信息共享、软硬件共享。
计算机网络概念:由若干节点和连接这些节点的链路组成;计算机网络就是自治的互联的计算机集合
互连网概念:许多网络连接在一起
互联网概念:全球最大的一个互连网,又叫因特网。
互联网发展的三个阶段:1969年美国阿帕网(ARPAnet)向互联网发展,是因特网的前身,以及1983年TCP/IP诞生为第一阶段;三级结构的互连网是第二阶段;多层次ISP结构的互连网为第三阶段。
(1)硬件(主机、路由器、通信链路等)是计算机网络的基础;
(2)计算机网络中的数据交换必须遵守事先定好的规则——协议
网络协议,简称协议,是为进行网络中的数据交换而建立的规则、标准或约定。
协议规定了通信实体之间所交换的消息的格式、意义、顺序、以及针对收到信息或发生的事件所采取的“动作”
协议的三要素:
(1)语法
数据与控制信息的结构或格式
信号电平
(2)语义
- 需要发出何种控制信息
- 完成何种动作以及做出何种响应
- 差错控制
(3)时序
- 事件顺序
- 速度匹配
Internet协议标准:
- RFC:Request for Comments
- IETF:互连网工程任务组(Internet Engineering Task Force)
计算机网络结构:边缘+核心
网络边缘
主机:位于网络边缘,运用网络应用程序,如Web,email
客户、服务器应用模型:向客户发送请求,接收服务器响应。如:Web应用,文件传输FTP应用
对等(peer-to-peer,p2p)应用模型:无(或不仅依赖)专用服务器;通信在对等实体之间直接进行。如QQ
接入网络
数字用户线路(DSL):利用已有的电话线俩姐中心局的DSLAM
<2.5Mbps上行传输速率(典型速率<1Mbps)
<24Mbps下行传输速率(典型速率<10)
FDM:>50kHz-1MHz用于下行,4kHz-50kHz用于上行,0kHz-4kHz用于传统电话
电缆网络:HFC
家庭接入网络
机构/企业接入网络
无线接入网络
网络核心
数据交换
互联的路由器网络
网络核心的关键功能:路由+转发
路由:确定分组从源到目的路径传输
转发:将分组从路由器的输入端口交换至正确的输出端口
利用数据交换实现数据从源主机通过网络核心送达目的主机。
数据交换方式:电路交换、分组交换、报文交换。
电路交换:(适合于数据量很大的实时性传输,核心路由器之间可以使用电路交换)
- 建立连接——申请占用通信资源
- 通话(数据传送)——一直占用通信资源
- 释放连接——释放通信资源
电路交换如何共享中继线——多路复用
分组交换:
什么是分组:数据+首部,发送端将一段报文分成一组一组的数据,然后在每段数据前加一个首部,就是分组
工作方式:存储-转发,分好组后将数据发送到目的地,接收端接收到数据后再将数据整合成报文。转发路线不限。
- 每个分组延时=分组数据长度(bits)/传输速率(bits/s)
- 分组交换需要报文的拆分与重组,会产生额外开销,但并不意味着比报文交换的速度慢
- 分组交换时,多台主机同时交换,但是分组序列不确定,所以按需共享链路,即统计多路复用。
- 分组交换的报文交付时间:设报文为M bits,链路带宽R bps,分组长度L bits,有n个路由器,跳步数是h,则T=M/R+(h-1)L/R=M/R+n*L/R
报文交换
传输延时=数据总长度(bits)/传输速率(bits/s)
报文,附加首部
存储-转发
多路复用
多路复用,简称复用,是通信技术中的基本概念
基本原理:链路/网络资源(如带宽)划分为“资源片”,将资源片分配给各路“呼叫”,每路呼叫独占分配到的资源片进行通信,资源片可能“闲置”(无共享)
典型多路复用方法:
- 频分多路复用(FDM):频分复用的各用户占用不用的带宽资源(注意,这里的带宽是频率带宽,而不是数据发送的速率)。用户在分配到一定的频带后,在通信过程中自始至终都始终占用这个频带。
- 时分多路复用(TDM):时分复用试讲事件划分为一段段登场的时分复用帧,每个用户在每个TDM帧中占用固定序号的时隙,没用户所占用的时隙是周期性出现(其周期就是TDM帧的长度)
- 波分多路复用(WDM):波分复用就是光的频分复用。把不同频率的波利用复用器复用后,在一个共享的光纤链路上进行传输,到了目的地后,再把它们分离开来。
- 码分多路复用(CDM):广泛应用于无线链路共享(如蜂窝网,卫星通信等)。每个用户分配一个唯一的mbit的码片序列,其中0用-1表示,1用+1表示。各用户使用相同频率的载波,利用各自码片序列编码数据。编码信号=原始数据*码片序列。如发送比特1(+1),则发送自己的m bit码片序列;如发送比特0(-1),则发送该码片序列的m bit码片序列的反码。
计算机网络的类别
作用范围 | 使用者 | 拓扑结构 | 交换方式 | 工作方式 |
---|---|---|---|---|
广域网 局域网 城域网 个人区域 |
公用网 专用网 |
总线型 环形 星型 树形 网型 |
电路交换 报文交换 分组交换 |
资源子网 通信子网 接入网 |
计算机网络的性能
速率、带宽、延迟
速率:在计算机网络上传送数据位数的速率,也成为了data rate或bit rate,单位是bit/s,kbit/s,Mbit/s,Gbit/s,bit/s也写为b/s.速率往往是指额定速率或标称速率
带宽:原本指信号具有的频带宽度,及最高频率与最低频率之差,单位是赫兹。但在数据通信领域中,数字信道所能传送的最高数据率。单位是b/s,kb/s,Mb/s,Gb/s
时延:
Q:分组交换为什会发生丢包和时延?
A:分组在路由器缓存中排队,分组到达速率超出链路容量时,就难以避免。
发送(传输)时延=数据块长度(比特)/发送速率(比特/秒)
传播时延=传播距离(m)/传播速率(m/s)。信号传播速度:约为2*10的8次方m/s
处理时延:差错检测,确定输出链路,通常<msec
排队时延:网络节点缓存队列排队时间,等待输出链路可用,取决于路由器拥塞程度
时延带宽积、丢包率、吞吐量
时延带宽积=传播时延*带宽。链路的时延带宽积又称为以比特为单位的链路长度
分组丢失(丢包):队列缓存容量有限,当分组到达已满队列时将被丢弃。丢弃分组可能由前序节点或源重发(也可能不重发)丢包率=丢包数已发分组总数\frac{丢包数}{已发分组总数}已发分组总数丢包数
吞吐量/率:即在单位时间内通过某个网络的数据量。
即时吞吐量:给定时刻的速率
平均吞吐量:一段时间的平均速率
瓶颈链路:端到端路径上,限制端到端吞吐量的链路
往返时间、利用率
往返时间:从发送方发送数据开始,到发送方收到接收方的确认(接收方收到数据后立即发送确认),总共经历的时延。RTT越大,在收到确认之前,可以发送的数据越多。
利用率:
信道利用率:信道有百分之几的时间是被利用的(有数据通过),空闲信道的利用率为零。
信道利用率=有数据通过时间有+无数据通过时间信道利用率=\frac{有数据通过时间}{有+无数据通过时间} 信道利用率=有+无数据通过时间有数据通过时间
网络利用率:全网络的信道利用率的加权平均值。信道利用率并非是越高越好,根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。这里可以想象成公路上车流量很大时,某些地方就会出现拥堵,因此 行车需要的时间就会增加。
多节点传输型题,总耗时=发送端发送时间(通常为总数据)+所有途径节点的发送时间(通常为一个数据包)+所有途经节点的阻塞等待或分组重装时间+线路传播延时
计算机网络体系结构
计算机网络体系结构概述
计算机网络的体系结构?
- 网络体系结构是从功能上描述计算机网络结构
- 计算机网络体系结构简称网络体系结构,是分层结构
- 每层遵循某个/些网络协议完成本层功能
- 计算机网络体系结构是计算机网络的功能层次及其关系的定义
- 体系结构是抽象的,并不涉及这个功能怎么实现
为什么采用分层结构?
- 结构清晰,有利于识别复杂系统的部件及其关系
- 分层的参考模型
- 模块化的分层易于系统更新、维护
- 任何一层服务的实现的改变对于系统其他层都是透明的
- 有利于标准化
分层网络体系结构基本概念
- 实体:表示任何可发送或接收信息的软件或硬件进程
- 协议是控制两个对等实体进行通信的规则的合集,协议是“水平的”
- 任一层实体需要使用下层服务,遵循本层协议,实现本层功能,向上层提供服务,服务是“垂直的”。
- 下层协议的实现对上层的服务用户是透明的
- 同系统的相邻层实体通过接口进行交互,通过服务访问点SAP交换原语,指定请求特定服务
OSI参考模型
OSI参考模型
- 开放互联(OSI)参考模型是有国际标准化组织(ISO)于1984年提出的分层网络体系结构模型
- 目的是支持异构网络系统的互联互通
- 异构网络通信的最佳学习工具(理论模型)
- 理论成功,市场失败
- 7层,每层完成特定的网络功能
层数 | OSI |
---|---|
7 | 应用层 |
6 | 表示层 |
5 | 会话层 |
4 | 传输层 |
3 | 网络层 |
2 | 数据链路层 |
1 | 物理层 |
OSI参考模型解释的通信过程
主机完成所有层的任务,中间系统只负责网络层、数据链路层和物理层。
OSI参考模型数据封装与通信过程
- 用户需要发送的数据在应用层加上应用头、表示层加上表示头、会话层加上会话头···以此类推,一直到物理层,然后通过网络物理层将数据包传输给接收端的物理层,然后依次从数据链路层到应用层去掉数据链路层头尾、网络头、传输头···直到应用层去掉应用头,就正式完成数据的传输。
- 为什么要数据封装?
- 增加控制信息
- 构造协议数据单元(PDU)
- 控制信息主要包括:
- 地址:标识发送端/接收端
- 差错检测码:用于差错检测或纠正
- 协议控制:实现协议功能的附加信息,如:优先级、服务质量、安全控制等
- 增加控制信息
物理层功能
- 规范一些接口特性
- 机械特性、电气特性、功能特性、规程特性
- 解决比特编码问题
- 定义数据率
- 解决比特同步
- 定义传输模式
- 单工(单向)
- 半双工(可以双向通信,但是不能同时通信)
- 全双工(可以双向通信,且可以同时通信)
数据链路层功能
- 负责结点-结点数据传输,以帧作为单位传输
- 组帧
- 物理寻址
- 在帧头里增加发送端/或接收端的物理地址标识数据帧的发送端和/接收端
- 流量控制
- 匹配发送端和接收端的发送速度和接收速度,避免发送端太快,接收端太慢,导致淹没接收端
- 差错控制
- 检测并重传损坏或丢失帧,并避免重复帧
- 访问(接入)控制
- 在任意给定时刻决定那个设备拥有链路(物理介质)控制使用权
网络层功能
- 负责源主机到目的主机数据分组交付
- 可能穿越多个网络
- 逻辑寻址
- 全局唯一逻辑地址,确保数据分组被送达目的主机,如IP地址
- 路由
- 路由器(或网关)互联网络,并路由分组至最终目的主机
- 路径选择
- 分组转发
传输层功能
负责源-目的(端到端) (进程间)完整报文传输
- 分段与重组
- SAP寻址
- 确保完整报文提交给正确进程,如端口号
- 端到端的连接控制
- 端到端的流量控制
- 端到端的差错控制
会话层功能
- 对话控制
- 建立、维护
- 同步
- 在数据流中插入“同步点”
- 最“薄”的一层
表示层功能
处理两个系统交换信息语法与语义问题
- 数据表示转化
- 转换为主机独立的编码
- 加密/解密
- 压缩/解压缩
应用层功能
- 支持用户代理(如浏览器)或网络接口使用网络(服务)
- 典型应用层服务:
- 文件传输(FTP)
- 电子邮件(SMTP)
- Web(HTTP)
- ···
TCP/IP参考模型
五层参考模型
- 综合OSI和TCP/IP的优点
- 和OSI模型基本相似
物理层
物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体
数据通信基础
数据通信系统
信源:将消息转换为信号的设备,如计算机等。
发送设备:将信源产生的信号进行适当的变换装置,使之适合于在信道中传输。主要包括编码和调制。
信道:信号传输通道,如物理介质。
噪声:自然界和通信设备中所产生的干扰。
接受设备:完成发送设备反变换,还原原始发送信号。
信宿:信号终点,将信号转换为人们能识别的消息。
常见数据通信术语
数据:传送消息的实体。
信号:数据的电气电磁的表示:y(t)=Asin(ωt+θ)y(t)=Asin(\omega t+\theta)y(t)=Asin(ωt+θ)
“模拟的”:参数的取值是连续的;
“数字的”:参数的取值是离散的;
码元:在使用时域的波形表示数字信号时,代表不同离散数值的基本波形(信号基本单元)。
频带:信号频率范围
带宽:有效带宽
数据通信方式:单工、半双工、全双工
并行通信:同时通过多条线路,同时传输多个比特位的通信方式。
串行通信:将比特位按一次一位的传输方式。
异步通信vs同步通信
为解决发送方和接收方的时钟同步问题。
异步通信
发送方和接收方的时钟是各自独立的。为保证接收时不出错,要求每次传输只传输一个字符,一般一个字符5到8比特是比较典型的。每次开始传输时对齐一次时钟。一个稳定的传输过程,每两个字符之间都应该有一个停止位。也可能有空闲位。优点是简单、成本低。缺点是每个字符都需要开始位、结束位,甚至还有空闲状态,所以每个字符都会有两到三个的开销。所以异步通信适合低速率、短距离的传输,比如说键盘和主机之间的通信。
同步通信
不需要开始位和结束位进行数据传输。发送方和接收方使用同一个时钟信号,或者是将时钟信号和发送的数据编码到一起。优点是效率更高。
模拟通信vs数字通信
区别在于:模拟信号or数字信号
信源编码
Q:如果信源产生的是模拟数据,如何在数字通信系统中传输?
A:信源编码
典型的信源编码:PCM
PCM包括的三个步骤:采样—>量化—>编码
采样:目的是要用一系列在时间上离散的采样值,代替实践上连续的模拟数据,即实现时间上的离散化。
量化:就是使采样值在取值上离散化
编码:就是将量化后的采样值用一定位数的二进制数码来表示。如果量化级数为N,则每个采样值就编码成log2Nlog_2Nlog2N位二进制码。
物理介质
导引型传输介质
- 架空明线:易受天气和外界电磁干扰,对外界噪声很敏感,带宽有限,所以在计算机网络中已经很少使用。
- 双绞线:比较多见的导引型介质。主要用于基带传输。分为屏蔽双绞线STP和非屏蔽双绞线UTP两类。
- 同轴电缆:主要用于频带传输
- 光纤:基本原理是光的全反射,分为多模光纤和单模光纤两种。
非导引型传输介质
- 无线信号传输方式对应的介质。不同频段具有不同的传播特性。
- 地波传播:频率较低(大约2Mhz以下)的电磁波趋于眼地球表面传播;具有一定的绕射能力;在低频和甚低频段,地波传播距离可超过数百米或数千公里。
- 天波传播:电离层,距地表约60~ 400km高度,频率较高(大约是2~30Mhz之间)的电磁波会被电离层反射回来,电离层的密度和厚度随时间随机变化;电磁波可以传播10000km以上,很多参数是随机变化的,不稳定,这种信道被称作是随参信道。
- 视线传播:频率高于30Mhz的电磁波将穿透电离层,不会被反射回来,沿地面绕射能力也很弱,所以通常采用视线无障碍的点对点直线传播。可以设立地面中继站或卫星中继站进行接力传输。
信道与信道容量
信道分类与模型
狭义信道:信号传输介质
广义信道:包括信号传输介质和通信系统的一些变换装置,如发送设备、接受设备、天线、调制器等。
- 编码信道=调制器+发射设备+传输介质+接受设备+解调器
- 调制信道=发射设备+传输介质+接受设备
信道传输特性
- 恒参信道传输特性:
- 各种有线信道和部分无线信道,如微波视线传播链路和卫星链路等,都属于恒参信道
- 理想的恒参信道是一个理想的无失真传输信道
- 对信号幅值产生固定的衰减
- 对信号输出产生固定的时延
- 随参信道传输特性
- 许多无线信道都是随参信道
- 信号的传输衰减随时间随机变化
- 信号的传输时延随时间随机变化
- 存在多路传播现象
信道容量
- 信道容量是指信道无差错传输信息的最大平均信息速率
- 奈奎斯特(Nyquist)信道容量公式
- 理想无噪声信道的信道容量:C=2Blog2MC=2Blog_2MC=2Blog2M
- 其中,C为信道容量,单位为b/s(或bps);B为信道带宽,单位为Hz;M为进制数,即信号状态数。
- 理想信道的极限容量
- 香农信道公式
- 有噪声信道的信道容量:C=Blog2(1+S/N)C=Blog_2(1+S/N)C=Blog2(1+S/N)
- 其中:S/N为信噪比,即信号与噪声能量之比
- S/N通常以分贝(dB)为单位描述:(S/N)dB=10log10(Signalpower/Noisepower)(S/N)_{dB}=10log_{10}(Signal power/Noise power)(S/N)dB=10log10(Signalpower/Noisepower)
基带传输基础
基带传输
- 信源发出的原始信号是基带信号
- 模拟信源→模拟基带信号
- 数字信源→数字基带信号
- 基带信号往往包含较多低频成分,甚至有直流成分
- 直接在信道中传送基带信号称为基带传输
- 实现基带传输的系统称为基带传输系统
数字基带传输系统
在信道中直接传输数字基带信号,称为数字基带传输,相应的系统称为数字基带传输系统。
基带信号比较适合在具有低通特性的有线信道中传输,通常不适合在无线信道中直接传输。
信道的传输特信会引起波形失真,并会受噪声影响
信道中的信号传播一定距离后,信号质量就会下降,甚至出现传输误码现象
典型的数字基带信号码型
单极不归零码
这种码型易于产生,但不适合长距离传输。码型只有一个极性,且不归零。
双极不归零码
码型有两个极性,且不归零。
单级归零码
电压要回归到零电压
码元不为零的时候占一个码元周期的百分比称为占空比
若码元不为零的时间为Tb/2,码元周期为Tb,则该单级归零码的占空比为50%
双极归零码
- 电压要回归到零电压
差分码
- 差分码又称相对码,利用相邻的脉冲有没有电压的跳变来表示数据的0或1
典型数字基带传输码型
AMI码
AMI码的全称是信号交替反转码
AMI码的编码规则:
信号码中的0编码为AMI传输码中的0(零电平)
信号码中的1交替编码为AMI传输码中的+1(正脉冲)和负脉冲(-1)
双相码(曼彻斯特码)
双相码只有正、负两种电平
每个比特持续时间的中间时刻要进行电平跳变
正(高)电平跳到负(低)电平表示1
负电平跳到正电平表示0
双相码在每个比特周期中间时刻都会有电瓶跳变,因此便于提取定时信息。
双相码利用了两个脉冲编码信息码中的一个比特。相当于双极码中的两个比特。
10Mbps的以太网采用了 曼彻斯特编码
双相码的另一种码型是差分双相码,也称为差分曼彻斯特码
差分曼彻斯特码的每个比特周期的中间时刻也要进行电平跳变,但该跳变仅用于同步
利用每个比特开始处是否存在电平跳变编码信息
开始处有跳变表示0
无跳变表示1
IEEE802.5令牌环网采用差分曼彻斯特码
nBmB码
- nBmB码将n位二进制信息码作为一组,映射成m位二进制新码组,其中m>n
- 由于m>n,因此2m2^m2m个码的新码组中只会用到2n2^n2n个,多出(2m−2n)(2^m-2^n)(2m−2n)个码
- 可以从2m2^m2m中选出2n2^n2n个码作为有效码,其余码则为禁用码,可以用于检错
- 快速以太网(100BASE-TX和100BASE-FX)传输用的是4B5B编码
频带传输基础
频带传输
- 基带信号具有低通特性,可以在具有低通特性的信道中进行传输。
- 许多带通信道(如无线信道)不具有低通特性,因此不能在这些信道中直接传输基带信号。
- 只能利用基带信号去调制与对应信道传输特性相匹配的载波信号。
- 通过在信道中传送经过调制的载波信号,实现将基带信号所携带信息传送出去。
- 利用模拟基带信号调制载波,称为模拟调制,利用数字基带信号调制载波,称为数字调制。
- 数字调制就是利用数字基带信号控制(或影响)载波信号的某些特征参量。
数字调制系统
频带传输系统通常选择正弦波信号作为载波
y(t)=acos(2πft+φ)y(t)=acos(2\pi ft+\varphi) y(t)=acos(2πft+φ)二进制数字调制:
- 二进制幅移键控(2ASK):利用二进制基带信号控制载波信号的幅值变化y′(t)=s(t)cos(2πft)y'(t)=s(t)cos(2\pi ft)y′(t)=s(t)cos(2πft);二进制基带信号s(t)为单极不归零码信号波形
- 二进制频移键控(2FSK):选择两个不同频率的载波,f1f_1f1和f2f_2f2;二进制基带信号编码的信息(比特)序列为
- 二进制相移键控(2PSK):利用二进制基带信号控制载波信号的相位变化
- 二进制差分相移键控:利用相邻两个码元载波间的相对相位变化表示数字基带信号的数字信息。
二进制数字调制性能:
- 频带利用率:
- 2ASK、2PSK、2DPSK的频带利用率相同
- 2FSK频带利用率最低
- 误码率:
- 在相同信噪比下,2PSK的误码率最低而2ASK的误码率最高
- 二进制相移键控抗噪声性能优于二进制频移键控,二进制频移键控优于二进制幅移键控
- 对信道特性的敏感性
- 2ASK对信道特性变化比较敏感,性能最差
- 2FSK与2PSK对信道特性变化不敏感
- 频带利用率:
多进制数字调制
- 在确定带宽与频率利用率的情况下,提高数据传输速率的有效方法:
- 提高每个码元传输信息量,每个码元调至多个比特信,即多进制数字调制。
- 数据传输速率Rb(bps)R_b(bps)Rb(bps)与码元传输速率Rb(Baud)R_b(Baud)Rb(Baud)以及进制数 M(通常为2的幂次)之间的关系为:Rb=Rblog2MR_b=R_blog_2MRb=Rblog2M
- RbR_bRb也成为比特率,单位为bps;码元传输速率RBR_BRB也称为调制速率,或成为波特率,单位为Baud
- 多进制数字调制需要更大的信噪比,发送端需要增大发送信号的功率。
- 在确定带宽与频率利用率的情况下,提高数据传输速率的有效方法:
正交幅值调制QAM
正交幅值调制也称为幅值相位联合键控
具有高频带利用率,且可以自适应调整调制速率
QAM系统设备比较简单,应用广泛
QAM的调制信号幅值和相位均受基带信号调制,可表示为 :y′(t)=Ancos(2πft)+Bnsin(2πft)y'(t)=A_ncos(2\pi ft)+B_nsin(2\pi ft)y′(t)=Ancos(2πft)+Bnsin(2πft)
其中:
{An=sncos(φn),u=0Bn=−sncos(φn)\begin{cases} A_n=s_ncos(\varphi_n),u=0\\B_n=-s_ncos(\varphi_n)\end{cases} {An=sncos(φn),u=0Bn=−sncos(φn)QAM信号是由两路相互正交载波经调制后叠加而成
QAM已调信号的矢量端点在I-Q平面上的分布,称为QAM星座图
QAM优点:
- 频带利用率高
- 抗噪声能力强
- 调制解调系统简单
扩频技术
- 扩频是一种信息处理传输技术。扩频技术是利用同欲传输数据(信息)无关的码对被传输信号扩展频谱,使之占有远远超过被传送信息所必需的最小带宽。
- 跳变频率(FrequencyHopping)工作方式:简称跳频(FH)方式。另外一种扩展信号频谱的方式称为跳频(FH-FrequencyHopping)。所谓跳频,比较确切的意思是:用一定码序列进行选择的多频率频移键控。也就是说,用扩频码序列去进行频移键控调制,使载波频率不断地跳变,所以称为跳频。
- 跳时方式:跳变时间(TimeHopping)工作方式,简称跳时(TH)方式。与跳频相似,跳时(TH-TimeHopping)是使发射信号在时间轴上跳变。
- CDMA最具代表性
物理层接口规程
物理层接口
- DTE
- DCE
物理层接口特性
- 物理层的主要任务描述为确定与传输媒体的接口的一些特性,即:
- 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。例接口形状、大小、引线数目
- 电气特性:指明在接口电缆的各条线上出现的电压的范围。
- 功能特性:指明某条线条上出现的某一电平的电压表示何种意义。例规定-5表示0,+5表示1。
- 过程特性:也称规程特性,指明对于不同功能的各种可能事件的出现顺序。例规定建立连接时各个工作步骤。
数据链路层
数据链路层服务
概述
- 术语
- 主机和路由器:结点
- 连接相邻结点的通信信道:链路
- 有线链路
- 无线链路
- 局域网
- 链路层数据分组:帧,封装网络数据报
- 数据链路层负责通过一条链路从一个节点向另一个物理链路相连的相邻结点传送数据报
链路层服务
- 组帧
- 封装数据报构成的数据帧,加首部和尾部
- 实现帧同步。一般最常用的方法是在首部和尾部加一个帧定界的字符或者字符串
- 链路接入(链路访问)
- 当网络中使用的这段链路是一段共享的介质或者是共享的链路,就需要解决信道接入。共享意思就是有很多结点 需要使用这段链路来传输数据。
- 帧首部中的“MAC”地址,用于标识帧的源和目的。
- 不同于MAC地址!
- 相邻结点之间的可靠交付
- 在低误码率的有线链路上很少采用(如光纤,某些双绞线等)
- 无线链路:误码率高,需可靠交付
- 流量控制
- 协调相邻的发送结点和接收结点
- 差错检测
- 信号衰减和噪声会引起差错
- 接收端检测到差错:
- 通知发送端重传或直接丢弃帧
- 差错纠正
- 接收端直接纠正比特差错
- 全双工和半双工通信控制
- 全双工:链路两端结点同时双向传输
- 半双工:链路两端结点交替双向传输
链路层的具体实现
- 每个主机或路由器接口。
- 链路层在“适配器”(即网络接口卡-NIC)中实现或者在一个芯片上实现
- 以太网网卡,802.11网卡;以太网芯片组
- 实现链路层和物理层
- 链接主机的系统总线
- 由硬件、软件和固件组成
网卡间通信
- 发送端
- 将数据报封装成帧
- 增加差错检测比特,实现可靠传输和流量控制等
- 接收端
- 检测差错,实现可靠数据传输和流量控制等。
- 提取数据报,交付上层协议实体。
差错编码
差错检测:差错编码
- 差错编码的基本原理:在基础数据基础上,增加一些冗余信息。D→DR,其中R为差错检测与纠正比特(冗余比特)。实际上,这个冗余信息建立起了数据位和位之间或比特和比特之间原本不存在的关联关系,作为这样的一种编码结果,我们把这个冗余信息和数据一起,发送给接收一段,接收一段接收到后,去判断这个关联关系是否存在。这个流程是差错编码中的一类。
- 差错编码不能保证100%可靠!
差错编码的检错能力
- 差错编码可分为检错码(只能检测是否错误)和纠错码(既能检错又能纠错)
- 对于检错码,如果编码集的汉明距离(两个码字之间的对应比特位不同的位数)ds=r+1d_s=r+1ds=r+1,则该差错编码可以检测r位的差错。也就是说,如果差错在r位之内,那么它一定能检测出来;但如果差错大于了r位,那么可能能检测出来,可能检测不出来
- 对于纠错码,如果编码集的汉明距离ds=2r+1d_s=2r+1ds=2r+1,则该差错编码可以纠正r位的差错
奇偶校验码
- 1比特校验位:
- 检测奇数位差错:在数据的基础上,增加一个校验位。如果是奇校验,那么就使的编码以后的数据加校验位1的个数是奇数个,如果是偶校验,就是偶数个。
- 二维奇偶校验
- 检测奇数位差错、部分偶数位差错,纠正同一行/列的奇数位错:把数据组织成一个二维的矩阵形式,然后在每一行每一位都增加一个校验位,构成一个二维奇偶校验。
Internet校验和
- 发送端:
- 将“数据”(校验内容)划分为16位的二进制“整数”序列。
- 求和(sum):补码求和(最高位进位的“1”,返回最低为继续加)
- 校验和sum的反码。
- 放入分组(UDP、TCP、IP)的校验和字段
- 接收端:
- 与发送端相同算法计算
- 计算得到的“checksum”:
- 为16位全0(或sum为16位全1):无错
- 否则:有错
循环冗余校验码(CRC)
- 检错能力更强大的差错编码
- 将数据比特D,视为一个二进制数时
- 选择一个r+1位的比特模式(生成比特模式),G
- 目标:选择r位的CRC比特R,满足
- 编码后的<D,R>刚好可以被G整除(模2运算)
- 接收端检错:利用G除<D,R>,余式全0,无错,否则,有错!
- 可以检测所有突发长度小于r+1差错
- 广发应用于实际网络(以太网,802.11,WIFI,ATM)
- 怎样找R:数据D∗2r数据D*2^r数据D∗2r(将数据D左移r位),然后再与r比特的R进行异或(如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0),就是编码结果。
- 相当于:如果利用G去除D∗2rD*2^rD∗2r,则余式即为R
多路访问(MAC)协议
两类“链路”:
- 点对点链路
- 拨号接入的PPP
- 以太网交换机与主机之间的点对点链路
- 广播链路(共享介质)
- 早期的总线以太网
- HFC的上行链路
- 802.11无线局域网
- 点对点链路
多路访问控制(Mac)协议要解决的是单一共享广播信道问题。当两个或者两个以上结点同时传输,势必就会造成相互干扰,这种干扰在Mac协议中称为:
- 冲突
- 结点同时接受到两个或者多个信号,则会导致接受失败
所以就需要一个多路访问协议。
这个协议采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据;协议必须基于信道本身,通信信道共享协调信息(无带外信道用于协调)!
- 冲突
理想的MAC协议
- 给定:速率为R bps的广播信道
- 期望:
- 当只有一个节点希望传输数据时,它可以以速率R发送
- 当有M个结点期望发送数据时,每个节点平均发送数据的平均速率是R/M
- 完全分散控制:无需特定节点协调;无需时钟、时隙同步
- 简单
MAC协议分类
- 信道划分协议
- 多路复用技术
- TDMA、FDMA、CDMA、WDMA等
- 随机访问协议
- 信道不划分,允许冲突
- 采用冲突“恢复”机制
- 轮转MAC协议
- 结点轮流使用信道
- 信道划分协议
信道划分MAC协议:TDMA
TDMA: time division multiple access
- “周期性”接入信道
- 每个站点在每个周期,占用固定长度的时隙(e.g.长度=分组传输时间)
- 未用时隙空闲
- 例如:6-站点LAN,1,3,4传输分组,2,5,6空闲
信道划分MAC协议:FDMA
FDMA:frequency division multiple access
- 信道频谱划分为若干频带
- 每个站点分配一个固定的频带
- 无传输频带空闲
- 例如:6站点LAN,1,3,4频带传输数据,2,5,6频带空闲
随机访问MAC协议
随机访问MAC协议
- 当节点要发送分组时:
- 利用信道全部数据速率R发送分组
- 没有事的结点先发送
- 两个或多个结点同时传输:→“冲突”
- 随机访问MAC协议需要定义:
- 如何检测冲突
- 如何从冲突中恢复(e.g.通过延迟重传)
- 典型的随机访问MAC协议:
- 时隙ALOHA
- ALOHA
- CSMA、CSMA/CD、CSMA/CA
时隙ALOHA协议
假定 | 运行 |
---|---|
所有帧大小相同 时间被划分为等长的时隙 结点只能在时隙开始时刻发送帧 结点间时钟同步 如果2个或2个以上的结点在同一时隙发送帧,结点即检测到冲突 |
当结点有新的帧时,在下一个时隙发送 如果无冲突:该节点可以在下一个时隙继续发送新的帧 如果冲突:该节点在下一个时隙以概率p重传该帧,直至成功 |
- 优点:
- 单个节点活动时,可以连续以信道全部速率传输数据
- 高度分散化,只需同步时隙
- 简单
- 缺点:
- 冲突,浪费时隙
- 空闲时隙
- 节点也许能以远小于分组传输时间检测到冲突
- 时钟同步
- 效率:长期运行时,成功发送帧的时隙所占比例(很多结点,有很多帧待发送)
- 假设:N个结点有很多帧待传输,每个结点在每个时隙均已概率p发送数据
- 对于一个给定的结点,在一个时隙将帧发送成功的概率=p(1−p)N−1=p(1-p)^{N-1}=p(1−p)N−1
- 对于任意结点成功发送帧的概率是=Np(1−p)N−1=Np(1-p)^{N-1}=Np(1−p)N−1
- 对于很多节点,求Np∗(1−p∗)N−1Np*(1-p*)^{N-1}Np∗(1−p∗)N−1当N趋于无穷时的极限,可得:最大效率=1/e=0.371/e=0.371/e=0.37
- 最好情况:信道被成功利用的时间仅占37%
ALOHA协议
- 非时隙(纯)ALOHA:更加简单,无需同步
- 当有新帧生成时:立即发送
- 冲突可能性增大:在t0t_0t0时刻发送帧,会与在[t0−1,t0+1][t_0-1,t_0+1][t0−1,t0+1]期间其他节点发送的帧冲突
- 最好情况:信道被成功利用的时间仅占18%,比时隙ALOHA更差!
CSMA协议
CSMA协议
- 载波监听多路访问协议CSMA
- 发送帧之前,监听信道(载波):
- 信道空闲:发送完整帧
- 信道忙:推迟发送
- 1-坚持发送(一定会坚持监听信道,一旦发现信道空闲,马上发送帧)
- 非坚持发送(隔一段时间后,再监听信道)
- p-坚持CSMA(以概率P随机监听信道)
- 冲突仍然发生:信号传播延迟
- 继续发送冲突帧:浪费信道资源
CSMA/CD协议
带有冲突检测的CSMA协议:CSMA/CD协议。
- 短时间内可以检测到冲突
- 冲突后传输中止,减少信道浪费
冲突检测:
- 有线局域网易于实现:测量信号强度,比较发射信号与接收信号
- 无线局域网很难实现:接收信号强度淹没在本地发射信号强度下
“边发边听,不发不听”(“听”是指监听冲突)
设网络带宽为R bps,数据帧最小长度为Lmin(bits)L_{min}(bits)Lmin(bits),信号传播速度为V(m/s),两台主机A、B之间的最远距离是dmaxd_{max}dmax,现在模拟这样一个极限的情景:A向B发送数据,在马上就要传输到的极限时刻,B监听到信道空闲,也向A开始发送数据,此时就会发生冲突;A的数据马上就送到了B处,所以B很快就检测到了冲突,但是A要等到接收到B的数据后才能检测到冲突。根据协议的“边发边听,不发不听”的特点,A若想检测到冲突,则它发送的数据帧的传输延迟必须满足这样一个条件:L/R>=2dmax/VL/R>=2d_{max}/VL/R>=2dmax/V,将LminL_{min}Lmin带进去,就可以取等号了:Lmin/R=2dmax/VL_{min}/R=2d_{max}/VLmin/R=2dmax/V。考虑到现实传输过程中可能存在中继器之类的,公式还可写成Lmin/R=RTTmaxL_{min}/R=RTT_{max}Lmin/R=RTTmax。
CMSA/CD效率
- Tprop=T_{prop}=Tprop=LAN中2个结点间最大传播延迟
- ttrans=t_{trans}=ttrans=最长帧传输延迟
- 效率=11+5tprop/Ttrans效率=\frac{1}{1+5t_{prop}/T_{trans}}效率=1+5tprop/Ttrans1
- TpropT_{prop}Tprop趋于0或者ttranst_{trans}ttrans趋于∞\infty∞时,效率趋近于1
- 远优于ALOHA,并且简单、分散
轮转访问MAC协议
在信道划分MAC协议中,网络负载重时,共享信道效率高,且公平,但是网络负载轻时,共享信道效率就很低;在随机访问MAC协议中,网络负载轻时,共享信道效率高,单个结点可以利用信道的全部带宽,但是网络负载重时,就会产生冲突开销。
所以就希望有一个协议可以结合两者的优点,就有了轮转访问MAC协议,下面是两个比较典型的协议
轮询(polling)
- 主节点轮流“邀请”从属结点发送数据
- 典型应用:“哑”(非智能)从属设备
- 问题:
- 轮询开销
- 等待延迟
- 单点故障
令牌传递(token passing)
令牌就是一个特殊帧,这个令牌代表了共享介质的使用权
控制令牌一次从一个结点传递到下一个 结点
根据令牌传递的这种特征,使得很多令牌网络都构成了一个个环形网络,时的这个令牌在环形网络中沿着一定方向传递
“自生自灭”,谁发送的数据,谁就要把这个数据从环形上剔除
问题:
- 令牌开销
- 等待延迟
- 单点故障
MAC协议总结
- 信道划分MAC协议:时间、频带、码片划分
- TDMA、FDMA、CDMA
- 随机访问MAC协议:
- ALOHA、S-ALOHA、CSMA、CSMA/CD
- CSMA/CD应用于以太网
- CSMA/CA应用于802.11无线局域网
- 轮转访问MAC协议:
- 主节点轮询:令牌传递
- 蓝牙、FDDI、令牌环网
局域网
ARP协议
MAC地址
- 32位IP地址:
- 接口的网络地址层
- 用于标识的网络层(第三层)分组,支持分组转发
- MAC地址(或称LAN地址,物理地址,以太网地址):
- 作用:用于局域网内标识一个帧从哪个接口出发,到达哪个物理相连的其他接口
- 48位MAC地址(用于大部分LANs),固化在网卡的ROM中,有时也可以软件设置
- e.g.1A-2F-BB-76-09-AD(16进制表示)
- 局域网中每块网卡都有一个唯一的MAC地址
- MAC地址由IEEE统一管理与分配
- 网卡生产商购买MAC地址空间(前24比特)
- 类比:
- MAC地址:身份证号
- IP地址:邮政地址
- MAC地址是“平面”地址:可“携带”
- IP地址是层次地址:不可“携带”
- IP地址依赖于结点连接到哪个子网
ARP:地址解析协议
Q:在同一个LAN内,如何在已知目的接口的IP地址前提下确定其MAC地址?
A:ARP表:LAN中每一个IP结点(主机、路由器)维护一个表
- 存储某些LAN结点的IP/MAC地址映射关系<IP地址;MAC地址;TTL>
- TTL:经过这个时间以后改映射关系会被遗弃(典型值为20min)
ARP协议:同一局域网内
- A想要给同一局域网内的B发送数据报
- B的Mac地址不在的A的ARP表中
- A广播ARP查询分组,其中包含B的IP地址
- 目的MAC地址=FF-FF-FF-FF-FF-FF
- LAN中所有结点都会接收ARP查询
- B接收ARP查询分组,IP地址匹配成功,向A应答B的MAC地址
- 利用单播帧向A发送应答
- A在其ARP表中,缓存B的IP-MAC地址对,直至超时
- 超时后,再次刷新
- ARP是“即插即用”协议:
- 结点自主创建ARP表,无需干预
寻址:从一个LAN路由至另一个LAN
- 通信过程:A通过路由器R向B发送数据报
- 关注寻址:IP地址(数据报中)和MAC地址(帧中)
- 假设A知道B的IP地址(怎么知道的?)
- 假设A知道第一跳路由器R(左)接口IP地址(怎么知道的?)
- 假设A知道第一跳路由器R(左)接口MAC地址(怎么知道的?)
- A构造IP数据报,其中源IP地址是A的IP地址,目的IP地址是B的 IP地址
- A构造链路层帧,其中源MAC是A的MAC地址,目的MAC地址是R(左)接口的MAC地址,封装A到B的IP数据报
- 帧从A发送至R
- R接收帧,提取IP数据报,传递给上层IP协议(通常情况下,路由器是不会更改IP地址的,但如果左侧是一个内网,右侧是一个互联网,这时候可能要改源IP地址)
- R转发IP数据报
- R创建链路层帧,其中源MAC地址是R(右)接口的MAC地址,目的MAC地址是B的MAC地址,封装A到B的IP数据报
以太网
以太网
“统治地位的”的有线LAN技术:
- 造价低廉
- 应用最广泛的技术
- 比令牌局域网和ATM等,简单、便宜
- 满足网络速率需求:10Mbps-10Gbps
以太网:物理拓扑
- 总线:上世纪90年代中期前流行
- 所有结点在同一冲突域(可能彼此冲突)
- 冲突域:任意两个结点同时发送出去就会产生冲突的范围叫做冲突域
- 星型:目前主流网络拓扑
- 中心交换机
- 每个结点一个单独冲突域(结点间彼此不冲突)
以太网:不可靠、无连接
- 无连接:发送帧的网卡与接收帧的网卡间没有“握手”过程;
- 不可靠:接收网卡不向发送网卡进行确认
- 差错帧直接丢弃,丢弃帧中的数据恢复依靠高层协议(e.g.TCP),否则,发生数据丢失
- 以太网的MAC协议:采用二进制指数退避算法的CAMA/CD
以太网的CSMA/CD算法
- NIC从网络层接收数据报,创建数据帧
- 监听信道:如果NIC监听到信道空闲,则开始发送帧;如果NIC监听到信道忙,则一直等待到信道空闲,然后发送帧
- NIC发送完整个帧,而没有检测到其他节点的数据发送,则NIC确认帧发送成功
- 如果NIC检测到其他节点传输数据,则中止发送,并发送堵塞信号
- 中止发送后,NIC进入二进制退避算法:
- 第m次连续冲突后:
- 取n=Max(m,10)n=Max(m,10)n=Max(m,10)
- NIC从0,1,2,...,2n−1{0,1,2,...,2^n-1}0,1,2,...,2n−1中随机选择一个数K
- NIC等待K*512比特的传输延迟时间,再返回第二步
- 连续冲突次数越多,平均等待时间越长
- 如果连续16次还冲突,就不会检测差错了,直接向上层报错
- 第m次连续冲突后:
以太网帧结构
- 发送端网卡将IP数据报(或其他网络层协议分组)封装到以太网帧中
- 前导码(8B)
- 7个字节的10101010,第8字节为10101011
- 用于发送端与接收端的时钟同步
- 一般情况下讨论数据报的长度时,不包含前导码
- 目的MAC地址、源MAC地址(各6B):
- 如果网卡的MAC地址与收到的目的MAC地址匹配,或者帧的目的MAC地址为广播地址(FF-FF-FF-FF-FF-FF),则网卡接收该帧,并将其封装的网络层分组交给相应的网络层协议。
- 否则,网卡丢弃(不接收)该帧
- 类型(2B):指示帧中封装的是哪种高层协议的分组(IP数据报、Novell IPX数据报、Apple Talk数据报等)
- 数据(46-1500B):指上层协议载荷。
- CRC(4B):循环冗余校验码
- 丢弃差错帧
802.3以太网标准:链路与物理层
- 许多不同的以太网标准
- 相同的MAC协议和帧格式
- 不同速率:2Mbps,10Mbps,100Mbps,10GMbps
- 不同物理介质:光纤、光缆
交换机
以太网交换机
- 链路层设备
- 存储-转发以太网帧
- 检验到达帧的目的MAC地址,选择性向一个或多个输出链路转发帧
- 利用CMSA/CD访问链路,发送帧
- 透明
- 主机感知不到交换机的存在
- 即插即用
- 自主学习
交换机:多端口间同时传输
- 主机利用独享链路直接连接交换机
- 交换机缓存帧
- 交换机在每段链路上利用CSMA/CD收发帧,且可以全双工
- 每段链路一个独立的冲突域
- 交换:A-A’与B-B’的传输可以同时进行,没有冲突
交换机转发表:交换表
Q:交换机怎么知道A’可以通过接口4到达,而B’可以通过接口5到达?
A:每个交换机有一个交换表,每个入口:
- (主机的MAC地址,到达主机的接口,时间戳)
- 看起来很像路由表
Q:交换表入口信息如何创建和维护的呢?
A:类似于路由协议?其实不然。有很大差异,交换机是利用自学习的方法
交换机:自学习
- 交换机通过学习,获知到达主机的接口信息
- 当收到帧时,交换机“学习”到发送帧的主机(通过帧的源MAC地址),位于收到该帧的接口所连接的LAN网段
- 将发送主机MAC地址/接口信息记录到交换表中
交换机:帧过滤/转发
当交换机接收到帧:
记录帧的源MAC地址与输入链路接口
利用目的MAC地址检索交换表
if在交换表中检索到与目的MAC地址匹配的入口
then{
if目的主机位于收到帧的网段(也就是说发送主机和接收主机连接在同一个接口上)
then丢弃帧
else讲真转发到该入口指向的接口
}
else泛洪/* 向除受到该帧的接口之外的所有接口转发*/
虚拟局域网(VLAN)
- 虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组。
- 这些网段具有某些共同的需求。
- 每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的工作站是属于哪一个 VLAN。
- 虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网
- 虚拟局域网帧格式(802.1Q VLAN帧格式)
- 虚拟局域网协议允许在以太网的帧格式中插入一个 4 字节的标识符,称为 VLAN 标记(tag),用来指明发送该帧的工作站属于哪一个虚拟局域网。其中,2字节的标记协议ID(固定值:0*8100),2字节的标记控制信息(12bit VLANID字段;3bit优先级字段,类似于IP的TOPS)
PPP协议
点对点数据链路控制
- 一个发送端,一个接收端,一条链路:比广播链路容易
- 无需介质访问控制
- 无需明确的MAC寻址
- e.g.拨号链路,ISDN链路
- 常见的点对点数据链路控制协议:
- HDLC:High Level Data Link Control
- PPP(Point-to-Point Protocol)
PPP设计需求
- 组帧:将网络层数据报封装到数据链路层帧中
- 可以同时承载任何网络层协议分组(不仅IP数据报)
- 可以向上层实现分用(多路分解)
- 比特透明传输:数据域必须支持承载任何比特模式
- 差错检测:(无纠正)
- 连接活性检测:检测、并向网络层通知链路失效
- 网络层地址协商:短接点可以学习/配置彼此网络地址
PPP无需支持的功能
- 无需差错纠正/恢复
- 无需流量控制
- 不存在乱序交付
- 无需支持多点链路
差错恢复、流量控制等由高层协议处理!
PPP数据帧
- 标志:定界符
- 地址:无效(仅仅是一个选项)
- 控制:无效;未来可能的多种控制域
- 协议:上层协议(e.g.PPP-LCP,IP,IPCP,etc)
- 信息:上层协议分组数据
- 校验:CRC校验,用于差错检测
标志 | 地址 | 控制 | 协议 | 信息 | 校验 | 标志 |
---|---|---|---|---|---|---|
01111110 | 11111111 | 00000011 | 01111110 | |||
1字节 | 1字节 | 1字节 | 1或2字节 | 多种长度 | 2或4字节 | 1字节 |
一个PPP帧里最多可以节省5个字节长度(地址、控制、协议、check两个字节)
字节填充
- “数据透明传输”需求:数据域必须允许包含标志模式<01111110>
- Q:如何判断该作为数据接收,还是作为标志处理?
- 发送端:在数据中的<01111110>和<01111101>字节前添加额外的字节<01111101>
- 接收端:
- 单个字节<01111101>表示一个填充字节
- 连续两个字节<01111101>,丢弃第一个,第二个做为数据接收
- 单个字节<01111110>:标志字节
- 异步传输:我们是用0x7D(01111101)作为转义符,转义规则如下:
- 把信息字段中出现的每一个0x7D字节转变为2字节序列(0x7D,0x5E)
- 若信息字段出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)
- 若信息字段中出现ASC码的控制字符(即数值小于0x20的字符),则在该字符前要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列的(0x7D,0x23).
- 同步传输:使用零比特传输,0x7E的二进制表示是01111110,因此只要在每出现5个1时插入一个0就可以避免在数据中出现0x7E
PPP数据控制协议
在交换网络层数据之前,PPP数据链路两端必须:
- 配置PPP链路
- 最大帧长
- 身份认证
- etc
- 学习/配置网络层信息
- 对于IP协议:通过交换IPCP协议报文(IP分组首部的“上层协议”字段取值:8021),完成IP地址等相关信息配置
网络层
网络层服务
网络层
- 从发送主机向接收主机传送数据段
- 发送主机:将数据段封装到数据报中
- 接收主机:向传输层交付数据段
- 每个主机和路由器都运行网络层协议
- 路由器检验所有穿越它的IP数据报的头部域
- 决策如何处理IP数据报
网络层核心功能——转发与路由
- 转发:将分组从路由器的输入端口转移到合适的输出端口
- 每个路由器都维护一个转发表,转发表确定在本路由器如何转发分组
- 路由:确定分组从源到目的地的经过的路径
- 路由算法确定通过网络的段到端路径
网络层核心功能——连接建立
- 某些网络的重要功能:ATM,帧中继,X.25
- 数据分组传输之前两端主机需要建立虚拟/逻辑连接
- 网络设备(如路由器)参与连接的建立
- 网络层连接与传输层连接的对比
- 网络层连接:两个主机之间(路径上的路由器等网络设备参与其中)
- 传输层连接:两个应用进程之间(对中间网络设备透明)
网络层服务模型
Q:网络层为发送端(主机)到接收端(主机)的数据报传送“通道”提供什么样的服务模型?
A:CBR(固定比特率)、VBR(可变比特率)、ABR(可用比特率)、UBR(不保证比特率)
- 无连接服务
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组可能传输路径不同
- 数据报网络
- 连接服务
- 首先为系列分组的传输确定从源到目的经过的路径(建立连接)
- 然后沿该路径传输系列分组
- 系列分组传输路径相同
- 传输结束后拆除连接
- 虚电路网络
网络层向上提供的两种服务:虚电路网络和数据报网络
虚电路网络
连接服务与无连接服务
- 数据报网络与虚电路网络是典型两类分组交换网络
- 数据报网络提供网络层无连接服务
- 虚电路网络提供网络连接层服务
- 类似于传输层的无连接服务(UDP)和面向连接服务(TCP),但是网络层服务:
- 主机到主机服务
- 网络核心实现
虚电路
- 虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接)
- 分组交换
- 每个分组的传输利用链路的全部带宽
- 源到目的路径经过的网络层设备共同完成虚电路功能
- 通信过程:
- 呼叫建立→数据传输→拆除呼叫
- 每个分组携带虚电路标识(VCID),而不是目的主机地址,携带相同VCID的分组,会沿着相同的虚电路所确定的路径从源主机传输到目的主机
- 虚电路经过的每个网络设备,维护每条经过它的虚电路连接状态
- 链路、网络设备资源(如带宽、缓存等)可以面向VC进行预分配
- 与分配资源=可预期服务性能
- 如ATM的电路仿真(CBR)
VC的 具体实现
- 每条虚电路包括:
- 从源主机到目的主机的一条路径
- 虚电路号(VCID)沿每段链路 一个编号
- 沿每个网络层设备(如路由器),利用转发表记录经过的每条虚电路
- 沿某条虚电路传输的分组,携带对应虚电路的VCID,而不是目的地址
- 同一条VC,在每段链路上的VCID通常不同
- 路由器转发分组时依据转发表改写 /替换虚电路号
虚电路信令协议
- 用于VC的建立、维护与拆除
- 路径选择
- 应用于虚拟电路网络
- 如ATM、帧中继
- 目前的Internet不采用
数据报网络
数据报网络
- 网络层无连接
- 每个分组携带目的主机
- 路由器根据分组的目的地址转发分组
- 基于路由协议/算法构建转发表
- 检索转发表
- 每个分组独立选路
数据报转发表
- 路由算法确定通过网络的端到端路径
- 转发表确定在本路由器如何转发分组
- 在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口
数据报网络orVC网络
Internet(数据报网络) | ATM(VC网络) |
---|---|
计算机之间的数据交换 “弹性”服务,没有严格时间需求 |
电话网络演化而来 |
链路类型众多 | 核心业务是实时对话 |
智能端系统 | 哑端系统 |
简化网络,复杂边缘 | 简化边缘,复杂网络 |
IPV4协议
IP数据报
Internet网络层
- 路由协议
- 路径选择
- RIP、OSPF、BGP
- 根据路由算法和路由信息计算的信息吗,我们通常将他们存储到**转发表(路由表)**中。
- 转发表(路由表)供网络层的协议在转发和处理数据分组时使用,具体到Internet网络中,就是IP协议。
- IP协议
- 寻址规约
- 数据报(分组)格式
- 分组处理规约
- IP协议在处理和传输分组过程中,难免会产生差错,作为网络层,需要把一些差错信息传输给一些路由器或者主机,这时,就要用到ICMP(互联网控制报文)协议
- 差错报告
- 在路由器、主机之间传递“信令”
- 通常和 IP协议伴随进行,也就是说,要实现IP协议,就要实现ICMP协议
IP数据报(分组)格式
版本号 | 首部长度 | 服务类型 | 总长度 | ||||
标识 | 标志位 | 片偏移 | |||||
生存时间 | 协议 | 首部校验和 | |||||
源IP地址 | |||||||
目的IP地址 | |||||||
选项字段(长度可变) | 填充 | ||||||
数据 |
- 除数据部分,剩余部分是数据报首部,首部中除选项字段和填充,剩余的是固定部分
- 版本号字段占4位:IP协议的版本号
- 首部长度占4位:IP分组首部长度。固定部分的长度就是20字节
- 以4字节为单位
- 服务类型(TOS)字段占8位:指示期望或得哪种类型的服务
- 1998年这个字段改名为区分服务
- 只有网络在提供区分服务时使用
- 一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H
- 总长度字段占16位:IP分组的总字节数(首部+数据)
- 最大IP分组的总长度:65535B
- 最小的IP分组首部:20B
- IP分组可以封装的最大数据:65535-20=65515B
- 生存时间(TTL)字段占8位:IP分组在网络中可以通过的路由器数(或跳步数)
- 路由器转发一次,TTL减1
- 若TTL=0,路由器则丢弃该IP分组
- 协议字段占8位:指示IP分组封装的是哪个协议的数据包
- 实现传输层的复用/分解
- E.g.6为TCP,表示封装的为TCP段,17为UDP,表示封装的是UDP数据报
- 首部校验和字段占16位,实现IP分组首部的差错检测
- 计算校验和时,该字段全置为0
- 采用反码算数运算求和,和的反码作为首部校验和字段。如果结果全是1,则没错,否则有错。
- 逐跳计算、逐跳校验
- 源IP地址、目的IP地址字段各站32位:分别标识发送分组的源主机 /路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址
- 选项字段占长度可变,范围在1~40B之间:携带安全、源选路径、时间戳和路由记录等内容
- 实际上很少被使用
- 填充字段占长度可变,范围在0~3B之间:目的是补齐整个首部,符合32位对齐 ,即保证首部长度是4字节的倍数
IP数据报分片
最大传输单元(MTU)
- 网络链路存在MTU(最大传输单元)——链路层数据帧可封装的数据的上限
- 不同链路的MTU不同
- IF MTU1>mtu2,则要分片和重组
IP分片与重组
- 大IP分组向较小的MTU链路转发时,可以被“分片”
- 1个IP分组分为多片IP分组
- IP分片到达目的主机后进行“重组”
- IP首部的相关字段用于标识分片以及确定分片的相对顺序
- 总长度、标识、标志位和片偏移
IP分组格式(接上节)
- 标识字段占16位:标识一个IP分组
- IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识
- 标志位字段占3位:
- DF(Don’t Fragment)
- DF=1:禁止分片
- DF=0:允许分片
- MF(More Fregment)
- MF=1: 非最后一片
- MF=0:最后一片(或未分片)
- DF(Don’t Fragment)
- 片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量。如果没有分片,那么偏移量一定是0
- 片偏移字段以8字节为单位
IP分组过程
假设原IP分组总长度为L,待转发链路的MTU为M。
若L>M,且DF=0,则可以/需要分片
分片时每个分片的标识复制原IP分组的标识
通常分片时,除最后一个分片,其它分片均分为 MTU允许的最大分片
一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为
d=[M−208](向下取整)∗8d=[\frac{M-20}8](向下取整)*8 d=[8M−20](向下取整)∗8需要的总片数为:
n=[L−20d](向上取整)n=[\frac{L-20}d](向上取整) n=[dL−20](向上取整)每片的片偏移字段取值为:
Fi=d8∗(i−1),1≤i≤nF_i=\frac{d}{8}*(i-1),\quad 1\leq i\leq n Fi=8d∗(i−1),1≤i≤n每片的总长度字段为:
Li={d+20,1≤i≤nL−(n−1)d,i=nL_i=\begin{cases} d+20, \quad 1\leq i\leq n\\ L-(n-1)d, i=n \end{cases} Li={d+20,1≤i≤nL−(n−1)d,i=n每片的MF标志位为:
MFi={1,1≤i≤n0,i=nMF_i=\begin{cases} 1, \quad 1\leq i\leq n\\ 0, i=n \end{cases} MFi={1,1≤i≤n0,i=n
IP编址
IP编址
- IP分组
- 源地址(SA)-从哪来
- 目的地址(DA)-到哪去
- 接口(interface):主机/路由器与物理链路的连接
- 实现网络层功能
- 路由器通常有多个接口
- 主机通常只有一个或两个接口
- IP地址:32比特编号标识主机、路由器的接口。作为32比特二进制的数,记忆起来很困难,所以我们将它们分成4个8位组,每个8比特转换成十进制,再用小数点将他们连起来,这种形式的IP地址称作点分十进制IP地址
- IP地址与每个接口关联
- 怎样为接口分配IP地址呢?这就涉及到了 IP子网。
IP子网
- 将IP地址看作两部分:
- 网络号(NetID)-高比特位
- 主机号(HostID)-低比特位
- 那么,按照这样的划分,我们在给IP网络或者Internet网络进行地址分配的时候,要遵循一个基本原则:保证分配到某一个区域中的这些接口的IP地址,他们的网络号是相同的,主机号是不同的。
- IP子网
- IP地址具有相同网络号的设备接口
- 不跨越路由器(第三及以上层网络设备)可以彼此联通的接口
IP有类编制
A类地址:0.0.0.0~127.255.255.255(网络号是0)
B类地址:128.0.0.0~191.255.255.255(网络号是10)
C类地址:192.0.0.0~223.255…255.255(网络号是110)
D类地址:224.0.0.0~239.255.255.255(网络号是1110)
E类地址:240.0.0.0~255.255.255.255(网络号是1111)
IP子网与子网划分
- 使用有类编址的时候,因为每类的网络范围都非常大,所以容易造成网络资源的浪费,所以为了区分一个IP子网更小范围网络(子网),就要进行子网划分
子网划分
- IP地址:
- 网络号-高比特位
- 子网号-原网络主机号部分比特(从主机号中顺序高比特位依次取若干位)
- 主机号-低比特
- 如何确定是否划分了子网?利用多少位划分子网?这就要用到子网掩码。
子网掩码
- 形如IP地址:
- 32位
- 点分十进制
- 取值:
- 网络号、子网号位全部取1
- 主机号全取0
- 例如:
- A网默认的子网掩码为:255.0.0.0
- B网默认的子网掩码为:255.255.0.0
- C网默认的子网掩码为:255.255.255.0
- 借用3比特划分子网的B网的子网掩码为:255.255.224.0(11111111.11111111.11100000.0)
- 子网地址+子网掩码=准确确定子网大小
子网掩码的应用
- 将IP分组的目的IP地址与子网掩码按位与运算(全1是1,不全1是0),提取子网地址
- 例如:目的IP地址是172.32.1.112,子网掩码是255.255.254.0,那么,根据按位相与运算,可以算出:
- 子网地址:172.32.0.0(子网掩码:255.255.254.0)
- 地址范围:172.32.0.0~172.32.1.255(网络域固定,主机域从全0到全1)
- 可分配地址范围:172.32.0.1~172.32.1.254
- 广播地址:172.32.1.255(主机域全1)
CIDR与路由聚合
CIDR(无类域间路由)
- 消除传统的A类、B类和C类地址的界限
- 融合子网地址与子网掩码,方便子网划分
- 无类地址格式:a.b.c.d/x,其中x是前缀长度
CIDR与路由聚合
- 提高IPV4地址空间分配效率
- 提高路由效率
- 将多个子网聚合为一个较大的子网
- 构造超网
- 路由聚合
- 路由聚合:选用更具体的路由:最长前缀匹配优先原则
- 层级编址使得路由信息通告更高效
聚合过程
假设有两个前缀为190.154.27.0/26和190.154.27.64/26,只有将他们转换成二进制才能看到联系:
前缀 | 前缀(二进制) |
---|---|
190.154.27.0/26 | 10111110 10011010 00011011 00000000 |
190.154.27.64/26 | 10111110 10011010 00011011 01000000 |
能够发现,两者的网络号只有最后一位不同,将其隔离出来即是两者的差值为1,也即相邻。所以此时两者可以聚合,聚合结果为:
前缀 | 前缀(二进制) |
---|---|
190.154.27.0/26 | 10111110 10011010 00011011 00000000 |
190.154.27.64/26 | 10111110 10011010 00011011 01000000 |
190.154.27.0/25 | 10111110 10011010 00011011 00000000 |
注意前缀此时已经变为了25,这时候相当于将两个子网进行了聚合。
ICMP(互联网控制报文)协议
ICMP
- 互联网控制报文协议ICMP支持主机或路由器:
- 差错(或异常)报告
- 网络探寻
- 两类ICMP报文
- 差错报告报文(5种)
- 目的不可达
- 源抑制
- 超时/超期
- 参数问题
- 重定向
- 网络探寻报文
- 回声请求与应答报文
- 时间戳请求与应答报文
- 差错报告报文(5种)
ICMP报文
类型 | 编码 | description |
---|---|---|
0 | 0 | 回声应答 |
3 | 0 | 目的网络不可达 |
3 | 1 | 目的主机不可达 |
3 | 2 | 目的协议不可达 |
3 | 3 | 目的端口不可达 |
3 | 6 | 目的网络未知 |
3 | 7 | 目的主机未知 |
4 | 0 | 源抑制 |
8 | 0 | 回声请求 |
9 | 0 | 路由通告 |
10 | 0 | 路由发现 |
11 | 0 | TTL超期 |
12 | 0 | IP首部错误 |
例外情况
- 几种不发送ICMP差错报文的特殊情况:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 除第1个IP数据报分片外,对所有后续分片均不发送ICMP差错报告报文
- 对所有多播IP数据报均不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告报文
- 几种ICMP报文已不再使用
- 信息请求与应答报文
- 子网掩码请求和应答报文
- 路由器询问和通告报文
ICMP报文格式
- ICMP报文封装到IP数据报中传输
类型 | 代码 | 校验和 | |
这四个字节取决于取决于ICMP报文的类型 | |||
ICMP数据部分(长度取决于类型) |
Internet算法
RIP协议
AS内部路由
- Internet采用层次路由
- AS内部路由协议也称为内部网络协议IGP
- 最常见的AS内部路由协议
- 路由信息协议:RIP
- 开放最短路径优先:OSPF
- 内部网关路由协议:IGRP
- Cisco私有协议
RIP
早于1982年随BSD-UNIX操作系统发布
是一种分布式的基于距离向量的路由选择协议
特点:
- 仅和相邻的路由器交换信息
- 路由器交换的信息是当前本路由器所知道的所有信息,即当前的路由表
- 按固定时间间隔交换路由信息
路由器刚开始工作时,路由表是空的,但经过若干次的更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。以上过程,叫 “收敛”,收敛是在AS中所有结点都得到正确的路由选择信息的过程。
距离向量路由算法
距离的定义:也称“跳数”,从一路由器到直连的网络的距离定义为1,从一路由器到非直连路由器的距离定义为所经过的路由器数加1。
度量一个目的网络可达性信息的时候(就是从一个路由器出发,到另一个目的网络,度量费用大小的时候),即距离变量:跳步数(max=15hops,16跳的时候表示不可达),每条链路1个跳步数
RIP选择一条具有最少路由器的路由,哪怕还存在另一条高速但路由器较多的路由
每隔三十秒,领居之间交换一次DV,成为通告(advertisement)
每次通告:最多25个目的子网
对每一个相邻路由器发送过来的RIP报文,进行以下步骤:
对地址为 X 的相邻路由器发来的RIP报文,先修改此报文的所有项目:把“下一跳”字段中的地址都改为 X ,并把所有的“距离”字段值加 1
对修改后的RIP报文中的每个项目,执行以下步骤:
if (原来的路由表中没有目的网络N):
把该项目添加到路由表中
else if(在路由表中有目的网络N):
查看下一跳路由器地址:
if 下一跳路由器地址是 X:
把收到的项目替换原路由表中的项目
else if 在路由表中有目的网络N,但下一跳路由器不是X,比较距离d与路由表中的距离: if(收到的项目中的距离 d 小于路由表中的距离):
更新
else:
无动作
若三分钟还没收到相邻路由器的更新路由表,则把此相邻路由器记为不可到达的路由器,即“距离”为 16。
return
RIP:链路失效:恢复
如果180秒没有收到通告,那么邻居/链路失效
- 经过该邻居的路由不可用
- 重新计算路由
- 向邻居发送新的通告
- 邻居再依次向外发送新的通告
- 链路失效信息能否快速传播到全网?
- 可能发生无穷计数问题
- 毒性逆转技术用于预防乒乓环路(另外:无穷大距离=16hops)
RIP路由表的处理
- RIP路由表是利用一个称作route-d(daemon)的应用层进程进行管理
- 通告报文周期性的通过UDP数据报发送
传输层
概述
传输层服务和协议
- 传输层协议为运行在不同host上的进程提供了一种逻辑通信机制(并且是端到端的)
- 端系统运行传输层协议
- 发送方:将应用递交的消息分成一个或多个的segment,并向下传给网络层
- 接收方:将接收到的segment组装成消息,并向上交给应用层
- 传输层可以为应用提供多种协议
- Internet上的TCP
- Internet上的UDP
传输层vs网络层
- 网络层:提供主机之间的逻辑通信机制
- 传输层:提供应用进程之间的逻辑通信机制
- 位于网络层之上
- 依赖于网络层服务
- 对网络层服务进行(可能的)增强
Internet传输层协议
- 可靠的、按序的交付服务
- 拥塞控制
- 流量控制
- 连接控制
- 不可靠的交付服务
- 基于“尽力而为”的网络层,没有做(可靠性方面的)扩展
- 两种服务均不保证:
- 延迟
- 带宽
复用和分用
多路复用/分用
为什么要进行多路复用/分用?
如果某层上的一个协议对应直接上层的多个协议/实体,则需要复用/分用
接收端进行多路分用:传输层依据头部信息将接收到的segment交给正确的socket,即不同的进程
发送端进行多路复用:从多个socket接收数据,为每块数据封装上头部信息,生成segment,交给网络层
分用如何工作?
TCP/UDP段格式
源端口号# 目的端口号# 其他头部信息 应用数据 主机接收到IP数据报
- 每个数据报携带源IP地址、目的IP地址
- 每个数据报携带一个传输层的段
- 每个段携带源端口号和目的端口号
主机收到segment之后,传输层协议提取IP地址和端口号信息,将segment到向相应的socket
- TCP做更多处理
无连接分用(UDP)
- 利用端口号创建socket
- UDP的socket用二元组标识
- 主机收到UDP后
- 检查段中的目的端口号
- 将UDP段导向绑定在该端口的socket
- 来自不同源IP地址和/或源端口号的IP数据包被导向同一个socket
面向连接分用(TCP)
- TCP的socket用四元组标识
- 源IP地址
- 源端口号
- 目的IP地址
- 目的端口号
- 接收端利用所有的四个值将segment导向合适的socket
- 服务器可能同时支持多个TCP socket
- 每个socket用自己的四元组标识
- web服务器为每个客户端开不同的socket
无连接传输协议UDP
UDP:User Datagram Protocol
- 基于Internet IP协议
- 复用/分用
- 简单的错误校验
- “best effort”服务,UDP段可能
- 丢失
- 非按需到达
- 无连接
- UDP发送方和接收方之间不需要握手
- 每个UDP段的处理独立于其他段
- UDP为什么存在?
- 无需建立连接(减少延迟)
- 实现简单,无需维护连接状态
- 头部开销少
- 没有拥塞控制:应用可以更好地控制发送时间和速率
- 常用于流媒体应用
- 容忍丢失
- 速率敏感
- UDP还用于
- DNS
- SNMP
- 在UDP上实现可靠数据传输:
- 在应用层增加可靠性机制
- 应用特定的错误恢复机制
UDP校验和
目的:检测UDP在传输层中是否发生错误
- 发送方
- 将段的内容视为16bit整数
- 校验和计算:计算所有整数的和,进位加载和的后面,将得到的值按位求反,得到校验和
- 发送方将校验和放入校验和字段
- 接受方
- 计算所收到段的校验和
- 将其与校验和字段进行对比
- 不相等:检测出错误
- 相等:没有检测出错误(但有可能有错误)
可靠数据传输原理
- 什么是可靠?
- 不错、不丢、不乱
- 可靠数据传输协议
- 可靠数据传输对应用层、传输层、链路层都很重要
- 网络TOP-10问题
- 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性
流水线机制和滑动窗口协议
流水线协议
- 允许发送方在收到ACK之前连续发送多个分组
- 更大的序号列范围
- 发送方和/或接收方需要更大的 存储空间以缓存分组
滑动窗口协议
- 滑动窗口协议:sliding-window protocol
- 窗口
- 允许使用的序列号范围
- 窗口尺寸为 N:最多有N个等待确认的消息
- 滑动窗口
- 随着协议的运行,窗口在序列号空间内向前滑动
- 滑动窗口协议:GBN,SR
GBN协议
发送方
- 假定分组头部包含k-bit序列号
- 窗口尺寸为N,最多允许N个分组未确认
- 采用累积确认的机制
- ACK(n):确认到序列号为n(包含n)的分组均已被正确接收
- 可能收到重复ACK
- 超时timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组
SR协议
- 接收方对每个分组单独进行确认
- 设置缓存机制,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组
- 为每个分组设置定时器
- 发送方窗口
- N个连续的序列号
- 限制已发送且未确认的分组
发送方/接收方窗口
相比于GBN协议,SR协议多了一个接收方窗口。
面向连接传输协议-TCP
TCP概述
概述
TCP把链接作为最基本的抽象
每一条TCP连接有两个端点
TCP连接的不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口,TCP连接的端点叫做套接字或插口
端口号拼接到IP地址即构成了套接字
点对点
- 一个发送方,一个接收方
可靠的、按序的字节流
流水线机制
- TCP拥塞控制和流量控制机制设置窗口尺寸
发送方/接收方缓存
全双工
- 同一连接中能够传输双向数据流
面向连接
- 通信双方在发送数据之前必须建立连接
- 连接状态只在连接的的、两端中维护,在沿途节点中并不维护状态
- TCP连接包括:两台主机上的缓存、连接状态、连接状态变量、socket等
流量控制机制
TCP:序列号和ACK
- 序列号:
- 序列号是指segment中的第一个字节的编号,而不是segment的编号
- 建立TCP连接时,双方随机选择序列号
- ACKs:
- 希望接受到的下一个字节的序列号
- 累计确认:该序列号之前的所有字节均已被正确接收到
- Q:接收方如何处理乱序到达的segment?
- A:TCP规范中没有规定,由TCP的实现者做出决策
TCP可靠数据传输
TCP可靠数据传输概述
- TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
- 流水线机制
- 累计确认
- TCP使用单一重传定时器
- 触发重传的事件
- 超时
- 收到重复ACK
- 渐进式
- 暂不考虑重复ACK
- 暂不考虑流量控制
- 暂不考虑拥塞控制
TCP RTT和超时
- 问题:如何设置定时器的超时时间?
- 大于RTT
- 但是RTT是变化的
- 过短
- 不必要的重传
- 过长
- 对段丢失时间反应慢
- 问题:如何估计RTT?
- sampleRTT:测量从段发出去到收到ACK的时间
- 忽略重传
- SampleRTT变化
- 测量多个SampleRTT,求平均值,形成估计值
TCP可靠通信的具体实现
- TCP连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口
- TCP的可靠传输机制用字节的序号进行控制
- TCP两端的四个窗口经常处于动态变化之中
- TCP连接的往返时间RTT也不是固定不变的,需使用特定的算法估算较为合理的重传时间
TCP发送方事件
- 从应用层收到数据
- 创建segment
- 序列号是segment第一个字节的编号
- 开启定时器
- 设置超时时间
- 超时:
- 重传引起超时的segment
- 重启定时器
- 收到ACK
- 如果确认此前未确认的segment
- 更新sendbase
- 如果窗口中海域未被确认的分组,重启定时器
- 如果确认此前未确认的segment
TCP接收方事件
- 延缓ACK
快速重传机制
- TCP实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大
- 重发丢失的分组之前要等待很长时间
- 通过重复ACK检测分组丢失
- sender会背靠背的发送多个分组
- 如果某个分组丢失,可能会引发多个重复的ACK
- 如果sender收到对同一数据的3个ACK,则假定改数据之后的段已丢失
- 快速重传:在定时器超时之前即进行重传
可靠通信的实现ARQ
- 使用上树的确认和重传机制,我们就可以在不可靠传输网络上实现可靠的通信
- 这种可靠传输协议通常称为自动重传请求ARQ
- ARQ表明重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组
可靠传输工作原理——停止等待协议
优点是简单,缺点是信道利用率低
注意:
- 在发送完一个分组后,必须暂时保留已发送的分组副本
- 分组和确认都必须进行编号
- 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些
信道利用率
U=TDTD+RTT+TAU=\frac{T_D}{T_D+RTT+T_A} U=TD+RTT+TATD
TCP流量控制
(假定TCP receiver丢弃乱序的segments)
- 假设接收端缓冲区大小为RcvBuffer。LastByteRead:上层应用程序接收的最后一个字节序号,LastByteRcvd:接收端从网络接收的最后一个字节序号,那么LastByteRcvd–LastByteRead就是已经接受但是还没有传递给上层的数据。所以空闲区域RcvWin= RcvBuffer-(LastByteRcvd–LastByteRead)
- sender限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲rcvwindow尺寸
TCP连接管理
运输连接有三个阶段,即:连接建立、数据传送和连接释放
连接建立:三次握手
- A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
- B 的 TCP 收到连接请求报文段后,如同意,则 发回确认。B 在确认报文段中应使 SYN = 1,使 ACK = 1, 其确认号ack = x + 1,自己选择的序号 seq = y
- A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1,A 的 TCP 通知上层应用进程,连接已经建立。
- B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。
拥塞控制原理
拥塞控制
- 非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理”
- 表现:
- 分组丢失
- 分组延迟过大(在路由器缓存中排队)
- 拥塞控制vs流量控制
- 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
- 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制的方法
- 端到端拥塞控制
- 网络层不需要显式的提供支持
- 端系统通过观察loss,delay等网络行为判断是否发生拥塞
- TCP采取这种办法
- 网络辅助的拥塞控制
- 路由器向发送方显式的反馈网络拥塞信息
- 简单的拥塞指示:SNA,DECbit,TCP/IP ECN,ATM
- 指示发送方应该采取何种速率
TCP拥塞控制
TCP拥塞控制的基本原理
sender限制发送速率
congwin=lastbytesent-lastbyteacked
rate=CongwinRTTBtyes/secrate=\frac{Congwin}{RTT} Btyes/sec rate=RTTCongwinBtyes/sec
- Congwin:
- 动态调整以改变发送速率
- 反应所感知到的网络拥塞
- 问题:如何感知网络拥塞?
- loss事件=timeout或3个重复ACK
- 发生LOSS事件后,发送方降低速率
- 如何合理的调整发送速率?
- 加性增-乘性减:AIMD
- 慢启动:SS
加性增-乘性减:AIMD
- 原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
- 方法:AIMD
- 线性增加:每个RTT将Congwin增大一个MSS——避免拥塞
- 乘性减半:发生loss后将congwin减半
TCP慢启动:SS
TCP建立连接时,congwin=1
例:MSS=500byte,RTT=200msec
初始速率=20kbps
可用带宽可能远高于初始速率
- 所以开始希望快速增长
原理:
- 当连接开始时,指数性增长
指数型增长
- 每个RTT将congwin翻倍
- 收到每个ACK进行操作
初始速率很慢,但是快速攀升
Threshold变量
Q:何时应该指数性增长切换为线性增长(拥塞避免)?
A:当Conwin达到Loss事件值的1/2时
- 实现方法:
- 变量Threshold
- Loss事件发生时,Threshold被设为 loss事件前congwin的 1/2
Loss事件的处理
- 3个重复的ACKs
- Conwin切到一半
- 然后线性增长
- Timeout事件:
- congwin直接设为1个MSS
- 然后指数增长
- 达到threshold后,再线性增长
TCP拥塞控制算法
Th = ?
CongWin = 1 Mss
slow start or exponential increasel
While (No Packet Loss and CongWin < Th) {
send CongWin TCP segments
for each ACK increase CongWin by 1
congestion avoidance or linear increase/While (No Packet Loss) {
send CongWin TCPsegments心
for CongWin ACKs, increase CongWin by 1
}
Th= CongWin/2
lf (3 Dup ACKs)CongWin = Th;lf (timeout)CongWin=1;
快重传
- 快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。
- 当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半,但拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大
TCP报文格式
源端口 | 目的端口 | ||||||||||||||||||||||||||||||
序号 | |||||||||||||||||||||||||||||||
确认号 | |||||||||||||||||||||||||||||||
数据偏移 | 保留 | URG | ACK | PSH | RST | SYN | FIN | 窗口 | |||||||||||||||||||||||
校验和 | 紧急指针 | ||||||||||||||||||||||||||||||
选项(长度可变) | 填充 |
应用层
网络应用的基本原理
网络应用体系结构
- 客户机/服务器结构(C/S)
- 点对点结构(P2P)
- 混合结构(Hybrid)
客户机/服务器结构(C/S)
- 服务器
- 7*24小时提供服务
- 永久性访问地址/域名
- 利用大量服务器实现可扩展性
- 客户机
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP地址
- 不会与其他客户机直接通信
- 例子:WEB
纯P2P结构
- 没有永远的在线的服务器
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
- 优点:高度可伸缩
- 缺点:难于管理
混合结构
- Napster
- 文件传输使用P2P结构
- 文件的搜索采用C/S结构——集中式
- 每个节点向中央服务器登记自己的内容
- 每个节点向中央服务器提交查询请求,查找感兴趣的内容
网络应用进程通信
网络应用的基础:进程间通信
- 进程:
- 主机上运行的程序
- 同一主机上运行的进程之间如何通信?
- 进程间通信机制
- 操作系统提供
- 不同主机上运行的进程如何通信?
- 消息交换
- 客户机进程:发起通信的进程
- 服务器进程:等待通信请求的进程
套接字:Socket
- 进程间通信利用socket发送/接收消息实现
- 类似于寄信:
- 发送方将消息送到门外邮箱
- 发送方依赖(门外的)传输基础设施将消息传到接收方所在主机,并送到接收方的门外
- 接收方从门外获取消息
- 传输基础设施向进程提供API
- 传输协议的选择
- 参数的设置
如何寻址进程?
- 不同主机上的进程间通信,那么每个进程必须拥有标识符
- 如何寻址主机?——IP地址
- Q:主机上有了IP地址后,是否足以定位进程?
- 否。同一主机可能同时有多个进程需要通信
- 端口号/Port number
- 为主机上每个需要通信的进程分配一个端口号
- HTTP server:80
- Mail server:25
- 进程的标识符
- IP+端口号
应用层协议
- 网络层应用需遵循应用层协议
- 公开协议
- 由RFC定义
- 允许互操作
- HTTP,SMTP···
- 多数P2P文件共享应用
应用层协议的内容
- 消息的类型
- 请求消息
- 响应消息
- 消息的语法/格式
- 消息中有哪些字段?
- 每个字段如何描述
- 规则
- 进程何时发送/响应消息
- 进程如何发送/响应消息
网络应用需求与传输层服务
网络应用对传输服务 的需求
- 数据丢失(data loss)/可靠性
- 某些网络应用能够容忍一定的数据丢失:网络电话
- 某些网络应用要求100%可靠的数据传输:文件传输,Telnet
- 时间/延迟
- 有些应用只有在延迟足够低时才“有效”
- 网络电话/网络游戏
- 带宽
- 某些应用只有在 带宽达到最低要求时才“有效”:网络视频
- 某些应用能适应任何带宽——弹性应用:email
Internet提供的传输服务
TCP服务 | UDP服务 |
---|---|
面向连接:客户机/服务器进程间需要建立连接 | 无连接 |
可靠的传输 | 不可靠的传输 |
流量控制:发送方不会发送速度过快,超过接收方的处理能力 拥塞控制:当网络负载过重时能够限制发送方的发送速度 |
|
不提供时间/延迟保障 不提供最小带宽保障 |
不提供: 可靠性保障 流量控制 拥塞控制 延迟保障 带宽保障 |
典型网络应用所使用的的传输层服务
应用 | 应用层协议 | 使用的传输层协议 | 使用的熟知端口号 |
---|---|---|---|
Web | HTTP | TCP | 80 |
SMTP | TCP | 25 | |
POP3 | TCP | 110 | |
file transfer | FTP | TCP | 21和20 |
remote terminal access | TELNET | TCP | 23 |
DNS | UDP | 53 | |
DHCP | UDP | 客户端口68,服务器端口67 |
Web应用
Web应用概述
Web与HTTP
- World Wide Web(www):Tim Berners-Lee
- 网页
- 网页互相链接
- 网页包含多个对象
- 对象:HTML文件、JPEG图片、视频文件、动态脚本等
- 基本HTML文件:包含对其他对象引用的链接
- 对象的寻址
- URL(Uniform Resource Locator):统一资源定位符
- 协议://域名/路径
HTTP协议概述
万维网应用遵循的协议
超文本传输协议
- HyperText Trabsfer Protocol
C/S结构
- 客户——Browser:请求、接收展示web对象
- 服务器——web server:响应客户的请求,发送对象
HTTP版本:
- 1.0: RFC 1945
- 1.1: RFC 2068
使用TCP传输服务
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字socket)
- 服务器接收来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器 (HTTP服务器)交换HTTP消息
- 关闭TCP连接
无状态
- 服务器不维护任何有关客户端过去所发请求的信息
计算机网络:从物理层到应用层的五层模型相关推荐
- 网络分层(OSI七层模型、TCP/IC四层/五层模型)
转自:https://blog.csdn.net/yuiop123455/article/details/107486126 目录 一.OSI七层模型 OSI七层模型概念 OSI七层模型分别是 二.T ...
- 计算机网络--从五层模型开始(完善中)
计算机网络-五层模型 OSI 7.五层模型.TCP/IP 4 1. 应用层 1.1 DNS 1.1.1 DNS解析过程 1.2 HTTP协议 1.2.1 URI & URL 1.2.2 HTT ...
- 【计算机网络基础】-- OSI的七层模型和TCP/IP的五层模型
[计算机网络基础]-- OSI的七层模型和TCP/IP的五层模型 大家好,我是Lampard~~ 欢迎来到计算机网络基础系列的博客 OSI七层模型 开放式系统互联通信参考模型(英语:Open Sy ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之计网_Part_1-1(计算机网络体系_七层模型五层模型TCP/IP四层模型、TCPUDPIP的故事【TCP三握四挥】)整起
PART1:计算机网络体系可以大致分为一下三种, 每一层有自己对应的协议,每一层都是向上一层提供服务,每个分层中所有的协议都称为协议栈 协议:网络中传输信息时的规范和规则 各层一些重要的协议 网络:通 ...
- 13、计算机网络的七层模型、四层模型 以及 五层模型
目录 一.OSI七层模型 1.1 七层模型 1.2 每层对应的功能及协议 1.3 为什么使用分层网络模型(分层的好处) 1.4 数据在各层之间的传递过程 二.TCP/IP协议栈(四层模型) 2.1 ...
- 计算机网络为什么需要抽象出五层模型?
多点头发,少点代码 我是龙叔,一个分享互联网技术和心路历程的大叔 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/ ...
- 通俗易懂讲解计算机网络五层模型是如何相互协作的
正文 上面说了一些题外话,哈哈.下面我们开始今天的知识点. 互联网相隔n公里路的两台计算机,是如何进行数据的传送的呢?在成千上万台的计算机中,一台计算机是如何正确着找到另外一个计算机,并把数据传给它的 ...
- 计算机网络--详述OSI七层模型与TCP/IP五层模型
OSI七层协议 一.OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识--OSI参考模型. 1.OSI的来源 OSI(Open System Interconnect),即开放式系统互联. ...
- 计算机网络的五层模型和七层模型
文章目录 前言 网络五层模型 网络七层模型 前言 今天介绍一点简单的,但是也是很重要的问题,网络的五层模型和七层模型~ 网络五层模型 (1)物理层 使用物理的线路进行通信,传输比特流,可以用集线器进行 ...
最新文章
- 另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...
- 2021-05-27Series(三):Series和ndarray对比学习 转
- No module named 'xxx’
- HTML5 Canvas、内联 SVG、Canvas vs. SVG
- Facebook基于数据中心的机器学习实践
- 如何解决海康网盘下载大文件中断问题?(idm更新链接)(貌似更新链接还是有问题)(用谷歌浏览器下载)
- 虽然有失落的即时通讯
- html中为什么style中不显示发光点,css实现发光文字,以及一点点js特效
- 详解python运行三种方式_详解python运行三种方式
- testng_TestNG @工厂注释
- 年轻人的第一笔债,在双11的直播间里
- [转]垂直搜索基础知识(1)
- 决策支持系统复习资料
- Ubuntu 9.04下安装飞信LibFetion V1.1版
- MIR7 金额计算公式
- 电子邮件群发软件,邮件群发单显是什么意思?外贸群发邮件软件
- 新造车杀入15万,燃油车慌了?
- 这个程序员为了买股票,直接分析了上市公司财报,还把代码开源了
- cocos creator设置网络头像
- 工业控制系统概述:SCADA,DCS和PLC的概述
热门文章
- DB_RECOVERY_FILE_DEST,LOG_ARCHIVE_DEST,LOG_ARCHIVE_DEST_N
- 百度,360,搜狗,UC,今日头条信息流推广开户多少钱?深圳百度推广开户代理商
- 15---Mysql的多表+事务
- 关于深度学习云服务器推荐
- Python爬取全球是最大的电影数据库网站IMDb数据
- python获取excel数据制作有文字和图表的报告_如何用Python绘制学术报告图表?
- 微信网页授权校验文件
- 带着问题重学 Java 并发编程
- 自定义 VSCode 背景图片
- 从《西部世界》到GAIL(Generative Adversarial Imitation Learning)算法
- 网络分层(OSI七层模型、TCP/IC四层/五层模型)