导图社区 计算机网络
湖南科大微课堂笔记大全,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的系统。其基本原理在于通过物理连接和逻辑协议,构建一个能够相互通信和协作的网络环境。
编辑于2024-07-21 20:53:05计算机网络
第一章概述
1.1计算机网络在信息时代的作用
1.2互联网概述
网络、互连网(互联网)和因特网
因特网发展的三个阶段
因特网的标准化工作
因特网的组成
1.3三种交换方式
电路交换(Circuit Switching)
分组交换(Packet Switching)
报文交换(Message Switching)
对比
1.4计算机网络的定义和分类
计算机网络的定义
计算机网络的分类
按技术交换分类
电路交换网络
报文交换网络
分组交换网络
按使用者分类
公用网
专用网
按传输介质分类
有线网络
无线网络
覆盖范围分类
广域网WAN
城域网MAN
局域网LAN
个域网PAN
按拓扑结构分类
总线型网络
星型线网络
环形网络
网状型网络
1.5计算机网络的性能指标
速率
比特
速率
带宽
带宽的这两种表述之间有着密切的联系,一条通信线路的频带宽度越宽,其所传输数据的最高数据率也越高
吞吐量
时延
发送时延
分组长度(b)/发送速率(b/s)
传播时延
信道长度/电磁波传播速率(m/s)
自由空间:光速3*10^8(m/s)
铜线电缆:2.3*10^8(m/s)
光纤:2*10^8(m/s)
处理时延
排队时延
时延带宽积
传播时延*带宽
往返时间
利用率
信道利用率
用来表示某信道有百分之几的时间是被利用的(由数据通过)
网络利用率
全网络的信道利用率的加权平均
丢包率
即分组丢失率,是指在一定时间范围内,传输过程中丢失的分组数量与总分组数量的比率。
接口丢包率
节点丢包率
链路丢包率
路径丢包率
网络丢包率
1.6计算机网络体系
常见的计算机网络体系结构
OSI体系结构
物理层
数据链路层
网络层
运输层
会话层
表示层
应用层
TCP/IP体系结构
网络接口层
网际层
运输层
应用层
五层协议原理体系结构
物理层
解决何种信号来传输比特的问题
数据链路层
分组在一个网络(一段链路)上传输的问题
网络层
解决分组在多个网络上传输(路由)的问题
运输层
解决进程之间基于网络的通信问题
应用层
解决通过应用进程的交互来实现特定网络应用的问题
计算机网络体系结构分层的必要性
计算机网络是个非常复杂的系统。早在最初的ARPANET设计时就提出了分层的设计理念。
分层可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小局部问题就比较易于研究和处理。
计算机网络体系结构分层思想举例
计算机网络体系结构中的专用术语
实体
任何可发送或接收信息的硬件或软件。
对等实体
收发双方相同层次中的实体。
协议
控制两个对等实体进行逻辑通信的规则的集合。
语法
定义所交换信息的格式。定义所交换信息由哪些字段以及何种顺序构成。
语义
定义收发双方所要完成的操作。
同步
收发双方的时序关系。
服务
在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务。
要实现本层协议,还需要使用下面一层所提供的服务。
协议是水平的,服务是垂直的。
实体看得见相邻下层所提供的服务,但并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实体是透明的。
服务访问点
在同一系统中相邻两层的实体交换信息的逻辑接口,用于区分不同服务类型。
数据链路层的服务访问点为帧的类型字段
网络层的服务访问点为IP数据包首部中的协议字段。
运输层的服务访问点为端口号。
服务原语
上层使用下层所提供的服务必须通过与下层交换一些命令,这些命令称为服务原语。
协议数据单元PDU
对等层次之间传送的数据包称为该层的协议数据单元。
服务数据单元SDU
同一系统内,层与层之间交换的数据包称为服务数据单元。
多个SDU可以合成一个PDU,一个SDU也可以划分为几个PDU。
第二章物理层
2.1物理层的基本概念
解决在各传输媒体上传输比特0和1的问题。进而给数据链路层提供透明传输比特流的服务。 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。 物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。
传输媒体
导引型传输媒体
双绞线
同轴电缆
光纤
非导引型传输媒体
微波通信(2-40GHz)
物理层协议主要任务
机械特性
指明接口所用接线器的形状和尺,引脚数目和排列,固定和锁定装置。
电气特性
指明在接口电缆的各条线上出现的电压的范围。
功能特性
指明某条线上出现的某一电平的电压表示何种意义。
过程特性
表明对不同功能的各种可能事件的出现顺序。
2.2物理层下面的传输媒体
导引型传输媒体
电磁波被导引沿着固体媒介传播
同轴电缆
同轴电缆价格较贵且布线不够灵活和方便,随着集线器的出现,在局域网领域基本上都是采用双绞线作为传输媒体。
双绞线
绞合的作用 抵御部分来自外界的电磁波干扰 减少相邻导线的电磁干扰
光纤
优点
通信容量大
传输损耗小,远距离传输时更加经济
抗雷电和电磁干扰性能好,这在大电流脉冲干扰的环境下尤为重要
无串音干扰,保密性好,不易被窃听
体积小,重量轻
缺点
割接需要专业设备
光电接口价格较贵
电力线
非导引型传输媒体
指自由空间
无线电波
微波
红外线
点对点无线传输
直线传输,中间不能有障碍物,传播距离较短
传输速率低
可见光
2.3传输方式
串行传输
是指数据一个比特一个比特依次发送的
并行传输
一次发送n个比特而不是一个比特,速度快,成本高
同步传输
数据块以稳定的比特流的形式传输,字节之间没有间隔。接收端在每个比特信号的中间时刻进行检测
收发双方时钟同步
外同步
在收发双方之间添加一条单独的时钟信号线
发送端在发送数据信号的同时,另外发送一路时钟同步信号,接收端按照时钟同步信号的节奏来接收数据
内同步
发送端将时钟同步信号编码到发送数据中一起传输
发送端将时钟同步信号编码到发送数据中一起传输,例如曼彻斯特编码。
异步传输
以字节为独立的传输单位,字节之间的时间间隔是不固定的,接收端仅在每个字节的起始处对字节内的比特实现同步,为此通常要在每个字节的前后分别加上起始位和结束位。
字节之间异步,字节之间的时间间隔不固定
字节中的每个比特依然要同步,各比特的持续时间是相同的。
单向通信(单工)
通信双方只有一个数据传输方向
双向交替通信(半双工)
通信双方可以相互传输数据,但不能同时进行
全双工通信(双向同时通信)
通信双方可以同时发送和接收信息
2.4编码与调制
计算机需要处理和传输用户的文字,图片,视频,音频。统称为消息。
数据。数据是运送消息的实体
计算机中的网卡将比特0和1变换成相应的电信号发送到网线。信号是数据的电磁表现。
由信源发出的原始信号叫基带信号
数字基带信号
对其波形进行变换,叫做编码,产生的信号仍为数字信号,在数字信道传输
将其频率范围搬移到较高频段,并转换为模拟信号,称为调制,调制后产生的信号是模拟信号,在模拟信道中传输。
模拟基带信号
编码
对音频信号进行编码的脉码调制PCM
调制
将语音数据加载到模拟的载波信号中传输
频分复用FDM技术,充分利用带宽资源
信号需要在信道传输
数字信道
模拟信道
码元。在使用时间域的波形表示数字信号时,代表不同离散数值的基本波形
常用编码
不归零编码(存在同步问题)
需要额外一根传输线来传输时钟信号,使发送方和接收方同步。
对于计算机网络,宁愿利用这根传输线传输数据信号,而不是传输时钟信号。
归零编码
每个码元传输结束后信号都要归零,所以接收方只要在信号归零后进行采样即可,不需要单独的时钟信号
实际上,归零编码相当于把时钟信号用归零的方式编码在了数据之内,这称为自同步信号
归零编码中大部分的数据带宽,都用来传输归零而浪费掉了,编码效率低
曼彻斯特编码
在每个码元时间的中间时刻,信号都会发生跳变。码元中间时刻的跳变即表示数据又表示时钟。(传统以太网)
差分曼彻斯特编码(比曼彻斯特编码变化少,传输效率高)
跳变仅表示时钟
码元开始处电平是否发生变化,表示数据
基本调制方法
使用基本调制方法,一个码元只能包含一个比特信息
混合调制
频率
频率和相位是相关的,即频率是相位随时间的变化率,所以一次只能调制频率和相位两个钟的一个
相位
振幅
相位和振幅可以结合起来一起调制,正交振幅调制QAM
QAM,12种相位,每个相位有1或2种振幅可选。可以调制出16种码元,每种码元可以对应表示4个比特。每个码元与四个比特的对应关系不能随便定义。每个码元与四个比特的对应关系采用格雷码。
信道的极限容量
信号在传输过程中会受到各种因素的影响,信号波形失去了码元之间的清晰界限,这种现象称为码间串扰。
失真因素
码元传输速率
信号传输距离
噪声干扰
传输媒体质量
奈氏准则
在假定理想条件下,为了避免码间串扰,码元传输速率是有上限的。
理想低通信道的最高码元传输速率=2W Baud=2W码元/秒。 理想带通信道的最高码元传输速率=W Baud=w码元/秒。
W:信道带宽(单位hz) Baud波特,即码元/秒
码元传输速率又称比特率,调制速率,波形速率或符号速率,它与比特率有一定的关系:
当一码元只携带一比特信息量,波特率等于比特率在数值上相等
当一码元携带n比特信息量时,则波特率转换成比特率时,数值要乘以n
要提高信息传输速率,就必须设法使每一个码元能携带更多个比特的信息量,需要采用多元制。
实际信道能传输的最高码元速率,要明显低于奈氏准则给出的上限数值。
香农公式
信道带宽或信道中信噪比越大,信息的极限传输速率越高。 在实际信道上能够达到的信息传输速率要比该公式的极限传输速率低不少。这是因为在实际信道中,信号还要收到其他一些损伤。
带宽受限且有高斯噪声干扰的信道的极限信息传输速率。
C=w*log2(1+s/n)
C:信道的极限信息传输速率(单位:b/s) W:信道带宽(单位:hz) S:信道内传信号的平均功率 N:信道内的高斯噪声功率 s/n:信噪比。(dB)度量单位 信噪比(d B)=10*log10(s/n)(dB)
在信道带宽一定的情况下,根据奈氏准则和香农公式,要想提高信息的传输速率就必须采用多元制和努力提高信道中的信噪比
自从香农公式发表后,各种新的信号处理和调制方法就不断出现,目的就是为了尽可能接近香农公式给的传输速率极限
第三章数据链路层
3.1数据链路层概述
数据链路层在网络体系结构中的地位
链路就是从一个节点到相邻节点的一段物理链路,而中间没有任何其他的交换节点。 数据链路是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。 数据链路层以帧为单位传输和处理数据。
数据链路层的三个重要问题(使用点对点信道的数据链路层来举例)
封装成帧
将数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作,称为封装成帧。
目的是为了在链路上以帧为单位传送数据,也就是为了实现数据链路层本身的功能
差错检测
发送方将封装好的帧通过物理层发送到传输媒体上帧在传输过程中遭遇干扰后可能会出现误码。
接受主机通过检错码发现误码。发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾。接收方接收到帧后,通过检错码和检错算法,就可以判断出帧在传输过程是否出现误码。
可靠传输
接收方主机接收到误码的帧后,不会接受该帧,将其丢弃
数据链路层向上层提供的不可靠服务,丢弃就丢弃了
提供可靠服务,还需要其他措施来确保接收方主机还可以重新接收到被丢弃的这个帧的正确副本。
尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就接收到什么,就称为可靠传输
使用广播信道数据链路层(共享式局域网)
除了上述三个问题外,还有一些其他需要解决的问题。
将帧的目的地址添加在帧中一起传输
总线上多台主机同时使用总线传输帧时,传输信号就会产生碰撞
以太网的媒体介入控制协议CSMA/CD(载波接听,多点接入,碰撞检测)
交换式局域网
使用点对点链路和链路层交换机的交换式局域网在有线领域完全取代了共享式局域网
网桥和交换机的工作原理
无线局域网
仍使用共享信道技术
802.11局域网采用的媒体接入控制协议CSMA/CA
3.2封装成帧
是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头帧尾中包含重要控制信息
以太网的MAC帧
点对点协议PPP的帧格式
帧头帧尾的作用之一是帧定界
PPP帧帧头帧尾各有一字节帧定界
并不是每一种数据链路层协议的帧都包含有帧定界标志
以太网MAC帧 物理层在MAC帧前添加8字节的前导码,再将比特流转换为电信号发送。前导码前7个字节为前同步码,作用时使接收方的时钟同步,之后的一字节为帧开始定界符,表明其后紧接着MAC帧。另外以太网还规定了帧间间隔时间为96比特的发送时间。因此MAC帧并不需要帧结束定界符。
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样
例如,在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在前插入一个转义字符。接收方数据链路层在物理层交付的比特流中提取帧,遇到转义字符时,提出转义字符,继续对后面的内容作为数据进行提取。
例如,在上层交付的数据中既包括转义字符和帧定界符。在发送帧前对帧的数据部分进行扫描,每出现一个帧定界符和转义字符,就在其前面插入转义字符(转义字符是一种特殊的控制字符,长度为一个字节,十进制值为27)
面向字节的物理链路使用字节填充(或字符填充)的方法实现透明传输
面对比特的物理链路使用比特传输的填充来实现透明传输
某点对点协议的帧,在发送前可采用零比特填充法对数据部分进行扫描,每五个连续的比特1后面就插入一个比特0。接收方的数据链路层从物理层交付的比特流中提取帧时,将帧的数据部分中的每5个连续的比特1后面的0比特剔除即可。
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
考虑到差错控制等多种因素,每种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU
3.3差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
例如,以太网版本2的MAC帧,帧尾包含长度为四字节的帧检验序列FCS字段,作用是让接收方的数据链路层检查帧在传输过程中是否产生了误码
点对点协议PPP的帧格式,帧尾中也包含了两字节的帧检验序列FCS字段,作用也是让接收方的数据链路层检查帧在传输过程中是否产生了误码
奇偶校验
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验位)或偶数(偶校验)。
采用奇校验若比特1的数量的奇性改变,可以检查出错误。但如果传输过程中产生了两位误码,接收方对接收到的比特流进行奇校验,发现比特1的总数为奇数,就误认为传输过程中没有发生误码。采用奇校验,若比特1的数量的奇性不发生改变,是无法检查出错误。
采用偶校验,在传输的比特流后面添加的校验位为比特0,使比特1的总数为偶数
采用奇偶校验,如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码。如果有偶数个位发生变误码,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验CRC
收发双方约定好一个生成多项式G(x)
发送方基于待发送的数据和生成的多项式计算出差错检验码(冗余码),将其添加到待传输数据的后面一起传输。
接收方通过生成多项式来计算收到的数据是否产生了误码。
使用除法计算冗余码,待发送的数据作为被除数的一部分后面添加生成多项式最高次个0以构成被除数,生成多项式各项系数构成的比特串作为除数,进行除法,得到商和余数,余数就是所计算出的冗余码,将其添加到待发送数据的后面一起发送。注意冗余码的长度和生成多项式的最高次数相同,商仅作为标记,防止对错位。
接收方被除数是接收到的数据,除数仍是生成多项式各项系数构成的比特串,进行除法,得到商和余数,如果余数为0,可判定传输过程中没有产生误码,否则可判定传输过程中产生了误码
算法要求生成多项式必须包含最低次项
步骤
1.构造被除数,在待发送信息后面添加生成多项式最高次数个0
2.构造除数,生成多项式各项系数构成的比特串
3.作除法
4.检查余数,余数的位数应与生成多项式最高次数相同,如果位数不够,则在余数前补0来补足位数
将余数添加到待发送信息的后面就可以发送了
检测码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机中较少使用。
循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非非常易于用硬件实现,因此被广泛应用于数据链路层
检错重传方式来纠正传输过程的差错或者仅仅丢弃检测到差错的帧。取决于数据链路层向上提供的是可靠传输服务还是不可靠传输服务。
3.4
数据链路层向上层提供的服务类型 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
1.可靠传输基本概念
一般情况下,有线链路的误码率较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失,分组失序以及分组重复。(此处将帧的称呼改成了分组,这意味着传输差错不仅仅局限于数据链路层的比特差错。
分组丢失,分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
可靠传输服务并不尽局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
2.停止-等待协议SW
确认重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ。意思是重传的请求是自动进行的,因为不需要接收方显式的请求,发送发重传某个出错的分组。
注意事项
1.接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组。 2.为了让接收方判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止等待协议的停等特性,只需要一个比特编号就够了,即编号0和1。 3.为了让发送方能够判断所收的ACK分组是否重复的,需要给ACK分组编号。所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止等待协议可以不用给ACK分组编号。 4.超时计时器设置的重传时间应仔细选择。一般将重传时间选为略大于“从发送方到接收方的平均往返时间。” 数据链路层点对点的往返时间比较确定,重传时间比较好设定。 在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
信道利用率
发送方发送数据分组所耗费的发送时延TD。 收发双方之间的往返时间RTT。 接收方发送确认分组所耗费的发送时延TA。
信道利用率U=TD/RTT+TD+TA
当往返时间RTT远大于数据帧发送时延T D(例如卫星链路),信道利用率非常低
若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
为了克服停止等待协议信道利用率很低的缺点,就产生了另外两种协议,后退N帧协议GBN,选择重传协议SR。
回退N帧协议GBN
在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。是一种连续ARQ协议。在协议的工作过程中发送窗口和接受窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
1.采用3个比特给分组编序号,即序号0~7。 收发双方各自分组序号 0123456701…… 当序号增加到7时,下一个序号又从0开始,发送方要维持一个发送窗口,序号落在发送窗口内的数据分组可被连续发送,而不必等到接收方的相应确认分组后再发送。发送窗口的尺寸记为WT。WT=1是停止等待协议,WT超出上限会造成很严重的问题。 接受窗口尺寸记WR,对于回退N帧协议,其取值只能为一,这一点与停止等待协议相同。 例如简单情况,无差错的情况。 发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去,经过互联网的传输,正确到达了接收方,没有出现乱序和误码。接收方按序接受了他们。每接受一个,接受窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组。0~4号确认分组经过互联网的传输正确到达了发送方。发送方每接收一个就向前滑动一个位置,就有新的序号落入了发送窗口。发送方可以将收到确认的数据分组从缓存中删除了。而接收方可以择机将已接受的数据分组交付上层处理。 有差错的情况。 发送方将序号落在发送窗口内的这5个数据分组,一次连续发送出去,经过互联网的传输到达了接收方。假设他们在传输过程中受到了干扰。其中5号数据分组出现了误码,接收方通过数据分组中的检错码发现了错误,于是丢弃该数据分组。而后续到达的这4个数据分组的序号与接收窗口中的序号不匹配。接收方同样不能接收他们,将他们丢弃。并对之前按序接受的最后一个数据分组进行确认,也就是发送ACK4,每丢弃一个数据分组,就发送一个ACK4,这四个ACK4经过互联网的传输到达了接收方。发送方之前就接受过ACK4。当收到重复ACK4时,就知道了之前所发出的数据分组出现了差错,于是可以不等超时计时器超时就立刻开始重传。至于收到几个重复确认就立刻重传,由具体实现来决定。 假设收到这四个重复的确认不会触发发送方立刻重传。一段时间后超时计时器出现超时。发送方将发送窗口内已发送过的这些数据分组全部重传。 本例子中,尽管序号6701的数据分组正确到达接收方,但由于五号数据分组误码不被接受,他们也受牵连不被接受,发送方还要重传这些数据分组,这就是所谓的GObackN。 可见当通信线路质量不好时,回退N帧协议的信道利用率并不比停止等待协议高。
累积确认
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接受。
优点:即使确认分组丢失,发送方也可能不必重传。
缺点:不能及时向发送方即时反映出接收方已经正确接受的数据分组信息。
选择重传协议SR
为进一步提升性能,可设法只重传出现误码的数据分组。因此,接受窗口的尺寸WR不应再等于一(而应大于一),以便接收方先收下失序到达但无误码并且序号落在接受窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每一个正确接收到的数据分组进行逐一确认。
发送方
发送窗口尺寸WT的取值范围是1<WT<=2^n-1 其中n是构成分组序号的比特数量。 WT=1。 与停止等待协议相同 WT>2^n-1,,接收方无法分辨新旧数据分组。 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去。 发送方只有按序收到对已发送的数据分组的确认时,发送窗口才能向前相应滑动。若收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。
接收方
接受窗口WR的取值范围是1<WR<=WT WR=1 与停止等待协议相同 WR>WT。无意义 接收方可接受未按序到达但没有误码并且序号落在接受窗口内的数据分组。 为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认。 接收方只有在按序接受数据分组后,接受窗口才能向前相应滑动。
3.5点对点协议PPP
是目前使用最广泛的点对点数据链路层协议。
一般的因特网用户通常通过连接到某个因特网服务提供者ISP。这些ISP已经从因特网管理机构申请到了一批IP地址,用户计算机只有获取到ISP所分配的合法IP地址后,才能成为因特网上的主机。用户计算机与ISP进行通信时,所使用的数据链路层协议通常就是PPP协议。 1999年公布的在以太网上运行的PPP协议,即PPPOE。他使得ISP可以通过DSL,电路调制解调器,以太网等带宽接入技术,以以太网接口的形式为用户提供接入服务。另外点对点协议PPP也广泛应用于广域网路由器之间的专用线路。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成。
对各种协议数据报的封装方法(封装成帧)
链路控制协议LCP。用于建立,配置以及测试数据链路的连接。
一套网络控制协议NCPs(其中的每一个协议支持不同的网络层协议)
帧格式
帧首部由四个字段构成,帧尾部由两个字段构成。 标志字段F:PPP帧定界符,取值为0x7E。 地址字段A:取值为0xFF。 控制字段C:取值为0x03。 协议字段P:指明帧的数据部分送交哪个协议处理。 当取值0x0021表示:帧的数据部分为IP数据报。 0xc021表示:帧的数据部分为LCP分组。 0x8021表示:帧的数据部分为NCP分组。 帧尾部的帧检验序列FCS字段:其值是使用循环冗余校验CRC计算出的校验位。用于检查PPP帧是否存在误码。
透明传输
当PPP帧的数据部分出现帧首和帧尾的标志字段时,如果不采取措施,则会造成接收方对PPP帧是否结束的误判。F是PPP帧的定界符,取值0x7E(01111110)。 PPP协议实现透明传输的方法取决于所使用的链路类型。 如果是面向字节的异步链路则采用字节填充法,也就是插入转义字符。 如果是面向比特的同步链路,则采用比特填充法,也就是插入比特0。
字节填充法
以字节7E作为PPP帧的定界符,以字节为单位来讨论问题。 发送方的处理: 出现的每一个7E(帧定界符)字节转变成2字节序列(7D,5E)。 7D(转义字符)字节转变为2字节序列(7D,5D)。 ASCII码控制字符,在该字符前插入一个7D字符,同时将该字符的编码加上十六进制的20。 接收方的处理:进行反变化即可恢复出原来帧的数据部分。
比特填充法
以01111110作为PPP帧的定界符,以比特为单位来讨论问题。 发送方的处理: 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0。 接收方的处理: 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除。
差错检测
PPP帧的尾部包含有1个两个字节的帧检验序列FCS字段,使用循环冗余循环校验CRC来计算该字段的取值。 接收方每接受到一个PPP帧,就进行CRC循环冗余校验。若CRC检验正确,就收下这个帧。反之就丢弃这个帧,使用PPP的数据链路层向上不提供可靠传输服务。
以拨号接入为例介绍PPP协议工作状态。
3.6.1媒体接入控制的基本概念
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC。
静态划分信道
预先固定分配好信道,这类方法非常不灵活,对于突发性数据传输信道利用率会很低。通常在无线网络的物理层中使用,而不是在数据链路层使用。
频分多址
时分多址
码分多址
动态接入控制
受控接入
集中控制
有一个主站以循环方式轮询每个站点有无数据发送,只有被轮询到的站点才能发送数据。最大的缺点是存在单点故障问题。
分散控制
个站点是平等的,并连接成一个环形网络。令牌(一个特殊的控制帧)沿环逐站传递,接收到令牌的站点才有权发送数据,并在发送完数据后将令牌传递给下一个站点。
随机接入
所有站点通过竞争,随机的在信道上发送数据,如果恰巧有两个或更多的站点在同一时刻发送数据,则信号在共享媒体上就要产生碰撞(即发生了冲突),使得这些站点的发送都失败。因此,这类协议要解决的关键问题是如何尽量避免冲突,及发生冲突后如何尽快恢复通道。著名的共享式以太网采用的就是随机接入。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域以完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体接入。
3.6.2媒体接入控制—静态划分信道
信道复用
复用是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。 当网络中传输媒体的传输容量大于多条单一信道的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
频分复用FDM
将传输线路的频带资源划分成多个子频带,形成多个子信道,各子信道之间需要留出隔离频带,以免造成子信道间的干扰,当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。
频分复用的所有用户同时占用不同的频带资源并进行通信。
时分复用TDM
横坐标为时间,将时间划分成一个个时隙。时分复用技术将传输线路的宽带资源按时隙轮流分配给不同的用户,每对用户只在所分配的时隙里使用线路传输数据。时分复用技术将时间划分成了一段段等成的时分复用帧。每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。
时分用户的所有用户在不同时间占用同样的频带宽度。
波分复用WDM(光的频分复用)
码分复用CDM
码分复用CDM是另一种共享信道的方式。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA。 同理频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词是频分多址FDMA和时分多址TDMA。 本课程中不严格区分复用和多址的概念。可简单理解如下: 复用是将单一媒体的频带资源划分成很多子信道,这些子信道间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分。 多址(多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性的占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性的分配给用户的应用中,多址是不需要的(对于无线广播和电视广播站就是这样。) 某种程度上,FDMA,TDMA,CDMA可以分别看成FDM,TDM和CDM的应用。 与FDM和TDM不同,CDM的每一个用户可以在同样的时间使用同样的频带进行通信。 由于个用户使用经过特殊挑选的不同码型,因此个用户之间不会产生干扰。 CDM最初用于军事通信,因为这种系统所发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。 技术进步,CDM A设备价格和体积都大幅度下降,因而现在已广泛应用民用的移动通信。 直接序列扩频DSSS 在CDMA中,每个比特时间再划分为m个短的间隔,称为码片。通常m的值是64或128。 使用CDMA的每一个站被指派一个唯一的mbit 码片序列。 如果一个站要发送比特1,则发送他自己的mbit码片序列。 一个站如果要发送比特0,则发送他自己的mbit 码片序列的二进制反码。 码片序列的挑选原则: 1.分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。 2.分配给每个站的码片序列必须相互正交(规格化内积为零) 令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。 两个不同站的ST码片序列正交,就是向量S和T的规格化内积为0: 将向量S和T中的对应分量相乘,然后相加,再除以向量中分量的数量,其结果为零。 S•T=0。 S•T反码=0 S•S=1。 S•S的反码=-1
3.6.3媒体接入-动态接入控制—随机接入
多主机连接到一根总线上,各主机随机发送帧,当两个或多个主机同时发送帧时,代表帧的信号就会产生碰撞或称为冲突。又或者当某个主机正在使用总线发送帧的过程中,另一台主机也要发送帧,这同样也会产生碰撞。如何协调总线上各主机的工作,尽量避免产生碰撞,是一个必须要解决的问题。 早期共享式以太网采用载波接听多址接入/碰撞检测CSMA/CD。
总线局域网载波接听多址接入/碰撞检测CSMA/CD
多址接入MA
多个站连接在一条总线上,竞争使用总线。
载波监听CS
每个站在发送帧之前先要检测一下总线上是否有其他站点在发送帧(“先听后说”)
96比特时间是指发送96比特所耗费的时间,也称为帧间最小间隔,其作用是使接收方可以检测出一个帧的结束。同时也使得所有其他站点都能有机会平等竞争信道并发送帧。
若检测到总线空闲96比特时间,则发送这个帧。
若检测到总线忙,则继续检测,并等待总线转为空闲96比特时间,然后发送这个帧。
碰撞检测CD
每一个正在发送帧的站边发送边检测碰撞(边说边听)
一旦发现总线上发生碰撞,则立即停止发送,退避一段随机时间后再次发送(一旦冲突,立即停说,等待时机,重新再说。)
争用期(碰撞窗口)
主机A和B位于总线型以太网的两端,以太网单程端到端的传播时延记为T。纵坐标为时间。 假设在时刻0主机A要发送帧,当检测到总线空闲96比特时间后,立即发送帧,在时刻T-t,主机D也要发送帧,当检测到总线96比特的空闲时间后,立即发送帧,主机D检测到总线空闲,但实际上总线并不空闲,只是主机D检测不出来,这必然会产生碰撞,发生碰撞的时刻为T-t/2。 之后碰撞信号会陆续传播到主机D和A。主机D检测到碰撞的时间为T。 主机A检测到碰撞的时间为2T-t。
主机最多经过2T的时长就可以检测到本次发送是否遭受了碰撞
因此,以太网的端到端往返传播时延2T称为争用期或碰撞窗口。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
每个主机在自己发送帧之后的一线段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线端到端往返的传播时延,即一个争用期。
显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
10Mb/s把争用期定为512比特发送时间,即51.2us,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m
最小帧长
假设主机A给主机D发送一个很短的帧,边发送边检测碰撞,主机A很快就将该帧发送完毕了,之后就不再针对该帧检测碰撞,在该帧的传输过程中,主机C也要发送帧,主机C检测到总线空闲96比特空闲时间后就立即发送帧。尽管总线上并不空闲,这必然会发生碰撞,主机D最终会收到主机A发送的,并遭遇碰撞的帧。主机D会将该帧丢弃。但对于主机A而言,它并不知道自己一发送完毕的该帧在总线传输过程中遭遇了碰撞,因此不会重发该帧。
以太网的帧长不能太短
以太网规定最小帧长为64字节,即512比特(512比特时间记为争用期)
如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64个字节
以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇到了碰撞
如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞。
如果在争用期内检测到碰撞,那么就立即停止发送数据,这时已经发送出去的数据一定小于64字节,因此,凡长度小于64字节的帧都是由于碰撞而异常终止的无效帧。
最大帧长
假设主机A给主机D发送一个很长的帧,使得主机。A长时间占用总线,而总线上的其他主机迟迟拿不到总线的使用权。另外,由于帧很长,还可能导致主机D的接受缓冲区无法装下该帧而产生溢出,因此以太网的帧长应该有其上限。
截断二进制指数退避算法
退避时间=基本退避时间*随机数r
基本退避时间的取值为争用期2T。 而随机数r是从离散的整数集合0,1……2k-1中随机选出的一个数。k=min(重传次数,10)
若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向上层报告。
信道利用率
横坐标为时间,总线上的某个主机可能发生多次碰撞,进行多次退避后,成功发送了一个帧,帧的发送时延为T0,在最极端的情况下,源主机在总线的一端,而目的主机在总线的另一端,因此还要经过一个单程端到端的传播时延T后,总线才能完全进入空闲状态,因此,发送一帧所需的平均时间为多个争用期2T,加上一个帧的发送时延T0,再加上一个单程端到端的传播时延T。 考虑以下这种理想情况: 各主机发送帧都不会产生碰撞。 总线一旦空闲就有某个主机立即发送帧。 发送一帧占用总线的时间为T0+T,而帧本身发送时间为T0。 极限信道利用率 Smax=T0/(T0+T)=1/(1+T/T0) T的 值应尽量小,意味着以太网端到端的距离应受到限制,不应太长。 而T0值尽量大,这意味着以太网的帧长应尽量大一些。
强化碰撞
以太网还采取一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧之外,还要再继续发送32比特或48比特的人为干扰信号,以便有足够多的碰撞信号使所有站点都能检测出碰撞。
3.6.4媒体接入—动态接入控制—随机接入
举例说明CSMA/CA协议的工作原理 假设无线信道空闲,源站有数据帧要发送,当源站检测到信道空闲,则在等待帧间间隔DIFS后发送该数据帧,目的站若正确收到该数据帧,则经过帧间间隔SI FS后向源站发送确认帧ACK。需要说明的是若源站在规定时间内没有收到确认帧ACK,由重传计时器控制这段时间,就必须重传该数据帧,知道收到确认为止,或者经过若干次的重传失败后放弃发送。 源站为什么在检测到信道空闲后,还要再等待帧间间隔DIFS后才发送数据帧呢? 就是考虑到可能有其他站有高优先级帧要发送。若有就让高优先级帧先发送。 目的站为什么在正确接受数据帧后还要再等待一段时间SIFS才能发送ACK帧? SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧。在这段时间内,一个站点应当能够从发送方式切换到接收方式。 在源站和目的站的一次对话过程中,无线信道处于忙状态,若无线信道处于忙状态时,其他无线站点要发送数据,则必须退避。当信道从忙状态转换为空闲状态时,并经过帧间间隔DISF后,其他要发送数据的无线站点,需要退避一段随机时间后才能发送。 信道由忙转为空闲,且经过帧间间隔DIFS后为什么还要退避一段时间才能使用信道而不是立即使用信道。 防止多个站点同时发送数据而产生碰撞。
无线局域网载波监听多址接入/碰撞避免CSMA/CA
在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。 在无线局域网中,不能使用碰撞检测CD,原因如下: 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。 即使能够在硬件上实现无线局域网的碰撞检测功能。但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。
802.11无线局域网使用CSMA/CA 协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不在实现碰撞检测功能。
由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止等待协议)来保证数据被正确接受。
802.11的MA C层标准定义了两种不同的媒体接入控制方式
分部式协调功能DCF。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。
点协调功能PCF。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制)。是802.11定义的可选方式,在实际中较少使用。
帧间间隔IFS
802.11标准规定,所有的站点必须在持续检测信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS。
帧间间隔的长短取决于该站点要发送的帧的类型
高优先级帧需要等待的时间较短,因此可优先获得发送权。
低优先级帧需要等待的时间较长。若某个站点的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送。这样就减少了发生碰撞的机会。
常用的两种帧间间隔
短帧间间隔SIFS(28us),是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应该能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧,CTS帧,有过长的MAC帧分片后的数据帧,以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
DCF帧间间隔DIFS(128us),它比短帧间间隔SIFS要长的多,在DCF方式中用来发送数据帧和管理帧。
当 站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
必须使用退避算法的情况
在发送数据帧之前检测到信道处于忙状态时
在每一次重传一个数据帧时
在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道。)
CSMA/CA协议的退避算法
举例说明 假设A正在占用无线信道发送帧,在A的发送过程中,BCD也要发送帧,我们用向上的箭头来表示,于是进行载波监听,发现信道忙,需要退避。根据退避算法选择出一个随机的退避时间,并在每个时隙对信道进行一次检测。当检测到信道由忙状态转换到空闲状态,且经过帧间间隔DIFS后,退避计时器开始倒计时,假设C的退避时间最短,当C的退避计时器倒时后,C立即开始发送帧,此时信道由空闲状态转为忙状态,当B和D检测到信道忙后,就冻结各自剩余的退避时间。假设在C占用无线信道发送帧的过程中,E也要发送帧,于是进行载波监听,发现信道忙,需要退避。根据退避算法选择出一个随机的退避时间,并在每个时隙对信道进行一次检测,当检测到信道由忙状态转为空闲状态,且经过帧间间隔DI FS后,退避计时器开始倒计时。当B和D检测到信道由忙状态转为空闲状态,且经过帧间间隔DI FS后,退避计时器重新开始从上次冻结的退避剩余时间开始倒计时,D的退避计时器会首先到时,D立即开始发送帧,此时信道由空闲时间转换为忙状态,当B和E检测到信道忙后,就冻结各自的剩余退避时间。当D发送完帧后,信道由忙状态转换为空闲信道,当B和E检测到信道由忙转换为空闲状态,且经过帧间间隔DIFS后,退避计时器重现开始从上次冻结的退避剩余时间开始倒计时,E的退避倒计时器会首先到时,E立即开始发送帧,此时信道由空闲状态转为忙状态,当B检测到信道忙后,就冻结自己剩余的退避时间。当E发送完帧后,信道由忙状态转为空闲状态,当B检测到信道由忙状态转为空闲状态,且经过帧间间隔DIFS后,退避计时器重新开始从上次冻结的退避剩余时间开始倒计时。当B的退避计时器到时后,B立即开始发送帧,若B发送完这一帧后还有帧要发送,则在检测到信道空闲后且经过帧间间隔DIFS后,还必须再退避一段随机时间后才能发送。
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
当退避计时器的时间减小到零时,就开始发送数据。
当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DI FS后,继续启动退避计时器
在进行第i次退避时,退避时间在时隙编号(0,1……2^(2+i)-1)中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第六次退避)就不再增加了。
CSMA/CA协议的信道预约和虚拟载波监听
1.源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS,包括源地址,目的地址以及这次通信(包括相应的确认帧)所需的持续时间。 当源站检测到信道空闲,且经过帧间间隔DIFS后,发送RTS帧 2.若目的站正确接收到源站发来的R TS帧,在检测到信道空闲,且经过帧间间隔SIFS后,就发送一个响应控制帧,称为允许发送CTS,它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中) 3.源站收到CTS帧后,再等待一段时间SIFS后,就可以发送其数据帧 4.若目的站正确接收到了源站发来的数据帧,再等待一个帧间间隔SIFS后,就向源站发送确认帧ACK。 除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入无线局域网中,就这样保证了源站和目的站之间的通信不会收到其他站的干扰。 如果RTS帧发生碰撞,源站就收不到CTS帧,需执行退避算法重传R TS帧。 由于RTS帧和CTS帧很短,发生碰撞的概率,碰撞产生的开销及本身的开销都很小。对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。802.11规定三种情况供用户选择: 使用RTS帧和CTS帧。 另一种是不使用RTS帧和CTS帧。 只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧 除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制。 由于利用虚拟载波监听机制,站点只要监听到RTS帧,CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正的监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约。
3.7MAC地址,IP地址以及ARP协议
MAC地址是以太网的MAC子层所使用的地址。(数据链路层)
当多个主机连接在同一广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。
在每个主机发送的帧中必须携带表示发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC,因此这类地址被称为MAC地址
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM,因此MAC地址也被称为硬件地址。
MAC地址有时也被称为物理地址(并不意味着MAC地址属于网络体系结构中的物理层。)
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡),每个网络适配器都有一个全球唯一的MAC地址,而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IEEE802局域网的MAC地址格式
由48个比特组成,每8个比特为一个字节。从左至右依次为第一个字节到第六个字节,前三个字节是组织唯一标识的符OUI,生产网络设备的厂商,需要向IEEE的注册管理机构申请一个或多个OUI,后三个字节是获得OUI的厂商可自行随意分配的,这种地址标识符称为扩展的唯一标识符EUI。对于48比特的MAC地址可称为EUI-48,MAC地址的标准表示方法,是将每4个比特写成一个十六进制的字符,共12个字符,将每两个字符分为一组,共六组,组之间用短线连接。 MAC地址第一字节的b0 位取零时,表示该地址是单播地址。取1时,表示该地址是多播地址有称为组播地址。MAC地址第一字节的b1位取0时,表示该地址是全球管理的,也就是全球唯一的,取1时,表示该地址是本地管理的。 有四种MAC地址: 全球管理的单播地址 全球管理的多播地址 本地管理的单播地址 本地管理的多播地址。剩余46位全为一,就是广播地址FF-FF-FF-FF-FF-FF
MAC地址的发送顺序
字节发送顺序为:第一个字节到第六个字节 字节内的比特发送顺序:b0到b7
单播MAC地址举例
假设这是一个拥有三台主机的总线型以太网,各主机网卡上固化的全球单播MAC地址如图所示。假设主机B要给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部中的目的地址字段,填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部。就构成了该单播帧,主机B将该单播帧发送出去,主机A和C都会收到该单播帧,主机A的网卡发现该单播帧的目的MAC地址与自己的MAC地址不匹配,于是丢弃该帧,主机C的网卡发现该单播帧的目的MAC地址与自己的MAC地址匹配,于是接收该帧,并将该帧交给其上层处理。
广播MAC地址的作用举例
假设主机B要发送一个广播帧,主机B首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该广播帧。主机B将该广播帧发送出去,主机AC都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址。就知道该帧是广播帧,接收该帧,并将该帧交给上层处理。
多播MAC地址的作用
假设主机A要发送多播帧给该多播地址,将该多播地址的左起第一个字节写成8个比特,可以看到最低比特位为1,就表明该地址是多播地址。 判断MAC地址是否为多播地址的方法: 如果第二位十六进制数不能整除2(1,3,5,7,9,B,D,F),即为多播地址。 假设主机BCD支持MAC多播,各用户给自己的主机配置的多播组列表 主机A首先要构建多播帧,在帧首部的目的地址字段填入该多播地址,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段,数据载荷以及帧尾部,就构成了该多播帧。主机A将该多播帧发送出去,主机BCD都会收到该多播帧,主机BC发现该多播帧的目的MAC地址在自己的多播组列表中,因此主机BC都会接收该广播帧,并送交上层处理。而主机D发现该多播帧的目的MAC地址不在自己的多播组列表中,主机D丢弃该多播帧。注意,当给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址。
随机MAC地址
IP地址是TCP/IP体系结构网际层所使用的地址(网际层)
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息: 网络编号:标识因特网上数以百计的网络 主机标号:标识同一网络上的不同主机。(或路由器各接口。) 之前介绍的MAC地址不具备区分不同网络的功能。 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)。 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。 从网络体系结构看IP地址与MAC地址。 数据包转发过程中IP地址与MAC地址的变化情况 数据包转发过程中源IP地址目的IP地址保持不变。 数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)进行改变。 H1知道应该把数据包传给R1 由R1帮其把数据包转发出去 H1知道R1相应接口的IP地址为IP3 但不知道其对应的MAC地址是多少。
ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP协议,使用ARP协议可以通过该IP地址获取到设备的MAC地址(网际层)
将IP地址,地址解析协议ARP,MAC地址 举例说明 只是一个共享总线型以太网,为简单起见 假设主机B给主机C发送数据包,主机B知道主机C的IP地址,但不知道他的MAC地址,因此主机B的数据链路层在封装MAC帧时,无法填写目的MAC地址。进而无法构建出要发送的MAC帧。实际上每台主机都会有一个ARP高速缓存表,表中记录IP地址和MAC地址对应关系。当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址对应的MAC地址,但未找到,因此主机B需要发送ARP请求报文来获取主机C的MAC地址。ARP请求报文(封装在MAC帧中,目的地址为广播地址)的内容是我的IP地址MAC地址,我想知道IP地址为,,的MAC地址。主机B发送封装有ARP请求报文的广播帧。总线上的其他主机都能收到该广播帧,主机A的网卡收到该广播帧后,将其送交上层处理,上层的ARP进程解析ARP请求报文,发现所询问的IP地址不是自己的IP地址,因此不予理会。主机C的网卡收到该广播帧后移交上层处理,上层的ARP进程解析ARP请求报文,发现所询问的IP地址正是自己的IP地址,需要进行相应。 1.主机C首先将ARP请求报文中所携带的主机B的IP地址和MAC地址记录到自己的ARP高速缓存表中。 2.给主机B发送ARP相应报文,已告知自己的MAC地址。 ARP响应报文(封装在MAC帧,单播)的内容是,我的IP地址,我的MAC地址,主机C给主机B发送封装有ARP响应报文的单播帧,总线上的其他主机都能收到该单播帧,主机A的网卡收到该单播帧后,发现其目的MAC地址与自己的MAC地址不匹配,直接丢弃该帧,主机B的网卡收到该单播帧后,发现其目的MAC地址就是自己的MAC地址,将其交付上层处理。上层的ARP进程解析ARP响应报文,将其所包含的IP地址和MA C地址记录到自己的ARP高速缓存表中。 ARP高速缓存表中每一条记录都有类型。类型分为静态和动态两种。 动态类型是指记录是主机自动获取到的。其生命周期默认为两分钟,当生命周期结束时,该记录将自动删除,这样做的原因是,IP地址与MAC地址的对应关系并不是永久的。例如当主机的网卡坏了,更换新的网卡后,主机的IP地址并没有改变,但主机的Mac地址改变了。静态类型是指记录是用户或网络维护人员手工配置的。不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。 ARP协议只能在一段链路或一个网络中使用,而不能跨网络使用。对于本例,ARP协议的使用是逐段链路进行的。
尽管IP地址和ARP协议属于TCP/IP体系结构的网际层(而不属于数据链路层),但是他们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址,IP地址以及ARP协议。
3.8集线器与交换机的区别
早期的总线型以太网
最初使用粗同轴电缆作为传输媒体,后来演进到使用价格相对便宜的细同轴电缆。当初认为这种连接方式既简单又可靠,然而这种使用无缘电缆和大量机械接头的总线型以太网,并不像人们想象的那么可靠。后来,以太网发展出来了一种使用大规模集成电路,可靠性非常高的设备,叫做集线器,并且使用更便宜更灵活的双绞线作为传输媒体。 使用双绞线和集线器HUB的星型以太网 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议。 集线器只工作在物理层,他的每个接口仅简单的转发比特,不进行碰撞检测,碰撞检测的任务由各站的网卡负责。 在分析任务时,我们可将集线器简单的看作是一条总线。 集线器一般都有少量的容错能力和网络管理能力。例如,若网络中某个网卡出了故障,不停的发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连接,使整个以太网仍然能正常工作。 使用集线器HUB在物理层扩展以太网。 由于集线器只工作在物理层,所以更具体的说法是:使用集线器在物理层扩展以太网。
以太网交换机
例子说明集线器和交换机的区别。 使用集线器互联而成的共享总线式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机。 使用交换机互联而成的交换式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的其他各个主机。 很显然交换机具有明显的优势。需要说明的是为了简单起见,举例前提下1.忽略ARP过程,2.假设交换机的帧交换表已“学习好了”。 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连,一般都工作在全双工方式。也就是接受帧和发送帧同时进行。注意:使用集线器的以太网在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线。只能工作在半双工模式,也就是收发帧不能同时进行。 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。 以太网交换机一般具有多种速率的接口。 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过接口转发帧。 以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自学习算法自动的逐渐建立起来的。 帧的两种转发方式: 1.存储转发 2.直通交换,不必将整个帧先缓存后再进行处理,而是在接受帧的同时,就立即按帧的目的MAC地址决定该帧的转发接口,提高了帧的转发速率。一般采用基于硬件的交叉矩阵。(这样交换时延非常小,但不检查帧是否有差错。)
对比集线器和交换机
对于使用集线器的共享总线型以太网,单播帧会传播到总线上的其他各主机。各主机中的网卡,根据帧的目的MAC地址,决定是否接收该帧,对于使用交换机的交换式以太网,交换机收到单播帧后,根据帧的目的MAC地址和自身的帧交换表,将帧转发给目的主机,而不是网络中的其他各主机。 发送广播帧的情况。 对于使用集线器的共享总线型以太网,广播帧会传播到总线上的其他各主机,各主机中的网卡检测到帧的目的MAC地址是广播地址,就接受该帧。 对于使用交换机的交换式以太网,交换机收到广播帧后,检测到帧的目的MAC地址是广播地址,于是从除该帧进入交换机接口外的其他各接口转发该帧,网络中除源主机外的其他各主机收到广播帧后,接受该广播帧。 从本例可以看出,使用集线器的共享总线型以太网中的各主机,属于同一个广播域,而使用交换机的交换式以太网中的各主机也属于一个广播域。因此对于广播帧的情况,从效果看没有什么区别。 网络中的多台主机同时给另一台主机发送单播帧的情况。 对于使用集线器的共享总线型以太网,这必然会发生碰撞,遭遇碰撞的帧会传播到总线上的各个主机。对于使用交换机的交换式以太网,交换机收到多个帧时,会将他们缓存起来,然后逐个转发给目的主机,不会产生碰撞。 对比集线器扩展以太网和使用交换机扩展以太网有什么区别。 首先对比发送单播帧的情况。 交换机有优势。 发送广播帧。效果上看是一样的。 仅使用集线器扩展以太网,在逻辑上仍然是共享总线的,并且形成一个更大的碰撞域,参与竞争总线的主机比扩展前的更多了。 这是竞争总线并产生碰撞的例子。 同样传输任务,在仅使用交换机扩展的以太网上就不会出现碰撞。 因此,如果仅使用集线器来扩展以太网,不仅会扩大了广播域还同时扩大了碰撞域。 但是如果使用交换机将原本独立的碰撞域连接起来,只会扩大广播域而不会扩大碰撞域,也就是说,交换机可以隔离碰撞域。
3.9以太网交换机自学习和转发帧的流程
以太网交换机工作在数据链路层(也包括物理层)
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
以太网交换机是一种即插即用的设备,刚上启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
相互连接的两台以太网交换机,各自连接了三台主机,构成了一个交换式以太网。为了简单起见,各主机中网卡上固化的MAC地址,仅用一个大写字母表示。各主机互不相同,为了将重点放在以太网交换机自学习和转发帧的流程上。假设各主机已经知道了网络中其他各主机的MAC地址,不需要首先通过ARP来获取目的主机的MAC地址,假设主机A给主机B发送帧,该帧从交换机1的接口进入交换机1,交换机1首先进行登记的工作,将该帧的源MAC地址A,记录到自己的帧交换表中,将该帧进入自己的接口的接口号1,相应的也记录到帧交换表中,上述登记工作就称为交换机的自学习。之后交换机1对该帧进行转发,该帧的目的MAC地址为B,在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目的转发,也称为泛洪。也就是从出该帧进入交换机接口外的其他所有接口转发该帧,可以看出,交换机一开始是比较笨的,他没有足够的知识来明确转发帧,只能进行盲目的转发,主机B的网卡收到该帧后,根据帧的目的MAC地址B就知道这是发送给自己的帧,于是就接受该帧,主机C的网卡收到该帧后根据帧的目的MAC地址B,就知道这不是发送给自己的帧,于是就丢弃该帧。该帧从交换机2的接口2进入交换机2。交换机2首先进行登记的工作,将该帧的源MAC地址A,记录到自己的帧交换表中。将该帧进入自己的接口的接口号2,相应的也记录到帧交换表中,之后交换机2对该帧进行转发,该帧的目的MAC地址是B,在帧交换表中查找MAC地址B找不到。于是对该帧进行盲目转发。主机DEF都会收到该帧,根据帧的目的MAC地址B,就知道这不是发送给自己的帧,于是丢弃该帧。接下来主机B给主机A发送帧,该帧从交换机1的接口3进入交换机1,交换机1首先进行登记的工作,将该帧的源目的MAC地址B,记录到自己的帧交换表中,将该帧进入自己的接口的接口号3,相应的也记录到帧交换表中。之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1,从接口1转发该帧,这是明确的转发。主机A的网卡收到该帧后根据帧的目的MAC地址A,就知道这是发送给自己的帧,于是接收该帧,很显然交换机2不会收到该帧。接下来主机E给主机A发送帧。该帧从交换机2的接口3进入交换机2,交换机2首先进行登记的工作,之后交换机2对该帧进行转发,该帧的目的MAC地址是A。在帧交换表中查找MAC地址A,可以找到于是按照MAC地址A所对应的接口号2,从接口2转发该帧。这是明确的转发。该帧从交换机1的接口4进入交换机1,交换机首先进行登记的工作,之后交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换交换表中查找MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1,从接口1转发该帧,这是明确的转发,主机A的网卡收到该帧后,根据帧的目的MAC地址A,就知道这是发送给自己的帧,于是接收该帧。
以太网交换机丢弃帧
给交换机1的接口1再连接一台主机G。假设主机G给主机A发送帧,该帧通过总线进行传输,主机A和交换机1的接口1都可以收到,主机A的网卡收到该帧后,根据该帧的目的MAC地址A,就知道这是发送给自己的帧,于是接收该帧,交换机1收到该帧后,首先进行登记工作,之后,交换机1对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查找目的MAC地址A,可以找到。MAC地址所对应的接口号是1,但是,该帧正是从接口1进入交换机1的,交换机1不会再从该接口将该帧转发出去,因为这是没有必要的,于是丢弃该帧,很显然交换机2不会收到该帧,随着网络中各主机都发送了帧后,网络中的各交换机就可以学习到各主机的MAC地址,以及他们与自己各接口的对应关系。需要注意的是,帧交换表中的每条记录都有自己的有限时间到期自动删除。为什么呢?这是因为MAC地址与交换机接口的对应关系并不是永久的。
3.11.1虚拟局域网VLAN概述
以太网交换机工作在数据链路层(也包括物理层)
使用一个或多个站点以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。
随着交换式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端
广播风暴
举例。 假设网络中的某个主机要给另一个主机发送一个数据帧,但是在自己的ARP高速缓存表中,无法查到目的主机的MAC地址,于是首先要发送ARP广播请求来获取目的主机的MAC地址,该AR P广播请求会传遍整个网络,网络中的其他所有主机都能收到该广播。这种情况就是所谓的广播风暴。广播风暴会浪费网络资源和网络中各主机的CPU资源,因此除非应用必须要求使用广播,否则网络中的主机应尽量不使用广播。 网络中会频繁出现广播信息 TCP/IP协议栈中的很多协议都会使用广播。 地址解析协议ARP(已知IP地址,找出其相应的MAC地址) 路由信息协议RIP(一种小型的内部路由协议) 动态主机配置协议DHCP(用于自动配置IP地址) 分割广播域的方法 使用路由器就可以隔离广播域。这是两台以太网交换机互连而成的交换式以太网,网络中的各主机同属于一个广播域,使用路由器可以将该广播域分割成两个较小的广播域,路由器工作在网络层。由于路由器默认情况下不对广播数据包进行转发,因此路由器很自然的就可以隔离广播域,然而路由器的成本较高,局域网内全部使用路由器来隔离广播域是不现实的。 在这种情况下,虚拟局域网VLAN技术应运而生。
虚拟局域网VLAN
是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有共同的需求。 如何实现VLAN。
难以管理和维护
潜在的安全问题
3.11.2虚拟局域网VLAN的实现机制
是在交换机上实现的,需要交换机实现以下两大功能。
能够处理带有VLAN标记的帧(IEEE802.1Q帧)
也称Dot One Q帧,对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。 VLAN标记的最后12个比特称为VLAN标识符VID,它唯一的标识了以太网帧属于哪个VLAN VID的取值范围是0~4095 其中0和4095都不用表示VLAN 因此用于表示VLAN的VID的有效值取值范围为1~4094 802.1Q帧是由交换机来处理的,而不是用户主机来处理的。 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转为802.1Q帧,简称“打标签”。 当交换机转发802.1Q帧时,可能会删除其4字节的VLAN标识转变为普通的以太网帧,简称“去标签”。
交换机的端口类型
交换机各端口的缺省VLA N ID 在思科交换机上称为本征VLAN。 在华为交换机上称为,端口VLAN ID,简记为PVID。 交换机的每个端口有且仅有一个PVID
Access
Access端口一般用于连接用户计算机。 Access端口只能属于一个VLAN。 Access 端口的PVID值与端口所属的VLAN的ID相同(默认为1) 主机ABCD分别连接在交换机的一个端口上,交换机首次上电时,默认配置各端口属于VLAN1,也就是各端口的PVID值等于1,默认配置各端口类型为Access 。 Access 端口的接收处理方法是: 一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧打标签,即插入4字节的VLAN标记字段,字段中的VID取值与端口的PVID取值相等。 举例。假设主机A发送了一个广播帧,该帧从交换机端口1进入交换机,由于端口1的类型是Access ,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入4字节的VLAN标记字段,由于端口1的PVID值为1,因此插入的4字节的VLAN标记字段的VID值也等于1。 Access 端口发送处理方法: 若帧中的VID与端口的PVID相等,则去标签后并转发该帧,否则不转发。 对于本例,广播帧中的VID的取值与端口2,3,4的PVID取值都等于1,因此交换机会从这三个端口对帧进行去标签转发。 我们的应用需求是将主机AB划归到VLAN2,将主机CD划归到VLAN3,这样,VLAN2中的广播帧不会发送到VLAN3,VLAN3中的广播帧也不会传送到VLAN2,为了实现这种应用,可以在交换机上创建VLAN2和VLAN3,然后将交换机的端口1,2划归到VLAN2,因此端口1,2的PVID值等于2。将交换机的端口3,4划归到VLAN3,因此端口3,4的PVID值为3。 主机A发送广播帧的情况,该帧从交换机的端口1进入交换机,由于交换机的端口类型是Access 它会对接收到的未打标签的普通以太网帧打标签,也就是插入4字节的VLAN标记字段。由于端口1的PVID值等于2,因此所插入的4字节VLAN标记字段中的VID值也等于2。广播帧中的VID的取值与端口2的PVID取值都等于2。因此交换机会从端口2对帧进行去标签转发。
Trunk
Trunk端口一般用于交换机之间或交换机与路由器之间的互连。 Trunk端口可以属于多个VLAN。 用户可以设置Trunk端口的PVID值。默认情况下Trunk端口的PVID值为1。 举例。两台交换机互连而成了一个交换式以太网,我们的应用需求是将主机ABEF划归为VLAN1,将主机CDGH划归到VLAN2,由于交换机首次上电时默认配置各端口属于VLAN1,其相应的PVID值为1,并且端口的类型为Access ,因此我们需要对交换机进行相应的配置才能满足应用需求。分别在两个交换机上创建VLAN2,并将他们的端口3,4划归到VLAN2,,其相应的PVID值等于2,而交换机的端口1,2保持默认配置即可。也就是属于VLAN1,其相应的PVID值为1,特别需要注意的是,两个交换机互连的端口5,需要将他们的类型更改为Trunk类型,而他们的PVID值保持默认的1即可。 Trunk端口的发送处理方式是: 对于VID等于PVID的帧,去标签,再转发。 对VID不等于PVID的帧,直接转发。 假设主机A发送了一个广播帧,该帧从交换机1的端口1进入交换机。由于端口1的类型是access ,它会对接收到的未打标签的普通以太网MAC帧打标签,也就是插入4字节的VLAN标记字段,由于端口1的PVID值为1,因此插入的4字节的VLAN标记字段中的VID值也等于1。该广播帧中的VID的取值与端口2的PVID值都相等1,端口2的类型是Access ,因此交换机1会从端口2对帧进行去标签转发。该广播帧中的VID取值与端口5的PVID值都等于1。端口5的类型是Trunk。因此交换机1会从端口5对帧进行去标签转发。很显然,该广播帧会从交换机2的端口5进入交换机2。 Trunk端口的接收处理方法是:接收未打标签的帧,根据接收帧的端口的PVID给帧打标签,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID值相等。端口1,2的类型都是Access,因此交换机2会从端口1,2对帧进行去标签转发。 通过本例可以看出,在由多个交换机互连而成的交换式以太网中划分VLAN时,链接主机的交换机端口应设置为Access 类型,交换机之间互连的端口应设置为Trunk类型。
Hybird
Hybird端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口) Hybrid端口可以属于多个VLAN(同Trunk端口) 用户可以设置Hybrid端口的PVID值,默认情况为1。 Hybrid端口发送处理方法(与Trunk端口不同) 查看帧的VID是否在端口的去标签列表中: 存在,则去标签后再转发 不存在直接转发。 举例应用:主机ABC连接在同一交换机的不同接口上。利用Hybrid端口的功能,实现以下应用需求:A和B都能与C互相通信,但A与B不能相互通信。 将三台主机所连接的交换机的三个端口划分到不同的VLAN,并且端口类型设置为Hybrid ,假设这三个VLAN分别是VLAN10,VLAN20,VLAN30。相应的PVID分别是10,20,30。在端口1的去标签列表中配置VLAN10,VLAN30。在端口2的去标签列表中配置VLAN20和VLAN30,在端口3的去标签列表中配置VL AN10,VLAN20,VLAN30。主机A给C发送数据帧,该帧从交换机的端口1进入交换机,由于端口1的端口类型是Hybrid ,它会对接收到的未打标签的普通以太网MAC帧打标签。也就是插入4字节的VLAN标记字段。由于端口1的PVID值等于10,因此所插入的4字节VLAN标记字段中的VID值也等于10。该帧将从端口3转发,由于帧中的VID取值在端口3的去标签列表中,因此该帧会被去标签转发。这样主机C就可以收到主机A发送的数据帧。同理主机C给主机A发送数据帧,主机A也能收到。 VID不在去标签列表中,该帧会被直接转发,主机会收到一个带有VLAN标记的802.1Q帧,但是主机可以识别普通以太网MAC帧,而不能识别802.1Q帧,只能丢弃该帧。
第四章网络层
4.1网络层的概述
IP协议,ARP协议,IGMP,ICMP
网络层的主要任务是实现网络互连,进而实现数据包在个网络之间的传输。
要实现网络层任务,需要解决一下主要问题:
网络层向运输层提供怎样的服务(可靠传输还是不可靠传输)
网络层寻址问题
路由选择问题
因特网是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈
由于TCP/IP协议栈的网络协议IP,他是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
4.2网络层提供的两种服务
面向连接的虚电路服务
可靠通信由网络来保证。 必须建立网络层的连接——虚电路VC,也就是建立一条虚电路。 通信双方沿着已建立的虚电路发送分组。虚电路表示这是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而不是建立了一条真的物理连接。而采用电路交换的电话通信则是先建立一条真正的连接。因此分组交换的虚电路连接与电路交换的连接只是类似,但并不完全一样。 目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)。 这种通信方式如果再使用可靠传输协议的网络协议,就可使所发送的分组最终正确到达接收方(无差错,按序到达,不丢失,不重复)。 通信结束后,需要释放之前所建立的虚电路。 很多广域分组交换网都使用面向连接的虚电路服务。
无连接的数据报服务
可靠通信应由用户主机来保证。 不需要建立网络层连接 每个分组可走不同路径 每个分组的首部必须携带目的主机的完整地址。 这种通信方式所传送的分组可能误码,丢失,重复和失序。 由于网络本身不提供端到端的可靠传输服务,这就使得网络中的路由器可以做的比较简单,而且价格低廉。 因特网采用这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心。
由于TCP/I P体系结构的因特网的网际层提供的事灵活简单,无连接的,尽最大努力交付的数据报服务,本章主要围绕网际层如何传送IP数据报服务讨论。
4.3.1IPV4地址概述
在TCP/IP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚。
IPV4地址就是给因特网上的每台主机(或路由器)的每个接口分配一个在全世界范围内是唯一的32比特的标识符。
IP地址由因特网名字和数字分配机构IC ANN进行分配。
我国用户可向亚太网络信息中心APNIC申请IP地址,需要缴费。
2011年,互联网号码分配管理局IANA(由IC ANN行驶职能)宣布,IPV4地址已经分配完毕。
我国逐渐停止向新用户和应用分配IPV4地址。同时全面商业部署IPV6
IPV4的编址方法经历了如下三个历史阶段
分类编址
划分子网
无分类编址
32比特的IPV4地址不方便阅读,记录以及输入等,因此IPV4地址采用点分十进制表示方法以方便用户使用。
举例 32比特IPV4地址,将每8个比特分为一组,分为四组,将每组八位比特转为十进制,每个十进制数之间用.来分隔,这就是IPV4点分十进制表示方法
4.3.2分类编址的IPV4地址
注意 只有ABC类地址可以分配给网络中的主机或路由器的各接口。 主机号为全零的地址是网络地址,不能分配给主机或路由器的各接口。 主机号为全一的地址是广播地址,不能分配给主机或路由器的各接口。
A类地址
网络号占8位,主机号占24位。网络号的最高位固定为0。
A类地址细节。八位网络号的最高位固定为0,第七位全部取零时,就是A类网络的最小网络号。 最小网络号0,保留不指派。因此A类网络第一个可指派的网络号为最高位固定为0,低七位为0000010,十进制为1。 将24位的主机号全部取零,就可以得到该网络的网络地址1.0.0.0。 当低七位网络号全部取1时,就是A类网络的最大网络号,其十进制值为127,作为本地环回测试地址,不指派。 将127开头的IPV4地址的主机号部分的最低位取一,其他位取零,就可得到最小的本地软件环回测试地址127.0.0.1。 将127开头的IPV4地址的主机号部分的最低位取0,其他位取1,就可得到最大的本地软件环回测试地址127.255.255.254,因此A类网络最后一个可指派的网络号为最高位固定为0,低七位为1111110,其值为126。 将24位的主机号全部取0,就可以得到该网络的网络地址126.0.0.0。 可指派的A类网络的数量2^(8-1)-2=126。 每个网络中的可分配的IP地址数量2^24-2=16777214。
B类地址
网络号部分和主机号部分各占16位。网络号最高两位固定为10。
细节 16位的网络号的最高两位固定10。 低14位全部取0时,可指派的最小网络号128.0。 将16位的主机号全部取0,就可以得到该网络的网络地址128.0.0.0 低14位全部取1时,B类网络的最大网络号,191.255,该网络号是B类网络最后一个可指派的网络号 将16位的主机号全部取0,网络地址191.255.0.0。 可指派的网络数量2^(16-2)=16384 每个网络中可分配的IP地址数量是多少2^16-2=65534
C类地址
网络号占24位,主机号占8位。网络号的最高三位固定为110。
细节 24位网络号的最高三位固定为110,低21位全部取0时,就是C类网络的最小网络号192.0.0。是C类网络第一个可指派的网络号 将8位的主机号全部取0,就可以得到该网络的网络地址192.0.0.0。 24位网络号的最高三位固定为110,低21位全部取1时,就是C类网络的最大网络号223.255.255。是C类网 最后一个可指派的网络号。 将8位的主机号全部取0,就可以得到该网络的网络地址,223.255.255.0。 可指派的C类网络数量2^(24-3)=2097152 每个C类网络中可分配的IP地地址为2^8-2=254
D类地址
多播地址,最高四位固定为1110
E类地址
保留地址,最高四位固定为1111
4.3.3划分子网的IPV4地址
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号。
举例,已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节。
子网掩码使用连续的比特1来对应网络号和子网号
用连续的比特0来应对主机号
将划分子网的IPV4地址与其相应的子网掩码进行逻辑与运算就可以得到IPV4所在子网的网络地址
默认的子网掩码是指在未划分子网的情况下使用的子网掩码
4.3.4无分类编址的IPV4地址
划分子网在一定程度上缓解了因特网在发展中遇到的问题,但是数量巨大的C类网因为其地址太小并没有得到充分利用,而因特网的IP地址仍在加速消耗,整个IPV4地址空间面临全部耗尽的威胁。
为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPV6工作组负责研究新版本IP以彻底解决IP地址耗尽的问题。
无分类域间路由选择CIDR
CIDR消除了传统的ABC类地址以及划分子网的概念。
CIDR更加有效的分配IPV4地址空间
CIDR使用斜线记法,或称CIDR记法。即在IPV4地址后面加斜线/,在斜线后面写上网络前缀所占的比特数。
举例 128.14.35.7/20 网络前缀所占的比特数量:20 主机编号所占用的比特数量:12
CIDR实际上是将网络前缀都相同的连续的IP地址组成一个CIDR地址块
我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节。
举例说明 请给出CIDR地址块128.14.35.7/20的全部细节(最小地址,最大地址,地址数量,聚合C类网数量,地址掩码)。
地址块的最小地址
地址块的最大地址
地址块中的地址数量
地址块聚合某类地址的数量
地址掩码(也称为子网掩码)
路由聚合(构造超网)
将路由器的路由表中的记录路由聚合成一条记录,找目的网络地址的共同前缀。将共同前缀保持不变,剩余比特全部取0,写成点分十进制形式。就是聚合后的地址块,也可以称为超网。
网络前缀越长,地址块越小,路由就越具体。
若路由器查表转发分组时发现有多条路由可选,则选择路由前缀最长的那条,称为最长路由匹配。路由更具体
4.3.5IPV4地址的应用规划
定长的子网掩码FLSM
假设申请到的C类网络为218.75.230.0,请使用定长的子网掩码给下图所示的小型互联网中的各设备分配IP地址
使用同一个子网掩码来划分子网
每个子网划分的IP地址数量相同,容易造成IP地址的浪费
变长的子网掩码VLSM
使用不同的子网掩码来划分子网
每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费。
4.4IP数据报的发送和转发过程
同一个网络中的主机可以直接相互通信,属于直接交付。 不同网络中的主机之间的通信,需要路由器来中转,属于间接交付。 源主机如何知道目的主机是否与自己在同一个网络中。 主机C与主机F发送IP数据报,主机C将自己的IP地址和子网掩码相与,得到网络地址,既然主机C要给主机F发送IP数据报,那主机C肯定知道主机F的IP地址,主机C将主机F的IP地址与自己的子网掩码相与,就可得到目的网络地址,该地址与主机C的网络地址不同,因此主机C就知道了主机F与自己不在同一个网络,他们之间的通信属于间接交付,主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F,主机C又怎么知道将IP数据报交付给哪个路由器转发。 用户为了让本主机能和其他网络中主机进行通信,就必须给其指定本网络中的一个路由器,由该路由器帮忙进行转发。所制定的路由器,也被称为默认网关。本例中我们可以将路由器接口0的IP地址指定给该接口所直连网络中的各个主机作为默认网关。 路由器收到IP数据报又该如何转发 1.路由器首先检查IP数据报的首部是否出错 若出错,则丢弃该IP数据报并通告源主机。若没错,则进行转发。 2.根据IP数据报的目的地址在路由器表中查找匹配的条目,若找到匹配的路由条目,则转发给条目中指示的下一跳。若找不到,则丢弃该IP数据报并通报源主机。 假设首部没有出错,路由器取出IP数据报首部各地址字段的值。源地址字段中的值为主机A的IP地址,目的地址字段的值为主机D的IP地址,接下来路由器就要对该IP数据报进行查表转发了,路由器的路由表,当我们给路由器接口配置IP地址和子网掩码时,路由器就知道了自己的该接口与哪个网络是直连的。路由器根据IP数据报的目的地址在自己的路由表中查找匹配的路由条目,逐条检查路由条目,将目的地址与路由条目的地址掩码相与得到目的网络地址。 假设主机A给本网络上的各设备发送了一个广播IP数据报,在数据报首部中的目的地址字段可以填写的目的地址为192.168.0.127,这是本网络的广播地址。也可以填写255.255.255.255,这是受限的广播地址,该网络中的各设备都会收到该广播IP数据报,但是路由器收到后并不会转发该IP数据报,也就是说路由器是隔离广播域的,这是很有必要的。同理主机A给另一个网络发送广播IP数据报,在数据报首部中的目的地址字段填写的目的地址为192.168.0.255。这是网络192.168.0.128的广播地址,主机A将该该广播IP数据报传输给路由器,希望有路由器帮其转发。但路由器判断出这是广播IP数据报,不会转发。
主机发送IP数据报
路由器转发IP数据报
4.5静态路由配置及其可能产生的路由环路问题
静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配制路由表。
举例 路由器R1的路由表,路由器R1通过自己的接口0所配置的IP地址和地址掩码,可以自动的出接口0所在的网络,由于接口0与该网络直连,则下一跳不是路由器地址,而是通过接口0转发IP数据报给该网络中的某主机,属于直接交付,这条自动的出的路由条目的类型属于直连路由。同理R1还可自行的出接口1的直连网络路由条目。 假设R1要转发一个IP数据报给该网络中的某主机,从图中可以看出,R1应该将该IP数据报转发给路由器R2的接口0,但R1路由器中并没有关于该目的网络的路由条目,换句话说,R1并不知道目的网络的存在,因此我们可以使用路由器的相关配置命令,给R1添加一条到达该目的网络的路由条目。 默认路由概念 假设路由器R2的接口2连接到了因特网。假设R1要转发一个IP数据报给因特网中的某个网络的某个主机,从图中可以看出R1应该将IP数据报转发给路由器R2的接口0,由于因特网中包含了众多的网络,如果给R1添加针对这些网络的每一条路由条目,则会给人工配置带来巨大的工作量,并且使R1的路由表变的非常大,降低了查表转发的速度。实际上,对于具有下一跳的不同目的网络的路由条目,我们可以用一条默认路由条目来代替。 默认路由条目中的目的网络地址为0.0.0.0,地址掩码也为0.0.0.0,CIDR形式0.0.0.0/0,默认路由也是人工配置的,因此其类型也是静态。在配置了默认路由条目后,我们甚至可以删除这条路由条目。 特定主机路由。有时候我们可以给路由器添加针对某个主机的特定主机路由条目。一般用于网络管理人员对网络的管理和测试,另外,在需要考虑某种安全问题时也可以采用特定主机路由。 假设这是该网络中的某台特定主机,我们可以在R1路由表中添加一条到达该主机的特定主机路由条目,特定主机路由条目中的目的网络地址为该特定主机的IP地址,地址掩码为255.255.255.255,其CIDR形式为特定主机IP地址/32,对于本例特定主机路由条目的下一跳是路由器R2的接口0的地址,由于特定主机路由也是我们人工配置的,其类型为静态。特定主机路由的目的网络前缀最长,路由最具体。默认路由的目的网络前缀最可选短,路由最模糊。当路由器查表转发IP数据报时,多条路由,最长前缀匹配,选用目的网络前缀最长的那个路由条目进行转发。
这种人工配置方式简单,开销小。但不能及时适应网络状态(流量,拓扑等)的变化。
一般只在小规模网络中采用。
使用静态路由配置可能出现以下导致产生路由环路的错误
配置错误
为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间TTL字段。 IP数据报进入路由器后,TTL字段的值减一,若TTL的值不等于0,则被路由器转发,否则被丢弃。
聚合了不存在的网络
在路由表中添加针对所聚合的,不存在的网络的黑洞路由,黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,可以把它形象的看成一个黑洞IP数据报进入它后就有去无回了,也就是路由器丢弃了该IP数据报,而不是转发
网络故障
4.6.1路由选择协议概述
静态路由选择
由人工配置的网络路由,默认路由,特定主机路由,黑洞路由等等都属于静态路由
这种人工配置方式简单,开销小。但不能及时适应网络状态(拓扑,流量等)的变化
一般只在小规模网络中使用
动态路由选择
路由器通过路由选择协议自动获取路由信息。
比较复杂,开销比较大,能较好的适应网络状态的变化
适用于大规模网络
因特网所采用的路由选择协议的主要特点
自适应
动态路由选择,能够较好的适应网络状态的变化
分布式
路由器之间交换路由信息
分层次
自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择。域间路由选择使用外部网关协议EGP(ERP)这个类别的路由选择协议,域内路由选择使用内部网关协议IGP(IRP)这个类别的路由选择协议。需要说明的是外部网关协议EGP和内部网关协议IGP只是路由选择协议的分类名称,而不是具体的路由选择协议,另外名称中使用的是网关这个名词。在一个自治系统内部使用的具体的内部网关协议与因特网中其他自治系统中选用何种内部网关协议无关。
将整个因特网划分为许多较小的自治系统AS
常见的路由选择协议
内部网关协议IGP
RIP和IGRP是基于距离向量。 RIP是最早应用在因特网上的路由选择协议 IGRP是思科早期私有的协议,现在被EIGRP取代 OSPF和IS-IS是基于链路状态 OSPF在各种网络中广泛使用 集成化IS-IS是ISP骨干网上最长常用的IGP协议 EIGRP是思科私有的,用来取代IGRP的混合型路由协议(结合距离向量和链路状态)
路由信息协议RIP
内部网关协议IGRP
增强型内部网关路由协议EIGRP
开放式最短路径优先OSPF
中间系统到中间系统IS-IS
外部网关协议EGP
边界网关协议BGP
路由器的基本结构
路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是分组转发。
路由选择部分
核心构件是路由选择处理机。他的任务是根据所使用的路由选择协议周期性的与其他路由器进行路由信息的交互来更新路由表。
分组转发部分
信号从某个输入端口进入路由器,物理层将信号转换为比特流,送交给数据链路层处理,数据链路层从比特流中识别出帧,去掉帧头和帧尾后,送交网络层处理,如果送交网络层的分组是普通待转发的数据分组,则根据分组首部中的目的地址进行查表转发,若找不到匹配的转发条目,则丢弃该分组,否则,按照匹配条目中所指示的端口进行转发,网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减一,然后送交给数据链路层进行封装,数据链路层将数据分组封装成帧,送交物理层处理,物理层将帧看作比特流,将其变换成相应的电信号进行发送。如果送交网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交路由选择处理机。路由选择处理机根据分组内容来更新自己的路由表。 路由表一般仅包含从目的网络到下一跳的映射。 路由表需要对网络拓扑变化的计算最优化 转发表是从路由表得出的 转发表的结构应当使查找过程最优化 路由选择处理机除了处理收到的路由报文外,还会周期性的给其他路由器发送自己所知道的路由信息。 路由器的各端口还应具有输入缓冲区和输出缓冲区。输入缓冲区用来暂存新进入路由器但还来不及处理的分组。输出缓冲区用来暂存已经处理完毕但还来不及发出的分组。 路由器的端口一般都具有输入输出功能
交换结构
一组输入端口
一组输出端口
4.6.2路由信息协议RIP的基本工作原理
RIP的基本工作过程 1.路由器刚开始工作时,只知道自己到直连网络的距离为1。 2.每个路由器仅和相邻路由器周期性的交换并更新路由信息。 3.若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛。 RIP的路由条目的更新规则。 路由C和D互为相邻路由器。他们之间周期性的交换并更新路由信息 到达目的网络,相同下一跳,最新消息,更新 发现新网络,添加 到达目的网络,不同下一跳。新路由优势,更新 到达目的网络,不同下一跳,等价负载均衡 到达目的网络,不同下一跳,新路由劣势,不更新。
路由信息协议RIP是内部网关协议IGP中最先得到广泛使用的协议之一。
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为距离向量D-V。
RIP使用跳数作为度量来衡量到达目的网络的距离。
路由器到直连网络的距离定义为1
路由器到非直连网络的距离定义为所经过的路由器个数加一
允许一条路径最多只能包含15个路由器。距离等于16时相当于不可达。因此RIP只适用于小型互联网
RIP认为好的路由就是距离短的路由,也就是所通过路由器数量最少的路由。
当到达同一目的网络有多条距离相等的路由时,可以进行等价负载均衡。
就是将通信量均衡负载的分布到多条等价的路由上。
RIP三要点
和谁交换信息。仅和相邻路由器交换信息
交换什么信息。自己的路由表
何时交换信息。周期性交换信息
RIP存在坏消息传播的慢的问题
假设R1到达起其直连网络N1的链路出现了故障,当R1检测出该故障后,会将到达N1的路由条目中的距离修改为16,表示N1不可达,并等待RIP更新周期到时后,发送该路由信息给R2。而此时R2的路由表中的关于N1的路由条目,仍然是先前通过RIP协议得到的,也就是到达N1的距离为2,下一跳通过R1转发,假设R2的RIP更新周期先到时,也就是R2的这条路由信息先到达R1,而R1的这条路由信息后到达R2,当R1收到R2的这条路由信息后,就会被该谣言误导,认为可以通过R2到达N1距离为3。并在自己的RIP更新周期到时后,将这条路由信息发送给R2,当R2收到R1的这条路由信息后,就会被该谣言误导,认为可以通过R1到达N1,距离为4,并在自己的RIP更新周期到时后将这条路由信息转发给R1。只有当R1和R2路由表中到达N1的路由条目中的距离都增加到16后,R1和R2才知道N1不可达,也就是才收敛。在该过程中,R1和R2之间会出现路由环路,时间长达数分钟,有关路由环路的问题。
环消息传播的慢又称为路由环路或距离无穷级数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害。
限制最大路径距离为15(16表示不可达)
当路由表发生变化时就立即发送更新报文(即触发更新),而不仅是周期性发送
让路由器记录收到的某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即水平分割)
4.6.3开放最短路径优先OSPF基本工作原理
开放最短路径优先OSPF,是为了克服RIP的缺点开发出来的
开放表明OSPF协议不是受某一家厂商控制,而是公开发表的。
最短路径优先是因为使用了最短路径算法SPF
OSPF是基于链路状态的,而不像RIP那样是基于距离向量的
OSPF算法采用SPF算法计算路由,从算法上保证了不会产生路由环路
OSPF不限制网络规模,更新效率高,收敛速度快
链路状态是指本路由器和哪些路由器相邻,以及相应链路的代价
代价用来表示费用,距离,时延,带宽等等,这些都是有由网络管理人员来决定。
OSPF相邻路由器之间通过交互问候分组,建立维护邻居关系。
Hello分组封装在IP数据报中,发往组播地址224.0.0.5。
IP数据报首部中的协议号字段的取值应为89,来表明IP数据报的数据载荷为OSPF分组。
问候分组发送周期为10秒
40秒未收到来自邻居路由器的问候分组,则认为该邻居路由器不可达。因此每个路由器都会建立一张邻居表
使用OSPF的每个路由器都会产生链路状态通告LSA。LSA中包含以下内容
直连网络的链路状态信息
邻居路由器的链路状态信息
LSA被封装在链路状态更新分组LSU中采用洪泛法发送。
收到链路状态更新分组的路由器,将从自己其他所有接口转发该分组,也就是进行洪泛转发。这样自治系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组,会传递给系统中其他所有的路由器。
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA
通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他路由器的最短路径,即构建各自的路由表。
OSPF有以下五种分组类型
类型1,问候分组。用来发现和维护邻居路由器的可达性
类型2,数据库描述分组。向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
类型3,链路状态请求分组。向邻居路由器请求发送某些链路状态项目的详细信息
类型4,链路状态更新分组。路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
类型5,链路状态确认分组,这是对链路状态更新分组的确认分组
OSPF的基本工作过程
相邻路由器之间周期性发送问候分组,以便建立和维护邻居关系,建立邻居关系后,给邻居路由器发送数据库描述分组,也就是将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给自己的邻居路由器。例如R1收到R2的数据库描述分组后,发现自己缺少其中某些链路状态项目,于是就给R2发送链路状态请求分组,R2收到后将R1所缺少的链路状态项目的详细信息封装在链路状态更新分组中发送给R1,R1收到后,将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中,并给R2发送链路状态确认分组。最终R1和R2的链路状态数据库将达到一致,也就是链路状态数据库达到同步。每30分钟或链路状态发生变化时,路由器都会发送一个链路状态更新分组,收到该分组的其他路由器将洪泛转发该分组,并给该路由器发回链路状态确认分组,这又称为新情况下的链路状态数据库同步。
当OSPF路由器在多点接入网络中建立邻居关系时
如果不采用其他机制,将会产生大量的多播分组。例如,这5台路由器连接在同一多点接入网络中,他们周期性的发送问候分组以建立和维护邻居关系,这些路由器中任意两个路由器都互为邻居关系,邻居关系的数量为n(n-1)/2,n是路由器的数量,这样每个路由器要向其他n-1个路由器发送问候分组和链路状态更新分组。为了减少所发送的分组数量
选举指定路由器DR和备用的指定路由器BDR
所有的非DR/BDR只与DR/BDR建立邻居关系
邻居关系数量降低为2(n-2)+1
非DR/BDR之间不能直接交换信息,若DR出现问题,则由BDR顶替DR
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域
每个区域都有一个32比特的区域标识符,可以用点分十进制表示,例如主干区域标识符必须为0,也可以表示成0.0.0.0,主干区域用于连通其他区域。其他区域的标识符不能为0且互不相同,每个区域的规模不应太大,一般所包含的路由器不应超过200个,划分区域的好处就是,把利用洪泛法交换链路状态信息的范围,局限于每个区域而不是整个自治系统。这样就减少了整个网络上的通信量。如果路由器的所有接口都在同一区域内,则该路由器称为区域内路由器,为了本区域可以和自治系统内的其他区域连通,每个区域都会有一个区域边界路由器,他的一个接口用于连接自身所在区域,另一个接口用于连接主干区域,主干区域内的路由器称为主干路由器,我们也可以把区域边界路由器看作主干路由器,在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息,这样的路由器称为自治系统边界路由器,
4.6.4边界网关协议BGP的基本工作原理
在不同的自治系统内,度量路由的代价(距离,带宽,费用等)可能不同,因此对于自治系统之间的路由选择,使用代价作为度量来寻找最佳路由是行不通的。
自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非寻找一条最佳路由。
在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的BGP发言人
两个BGP发言人都是通过一个共享网络连接在一起,而BGP发言人往往就是BGP边界路由器
不同自治系统的BGP发言人要交换路由信息,,首先必须建立TCP连接,端口号为179
在此TCP连接上交换BGP报文以建立BGP会话
利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
使用TCP连接交换路由器信息的两个BGP发言人,彼此称为对方的邻站或对等站
BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
BGP发言人交换网络可达性的信息(要达到某个网络所要经过的一系列自治系统)
当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构,不存在回路的自治系统连通图
BGP适用于多级结构的因特网
BGP发言人交换路径向量的例子,自治系统AS2的BGP发言人通知主干网的BGP发言人,要到达N1,N2,N3,可经过AS2,主干网在收到这个通知后,就发出通知要到达网络,,,可沿路径(AS1,AS2)称为路径向量。自治系统AS3收到这条路径向量信息后,如果AS3自身也包含在其中,则不能采用这条路径,否则会兜圈子。
BGP-4有以下四种报文
OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
KEEPALIVE(保活)报文:周期性的证实邻站的连通性。
NOTIFICATION(通知)报文:用来发送检测到的差错
在BGP协议刚刚运行时,BGP的邻站交换整个BGP路由表,但以后只需要在发生变化时更新有变化的部分,这样做对节省网络带宽和减少路由器的处理开销都有好处。
4.7IPV4数据报(简称IP数据报)的首部格式
20字节的固定部分
是指每个IP数据报首部都必须包含的部分,IP数据报的首部常以32个比特为单位进行描述,每一行都由32个比特(也就是4字节)构成,每个小格子称为字段或者域,每个字段或者某些字段的组合用来表达IP协议的相关功能。 举例,首部长度字段和总长度的区别和联系 标识,标志,片偏移三个字段共同用于IP数据报分片 网际层封装出的IP数据报,它将在数据链路层封装成帧,每一种数据链路层协议都规定了帧的数据载荷的最大长度,称为最大传输单元M TU,如果某IP数据报超过MTU时,无法封装,需要进行分片,再将各分片IP数据报封装成帧。 举例IP数据报如何分片 假设有这样一个数据报,他由20字节的固定首部和3800字节的数据载荷构成,假设使用以太网传播该IP数据报,以太网的最大传送单元MTU为1500字节,,也就是以太网的数据载荷部分最大为1500字节,,无法封装3800字节长的IP数据报,需要把该IP数据报分片为几个更小的IP数据报,每个长度不能大于1500个字节,然后再将每个分片IP数据报封装成一个以太网帧进行传输。将原IP数据报数据载荷部分的每个字节编号,第一个字节为0,最后一个字节编号为3799。可将源IP数据报的数据载荷部分分成三个更小的分片,第一个分片从0号字节到1399号字节,共1400个字节,第二个分片1400-2799号字节,共1400个字节,第三个分片从2800-3799号字节,共1000个字节,分片结束后,给每个分片重新添加一个首部,使之成为一个IP数据报。 给各分片添加的首部
版本
该字段占4个比特,用来表示IP协议的版本 通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4
首部长度
该字段占4个比特,用来表示IP数据报首部的长度。该字段的取值以4字节为单位,最小十进制取值为5,表示IP数据报首部只有20字节的固定部分 最大十进制取值为15,表示IP数据报首部包含20字节的固定部分和最大40字节的可变部分。
区分服务字段
占8个比特,用来获得更好的服务 该字段在旧标准中叫做服务类型,但实际上一直没被使用过 利用该字段的不同数值可提供不同等级的服务质量。 只有在使用分区服务时,该字段才起作用,一般情况下都不使用该字段
总长度字段
占16个比特,表示IP数据报的总长度(首部+数据载荷)。 最大取值为十进制的65535,以字节为单位
标识字段
占16个比特,属于同一个数据报的各分片数据报应该具有相同的标识 IP软件维持一个计数器,每产生一个数据报,计数器值加一,并将此值赋值给标识字段
标志字段
占3个比特,个比特含义 DF位:1表示不允许分片 0表示允许分片 MF位:1表示后面还有分片 0表示这是最后一个分片 保留位:必须为0
片偏移字段
占13个比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位,片偏移以8个字节为单位
生存字段
占8个比特,最初以秒为单位,最大生存周期为255秒,路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0则转发,否则就丢弃。 现在以跳数为单位,路由器转发IP数据报时,将IP数据报首部中该字段的值减一,若不为0就转发,否则就丢弃。 举例,生存时间字段的作用-防止IP数据报在网络中永久兜圈
协议字段
占8个比特,指明IP数据报的数据部分是何种协议数据单元 常用的一些协议和相应的协议字段值如下 举例,当首部中协议字段的取值为1时,表明数据部分时ICMP报文,也就是用ICMP协议封装的协议数据单元
首部检验和字段
占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。 IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间,标志,片偏移等)的取值可能发生变化。 由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPV6中,路由器不再计算首部校验和,从而更快转发IP数据报
源IP地址和目的IP地址字段
各占32比特,用来填写发送该IP数据报的源主机IP地址和接收该IP数据报的目的主机的IP地址。
最大40字节的可变部分
可选字段
长度1个字节到40个字节不等。用来支持排错,测量以及安全等措施 可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度可变 这就增加了每个路由器处理IP数据报的开销,实际上可选字段很少被使用。
填充字段
确保首部长度为4字节的整数倍。使用全零填充
4.8网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP
主机或路由器使用ICMP来发送差错报文和询问报文
ICMP报文被封装在IP数据报中发送
ICMP差错报文共有以下五种
终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可根据ICMP的代码字段细分为目的网络不可达,目的主机不可达,目的协议不可达,目的端口不可达,目的网络未知,目的主机未知等13种错误。
假设主机H1给H2发送IP数据报,H1会将IP数据报发送给路由器R1,由R1帮其转发,若R1的恶路由表中没有网络N3的路由记录,默认路由,以及主机H2的特定主机路由,则R1就不知道如何转发该数据报,只能将其丢弃。并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为终点不可达
源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
时间超过
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减一。若不为0,则将该IP数据报转发出去,若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。
另外,当终点在预定规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
参数问题
当路由器或目的主机收到IP数据报时,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
改变路由(重定向)
路由器把改变路由报文发送给主机,当主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
以下情况不应该发送ICMP差错报告报文
对ICMP差错报告报文不再发送ICMP差错报告报文
对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
对具有多播地址的数据报都不发送ICMP差错报告报文
对具有特殊地址(127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
常见的I CMP询问报文
回送请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
这种询问报文用来测试目的站是否可达及了解有关状态
时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间
在ICMP时间戳回答报文中一共有一个32位的字段,其中写入的整数代表从1900年1月1日起到目前的时间有多少秒
这种询问报文用来进行时钟同步和测试时间
ICMP应用举例
分组网间探测PING
用来测试主机或路由器间的连通性
应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
使用ICMP回送请求和回答报文
跟踪路由
实现原理 假设主机H1想知道到达主机H2要经过哪些路由器,H1就给H2发送ICMP回送请求报文,该报文被封装在IP数据报中,IP数据报首部中生存时间字段TTL的值被设置为1,该IP数据报到达R1后,其生存时间减一变成零,R1丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为时间超过,这样H1就知道到达H2的路径中的第一个路由器
用来测试IP数据报从源主机到达目的主机要经过哪些路由器
Windows版本
tracert 命令
应用层直接使用网际层ICMP
使用ICMP回送请求和回答报文以及差错报告报文
Unix版本
traceroute版本
在运输层使用UDP协议
仅使用ICMP差错报告报文
4.9虚拟专用网VPN与网络地址转换NAT
虚拟专用网VPN
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网
由于IPv4地址的紧缺,一个机构能够申请到的IPV4地址数量往往小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的,在因特网上使用的公有地址。
私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信,私有地址只能用作本地地址而不能用作全球地址,在因特网中的所有路由器对目的地址是私有地址的IP数据报一律不进行转发
部门A和B各自至少需要一个路由器具有合法的全球IP地址,这样他们各自的专用网才能利用公用的因特网进行通信,假设部门A中的这台主机,要给部门B中的另一台主机发送数据,它会将待发送数据封装成内部IP数据报发送给路由器R1,其首部中源地址字段的值为部门A中该主机的IP地址,目的地址字段的值为部门B中另一台主机的IP地址,R1收到该数据报后,发现其目的网络必须通过因特网才能到达,就将该内部IP数据报进行加密,这样就确保了内部IP数据报的安全,然后重新添加上数据报的首部,封装成在因特网上发送的外部数据报,其首部中源地址字段的值为路由器R1的全球地址,目的地址的字段的值为路由器R2的全球地址,路由器R2收到该外部IP数据报后,去掉其首部,将其数据部分进行解密,恢复出原来的内部IP数据报,这样就可以从其首部提取出源地址和目的地址,根据目的地址将该内部IP数据报发送给相应的主机,很显然两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上就好像是在本机构的专用网上传送一样,数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1R2之间好像是一条直通的点对点链路,因此也被称为IP隧道技术。本例属于同一机构内不同部门的内部网络所构成的虚拟专用网VNP又称为内联网Vpn。有时这样的虚拟专用网又称为外联网VPN。 在外地工作的员工需要访问公司内部的专用网时,只需要在任何地点接入VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN
网络地址转换NAT
虽然因特网采用了无分类的编址方式来缓解IPV4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭接入因特网的需求不断增加,IPV4地址空间即将面临耗尽的危险仍然没有解除。
1994年提出了一种网络地址转换NAT的方法再次缓解了IPV4地址空间即将耗尽的问题。
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源
举例说明。 图中的专用网络使用私有网络号192.168.0.0。使用私有地址的主机如何与因特网上使用全球IP地址的主机进行通信。这需要在专用网络连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址,这样,所有使用私有地址的主机在和外部通信时,都要在NAT路由器上将其私有地址转换为全球IP地址。 举例说明,假设使用私有地址的该主机要给因特网上使用全球IP地址的另一台主机发送IP数据报,该主机将数据报发送给NAT路由器,数据报首部中源地址字段的值为该主机的私有地址,目的地址字段的值为因特网上另一台主机的全球地址,NAT路由器从自己的全球IP地址池中为该主机分配一个临时的全球IP地址,并将IP数据报的源地址修改为该地址,然后将私有地址与全球地址的对应关系,记录在NaT转换表中,之后就可以转发该IP数据报了,因特网上的这台主机给源主机发回数据报,数据报的源地址和目的地址都是全球IP地址,NAT路由器收到该IP数据报后,在NAT转换表中进行查找,发现该数据报的目的地址所对应的私有地址于是就将该数据报的目的地址修改为私有地址,并将其发送给相应的主机。 该转换方法存在一个问题:如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。 由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。 这样用一个全球IP地址就可以时多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫做网络地址与端口号转换NAPT。 内网主机与外网主机间的通信,是否能由外网主机首先发起,不能。如果由外网主机首先发起,那么当NAPT路由器收到来自外网的IP数据报后,在NAPT转换表中找不到相应的记录,也就无法把数据报转发给内网中的主机,因此,使用私有地址的主机不能直接充当因特网服务器。 对于一些点对点网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到一些问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。 另外,由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护
第五层运输层
5.1运输层概述
物理层,数据链路层以及网络层他们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
局域网1上的主机,与局域网2上的主机通过互连的广域网进行通信,网络层的作用范围是主机到主机
但实际上在计算网络中进行通信的真正实体是位于通信两端主机中的进程
AP1AP2是局域网1上这台主机中的与网络通信相关的两个应用进程,AP3AP4是局域网2上这台主机中的与网络通信相关两个应用进程
如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
运输层的作用范围是应用进程到应用进程,也称为端到端
运输层向高层的用户屏蔽了下面网络核心的细节(网络拓扑,所采用的路由协议等),它使应用进程看见的好像是在两个运输层实体之间有一条端到端的逻辑通信信道
根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP,面向无连接的UDP
5.2运输层端口号,复用与分用的概念
运行在计算机上的进程使用进程标识符PID来标志
因特网上的计算机并不是使用统一的操作系统,不同的操作系统又使用不同的格式的进程标识符。
为了使运行不同操作系统的计算机的应用进程之间能够进行通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识
TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
端口号使用16比特表示,取值范围0~65535
熟知端口号:0-1023。I ANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议。例如,FTP使用21/20,HTTP使用80,DNS使用53
登记端口号:1024~49151。为没有熟知端口号的应用程序使用,使用这类端口号必须在IANA按照规定的手续登记,以防止重复
短暂端口号:49152~6553。留给客户进程选择暂时使用,当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机的相同端口号是没有联系的
发送方的复用和接收方的分用
发送方应用进程
发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,这称为UDP复用。而另一些应用进程所发送的不同应用报文,在运输层使用TCP协议进行封装,这称为TCP复用。运输层使用端口号来区分不同应用进程。不管是使用运输层的UDP协议封装成的UDP用户数据报,还是使用TCP协议封装成的TCP报文段,在网络层都需要使用IP协议封装成IP数据报,这称为IP复用。IP数据报首部中协议字段的值用来表明IP数据报的数据载荷部分封装的是何种协议数据单元。取值为6,表示封装的是TCP报文段,取值是17,表示封装的是UDP用户数据报。
接收方应用进程
接收方的网络层收到IP数据报后进行IP分用,若IP数据报首部中的协议字段的值是17,则把IP数据报的数据载荷部分所封装的UDP用户数据报上交运输层的UDP,若协议字段的值为6,则把IP数据报的数据载荷部分所封装的TCP报文段上交运输层的TCP。运输层对UDP用户数据报进行UDP分用,对TCP报文段进行TCP分用,也就是根据端口号,将他们交付给上层相应的应用进程。
TCP/IP体系的应用层常用的协议所使用的运输层熟知端口号
举例,运输层端口号 用户PC,DNS服务器,WEB服务器通过交换机进行互联,他们处于同一个以太网中,假设WEB服务器的域名,DNS服务器中记录有该域名所对应的IP地址,我们在用户PC中使用网页浏览器来访问WEB服务器的内容,在网页浏览器的地址栏中输入WEB服务器的域名,用户PC中的DNS客户端进程会发送一个DNS查询请求报文,内容为域名,,所对应的IP地址是什么,DNS查询请求报文需要使用运输层的UDP协议封装成UDP用户数据报,其首部中的源端口字段的值在短暂端口号49151~65535挑选一个未被占用的,用来表示DNS客户端进程,目的端口字段的值设置为53,之后将UDP用户数据报封装在IP数据报中,通过以太网发送给DNS服务器,DNS服务器收到该数据报后,从中解出UDP用户数据报,UDP首部中的目的端口号为53,这表明应将该UDP用户数据报的数据载荷部分,也就是DNS查询请求报文,交付给本服务器中的DNS服务器端进程,DNS服务器端进程解析DNS查询请求报文的内容,然后按其要求查找对应的IP地址,之后会给用户PC发送一个DNS响应报文,其内容为域名,,所对应的IP地址为,,,,。DNS响应报文需要使用运输层的UDP协议封装成UDP用户数据报,其首部中的源端口字段的值设置为熟知端口号53,表明这是DNS服务器端进程所发送的UDP用户数据报。目的端口字段的值设置为49152,这是之前用户PC中发送DNS查询请求报文的DNS客户端进程所使用的短暂端口号,之后将UDP用户数据报封装在IP数据报中通过以太网发送给用户端PC。用户PC收到该数据报后,从中解出UDP用户数据报。UDP首部中的目的端口号为49152,这表明应将UDP用户数据报的数据载荷部分也就是DNs响应报文交付给用户PC中的DNS客户端进程,DN S客户端进程解析DNs响应报文的内容,就可知道自己之前所请求的WEB服务器的域名所对应的IP地址为,,,,。现在用户PC中的HTTP客户端进程可以向WEB服务器发送HTtp请求报文了,其内容为,首页内容是什么,HTTP请求报文需要使用运输层的TCP协议封装成TCP报文段,其首部中源端口字段的值在短暂端口号49151~65535中挑选一个未被占用的,用来表示HTTP客户端进程。目的端口字段设置为80,之后将TCP报文段封装在IP数据报中,通过以太网发送给WEB服务器,WEB服务器收到该数据报后从中解封出TCP报文段,TCP首部的目的端口号为80,这表明应该将该TCP报文段的数据载荷部分,也就是HTTP请求报文交付给本服务器中的HTTP服务器端进程。HTTP服务器端进程解析HTTP请求报文内容,然后按照要求查找首页内容,之后会给用户PC发送HTTP响应报文,其内容是HTTP客户端所请求的首页内容。HTTP响应报文需要使用运输层的TCP协议封装成TCP报文段,其首部中的源端口字段的值设置为熟知端口号80,表明这是HTTP服务器端进程所发送的TCP报文段,目的端口号值49152。之后将TCP报文段封装在IP数据报中,通过以太网发送到用户PC,用户PC后到该数据报后,从中解封出TCP报文段,TCP首部中的目的端口号为49152,这表明应将该TCP报文段的数据载荷部分也就是H TTP响应报文交付给用户PC中的HTTP客户端进程,HTTP客户端进程解析HTTP响应报文的内容,并在网页浏览器中显示
RIP
520UDP
DNS
53UDP
TFTP
69UDP
SNMP
161UDP
DHc P
67/68UDP
SMTP
25TCP
FTP
21/20TCP
BGP
179TCP
HTTP
80TCP
HTTPS
443TCP
5.3UDP和TCP的对比
用户数据报协议UDP
使用UDP的通信双方,可以随时发送数据。 某个局域网上使用UDP协议进行通信的四台主机,其中任何一台主机都可向其他三台主机发送广播,也可以向某个多播组发送多播,还可以向某台主机发送单播,也就是说,UDP支持单播,多播以及广播,换句话说,UDP支持一对一,一对多,以及一对全的通信。 对应用报文的处理。 发送方的应用进程将应用层报文交付给运输层的UDP,UDP直接给应用层报文添加一个UDP首部,是之成为UDP用户数据报,然后进行发送,接收方的UDP收到该UDP用户数据报后,去掉UDP首部,将应用层报文交付给应用进程,也就是说UDP对应用进程交下来的报文既不拆分也不合并,而是保留这些报文的边界,换句话说,UDP是面向应用报文的。 网际层向上层提供无连接不可靠传输服务,当运输层使用UDP协议时,向其上层提供的也是无连接不可靠传输服务,发送方给接收方发送UDP用户数据报,若传输过程中用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报首部中的校验和字段的值,检查出产生误码的情况,但仅仅丢弃该数据报,其他什么也不做,发送方给接收方发送UDP用户数据报,如果该数据报被因特网中的某个路由器丢弃了,发送方UDP不做任何处理,因为UDP向上层提供的是无连接不可靠的传输服务(适用于IP电话,视频会议等实时应用。) UDP用户数据报的首部与TCP报文段的首部。 一个UDP用户数据报由首部和数据载荷两部分构成。首部格式仅有4个字段,每个字段长度为两个字节,由于UDP不提供可靠传输服务,它仅仅在网际层的基础上添加了用户区分应用进程的端口,因此他的首部非常简单,仅有8个字节。
无连接
传输控制协议TCP
使用TCP协议的通信双方,在进行数据传输前必须使用三报文握手,来建立TCP连接,TCP连接建立成功后才能进行数据传输,数据传输结束后,必须使用四报文回手来释放TCP连接,连接是指逻辑连接关系,而不是物理连接。 通信双方好像有一条可靠的通信信道,通信双方使用这条基于TCP连接的可靠信道进行通信,很显然TCP仅支持单播,也就是一对一的通信。 发送方的TCP把应用进程交付下来的数据块仅仅看作是一连串的,无结构的字节流,TCP并不知道这些待发送的字节流的含义,仅将他们编号,并存储在自己的发送缓存中,TCP根据发送策略,从发送缓存中提取一定数量的字节,构建TCP报文段并发送。接收方的TCP,一方面从所接受到的TCP报文段中取出数据载荷部分并存储在接收缓存中,一方面将接收缓存中的一些字节交付给应用进程,TCP不保证接收方应用进程所收到的数据块与发送方应用进程所发出的数据块具有对应大小的关系,例如发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付给了上层的应用进程,但接收方的应用进程收到的字节流必须和发送方应用进程发出的字节流完全一样,当然接收方的应用进程必须有能力识别收到的字节流把它还原成有意义的应用层数据,也就是说TCP是面向字节流的,这正是TCP实现可靠传输,流量控制,以及拥塞控制的基础,需要说明的是,在实际网络中,基于TCP连接的两端,可以同时进行TCP报文段的发送和接收,也就是全双工通信。 尽管网际层中的IP协议向上层提供的事无连接不可靠传输服务,也就是说,IP数据报可能在传输过程出现丢失和误码的情况,但只要运输层使用TCP协议,就可向其上层提供面向连接的可靠传输服务,我们可将其构想为使用TCP协议的收发双方基于TCP连接的可靠信道进行传输,不会出现误码丢失,乱序以及重复等传输差错。TCP适用于要求可靠传输的应用,例如文件传输。 一个TCP报文段由首部和数据载荷两部分构成,其首部格式其最小长度为20字节,最大长度为60字节,这是因为TCP要实现可靠传输,流量控制,拥塞控制等服务,首部自然复杂。
面向连接
5.4TCP的流量控制
一般来说,我们总是希望数据传输的更快一些
但如果发送方把数据发送的过快,接收方就可能来不及接受,这就造成了数据的丢失。
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收
利用滑动窗口可以很方便的在TCP连接上实现对发送方的流量控制
举例 假设假设主机A和主机B是因特网上的两台主机,他们之间已经建立了TCP连接,A给B发送数据,B对A流量控制,假设主机A发送的每个TCP数据报文段可携带100字节数据。在主机A和主机B建立TCP连接时,B告诉A,我的接收窗口为400。因此,主机A将自己的发送窗口也设置为400,这意味着主机A在未收到主机B发来的确认时,可将序号落入发送窗口中的全部数据发送出去。 举例说明主机B对A的流量控制,主机A将发送窗口内序号1~100的数据封装成一个TCP报文段发送出去,发送窗口内还有300个字节可以发送,这里的seq是TCP报文段首部中的序号字段,取值1表明TCP报文段数据载荷的第一个字节的序号是1,这里的DATA表示这是TCP数据报文段。主机A将发送窗口内序号101~200的数据封装成一个TC片报文段发送出去,发送窗口内还有200个字节可以发送,主机A将发送窗口内序号201~300的数据封装成一个TCP报文段发送出去,当该报文段在传输过程中丢失了,主机A发送窗口内还有100字节可以发送,主机B对主机A所发送的201号以前的数据进行累计确认,并在该累计确认中将窗口字段的值调整为300,也就是对主机A进行流量控制,这里的大写ACK是TCP报文段首部中的标志位,取值1表示这是一个TcP确认报文段,小写ack是TCP报文段首部中的确认号字段,取值201表示序号201之前的数据已全部正确接收,现在希望收到序号201及其后续数据。rwnd是TCP报文段首部中的窗口字段,取值300表示自己的接收窗口大小为300。主机A收到该累计确认后,将发送窗口向前滑动,使已发送并收到确认的这些数据的序号移出发送窗口,由于主机B在该累计确认中将自己的接收窗口调整成了300,因此主机A相应的将自己的发送窗口调整为300,目前主机A发送窗口内的序号为201~500,也就是zhujiA还可以发送这300字节,其中201~300号字节是已发送的数据,若重传计时器超时,他们会被重传,301号~400号字节以及401号~500号字节还未被发送,可被封装在TCP报文段中发送,主机A现在可将发送缓存中序号1~200的字节数据全部删除了,因为已经收到了主机B对他们的累计确认,主机A将发送窗口内序号301~400的数据封装成一个TCP报文段发送出去,发送窗口内还有100字节可以发送,主机A将发送窗口内序号401~500的数据封装成一个TCP报文段发送出去,至此序号落在发送窗口的数据已经全部发送出去了,不能再发送新数据了,现在,将他们发送窗口内序号201~300这100个字节的重传计时器超时了,主机A重新封装成一个TCP报文段发送出去,暂时不能发送其他数据,主机B收到该重传的TCP报文段后,对主机A所发送的501号以前的数据进行累计确认,并在该累计确认中将窗口字段的值设置为100,主机B对主机A进行的第二次流量控制。假设主机B向主机A发送了0窗口的报文段后不久,主机B的接收缓存又有了一些存储空间,于是主机B向主机A发送了接收窗口等于300的报文段,然而这个报文段在传输过程中丢失了,主机A一直在等待主机B发送的非零窗口的通知,而主机B也一直在等待主机A发送的数据,如果不采取措施,这种互相等待而形成的死锁局面将一直持续下去,为解决这个问题TCP为每个连接设有一个持续计时器,只要TCp连接的一方收到对方的零窗口通知就启动持续计时器,若持续计时器超时就发送一个零窗口探测报文,仅携带一字节数据,而对方在确认这个探测报文段时,给出自己现在的接收窗口值,如果接收窗口仍然是零,那么收到这个报文段的一方就重新启动持续计时器,如果接收窗口不是零,那么死锁的局面就打破了。 TCP规定,即使接收窗口为0,也必须接受零窗口探测报文段,确认报文段,以及携带紧急数据的报文段。 如果零窗口探测报文段丢失,零窗口探测报文段也有重传计时器,当重传计时器超时后,零窗口探测报文段会被重传。
5.5TCP的拥塞控制
在某段时间内,若对网络中某一资源的需求超过了该资源的所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞
在计算机网络中的链路容量(即带宽),交换机节点中的缓存和处理机等,都是网络的资源。
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
横坐标是输入负载,代表单位时间内输入给网络的分组数量,纵坐标是吞吐量,代表单位时间内从网络输出的分组数量,具有理性拥塞控制的网络,在吞吐量达到饱和之前,网络吞吐量应等于所输入的负载,故吞吐量曲线是45度的斜线,但当输入负载超过某一限度时,由于网络资源的受限,吞吐量就不再增长而是保持水平线,也就是吞吐量达到饱和,这就表明输入的负载中有一部分损失掉了。例如,输入到网络中的某些分组被某个节点丢弃掉了,虽然如此,在这种理想的拥塞控制作用下,网络的吞吐量仍然维持在其所能达到的最大值,然而,实际的网络情况就很不同了,我们再来看这条吞吐量曲线,随着输入负载的的增大,网络吞吐量的增长率逐渐减少,也就是在网络吞吐量还未达到饱和时,就已经有一部分的输入分组被丢弃了,当网络的吞吐量明显的小于理想的吞吐量时,网络就进入了轻度拥塞的状态,更值得注意的是,当输入负载到达某一数值时,网络吞吐量反而随输入负载的的增大而减小,这是网络就进入了拥塞状态,当输入负载继续增大到某一数值时,网络的吞吐量就减小为0,此时网络就无法工作了,这就是所谓的死锁,因此,进行拥塞控制是非常有必要的,实际的拥塞控制曲线,应该尽量接近理想的拥塞控制曲线。
TCP的四种拥塞控制算法
介绍四种拥塞控制算法的基本原理,假定如下条件: 1.数据是单方向传送,而另一个方向只传送确认。 2.接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。 3.以TCP的最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。 假设这是TCP的发送方和接收方 发送方给接收方发送TCP数据报文段,接收方收到后给发送方发送TCP确认报文段。 发送方要维护一个叫拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。 拥塞窗口cwnd的维护原则是:只要网络没有出现拥塞,拥塞窗口就增大一些,但只要网络出现拥塞,拥塞窗口就减少一些。 判断网络窗口出现拥塞的依据是:没有按时收到应当到达的确认报文(即发生超时重传)。 发送方将拥塞窗口作为发送窗口swnd,即swnd=cwnd。 发送方维护一个叫做慢开始门限ssthresh的状态变量: cwnd<ssthresh是,使用满开始算法。 当cwnd>ssthresh时,停止使用满开始算法而改用拥塞避免算法 当cwnd=ssthresh时,既可以满开始算法,也可以拥塞避免算法 慢开始是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增张速度慢。 拥塞避免也并非指完全能够比避免,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。 慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法 1990年增加两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复。 有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞 这将导致发生方超时重传,并误认为网络发生了拥塞 发送方把拥塞窗口cwnd设置为最小值1,并错误的启动慢开始算法,降低了 传输效率。 TCP拥塞窗口值在拥塞控制时的变化情况举例,包含TCP拥塞控制的4种算法。 TCP发送方一开始使用慢开始算法,让拥塞窗口值从1开始按指数规律增大。 当增大到慢开始门限初始值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口值按线性加一的规律增大,当发生超时重传时,就判断网络可能出现了拥塞,采取相应的措施,一方面将慢开始门限值更新为发生拥塞时拥塞窗口的一半,另一方面将cwnd窗口值减小为1,并重新开始执行慢开始算法,拥塞窗口值又从1开始按指数规律增大,当增大到新的慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口值按线性加1的规律增大。当发送方收到三个重复确认时,就进行快重传和快恢复,也就是更新慢开始门限值为当前拥塞窗口值的一半,并将拥塞窗口值也取为新的慢开始门限值,转而执行拥塞避免算法,让拥塞窗口值按线性加一的规律增大。
慢开始
拥塞窗口随传输轮次变化的图 横坐标为传输轮次,传输轮次是指发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段,一个传输轮次所经历的时间,其实就是往返时间,注意,往返时间并非是恒定的数值,使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认。纵坐标是拥塞窗口,它会随网络拥塞程度以及所使用的拥塞控制算法动态变化。在TCP双方建立逻辑连接关系时,拥塞窗口的值被设置为1,我们在图上标出传输轮次0时的拥塞窗口值为1,另外还需设置慢开始门限的初始值,本例采用16,我们也将它在图中标出,在执行慢开始算法时,发送方每收到一个对新报文段的确认时,就把拥塞窗口的值加一,然后开始下一轮的传输,当拥塞窗口值增长到慢开始门限值时,就改为执行拥塞避免算法,由于发送方当前的拥塞窗口是1,而发送窗口值等于拥塞窗口值,因此,发送方当前只能发送一个TCP数据报文段,换句话说,拥塞窗口值是几,就能发送几个数据报文段,如图所示,发送方发送0号数据报文段,接收方收到后,给发送方发回对0号数据报文段的确认报文段,发送方收到该确认报文段后,将拥塞窗口值增大到2,这意味着发送方现在可以发送1~2号共两个数据报文段,接收方收到后,给发送方发回1~2号报文段的确认报文段,发送方收到后,将拥塞窗口值加2增大到4。
拥塞避免
每个传输轮次结束后,拥塞窗口值只能线性加1,假设这24个数据报文段在传输过程中丢失了几个,这必然会造成发送方对这些丢失报文段的超时重传,发送方以此判断网络很可能出现了拥塞,需要进行以下工作: 将ssthresh值更新为发生拥塞时cwnd值的一半 将cwnd减小为1并重新开始执行慢开始算法
快重传
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计数器超时再传 要求接收方不要等待自己发送数据时才捎带确认而是要立即发送确认。 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误以为出现了拥塞,使用快重传可以使整个网络的吞吐量提高约20%。 举例说明 发送方发送一号数据报文段,接收方收到后给发送方发回对1号报文段的确认。在该确认报文段到达发送方之前,发送方还可以将发送窗口内的2号数据报文段发送出去买接收方收到后给发送方发回对2号报文段的确认。在3号报文段发送过程中丢失了,接收方自然不会给发送方发回针对该报文段的确认,发送方还可以将发送窗口内的4号数据报文段发送出去,接收方收到后发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认,表明,我现在希望收到的是3号数据报文段,但是我没有收到3号报文段,而是收到了未按序到达的报文段。发送方还可以将发送窗口内的5号数据报文段发送出去,接收方收到后发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认,发送方还可以将发送窗口内的6号数据报文段发送出去,接收方收到后发现这不是按序到达的报文段,因此给发送方发回针对2号数据报文段的重复确认,至此发送方收到三个连续的对2号数据报文段的重复确认,就会立即重传3号报文段,接收方收到后,给发送方发回针对6号报文段的确认,表明序号到6为止的报文段都正确接受了,这样就不会造成对3号报文段的超时重传,而是提早进行了重传。
快恢复
发送方一旦收到3个连续的重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而是执行快恢复算法。 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口值的一半,开始执行拥塞避免算法。 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh+3。 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络。 这三个报文段不再消耗网络资源而是停留在接收方的缓存中。 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大一些。
5.6TCP超时重传时间的选择
超时重传时间的选择是TCP最复杂的问题之一
假设主机A和主机B是因特网上的两台主机,他们之间已经建立了TCP连接,纵坐标为时间,现在主机A给主机B发送TCP数据报文段0,并记录下当前的时间,主机B收到后,给主机A发送相应的确认报文段,主机A收到确认报文段后,记录下当前的时间,那么主机A记录下的这两个时间,他们的差值就是报文段的往返时间RTT,由于这是第0个报文段的RTT,我们就用RTT0来表示,试想一下如果我们将超时重传时间R TO的值设置的比RTT0的值小,会出现什么情况。很显然这会引起报文段不必要的重传,使网络负荷变大。那么将超时重传的时间R TO的值设置的远大于RTT0的值,很显然这会使重传推迟的时间太长,使网络的空闲时间增大,降低了传输效率,综合上述两种情况,我们可以得出以下结论,超时重传时间RTO的值应该设置为略大于报文段往返时间RTT的值。TCP下层是复杂的互联网环境,主机A所发送的报文段,可能只经过一个高速率的局域网,也有可能经过多个低速率的网络,并且,每个IP数据报的转发路由还可能不同,例如,现在主机A给主机B发送TCP数据报文段1,主机B收到后,给主机A发送相应的确认报文段,主机A这次测得的报文段往返时间RTT1,显然RTT1远大于RTT0,如果超时重传时间RTO还是我们之前所确定的略大于RTT0的话,这对于数据报文段1是不合适的,会造成该数据报文段不必要的重传。
不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO
利用每次测量得到的RTT样本,计算加权平均往返时间RTTS(又称为平滑的往返时间)
RTTSi=RTTi RTTS=(1-a)*旧的RTTS+a*新的RTT样本 <=0a<1 a很接近1,则新的RTT样本对RTTS影响不大,若a很接近1,则新RTT样本对RTTS影响较大
用这种方式得出的加权平均往返时间RTTS就比测量出的RTT值更加平滑
显然,超时重传时间RTO应略大于加权平均往返时间RTTS
RTO=RTTS+4*RTTD
RTTD RTT偏差的加权平均RTTD RTTDi=RTTi/2 新的RTTD=(1-b)*旧的RTTD+b*|RTTS-新的RTT样本| 0<=b<1
往返时间RTT的测量比较复杂
主机A给主机B发送TCP数据报文段,但该报文段在传输过程中丢失了。当超时重传计时器超时后,主机A就重传该报文段,主机B收到后,给主机A发送确认报文段,主机A收到该确认报文段后,无法判断该报文段是对原报文段的确认,还是对重传报文的确定,该报文段实际上是对重传报文段的确认,也就是说,正确的RTT应该是这一段时间,但是主机A误将该确认当作是对原数据报文段的确认,则所计算出的RTT和RTO就会偏大,降低了传输效率。 另一种情况 主机A给主机B发送TCP数据报文段,主机B收到后给主机A发送确认报文段,由于某种原因,该确认报文段没有在正常时间内到达主机A,这必然会导致主机A对之前所发送的数据报文段的超时重传,现在问题又来了,主机A收到迟到的确认报文后,无法判断该报文段是对原报文段的确认还是对重传报文的确认,该报文段实际上是对原报文段的确认,也就是说,正确的RTT,所计算出的RTT S和RTO偏小,这会导致报文段没有必要的重传,增大网络负荷。
针对出现超时重传时无法测准往返时间RTT的问题,算法:在计算加权平均往返时间RTTS时,只要报文段重传了,就不采用其他往返时间RRT样本。也就是出现重传时,不重新计算RTTS,进而超时重传RTO也不会重新计算。
新问题,报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但算法中,不考虑重传报文段的往返时间样本。这样超时重传时间就无法更新,这会导致报文段反复被重传。
改正算法:报文段每重传一次,就把超时重传时间RTO 增大一些。典型做法是取新的RTO值为旧值的两倍
举例说明超时重传时间的计算
RTTS1=RTT1 第一个样本RTT1 RTTD1=RTT1/2 RTO1=RTTS1+4*RTTD1
5.7TCP可靠传输的实现
TCP基于以字节为单位的滑动窗口来实现可靠传输
这是因特网上的两台主机,他们之间已经建立了一个TCP连接,为了简单起见,我们假定数据传输只在一个方向进行,换句话说,发送方给接收方发送TCP数据报文段,接收方给发送方发送相应的T CP确认报文段,这样的好处是使讨论仅限于两个窗口,也就是发送方的发送窗口和接收方的接收窗口,TCP的滑动是以字节为单位的,现在假设发送方收到了一个来自接收方的确认报文段,在报文段首部中的窗口字段的值为20,也就是接收方表明自己的接收窗口的尺寸为20个字节,确认号字段的值为31,这表明接收方希望收到下一个数据的序号是31,而序号30为止的数据已经全部正确接收了,因此,发送方根据这两个字段的值构造出自己的发送窗口,假定网络不存在拥塞问题,也就是发送方在构造自己的发送窗口时,仅考虑接收方的接收窗口,而不考虑拥塞窗口。发送方在没有接收到接收方确认的情况下,可以把发送窗口内的数据依次全部发送出去,凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用,这是发送窗口的后沿,这是发送窗口的前沿。发送窗口后沿的后面部分是已发送出去并且已收到确认的数据字节的序号。这些数据字节显然不需要再保存到发送缓存里,可以将他们删除。发送窗口前沿的前面部分,是当前不允许发送的数据字节的序号。 后沿的移动情况有两种情况: 不动,没有收到新的确认,发送窗口的后沿不会移动。 向前移动,收到新的确认,发送窗口的后沿向前移动。 发送窗口的后沿不可能向后移动。 发送窗口前沿的情况有三种可能: 通常是不断向前移动。 不动 没有收到新的确认,对方通知的窗口大小不变 收到新的确认单对方通知的窗口缩小,使发送窗口前沿正好不动 发送窗口的前沿还可能向后收缩,对方通知窗口变小 接收方的接收窗口 尺寸为20,在接收窗口外面到30号为止的数据,是已经发送过相应确认并已交付给应用进程的数据,因此无需保留这些数据,可将他们从接收缓存中删除了。接收窗口内31~50号数据是允许接受的数据,接收窗口外51号及其后续数据,目前不允许接受。 假设发送方之前发送的封装有32和33号数据的报文段到达了接收方,由于数据序号落在接受窗口内,所以接收方接受他们,并将他们存入接收缓存。但是,他们是未按序到达的数据,因为31还数据还没有到达,这有可能是丢了,也有可能是滞留在网络中的某处。请注意:接收方只能对按序收到的数据中的最高序号给出确认,因此,接收方发出的确认报文段中的确认序号仍然是31,也就是希望收到31号数据,窗口字段的值仍是20,表明接收方没有改变自己接收窗口的大小,发送方收到该确认报文段后,发现这是一个针对31号数据的重复确认,就知道接收方收到了未按序到达的数据,由于这是针对31号数据的第一个重复确认,因此,这并不会引起发送方针对该数据的快重传,另外接收方通知的窗口尺寸仍是20,因此发送方仍保持自己的发送窗口尺寸为20,现在假设封装有31号数据的报文段到达了接收方,接收方接受该报文段,将其封装的31号数据存入接收缓存。接收方现在可将接收到的31~33号数据交付给应用进程。然后将接收窗口向前移动3个序号,并给发送方发送确认报文段,该确认报文段中窗口字段的值仍为20,表明接收方没有改变自己接收窗口的大小,确认号字段的值为34,这表明接收方已经收到了序号33为止的全部数据。现在假设又有几个数据报文段到达了接收方,他们封装有37,38以及40号数据,这些数据虽然落在接收窗口内,但他们都是未按序到达的数据,只能先暂存在接收缓存中,假设接收方先前发送的确认报文段到达了发送方,发送方接收后,将发送窗口向前滑动3个序号,发送窗口的尺寸保持不变,这样就有新序号51~53落入发送窗口内,而序号31~33移出了发送窗口,现在可将31~33号数据从发送缓存中删除了,因为已经收到了接收方针对它们的确认,发送方继续将发送窗口内序号42~53的数据封装在几个不同的报文段中发送出去,现在发送窗口内的序号已经用完了,发送方在为接收到接收方发来的确认报文段的情况下,不能再发送新数据,序号落在发送窗口内的已发送数据,如果迟迟收不到接收方的确认,则会产生超时重传。
虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。
网络传送窗口值需要经历一定时间的滞后,并且这个时间还不是确定的。
发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
对于不按序到达的数据应如何处理,TCP并无明确规定。
如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利。因为发送方会重复传送较多的数据
TCP对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付给上层的应用进程。
TCP要求确认接收方必须有累计确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络资源
确认推迟时间不应超过0.5秒。若收到一连串具有最大长度的报文段,必须每隔一个报文段就发送一个确认
捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据
TCP的通信时全双工通信。通信中的每一方都在接受和发送报文段。因此每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。
如何描述发送窗口的状态
使用三个指针P1,P2,P3分别指向相应的字节序号
小于P1的是已发送并且已收到确认的部分
大于等于P3的是不允许发送的部分
P3-P1=发送窗口的尺寸
P2-P1已发送但尚未收到确认的字节数量
P3-P2允许发送但当前尚未发送的字节数(又称为有用窗口,有效窗口)
5.8.1TCP的运输连接管理—TCP的连接建立
TCP是面向连接的协议,它基于运输连接来传送TCP报文段
TCP运输连接的建立和释放是每一次面向连接时的通信中必不可少的过程
TCP运输连接有以下三个阶段:
建立TCP连接
通过三报文握手来建立TCP连接 这是两台要基于TC P进行通信的主机。其中一台主机中的某个应用进程主动发起TCP连接建立,称为TC P客户。另一台主机中被动等待TCP连接建立的应用进程,称为TCP服务器,我们可以将TCP建立连接的过程比喻为握手。握手需要在TC P客户和服务器之间交换三个TC P报文段。最初两端的TC P进程都处于关闭状态。一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息。例如TCP连接表,指向发送和接收缓存的指针,指向重传队列的指针,当前发送和接收序号。之后就准备接受TCP客户进程的连接请求。此时,TCP服务器进程就进入监听状态,等待TCP客户进程的连接请求。TCp服务器进程是被动等待来自TCP客户端进程的连接请求,而不是主动发起的,因此称为被动打开链接。TCP客户进程也是首先创建传输控制块。然后在打算建立TC P连接时,向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态,TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,序号字段seq被设置了一个初始值x,作为TC P客户进程所选择的初始序号。请注意:TCP规定SYN被设置为1的报文段不能携带数据,但要消耗一个序号,由于TCP连接建立是由TCP客户进程主动发起的,因此被称为主动打开链接,TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态,该报文段首部中的同步位SYN和确认为ACK都设置为1,表明这是一个TC P连接请求确认报文段,序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号,确认号字段ack的值被设置成了x+1,这是对TCp客户进程所选择的初始序号的确认。请注意:这个报文段也不能懈携带数据,因为他是SYN被设置为1的报文段,但同样要消耗一个序号,TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已建立状态,该报文段首部中的确认位ACK被设置为1,表明这是一个普通的TCP确认报文段,序号字段seq被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,并且不携带数据,因此第二个报文段的序号为X+1,请注意:TCP规定普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号,在这种情况下,所发送的下一个数据报文段的序号仍是x+1。确认号字段ack被设置为y+1,这是对TCP服务器进程所选择的初始序号的确认。TCP服务器进程收到该确认报文段后也进入连接已建立状态。现在TCP双方都进入了连接已建立状态,它们可以基于以建立好的TCP连接,进行可靠的数据传输了。 为什么TCP客户进程最后还要发送一个普通的TCP确认报文段呢? 考虑这样一种情况:TCP客户进程发出一个TCP连接请求报文,当该报文段在某个网络节点长时间滞留了,这必然会造成该报文段的超时重传,假设重传的报文段被TCP服务器进程正常接收,TCP服务进程给TCP用户进程发送一个TCP连接请求确认报文段,并进入连接已建立状态,TCP客户进程收到TCP连接请求连接确认报文段后,进入TCP连接已建立状态,现在双方都处于连接已建立状态,它们可以互相传输数据,之后通过四次挥手释放连接,TCP双方都进入关闭状态。一段时间后,之前滞留在网络中的那个失效的TCP连接请求报文段到达了TCP服务进程,TCP服务进程会认为这是TCP客户进程又发起的新的TCP连接请求。于是给TCP客户端进程发送TCP连接请求确认报文段,并进入连接已建立状态,该报文段到达TCP用户进程,处于关闭状态,因此不会理会。但TCP服务器进程已进入连接已建立状态,他认为新的Tcp连接已建立好了,并一直等待TCP客户端进程发来数据,这将白白浪费TCP服务器进程所在主机的很多资源。又突然所以才去三次握手是为了防止已失效的连接请求报文段突然又传到了TCP服务器进程,因而导致错误。
数据传送
基于已建立的TCP连接进行可靠的数据传输
释放连接
数据传输结束后,还要通过四报文挥手来释放TCP连接
TC P的运输连接管理就是使运输连接的建立和释放都能正常的进行。
TCP的连接建立要解决以下三个问题:
使TCP双方能够确知对方的存在;
使TCP双方能够协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
使TCP双方能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
5.8.2TCP的运输管理连接—- TCP的连接释放
TCP通过四报文挥手来释放连接
数据运输结束后,T CP通信双方都可以释放连接,现在TCP客户进程和TCP服务器进程都处于连接已建立状态,假设使用TCP客户进程的应用进程通知其主动关闭TCP连接,TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态,该报文段首部中的终止位FIN,和确认位ACK的值都被设置为了1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认,序号seq字段的值设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号加一。请注意:TCP规定终止位FIN等于1的报文段即使不携带数据,也要消耗一个序号,确认号ack字段的值设置为v,它等于TCP客户进程之前已接收到的数据的最后一个字节的序号加一,TCP服务进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态,该报文段首部中的确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段,序号seq字段的值设置为v,它等于TCP服务进程之前已传送过的数据的最后一个字节的序号加1,这也与之前收到的TCP连接释放报文段中的确认号匹配,确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认,TCP服务器进程这时应通知高层应用进程,TCP客户进程要断开与自己的TCP连接,此时从TCP客户进程到TCP服务器进程这个方向的连接就释放了。这时的TCP连接属于半关闭状态。也就是TCP客户进程已经没有数据要发送了。但TCP服务进程如果还有数据要发送,TCP客户进程仍要接收,也就是说,从TCP服务器进程到TCP客户进程这个方向的连接还未关闭。这个状态可能会持续一段时间,TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段,若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接,由于TCP连接释放是由TCP客户进程主动发起的。因此,TCP服务器进程对TCP连接的释放称为被动关闭连接。TCP服务器进程发送TCP连接释放报文段并进入最后确认状态。该报文段首部中的终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段。同时也对之前收到的报文段进行确认。现在假定序号seq字段的值为w,这是因为在半关闭状态下,TCP服务进程可能有发送了一些数据,确认号ack字段的值为u+1,这是对之前收到的TCP连接释放报文段的重复确认。TCP客户进程收到TCP连接释放报文段后,必须对该报文段发送普通的TCP确认报文段,之后进入时间等待状态,该报文段首部中的确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文,序号seq字段的值被设置为u+1,这是因为TCP客户进程之前发送的TCP连接释放报文段虽然不携带数据,但要消耗掉一个序号,确认号ack字段的值设置为w+1,这是对所收到的TCP连接释放报文段的确认。TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要经过2MSL后才能进入关闭状态。MSL意思是最长报文段寿命。也就是说TCP客户进程进入时间等待状态后,还要经过4分钟才能进入关闭状态。为什么TCP客户进程发送完最后一个确认报文段后,为什么不直接进入关闭状态,而是要进入时间等待状态。2MSL后才进入关闭状态。 这种情况,TCP服务进程发送TCP连接释放报文段后进入最后确认状态。TCP客户进程收到该报文段后,发送普通的TCP确认报文段,并进入关闭状态而不是时间等待状态,然而该TCP确认报文段丢失了,这必然会造成TCP服务进程对之前所发送的TCP连接释放报文段的超时重传,并仍处于最后确认状态,重传的TCP连接释放报文段到达TCP客户进程,由于TCP客户进程属于关闭状态,因此不理睬该报文段。这必然会造成TCP服务进程反复重传TCP连接释放报文段,并一直处于最后确认状态而无法进入关闭状态。因此,时间等待状态以及处于该状态的2MSL时长,可以确保TCP服务进程可以收到最后个TCP确认报文段而进入关闭状态。另外TCP客户进程在发送完最后一个TCP确认报文段后,再经过2MSL时长,就可以使本次连接持续时间内所产生的所有报文段都从网络消失,这样就可以使下一个新的TCP连接中,不会出现旧连接中的报文段。
TCP中保活计时器的作用
TCP双方已经建立了连接。后来,TCP客户进程所在的主机突然出现了故障,显然,TCP服务器进程以后就不能再收到TCP客户进程发来的数据。因此,应当有措施使TCP服务进程不要白白等待下去。使用保活计时器
TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器
若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送十个探测报文段后仍无TCP客户进程的响应,TCP服务进程就认为TCP客户进程所在的主机出了故障,接着就关闭这个连接。
5.9TCP报文段的首部格式
与IP数据报首部格式类似,都是由20字节的固定首部和最大40字节的扩展首部分构成。
为了实现可靠传输,TCP采用了面向字节流的方式。
但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为。TCP报文段后进行发送。
一个TCP报文段由首部和数据载荷两部分构成
TCP的全部功能都体现在它首部中各字段的作用
源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程
目的端口号:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程
序号:32比特,序号增加到最后一个,下一个序号就又回到0。指出本TCP报文段数据载荷的一个字节的序号。
确认号:32比特,确认号增加到最后一个,下一个确认号又回到了0。指出期望收到对方下一个TCP报文段的数据载荷部分的第一个字节的序号,同时也是第一对之前接收数据的确认。若确认号为n则表明序号n-1为止所有数据都已正确接收,期望接受序号为n 的数据
确认标志位ACK:取值为1时,确认号字段才有效,取值为0时,确认号字段无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
数据偏移字段:4比特,以4字节为单位。用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。该字段实际上指出了TCP报文段的首部长度
保留字段:6比特,保留为今后使用,但目前应置为0
窗口字段:16比特,以字节为单位。指出发送本报文段的一方的接收窗口。窗口值作为接收方让让发送方设置其发送窗口的依据。这是以接收方的接收能力来控制发送方的发送能力,也就是流量控制
校验和:16比特,检查范围包括TCP报文段的首部和数据载荷两部分。在计算校验和前,要在TCP报文段前面加上12字节的伪首部
同步标识位SYN:在TCP连接建立时用来同步序号
TCP客户进程发送的TCP连接请求报文段,首部中的同步标志位SYN被置1,表明这是一个TCP连接请求报文段,TCP服务器进程发送的TCP连接请求确认报文段首部中的同步标志位SYN被置1,确认为ACK也置1,表明这是一个TCP连接请求确认报文段
终止标志位FIN:释放TCP连接
不管是TCP客户进程还是TCP服务器进程,他们所发送的TCP连接释放报文段,首部中的终止标志位FIN都被置1,表明这是TCP连接释放报文段
复位标志位RS T,用来复位TCP连接。当RST=1时,表明TCP连接出现了异常,必须释放连接,再重新建立连接。RST=1还可以用来拒绝一个非法的报文段或拒绝打开一个TC P连接
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到缓存都填满后再向上交付
紧急标志位URG:取值为1时紧急指针字段有效,取值为0时紧急指针字段无效。
紧急指针:占16比特,单位为字节,指明紧急数据的长度。当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据
第六层应用层
6.1应用层概述
应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分
早期基于文本的应用(电子邮件,远程登录,文件传输,新闻组)
将因特网带入千家万户的万维网www
当今流行的即时通信,p2p文件共享机各种音视频应用
计算设备的小型化和无处不在,宽带住宅接入和无线接入的日益普及及快速发展,为未来更多的新型用户提供了广阔的舞台
经典的网络应用为例学习有关网络应用的原理,协议和实现方面的知识。
万维网WWW
域名系统DNS
动态主机配置协议DHCP
电子邮件
文件传送协议FTP
P2P文件共享
多媒体网络应用
6.2客户服务器方式(c/s方式)和对等方式(P2P)方式
网络应用程序运行在处于网络边缘的不同端系统上,通过彼此间的通信来共同完成某项任务。
开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。目前流行的主要有以下两种:
客户/服务器方式
处于网络边缘的主机A中运行的是客户程序,正在运行的客户程序称为客户进程,也可简称为客户。需要注意的是,运行客户进程的主机应成为客户计算机,但有时也简称为客户处于网络边缘的B主机中运行的是服务器程序,正在运行的服务器程序成为服务器进程,也可简称为服务器。在客户/服务器方式下,客户向服务器请求服务,服务器收到服务请求后向客户提供服务。
客户和服务器是指通信中涉及的两个应用进程。
客户/服务器方式所描述的是进程之间服务和被服务关系
客户是服务器的请求方,服务器是服务的提供方
服务器总是处于运行状态,并等待客户的服务请求,服务器具有固定的端口号,而运行服务器的主机也具有固定的IP地址
c/s方式是因特网上传统的,同时也是最成熟的方式,万维网www ,电子邮件,文件传输
基于c/s方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上
由于一台服务器计算机要为多个客户机提供服务,在c/s应用中常会出现服务器计算机跟不上众多客户机请求的情况
为此在c/s应用中,常用计算机群集或服务器场构建一个强大的虚拟服务器。
对等方式
在p2p方式中,没有固定的服务请求者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方之间直接通信,每个对等方即是服务的请求者,又是服务的提供者。
目前在因特网上流行的P2P应用主要包括P2P文件共享,即时通信,P2P流媒体,分布式存储等。
基于P2P的应用是服务分散性的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,他们通常位于住宅,校园和办公室中
P2P方式的最突出特性之一就是他的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统的性能不会因规模的增大而降低
P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。
6.3动态主机配置协议DHCP
DHCP的作用
有一个网络拓扑,如何配置用户主机才能使用户主机正常访问web服务器。 需要给网络中的各主机正确配置IP地址,子网掩码,默认网关,DNS服务器等网络相关配置信息。如果网络中的主机数量比较多,则这种手工配置的工作量就比较大,并且容易出错,如果我们给网络添加一台DHCP服务器,在该服务器中设置好可为网络中其他各主机配置的网络配置信息,网络中各主机开机后自动启动DHCP程序,向DHCP服务器请求自己的网络配置信息,这样网络中的各主机,就都可以从DHCP服务器自动获取网络配置信息,而不用手工参与。
DHCP的工作过程
假设网络中有两台DHCP服务器和多台用户主机,DHCP使用客户/服务器方式,在DHCP服务器上运行DHCp服务器进程,也可简称为DHCP服务器。在用户主机上运行DHCp客户进程,也可简称为DHCP客户,DHCP是TCP/IP协议体系应用层中的协议,它使用运输层的UDP所提供的服务,DHCP报文在运输层会被封装成UDP用户数据报,DHCP服务器使用的UDP端口是67,DHCP客户使用的UDP端口是68,这两个UDP端口都是熟知端口,封装有DHCP报文的UDP用户数据报在网络层会被封装成IP数据报,然后再根据所使用的网络接口,封装成相应的数据链路层的帧进行发送,例如封装成以太网帧。 DHCP客户与DHCP服务器的交互过程 当启用主机的DHCP后,DHCP客户将广播发送DHCP发现报文,封装该报文的IP数据报的源地址IP地址为0.00.0,这是因为主机目前还未分配到IP地址,因此使用该地址代替,目的IP地址为广播地址255.255.255.255,之所以进行广播发送,是因为主机现在并不知道网络中有哪几个DHCP服务器,他们的IP地址各是什么,由于是广播的IP数据报,因此网络中的所有设备都会收到该IP数据报,并对其层层解封,解封出封装有DHCP发现报文的UDP用户数据报。对于DHCP客户,其应用层没有监听该UDP用户数据报目的端口67的进程,也就是DHCP服务器进程,因此无法交付DHCP发现报文,只能丢弃。而对于DHCP服务器,其应用层始终运行着DHCP服务器进程,因此会接受该DHCP发现报文并作出响应,DHCP报文格式比较复杂,对于DHCP发现报文,我们只需要知道,其内部封装有事物ID和DHCP客户端的MAC地址即可,DHCP服务器收到DHCP发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有针对该MAC地址的配置信息。如果有,则使用这些配置信息来构建并发送DHCP提供报文,如果没有,则采用默认配置信息来构建并发送DHCP提供报文,封装该报文的IP数据报的源IP地址为DHCP服务器的IP地址,目的IP地址仍为广播地址,仍然使用广播地址的原因为主机目前还没有配置IP地址,为了使主机可以收到,只能发送广播,这样一来,网络中的所有设备都会收到该IP数据报,并对其层层解封,解封出封装有DHCP提供报文的UDP用户数据报,对于DHCP服务器,其应用层没有监听该UDP用户数据报目的端口68的进程,也就是DHCP客户进程,因此无法交付DHCP提供报文,只能丢弃,而对于DHCP客户,其应用层运行着DHCP客户进程,因此会接受该DHCP提供报文并作出相应处理,DHCP客户会根据DHCP提供报文中的事物ID来判断该报文是否是自己请求的报文,如果该事物ID与自己之前发送的DHCP发现报文中封装的事物ID相等,就表明这是自己所请求的报文,就可以接受该报文,否则就丢弃该报文,DHCP提供报文中还封装有配置信息,例如IP地址,子网掩码,地址租期,默认网关,DNS服务器等。需要注意的是,DHCP服务器从自己IP地址池中挑选待租用给主机的I P地址时,会使用ARP来确保所选IP地址,未被网络中其他主机占用。在本例中DHCP客户会收到两个DHCP服务器发来的DHCP提供报文,DHCP客户从中选择一个,一般来说,选择先到的那个。并向所选择的DHCP服务器发送DHCP请求报文,封装该报文的IP数据报的源IP地址仍为0.0.00,因为此时DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器,它首先要征得服务器的同意,之后才能正式使用向该DHCP服务器租用的IP地址,目的IP地址仍为广播地址,这样做的目的是,不用向网络中每一个DHCP服务器单播发送DHCP请求报文,来告知他们是否请求他们作为自己的DHCP服务器,DHCP请求报文中封装有事物ID,DHCP客户端的MAC地址,接受的租约中的IP地址,提供此租约的DHCP服务器端的IP地址等信息。在本,在本例中,假设DHCP客户选择DHCP服务器1作自己的DHCP服务器,并且DHCP服务器1接受该请求,于是DHCP服务器1给DHCP客户发送DHCP确认报文,封装该报文的IP数据报的源IP地址为DHCP服务器1的IP地址,目的IP地址仍为广播地址。DHCP客户收到该确认报文后,就可以使用所租用到的IP地址了,需要注意的是,在使用租用到的IP地址之前,主机还会使用ARP检测该IP地址是否已被网络中其他主机占用,若被占用,DHCP客户会给DHCP发送报文DHCP服务器发送DHCP可以使用租约中的谢绝报文,来谢绝IP地址租约,并重新发送DHCP发现报文,若未被占用,则可以使用租约中的IP地址与网络中的其他主机通信了,当租用期过了一半时,DHCP客户会向DHCP服务器发送DHCP请求报文,来请求更新租用期。封装该报文的IP数据报的源地址为DHCP客户之前之前租用到的IP地址,目的IP地址为DHCP服务器1的地址,DHCP服务器若同意,则发回DHCP确认报文,这样DHCP客户就得到了新的租用期。DHCP服务器若不同意,则发回DHCP否认报文,这时DHCP客户必须立即停止使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址。DHCP服务器若为做出响应,则在租用期过了87.5%时,DHCP客户必须重新发送DHCP请求报文,然后继续等待DHCP服务器可能做出的反应,若DHCP服务器未做出反应,则当租用期到期后,DHCP客户必须立即停止使用之前租用的IP地址,并重新发送DHCP发现服务器报文来重新申请IP地址,DHCP客户可以随时提前终止DHCP服务器所提供的租用期,这时只需要向DHCP服务器发送DHCP释放报文段即可。
DHCP中继代理
网络拓扑中的各主机,是否可以通过DHCP来自动获取到网络配置信息,不能。该网络中的主机广播发送DHCP发现报文,但该广播报文不会被路由器转发,而是丢弃,解决方法是给该路由器配置DHCP服务器的IP地址,并使之称为DHCP中继代理,这样该网络中的各主机可以通过DHCP自动获取网络配置信息了。当该路由器收到广播的DHCP发现报文后,会将其单播转发给DHCP服务器。使用DHCP中继代理原因是,我们不愿意在每个网络上都设置一个DHCP服务器,因为这样会使DHCP服务器的数量太多
6.4域名系统DNS
域名系统DNS的作用
如图所示,因特网上的某台主机要访问某台WEB服务器,我们只需在用户主机中运行某个浏览器软件,在其地址栏中输入要访问的WEB服务器的域名,并按下回车键,即可访问到WEB服务器所提供的内容。接下来我们在用户主机中使用PING命令来测试一下用户主机与WEB服务器的连通性,可以看到我们ping的是WEB服务器的域名,但ping命令实际上ping的是WEB服务器的IP地址。这与我们之前课上介绍的,TCP/IP体系采用IP地址进行寻址的知识是一致的,也就是说,即使不使用域名也可通过IP地址来寻找目的主机。但域名比IP相比,便于人们记忆。因此对于大多数网络应用,我们一般使用域名来访问目的主机,而不是直接使用IP地址来访问。当我们在浏览器地址栏中输入某个WEB服务器的域名时,用户主机会首先在自己的DNS高速缓存中查找该域名所对应的IP地址,如果没找到,则会向网络中某台DNS服务器查询,DNS服务器中有域名和IP地址的映射关系的数据库,当DNS服务器收到DNS查询报文后,在其数据库内进行查询,之后将查询结果发送给用户主机。现在,用户主机中的浏览器可以通过WEB服务器的IP地址对其进行访问了。 因特网是否可以只使用一台DNS服务器,理论可行。 这种做法不可取。因为因特网的规模很大,这样的域名服务器肯定会因为超负荷而无法工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。 早在1983年,因特网就开始采用层次结构的命名树作为主机的名字(即域名),并使用分布式的域名系统DNS。 DNS使用大多数域名都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。 由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个系统的正常运行
因特网采用层次树状结构的域名结构
域名的结构由若干个分量组成,各分量之间用点隔开,分别代表不同级别的域名。
….三级域名.二级域名.顶级域名
每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写
级别最低的域名写在最左边,而级别最高的顶级域名写在最右边
完整的域名不超过255个字符
域名系统既不规定一个域名包含多少个下级域名,也不规定每一级的域名什么意思
各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICNN进行管理
顶级域名TLD分为
国家顶级域名nTLD
通用顶级域名gTLD
反向域arpa
用于反向域名解析,即IP地址反向解析为域名
在国家顶级域名下注册的二级域名均由该国家自行确定
我国将二级域名划分为两类
类别域名
行政区域名
因特网的域名空间。这种按等级管理的命名方法便于维护名字的唯一性,并且也容易设计出一种高效的域名查询机制。需要注意的是,域名只是个逻辑概念,并不代表计算机所在物理地址。
域名和IP地址的映射关系必须保存在域名服务器中,供其他应用查询。显然不能将所有信息都储存在一台域名服务器中。DNS使用分布在各地的域名服务器来实现域名到IP地址的转换。
域名服务器可以划分为四种类型
跟域名服务器
跟域名服务器是最高层次的域名服务器。每个跟域名服务器都知道所有的顶级域名服务器的域名及其IP地址。因特网上共有13个不同的IP地址的跟域名服务器。尽管我们将这13个跟域名服务器中的每一个都视为单个的服务器,但每台服务器实际上是由许多分布在世界各地的计算机构成的服务器群集。当本地域名服务器向跟域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个跟域名服务器。这就加快了DNS的查询过程,同时也更合理的利用了因特网的资源。跟域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址
顶级域名服务器
这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名,当收到DNS查询请求时就给出相应的回答
权限域名服务器
这些域名服务器负责管理某个区的域名。每个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与Ip地址的映射关系。另外权限域名服务器还知道其下级域名服务器的地址
本地域名服务器
本地域名服务器不属于上述的域名服务器的等级结构。当一个主机发出DNS请求报文时这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中,每一个因特网服务提供者ISP,一个大学甚至一个大学里的学院,都可以拥有一个本地域名服务器。他有时也称为默认域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离,也有可能就在同一个局域网中。本地域名服务器的Ip地址需要直接配置在需要域名解析的主机中
域名解析的过程
递归查询
假设图中的主机想知道域名的IP地址。主机首先向其本地域名服务器进行递归查询。本地域名服务器收到该递归查询的委托后,也采用递归查询的方式向某个根域名服务器查询,根域名服务器收到递归查询的委托后,也采用递归查询的方式向某个顶级域名服务器查询。顶级域名服务器收到递归查询的委托后,也采用递归查询的方式向某个权限域名服务器查询。当查询到域名所对应的IP地址后,查询结果会在之前受委托的各域名服务器之间传递,最终传回用户主机。再来看迭代查询。主机首先向其本地域名服务器进行递归查询。本地域名服务器采用迭代查询。它先向某个根域名服务器查询。跟根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器的IP地址,本地域名服务器向顶级域名服务器进行迭代查询。顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址,本地域名服务器向权限域名服务器进行迭代查询。权限域名服务器告诉本地域名服务器所查询的域名的IP地址。本地域名服务器最后把查询结果告诉主机。 由于递归查询对于被查询的域名服务器负担太大。通常采用以下模式:从主机请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。
迭代查询
为了提高DNS的查询效率,并减轻根域名服务器的负担和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及何处获得域名映射信息的记录。
如果不久前已经有用户查询过域名为的IP地址,则本地域名服务器的高速缓存中应该存在有该域名所对应的IP地址。当主机向本地域名服务器递归查询该域名时,本地域名服务器就没有必要再向某个根域名服务器进行迭代查询了。而是直接把高速缓存中存放的上次的查询结果,即该域名的IP地址告诉用户主机。
需要注意的是,由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项。
不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库。维护存放自己最近使用的域名的高速缓存。并且只在从缓存中找不到域名时才向域名服务器查询。同样主机也需要保持高速缓存中内容的正确性。
DNS报文使用运输层的UDP协议进行封装,运输层端口号为53
6.5文件传送协议FTP
举例,文件传送协议FTP的应用。 FTP采用客户/服务器方式。因特网上的FTP客户计算机,可将各种类型的文件上传到FTP服务器计算机。FTP客户计算机也可以从FTP服务计算器下载文件。根据应用需求的不同,FTP服务器可能需要一台高性能和高可靠性的服务器计算机,也可能只需要一台普通的个人计算机即可。例如,本例也可以采用普通的个人计算机作为FTP服务器计算机。为了简单起见,我们假设FTP客户计算机与FTP服务器计算机处于同一个局域网中。我们在FTP服务器计算机中创建FTP服务器,可以使用第三方的FTP服务器软件,也可以使用操作系统自带的FTP服务器软件。例如,我们可以在window系统中,试用其自带的FTP服务器功能创建一个FTP服务器站点。 FTP的常见用途是在计算机之间传输文件,尤其是用于批量传输文件。 FTP的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的WEB服务器。
将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。
文件传送协议FTP是因特网上使用的最广泛的文件传送协议。
FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCLL码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量
基本工作原理
FTP服务器监听熟知端口号21,FTP客户随机选择一个临时端口号与其建立TCP连接,这条TCP连接用于FTP客户与服务器之间传送FTP的相关控制命令。也就是说,这条TCP连接是FTP客户与服务器之间的命令通道,当有数据要传输时,FTP客户通过命令通道告知TCP服务器来与自己的另一个临时端口号建立TCP连接,建立数据通道。这是FTP用户选择的另一个端口号,FTP服务器使用自己熟知端口号20与其建立TCP连接。这条TCP连接用于FTP客户与服务器之间传送文件。也就是说,这条TCP连接是FTP客户与服务器之间的数据通道。由于在建立数据通道时,FTP服务器主动连接FTP客户,因此称为主动模式。需要注意的是,控制连接在整个回话期间一直保持打开,用于传送FTP相关控制命令。而数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。 再来看被动模式。对于FTP客户与服务器之间命令通道的建立,他与主动模式并没有什么不同,不同之处在于,当有数据要传输时,FTP客户通过命令通道通知FTP服务器,开启某个临时端口被动等待TCP连接,建立数据通道。 这是FTP服务器使用的与FTP客户协商好的临时端口号。这是FTP客户随机选择的另一个端口号,FTP客户发起与FTP服务器的TCP连接以建立数据通道。由于在建立数据通道时,FTP服务器被动等待FTP客户的连接,因此称为被动模式。
6.6电子邮件
假设这是邮件的发送方,这是邮件的接收方,在发送方的计算机中,需要使用用户代理来发送邮件,在接收方的计算机中,同样也需要使用用户代理来接收邮件,发送方使用的邮件服务器。例如QQ邮件服务器,这是接收方使用的邮件服务器,例如谷歌邮件服务器。我们可以简单的认为邮件服务器中有很多邮箱,还有用来缓存待转发邮件的缓存,发送方使用用户代理通过邮件发送协议。例如SMTP,将邮件发送给发送方邮件服务器。发送方邮件服务器同样通过邮件发送协议,将该邮件发送给接收方邮件服务器。接收方在方便时,使用用户代理,通过邮件读取协议,例如POP3,从接收方邮件服务器读取邮件。 发送方的用户代理作为SMTP客户与发送方邮件服务器中的SMTP服务器进行TCP连接,然后基于这条连接,使用SMTP协议来发送邮件给发送方邮件服务器,发送方邮件服务器中的SMTP客户与接收方邮件服务器中的SMTP服务器进行TCP连接,然后基于这条连接使用SMTP协议来发送已收到的待转发邮件给接收方邮件服务器,接收方的用户代理作为POP3客户,与接收方邮件服务器中的POP3服务器进行TCP连接,然后基于这条连接,使用POP3协议,从接收方邮件服务器读取邮件,可以看到这是邮件发送协议的使用范围,包含发送方用户代理到发送方邮件服务器,以及发送方邮件服务器到收到接收方邮件服务器这两部分。这是邮件读取协议的使用范围。只有接收方用户代理到接收方邮件服务器这一部分。
电子邮件是因特网上最早流行的一种应用,并且仍是当今因特网上最重要,最实用的应用之一。
传统的电话通信属于实时通信,存在以下两个缺点
电话通信的主叫和被叫双方必须同时在场
一些不是十分紧迫的电话也常常不必要的打断人们的工作或休息。
而电子邮件与邮政系统的寄信相似
发件人将邮件发送到自己使用的邮件服务器
发件人的邮件服务器将收到的邮件按其目的地址转发到收件人邮件服务器中的收件人邮箱
收件人在方便的访问收件人邮件服务器中自己的邮箱,获取收到的电子邮件
电子邮件使用方便,传递迅速且费用低廉。它不仅可以传送文字信息,而且还可附上声音和图像
由于电子邮件的广泛使用,现在许多国家已经正式取消了电报业务。在我国电信局的电报业务也因电子邮件的普及而消失
电子邮件系统采用客户/服务器方式。
电子邮件的三个主要组成构件
用户代理
用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
邮件服务器
邮件服务器是电子邮件系统的基础设施。因特网上的所有ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。
电子邮件所需要的协议
协议包括发送协议和邮件读取协议
简单邮件传送协议SMTP的基本工作原理
我们以发送方邮件服务器使用SMTP协议给接收方邮件服务器发送待转发的邮件为例。发送方邮件服务器周期性的扫描邮件缓存,如果发现有待转发的邮件,则发送邮件服务器中的SMTP客户,会与接收方邮件服务器中的SMTP服务器进行TCP连接,端口号为25。之后SMTP客户就可以基于这条TCP连接,给SMTP服务器发送STMP命令,共14条,SMTP服务器也会给SMTP客户发送相应的应答,共21种。SMTP客户与SMTP服务器之间,通过命令与应答的交互方式,最终实现SMTP客户发送邮件给SMTP服务器。接下来,简单介绍过程。 当TCP连接建立成功后,SMTP服务器会主动推送服务就绪应答给SMTP客户,应答代码220后面可能跟有描述的信息,SMTP客户收到该应答后,向服务器表明身份,告诉自己SMTP服务器的域名,SMTP服务器若认为身份有效,则发回应答代码250,否则发回其他代码。SMTP客户收到该应答后,使用命令MALL FROM来告诉服务器邮件来自何方,SMTP服务器若认为合理,则发回应答代码250,否则发回其他错误代码。SMTP客户收到该条应答后使用命令RCPT TO来告诉服务器邮件去往何地,也就是收件人邮箱,SMTP服务器中若有该收件人的邮箱,发回应答代码250,否则发回其他错误代码,SMTP客户收到该应答后,使用DATA命令来告诉服务器自己准备发送邮件内容了。SMTP服务器如果准备好接收,发回应答代码354,否则发回其他错误代码,SMTP客户收到该应答后,就向服务器发送邮件内容,SMTP客户发送完邮件内容后,还要发送结束符。SMTP服务器若接收成功,,发回应答代码250,否则发回其他错误代码,SMTP客户收到该应答后使用命令QUIT向服务器请求断开连接。SMTP服务器发回应答代码221表示接受请求并主动断开连接。
电子邮件信息格式并不是SMTP定义的。一个电子邮件有信封和内容两部分,而内容又由首部和主体两部分构成
首部和主体的信息都需要有用户来填写,首部中包含有一些关键字,后面加上冒号,例如关键字FROM:后面填入发件人的电子邮件地址,一般由邮件系统自动填入。关键字TO:后面填入一个或多个收件人的电子邮件。关键字CC:后面填入一个或多个收件人以外的抄送人的电子邮件地址,抄送人收到邮件后,可看可不看邮件,可回可不回邮件。关键字SUBJECT:后面填入邮件的主体,它反映了邮件的主要内容。很显然,最重要的关键字是TO和SUBJECT。他们往往是必选项。用户写好首部后,邮件系统将自动的将信封所需的信息提取出来并写在信封上。所以用户不需要填写电子邮件信封上的信息。在填写完首部各关键字的内容后,用户还需要撰写邮件的主体部分,这才是用户想传递给收件人的核心信息。
SMTP协议只能传送ASCLL码文本数据,不能传送可执行文件或其他的二进制对象
SMTP不能满足传送多媒体邮件(例如带有图片,音频或视频数据)的需要。并且许多其他非英语国家的文字也无法用SMTP传送。
未解决SMTP传送非ASCLL码文本的问题,提出了多用途因特网邮件扩展MIME
假设发送方送的电子邮件中包含有非ASCLL码数据,则不能直接使用SMTP进行传送,需要通过MIME进行转换,将非ASCLL码数据转换成ASCLL码数据,然后就可以使用SMTP进行传送了,接收方也要使用MIME对接收到的ASCLL码数据进行逆转换。这样就可以得到包含有非ASCLL码数据的电子邮件。
为了实现这种转换,MIME增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。
定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变
实际上MIME不仅仅用于SMTP,也用于后来的同样面向ASCL L字符的HTTP
常用的邮件读取协议
邮局协议POP
非常简单,功能有限的邮件读取协议。用户只能下载并删除或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件
因特网邮件访问协议IMAP
功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IMAP是一个联机协议
POP3和IMAP4都采用基于TCP/IP连接的客户/服务器方式
基于万维网的电子邮件
举例说明 假设用户A和B都使用网易邮件服务器。这是用户A的电子邮件地址,这是用户B的电子邮件地址,用户A要给用户B发送邮件,用户A使用浏览器登录邮件服务器网站,撰写并发送邮件给用户B。用户B也使用浏览器登录邮件服务器网站,读取收到的邮件。用户A和B在发送和接收邮件时与服务器之间都使用的是HTTP协议,而不需要使用我们之前介绍的S MTP和POP3协议。HTTP协议是超文本传送协议。再来看另一种情况:假设用户A使用网易邮件服务器,用户C使用谷歌邮件服务器,用户A要给用户C发送邮件,用户A使用浏览器登录自己的邮件服务器网站,撰写并发送邮件给用户C,使用的是HTTP协议,用户的A的邮件服务器使用SMTP将邮件发送给用户C的邮件服务器,用户C也使用浏览器登录自己的邮件服务器网站,读取收到的邮件,使用的也是HTTP协议。
通过浏览器登录邮件服务万维网网站就可以撰写,收发,阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。
邮件服务器网站通常都提供非常强大的和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的文件,而不需要将邮件下载到本地进行管理。
6.7万维网
举例 我们在用户主机中使用浏览器,来访问万维网服务器,我们在浏览器的地址栏中,输入官方网站的域名,浏览器将发送请求报文给服务器,服务器收到请求报文后执行相关操作,然后给浏览器发回相应报文,浏览器解析并渲染相应报文中的内容,就可以看到页面。为了方便的访问在世界范围的文档
万维网WWW并非某种特殊的计算机网络。它是一个大规模的,联机式的信息储存所,是运行在因特网上的一个分布式应用。
万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网
浏览器最重要的部分是渲染引擎,也就是浏览器内核。负责对网页内容进行解析和显示
不同的浏览器的内核对网页内容的解析有所不同,因此同一网页在不同内核的浏览器里的显示效果可能不同
网页编写者需要在不同内核的浏览器中测试网页显示效果。
为了方便的访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网上任何种类资源的位置
URL的一般形式由以下四个部分组成:<协议>://<主机>:<端口>/<路径>
万维网文档
另存页面为 HTML是超文本标记语言的英文缩写词,使用多种标签来描述网页的结构和内容。 css层叠样式表,从审美的角度来描述网页的样式。 javascript是一种脚本语言,用来控制网页的行为 由浏览器内核负责解析和渲染。 HTML文档,用浏览器打开该HTML文档,网页,在HTML文档中,使用两个html标签来定义HTML文档的范围。在其内部使用两个head标签定义HTML文档的首部,使用两个body标签定义HTML文档的主体,首部中两个title标签之间的内容被渲染成网页的标题,两个P标签之间的内容被渲染成一个文本段落。 HTML使用多种标签来描述网页的结构和内容,在css文档中定义一些所需的样式对网页内容进行美化。
超文本传输协议HTTP
HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
使用用户主机来访问万维网服务器,可以看成是用户主机中的浏览器进程即客户进程与服务器中的服务器进程基于因特网的通信,浏览器进程首先发起与服务器进程的TCP连接,使用端口号80,基于这条已建立好的TCP连接,浏览器进程向服务器进程发送HTTP请求报文,服务器进程收到后,执行相应操作,然后给浏览器进程发回HTTP响应报文。
HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到相应后就立即关闭连接。
这是客户与服务器之间通过三报文握手进行TCP连接。在这三个报文中的最后一个报文的数据载荷部分携带有HTTP请求报文,服务器收到后给客户发回HTTP响应报文,这是一次请求和响应所耗费的时间,记为往返时间RTT,文档传输时延,可以看到请求一个万维网文档所需的时间为2RTT+文档的传输时延,
每请求一个文档就要有2RTT的开销。若一个网页上有很多引用对象,那么请求每一个对象都需要花费2RTT的时间
为了减少时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务大量客户的请求,这会使其负担很重
HTTP/1.1采用持续连接方式。在该方式下,万维网服务器在发送响应后,仍然保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象。而是只要这些文档都在同一个服务器上就行。
为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就会发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率
HTTP报文格式
HTTP请求报文第一行是请求行。由
HTTP是面向文本的,其报文中的每一个字段都是一些ASCLL码串,并且每个字段的长度都是不确定的
使用Cookie在服务器上记录用户信息
是对无状态的HTTP进行状态化的技术
原理
用户主机中的浏览器进程首先与万维网服务器中的服务器进程建立TCP连接,端口号80,当用户的浏览器进程初次向服务器进程发送HTTP请求报文时,服务器进程就会为其产生一个唯一的cookie识别码,并以此为索引在服务器的后端数据库中创建一个项目,用来记录用户访问该网站的各种信息,接着就会给浏览器进程发回HTTP响应报文,在响应报文中,包含有一个首部字段为setcookie的首行部,该字段的取值就是cookie识别码,当浏览器进程收到该响应报文后,就在一个特定的Cookie文件添加一行,记录该服务器的域名和cookie识别码,当用户再次使用该浏览器访问这个网站时,每发送一个HTTP请求报文,浏览器都会从cookie文件中取出该网站的cookie识别码,并放到HTTP请求报文的cookie首部行中。服务器根据cookie识别码就可以识别出该用户,并返回该用户的个性化网页。
万维网缓存与代理服务器
假设这是因特网上的某台万维网服务器,为了与万维网代理服务器的名称区分,我们简称该服务器为原始服务器,这是校园网中的某台万维网代理服务器,我们简称其为代理服务器。当校园网中的某台主机要访问因特网上的原始服务器时,它首先会向校园网中的代理服务器发送请求,若代理服务器中存放由所有请求的对象,则代理服务器会向该主机发回包含所请求对象的响应,若代理服务器中没有所请求的对象,则代理服务器会向因特网上的原始服务器发送请求。原始服务器将包含有所请求对象的响应发回给代理服务器,代理服务器将该响应存入web缓存,然后给主机发回该响应。大大减少了该链路上的通信量,因而大大减少访问因特网的时延。 假设原始服务器中的该文档已被更改,之后,校园网中的某台主机要请求的某台主机要请求该文档。他首先向校园网中的代理服务器发送请求,代理服务器找到该文档后,将其封装在响应报文中发回给主机。这样,主机所请求到的文档与原始服务器中的文档就不一致了,实际上,原始服务器通常会为每个相应的对象,设定一个修改时间字段和一个有效时期字段,当校园网中的某台主机要请求原始服务器中的该文档时,若代理服务器中的该文档未过期,则代理服务器将其封装在响应报文中发回给主机。若代理服务器中的该文档过期,则代理服务器会向因特网上的原始服务器发送请求。在请求报文中包含一个首部字段为ifmodifiedsince的首部行,带字段的取值就是该文档的修改日期。原始服务器根据该文档的修改日期,就可判断出代理服务器中存储的该文档是否与自己存储的该文档中一致,如果一致,则给代理服务器发送不包含实体主体的响应,状态码为304,短语为not modified,代理服务器重新更新该文档的有效日期,然后将该文档封装在响应报文中发回给主机,如果不一致,则给代理服务器发送封装有该文档的响应报文,这样代理就更新了该文档,然后将更新后的该文档封装在响应报文中发回给主机。
在万维网中还可以使用缓存机制以提高万维网的效率
万维网缓存又称为web缓存,可位于客户机,也可位于中间系统上的,WEB缓存又称为代理服务器。
web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源。