计算机网络
计算机网络
第一章 计算机网络概述
定义
计算机网络主要是由一些通用的,可编程的硬件互联而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或者视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
分类
- 交换方式:电路交换,分组交换,报文交换
- 使用者:公用网(因特网),专用网(军队,铁路,电力,银行)
- 传输介质:有线,无线
- 覆盖范围:广域网(WAN),城域网(MAN),局域网(LAN),个域网(PAN)、
- 拓朴结构:总线型,星型,环型,网状型
三种数据交换方式
电路交换
计算机之间的数据传输是突发式的,当使用电路交换来传送计算机数据时,其线路的传输效率一般都会很低,线路上真正用来传送数据的时间往往不到10%甚至1%,因此计算机通讯通常采用分组交换。
分组交换
优点:
- 没有建立连接和释放连接的过程
- 分组传输过程中逐段占用通信链路,有较高的通信线路利用率
- 交换节点可以为每一个分组独立选择转发路由,使得网络有很好的生存性
缺点:
三种交换方式的对比
计算机网络性能指标
速率
1 MBps / 8 = 1 Mbps
带宽
数据传输速率 = min[主机接口速率, 线路带宽,交换机或路由器的接口速率]
吞吐量
时延
时延是指数据从网络的一端传送到另一端所耗费的时间,也称为延迟或者迟延。数据可由一个或多个分组,甚至是一个比特构成
在不考虑排队时延和处理时延的情况
时延带宽积
时延带宽积 = 传播时延*带宽
往返时间
往返时间RTT是指通信双方双向交互一次所耗费的时间
卫星链路的往返时间较长
利用率
丢包率
丢包率是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率
分组丢失主要有以下两种情况:
- 分组在传输过程中出现误码,被传输路径中的节点交换机(例如路由器)或目的主机检测出误码而丢弃
- 节点交换机根据丢弃策略主动丢弃分组
丢包率可以反映网络的拥塞情况:
- 无拥塞时路径丢包率为0
- 轻度拥塞时路径丢包率为1%~4%
- 严重拥塞时路径丢包率为5%~15%
计算机网络体系结构
OSI标准失败的原因:
- 专家没有实际经验,完成标准时没有商业驱动力
- 协议实现过分复杂,运行效率很低
- 标准的制定周期太长,产品无法及时进入市场
- 层次划分不太合理,有些功能在多个层次中重复出现
计算机网络体系结构分层的必要性
“分层”可以将庞大复杂的问题转化为若干较小的局部问题
计算机网络体系结构分层思想举例
计算机网络体系结构中的专业术语
- 实体
实体是指任何可以发送或接收信息的硬件或软件进程
对等实体是指通信双方相同层次中的实体
协议:
协议是控制两个对等实体在“水平方向”进行“逻辑通信”的规则的集合
- 协议三要素:
- 语法:定义所交换信息的格式
- 语义:定义通信双方所要完成的操作
- 同步:定义通信双方的时序关系
- 协议三要素:
- 服务
在协议的控制下,两个对等实体在水平方向的逻辑通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。
协议是”水平“的,而服务是”垂直“的
实体看不见下层提供的服务,但并不知道实现该服务的具体协议,下层的协议对上层的实体是“透明“的。
在同一系统中相邻两层的实体交换信息的逻辑接口称为服务访问点SAP,它被用于区分不同的服务类型。帧的”类型“字段,IP数据报的”协议“字段,TCP保温段或UDP用户数据报的”端口号“字段都是SAP。
上层要使用下层所提供的服务,还必须通过与下层交换一些命令,这些命令被称为服务原语。
对等层次之间传送的数据包称为该层的协议数据单元(Protocol Data Unit,PDU)。同一系统内层与层之间交换的数据包称为服务数据单元(Service Data Unit,SDU)。
第二章 物理层
物理层接口特性
- 机械特性
- 形状和尺寸
- 引脚数目和排序
- 固定和锁定装置
- 电气特性
- 信号电压的范围
- 抗阻匹配的情况
- 传输速率
- 距离限制
- 功能特性
- 规定接口电缆的各条信号线的作用
- 过程特性
- 规定在信号线上传输比特流的一组操作过程,包括各信号间的时序关系
传输媒体
传输媒体是计算机网络设备之间的物理通路,也称为传输介质或传输媒介。传输媒体并不包含在计算机网络体系结构中(如果非要加上的话,应该还在物理层下面,属于第0层)。
传输媒体的分类
导向型传输媒体
- 同轴电缆
- 双绞线
- 光纤
光纤通信利用光脉冲在光纤中的传递来进行通信。由于可见光的频率非常高(约为10^8^MHz量级),因此一个光纤通信系统的传输带宽远大于目前其他各种传输媒体的带宽。
非导向型传输媒体
- 无线电波
- 微波
- 红外线
- 激光
- 可见光
传输方式
- 串行传输和并行传输
- 同步传输和异步传输
同步传输:
异步通信:
- 单向通信,双向交替通信和双向同时通信
编码和调制
编码和调制的基本概念
码元
在使用时间域的波形表示信号时,代表不同离散数值的基本波形称为码元。
常用编码方式
- 双极性不归零编码(编码效率高,但存在同步问题)
- 双极性归零编码(自同步,但编码效率低)
- 曼彻斯特编码(自同步,10Mb/s传统以太网,10BaseT以太网使用的是曼彻斯特编码)
- 差分曼彻斯特编码
基本的带通调制方法和混合调制方法
信道
造成信号失真的主要因素
码元的传输速率:传输速率越高,信号经过传输后的失真就越严重
信号的传输距离:传输距离越远,信号经过传输后的失真就越严重
噪声干扰:噪声干扰越大,信号经过传输后的失真就越严重
传输媒体的质量:传输媒体质量越差,信号经过传输后的失真就越严重
奈氏准则
理想低通信道的最高码元传输速率 = 2W Baud = 2 W 码元/秒
W:信道的频率带宽(单位为Hz)
Baud:波特,即码元/秒
- 使用奈氏准则给出的公式,就可以根据信道的频率带宽,计算出信道的最高码元传输速率
- 只要码元传输速率不超过根据奈氏准则计算出的上限,就可以避免码间串扰
- 奈式准则给出的是理想低通信道的最高码元传输速率,它和实际信道有较大的差别。因此,一个实际的信道所能传输的最高码元传输速率,要明显低于奈式准则给出的上限值
码元传输速率又称为波特率,调制速率,波形速率或符号速率
- 波特率与比特率有一定的关系:
- 当1个码元只携带1比特的信息量时,波特率(码元/秒)与比特率(比特/秒)在数值上是相等的
- 当1个码元只携带n比特的信息量时,波特率(码元/秒)转换成比特率(比特/秒)时,数值要乘以n
香农公式
带宽受限且有高斯白噪声干扰的信道的极限信息传输速率
- 信道的频率带宽W或信道中的信噪比S/N越大,信道的极限信息传输速率C就越高
- 实际信道不可能无限制地提高频率带宽W或信道中的信噪比S/N
- 实际信道中能够达到的信息传输速率,要比香农公式给出的极限传输速率低不少。这是因为在实际信道中,信号还要受到其他一些损伤,例如各种脉冲干扰和信号衰减等,这些因素在香农公式中并未考虑
信道复用
信道复用技术的基本原理
- 复用就是在一条传输媒体上同时传输多路用户的信号
- 当一条传输媒体的传输容量大于多条信道传输的总容量时,就可以通过复用技术,在这条传输媒体上建立多条通信信道,以便充分利用传输媒体的带宽
- 尽管实现信道复用会增加通信成本(需要复用器,分用器以及费用较高的大容量共享信道),但如果复用的信道数量较大,还是比较划算的
常见的信道复用技术
- 频分复用FDM
频分复用的所有用户同时占用不同的频带资源发送数据
- 时分复用TDM
时分复用的所有用户在不同的时间占用同样的频带
- 波分复用WDM
也即光的频分复用FDM。根据频分复用的设计思想,可在一根光纤上同时传输多个频率(波长)相近的光载波信号,实现基于光纤的频分复用技术。目前可以在一根光纤上复用80路或更多的光载波信号,因此,这种复用技术也称为密集波分复用DWDM。铺设光纤的工程耗资巨大,应该尽量在一根光缆中放入尽可能多的光纤,然后对每一根光纤使用密集波分复用技术。
- 码分复用CDM
CDMA将每个比特时间划分为m个更短的时间片,称为码片(Chip)。m的取值通常是64或128.
CDMA中的每个站点都被指派一个唯一的m比特码片序列(Chip Sequence):
某个站要发送比特1,则发送它自己的m比特码片序列;
某个站要发送比特0,则发送它自己的m比特码片序列的反码
如果有两个或多个站同时发送数据,则信道中的信号就是这些站各自所发送的一系列码片序列或码片序列反码的叠加。为了从信道中分离出每个站的信号,给每个站指派码分序列时,必须遵循以下规则:
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列
- 分配给每个站的码片序列必须相互正交,即各码片序列相应的码片向量之间的规格化内积为0
第三章 数据链路层
地位
链路,数据链路和帧
- 链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点
- 数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路
- 计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器包含了物理层和数据链路层这两层的功能
- 帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU
数据链路层的三个重要问题
- 封装成帧和透明传输
封装成帧:
透明传输:
- 差错检测
- 可靠传输
- 不可靠传输服务:直接丢弃有误码的帧
- 可靠传输服务:实现发送方发送什么,接收方最终都能正确收到
封装成帧
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。
- 帧的首部和尾部中包含有一些重要的控制信息
- 帧首部和尾部的作用之一就是帧定界
- 为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度
- 考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。例如,以太网的MTU为1500个字节。
透明传输
透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样
- 面向字节的物理链路使用字节填充的方法实现透明传输
- 面向比特的物理链路使用比特填充的方法实现透明传输
高级数据链路控制协议HDLC采用帧首部和帧尾部中的标志字段作为帧定界符,其值为01111110.HDLC为了实现“透明传输”,采用“零比特填充法”,即每五个连续比特1后面插入一个比特0
差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错):
- 比特1可能变成比特0
- 比特0可能变成比特1
- 在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate,BER)
- 提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零
- 使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
奇偶校验
- 奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数
- 偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数
- 在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码
- 在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,不可以检测出误码(漏检)
- 在实际使用时,奇偶校验又可以分为垂直奇偶校验,水平奇偶校验以及水平垂直奇偶校验
循环冗余校验
数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术
循环冗余校验CRC的基本思想:
- 收发双方约定豪一个生成多项式G(X)
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输
- 接受方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码
- 奇偶校验,循环冗余校验等差错检测技术,只能检测出传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
- 想要纠正传输中的差错,可以使用冗余信息更多的纠错码(如海明码)进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
- 循环冗余检验CRC具有很好的检错能力(漏检率极低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛用于数据链路层
可靠传输
使用差错检测技术,接收方的数据链路层就可以检测出帧在传输过程中时候产生了误码(比特差错)
- 有线链路的误码率比较低,并不要求数据链路层向其上层提供可靠传输服务
- 无线链路易受干扰,误码率较高,因此要求数据链路层必须向其上层提供可靠传输服务
- 可靠传输服务并不局限于数据链路层,其他各层均可选择实现可靠传输
- 可靠传输的实现比较复杂,开销较大,是否使用可靠传输取决于应用需求
停止-等待(Stop-and-Wait,SW)协议
- 使用超时重传机制后,就可以不适用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器超时前就尽快重传
- 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的特性,只需要1个比特需要即可,即序号0和序号1
- 为了让发送方能够判断所收到的确认分组时候是重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样
- 数据链路层一般不会出现确认分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给确认分组编号
- 给超时计时器设置的超时重传时间RTO应当仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT
- 在数据链路层,点对点的往返时间RTT比较固定,RTO就比较好设定
- 在传输层,由于端到端往返时间非常不确定,设置合适的超时重传时间RTO有时并不容易
- 停止-等待协议属于自动请求重传(Automatic Repeat reQuest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接受方请求发送方重传某个误码的数据分组
- 若出现超时重传,对于传送有用的数据信息来收,信道利用率还要降低
- 在往返时间RTT相对较大的情况下,为了提高信道利用率,收发双方不适合采用停止-等待协议,而可以选择使用回退N帧(GBN)协议或选择重传(SR)协议
回退N帧(Go-back-N,GBN)协议
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。在回退N帧协议的工作过程中,发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
- 在信道质量较差(容易出现误码)的情况下,回退N帧协议的信道利用率并不比停止-等待协议的信道利用率高
选择重传(Selective Repeat,SR)协议
与回退N帧协议不同,选择重传协议不采用累计确认,接收方需要对每一个正确接收的数据分组进行逐一确认,发送方仅重传未收到确认而超时的数据帧。
点对点协议PPP
概述
- 点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议
- 点对点协议PPP是因特网工程任务组(Internet Engineering Task Force,IETF)在1992年制定的。经过多次修订,目前PPP已成为因特网的正式标准
PPP的帧格式
PPP帧的透明传输
PPP的工作状态
共享式以太网
网络适配器
- 要将计算机连接到以太网,需要使用相应的网络适配器,网络适配器一般简称为“网卡”
- 在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I/O总线以并行传输方式进行
- 网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆,双绞线电缆,光纤)以串行方式进行的
- 网卡除要实现物理层和数据链路层功能,还要进行并行传输和串行传输的转换
- 为确保王阿库正常工作,还要下载相应的设备驱动程序,驱动程序负责驱动网卡发送和接收帧
MAC地址
- MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址,有时也被称为物理地址
- 一般情况下,普通用户计算机至少包含两块网卡:一块接入有线局域网的以太网卡,一块接入无线局域网的WIFI网卡
- 每块网卡都有一个全球唯一的MAC地址,交换机和路由器往往具有更多的网络接口,所以会拥有更多的MAC地址。严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
- 网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理
- 如果目的MAC地址是广播地址(FF-FF-FF-FF-FF-FF)则接受该帧
- 如果目的MAC地址与网卡上固化的全球单播MAC地址相同,则接受该帧
- 如果目的MAC地址是网卡支持的多播地址,则接受该帧
- 除上述的情况,丢弃该帧
- 网卡还可被设置为一种特殊的工作方式:混杂方式(Promiscuous Mode)。工作在混杂方式的网卡,只要收到共享媒体上传来的帧就会收下,而不管帧的目的MAC地址是什么
- 对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施
- 嗅探器(Sniffer)就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark),就可以作为一种非常有用的网络工具来学习和分析网络
CSMA/CD协议
在以太网的发展初期,人们普遍认为“无源的电缆线比有源器件可靠”,因此将多个站点连接在一条总线上来构建共享总线以太网。共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号也会沿着总线传播到总线上的其他各站点。
当某个站点在总线上发送帧时,总线资源就会被该站点独占。此时,如果总线上其他站点也要在总线上发送帧,就会产生信号碰撞。当两个火多个站点同时使用总线发送帧时,就会产生信号碰撞。
为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMA/CD,它是载波监听多址接入/碰撞检测(Carrier Sense Multiple Access Collision Detection)的英文缩写
- 载波监听检测到总线空闲,但总线不一定空闲
- 使用CSMA/CD协议的共享总线以太网上的各站点,只是尽量避免碰撞并在出现碰撞时做出退避后重发的处理,并不能完全避免碰撞
- 在使用CSMA/CD协议时,由于正在发送帧的站点必须“边发送帧边检测碰撞”,因此站点不可能同时进行发送和接收,也就是不可能进行全双工通信,而只能进行半双工通信(双向交替通信)
共享式以太网的争用期
- 使用CSMA/CD协议的共享总线以太网上的任意站点在发送帧的过程中都可能会遭遇碰撞
- 站点从发送帧开始,最多经过时长2t就可以检测出所发送的帧是否遭遇了碰撞。所以,共享总线以太网的端到端往返时间2t被称为争用期或碰撞窗口,它是一个非常重要的参数
- 站点从发送帧开始,经过争用期2t这段时间还没有检测到碰撞,就可以肯定这次发送不会产生碰撞
- 从争用期的概念可以看出,共享总线以太网上的每一个站点从发送帧开始,到之后的一小段时间内,都有可能遭遇碰撞,而这一小段时间的长短时不确定的,它取决于另一个发送帧的站点与本站点的距离,但不会超过总线的端到端往返传播时延,即一个争用期2t
- 总线的长度越长,单程端到端传播时延越大,网络中站点数量越多,发生碰撞的概率就越大,共享以太网的总线长度不能太长,接入的站点数量也不能太多
最小帧长 = 数据传输效率 * 争用期2t
共享式以太网的退避算法
——截断二进制指数规避算法
共享式以太网的信道利用率
使用集线器的共享式以太网
在物理层扩展以太网
- 随着使用双绞线和集线器的10BASE-T星型以太网成为以太网的主流类型,扩展网络覆盖范围就很少使用转发器了
- 10BASE-T星型以太网中每个站点到集线器的距离不能超过100米,因此两站点间的通信距离最大不能超过200m
- 10BASE-T星型以太网中,可使用光纤和一对光纤调制解调器来扩展站点与集线器之间的距离
- 这种扩展方法比较简单,所需要付出的代价是:为站点和集线器各增加一个用于电信号和光信号转换的光纤调制解调器,以及他们之间的一对通信光纤
- 信号在光纤中的衰减和失真很小,因此使用这种方法可以很简单地将站点与集线器之间的距离扩展到1000m以上
使用网桥在数据链路层扩展以太网
- 网桥工作在数据链路层(包含其下地物理层),因此网桥具备属于数据链路层范畴的相关能力。
- 网桥可以识别帧的结构
- 网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧
透明网桥
- 透明网桥通过自学习算法建立转发表
- 透明网桥中的“透明”,是指以太网中的各站点并不知道自己所发送的帧将会经过哪些网桥的转发,最终到达目的站点。也就是说,以太网中的各网桥对于各站点而言是看不见的。
- 透明网桥的标准是IEEE 802.1D,它通过一种自学习算法基于以太网中各站点之间的的相互通信逐步建立起自己的转发表
- 网桥收到震后进行登记(自学习),登记的内容为帧的源MAC地址和进入网桥的接口号
- 网桥根据帧的目的MAC地址和网桥的转发表对帧进行转发,包含以下三种情况:
- 明确转发:网桥知道应当从哪个接口转发帧
- 盲目转发:网桥不知道应当从哪个接口转发帧,只能将其通过除进入网桥的接口外的其他所有接口转发
- 丢弃:网桥知道不应该转发该帧,将其丢弃
- 如果网桥收到一个有误码的帧,则直接丢弃
- 如果网桥收到一个无误码的广播帧,则不用进行查表,而是直接从除接收该广播帧的接口的其他接口转发该广播帧
- 转发表中的每条记录都有其有效时间,到期自动删除。这是因为各站点的MAC地址与网桥接口的对应关系并不是永久性的,例如某个站点更换了网卡,其MAC地址就会改变
透明网桥的生成树协议STP
- 为了提高以太网的可靠性,有时需要在两个以太网之间使用多个透明网桥来提供冗余链路
- 在增加荣誉链路提高以太网可靠性的同时,却给网络引入了环路
- 为了避免广播帧在环路中兜圈,透明网桥使用生成树协议(Spanning Tree Protocol,STP),可以在增加冗余链路提高网络可靠性的同时,又避免环路带来的问题
- 不管网桥之间连接成了怎样复杂的带环拓扑,网桥之间通过交互网桥协议单元,罩住原网络拓扑地一个连通子集(生成树),在这个子集里整个连通的网络中不存在环路
交换式以太网
- 网桥的接口数量很少,通常只有2-4个,一般只用来连接不同的网段
- 仅使用交换机(而不使用集线器)的以太网就是交换式以太网
以太网交换机
以太网交换机本质上就是一个多接口的网桥:
- 交换机自学习和转发帧的流程与网桥是相同的
- 另外,交换机也使用生成树协议STP,来产生能够连通全网但不产生环路的通信路径
交换机的每个接口可以连接计算机,也可以连接集线器或另一个交换机
- 当交换机的接口与计算机或交换机连接时,可以工作在全双工方式,并能在自身内部同时连通多对接口,这样每一对相互通信的计算机就能无碰撞地传输数据
- 当交换机地接口连接的是集线器时,该接口就只能使用CSMA/CD协议并只能工作在半双工方式
一般的交换机都采用“存储转发”方式,为了减小交换机的转发时延,某些交换机采用了直通交换方式,该方式会在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件鹅交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理
- 直通交换的时延非常小
- 直通交换不检查差错就直接将帧转发出去,有可能会将一些无效帧转发给其他主机
以太网的MAC帧格式
接收方可能收到无效MAC帧包括以下几种:
- MAC帧的长度不是整数个字节
- 通过MAC帧的FCS字段的值检测出帧有误码
- MAC帧的长度不在64-1518字节之间
接收方收到无效的MAC帧时,就简单的丢弃,以太网的数据链路层没有重传机制
虚拟局域网VLAN
VLAN是一种将局域网内的站点划分成与物理位置无关的逻辑组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求。使得属于同一VLAN的站点之间可以直接进行通信,而不同VLAN中的站点之间不能直接通信
虚拟局域网VLAN的实现机制
虚拟局域网VLAN最常见的实现技术就是基于以太网交换机的接口来实现VLAN,而这需要以太网交换机能够实现以下两个功能:
- 能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧
- 交换机的各接口可以支持不同的接口类型,不同的接口类型的接口对帧的处理方式有所不同
802.1Q帧一般不由用户主机处理,而是以太网交换机来处理:
- 当交换机收到普通的以太网MAC帧时,会给其插入4字节的VLAN标签使之成为802.1Q帧,该处理简称”打标签“
- 当交换机转发802.1Q帧时,可能会删除其4字节的VLAN标签使之成为普通的以太网MAC帧,该处理简称为**“去标签”**。交换机转发802.1Q帧时也有可能不进行“去标签”处理,是否进行“去标签”处理取决于交换机的接口类型。
第四章 网络层
网络层概述
- 网络层的主要任务是实现网络互联,进而实现数据包在各网络之间的传输
- 要实现网络层的功能,需要解决以下的问题:
- 网络层向运输层提供怎样的服务(可靠 or 不可靠)
- 网络层寻址问题
- 路由选择问题
- 因特网是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈
- 由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常被称为网际层
网络层提供的两种服务
对比方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须建立网络层连接 | 不需要建立网络层连接 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组可走不同的路由 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按照发送的顺序到达终点 | 到达终点时不一定按发送顺序 |
服务质量保证 | 可以将通信资源提前分配给每一个虚电路,容易实现 | 很难实现 |
IPv4
IPv4地址概述
- IPv4地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符
- 然而32比特的IPv4地址不方便阅读,记录以及输入等,因此IPv4地址采用点分十进制表示方法
分类编址的IPv4地址
- 根据地址左起的第一个十进制数的值,可以判断出网络类别(小于127的为A类,128-191的为B类,192-223的为C类)
划分子网的IPv4地址
- 可以从主机号部分借用一部分比特作为子网号
- 32比特的子网掩码可以表面分类IP地址的主机号部分被借用了几个比特作为子网号
- 子网掩码使用连续的比特1来对应网络号和子网号
- 子网掩码使用连续的比特0来对应主机号
- 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址
例如:
- 给一个分类的IP地址和其相应的子网掩码,就可直到子网划分的细节
- 划分出的子网数量
- 每个子网可分配的IP地址数量
- 每个子网的网络地址和广播地址
- 每个子网可分配的最小和最大地址
- 默认的子网掩码是指在未划分子网的情况下使用的子网掩码
- A类:255.0.0.0
- B类:255.255.0.0
- C类:255.255.255.0
无分类编址的IPv4地址
为了解决IP地址紧张的问题,因特网工程任务组IETF提出了采用无分类编址的方法来解决IP地址紧张的问题:IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing):
- CIDR消除了传统的A类,B类和C类地址,以及划分子网的概念
- CIDR可以更加有效地分配IPv4的地址空间
- CIDR使用“斜线记法”,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量
- CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块”
- 只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节:
- 地址块的最小地址
- 地址块的最大地址
- 地址块中的地址数量
- 地址块聚合某类网络(A类,B类或C类)的数量
- 地址掩码(也可继续称之为子网掩码)
- 路由聚合(构造超网)的方法是找共同前缀
- 网络前缀越长,地址块越小,路由越具体
- 若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那部分,这成为最长前缀匹配,因为这样的路由更具体
IPv4地址的应用规划
定长的子网掩码FLSM | 变长的子网掩码VLSM |
---|---|
使用同一个子网掩码来划分子网 | 使用不同的子网掩码来划分子网 |
子网划分方式不灵活:只能划分出2^n^个子网(n是从主机号部分借用的用来作为子网号的比特数量) | 子网划分方式灵活:可以按需分配 |
每个子网锁分配的IP地址数量相同,容易造成IP地址浪费 | 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费 |
eg:
IP数据报的发送和转发过程
- 主机发送IP数据报
判断目的主机是否与自己在同一个网络(将自己的ip地址与子网掩码相与,得到自己的网络地址;将目的ip地址也与自己的子网掩码相与,得到目的网络地址)
- 若在同一个网络(即网络地址相同),则属于直接交付
- 若不在同一个网络(即网络地址不相同),则属于间接交付,传输给主机所在的网络的默认网关(路由器),由默认网关帮忙转发
路由器转发IP数据报
路由器会隔离广播域,能抑制广播风暴
检查IP数据报首部是否出错
若出错,则直接丢弃该IP数据报并通告源主机
若没有出错,则进行转发
根据IP数据报的目的地址在路由表中查找匹配的条目
若找到匹配的条目,则转发给条目中指示的下一跳
若找不到,则丢弃该IP数据报并通告源主机
静态路由配置及其可能产生的路由环路问题
- 静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表
- 这种方式不能及时适应网络状态(流量,拓扑等)的变化
- 一般只能在小规模网络中采用
- 使用静态路由配置可能出现以下导致产生路由环路的错误
- 配置错误
- 聚合了不存在的网络
- 网络故障
- 路由条目的类型
- 直连网络
- 静态路由(人工配置)
- 动态路由(路由选择协议)
- 特殊的静态路由条目
- 默认路由(目的网络为0.0.0.0,地址掩码为0.0.0.0)
- 特定主机路由(目的网络为特定主机的IP地址,地址掩码为255.255.255.255)
- 黑洞路由(吓一跳为null0)
路由选择协议概述
静态路由选择 | 动态路由选择 |
---|---|
由人工配置的网络路由,默认路由,特定主机路由,黑洞路由等都属于静态路由 | 路由器通过路由选择协议自动获取路由信息 |
这种人工配置方式简单,开销小,但不能及时适应网络状态(流量,拓扑等)的变化 | 比较复杂,开销比较大,能较好地适应网络状态的变化 |
一般只在小规模网络中采用 | 适用于大规模网络 |
因特网采用分层次地路由选择协议
- 内部网关协议IGP
- 路由信息协议RIP
- 内部网关路由协议IGRP(已被EIGRP取代)
- RIP和IGRP基于距离向量
- 增强型内部网关路由协议EIGRP(结合距离向量和链路状态)
- 开放式最短路径优先OSPF
- 中间系统到中间系统IS-IS
- OSPF和IS-IS基于链路状态
- 外部网关协议EGP
- 边界网关协议BGP
路由信息协议RIP的基本工作原理
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录,这是一组距离,称为“距离向量”。
RIP使用跳数作为度量来衡量到达目的网络的距离
- 路由器到直连网络的距离定义为1
- 路由器到非直连网络的距离定义为所经过的路由器数加1
- 允许一条路径最多只能包含15个路由器,“距离”等于16时相当于不可达。因此,RIP只适用于小型互联网
RIP认为好的路由就是“距离短”的路由,也就是所通过的路由器数量最少的路由,而不管链路的带宽大小。当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡
RIP包含以下三个要点:
- 和谁交换信息:仅和相邻路由器交换信息
- 交换什么信息:自己的路由表
- 何时交换信息:周期性交换(例如30s)
RIP的基本工作过程
- 路由器刚开始工作时,只知道自己到直连网络的距离为1
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息
- 若干次交换和更新后,每个路由器都知道到达本AS内各网络地最短距离和下一跳地址,称为收敛
RIP的路由条目更新规则
发现了新的网络,添加
到达目的网络,相同下一跳,最新消息,更新
到达目的网络,不同下一跳,新路由优势,更新
到达目的网络,不同下一跳,新路由劣势,不更新
到达目的网络,不同吓一跳,等价负载均衡
RIP存在“坏消息传播得慢”的问题,这个问题又称路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题,可以采取多种措施减少出现该问题的概率或减小该问题带来的危害:
- 限制最大路径距离为15(16表示不可达)
- 当路由表发生变化时就立即发送更新报文(即“触发更新”),而不是周期性发送
- 让路由表记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)
开放最短路径优先OSPF的基本工作原理
OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。OSPF不限制网络规模,更行效率高,收敛速度快
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(代价用来表示费用,距离,时延,带宽,等等,这些都由网络管理人员来决定
使用OSPF的每个路由器都会产生链路状态通告LSA,LSA中包含以下内容:1.直连网络的链路状态信息;2. 邻居路由器的链路状态信息
LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表
OSPF有以下五种分组类型:
- 问候分组
- 数据库描述分组
- 链路状态请求分组
- 链路状态更新分组
- 链路状态确认分组
OSPF在多点接入网络中路由器邻居关系的建立
- 选举指定路由器DR和备用的指定路由器BDR
- 所有的非DR/BDR只与DR/BDR建立邻居关系
- 非DR/BDR之间通过DR/BDR交换信息
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area),划分区域的好处就是把利用洪泛法交换链路状体信息的范围局限于每一个区域而不是整个自治系统,这就减少了整个网络上的通信量
边界网关协议BGP的基本工作原理
外部网关协议EGP(例如边界网关协议BGP)
- 在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的
- 自治系统之间的路由选择必须考虑相关的策略(政治,经济,安全等)
- BGP只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由
BGP
BGP适用于多级结构的因特网。在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179:
- 在此TCP连接上交换BGP报文以建立BGP会话
- 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站
BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。BGP发言人会交换网络可达性的信息,在交换之后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由,也就是构造出树形结构,不存在回路的自治系统连通图。
BGP-4有以下4种报文:
- OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化
- UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由
- KEEPALIVE(保洁)报文:用来周期性地证实邻站的连通性
- NOTIFICATION(通知)报文:用来发送检测到的差错
IPv4数据报的首部格式
- 版本:4bit,表示IP协议的版本。常用的有IPv4和IPv6
- 首部长度:4bit,表示IP数据报首部的长度,该字段的取值以4字节为单位
- 最小的十进制取值为5,表示IP数据报首部只有20字节固定部分
- 最大的十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分
- 可选字段:长度从1个字节到40个字节不等。用来支持排错,测量及安全等措施,但实际上很少会用到
- 填充字段:确保首部长度为4字节的整数倍,用0填充
- 区分服务:8bit,用来获得更好的服务,只有在使用区分服务的时候,该字段才起作用,一般不使用
- 总长度:16bit,表示IP数据报的总长度(首部+数据载荷)。最大取值为65535字节
- 标识:16bit,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段
- 标志:3bit,各比特含义如下:
- DF位:是否允许分片
- MF位:后面是否有分片
- 保留位:必须为0
- 片偏移:13bit,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位,片偏移以8个字节为单位
- 生存时间TTL:8bit,表示IP数据报的生存时间。以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0则转发,否则就丢弃。IP数据报每经过一个路由器,路由器就要重新计算首部检验和,因为某些字段(生存时间,标志,片偏移等)的取值可能发生变化
- 协议:8bit,指明IPv4数据报的数据部分是何种协议数据单元,常用的一些协议和相应的协议字段值如下:
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
- 首部检测和:16bit,用来检测首部在传输过程中是否出现差错,比CRC检验码简单,称为因特网检验和。由于IP层本身并不提供可靠传输的服务,而且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快地转发IP数据报
- 源IP地址和目的IP地址:各32bit,用来填写发送该IP数据报地源主机地IP地址和接收该IP数据报的目的主机的IP地址
网络控制报文协议ICMP
主机或路由器使用ICMP来发送差错报告报文和询问报文,ICMP报文被封装在IP数据报中发送
ICMP差错报告报文共有以下5种:
终点不可达:当IP数据包无法被发送给目的地址时
源点抑制:当路由器出现的网络拥堵情况时
时间超过:当TTL的值为0时会被丢弃时
参数问题:当发现首部在传输过程中出现了误码
改变路由(重定向):当路由器发现发送端主机使用的不是最优的路径发送数据时,返回的消息中还会包含最适合的路由信息和数据源
以下情况不应发送ICMP差错报告报文:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
常用的ICMP询问报文有以下两种:
- 回送请求和回答
- 时间戳请求和回答
虚拟专用网VPN与网络地址转换NAT
- 虚拟专用网VPN
- 利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网
- 同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN
- VPN要保证传输数据的安全性,会将原始的内部数据报进行加密,然后再将其封装成为在因特网上发送到外部数据报
- 有时一个机构的VPN需要有默写外部机构参加进来,这样的VPN就称为外联网VPN
- 在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源,这种VPN称为远程接入VPN
- 网络地址转换NAT
- 虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的,在因特网上使用的公有地址
- NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源
- 由于绝大多数的网络应用都是使用运输层协议的TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址和端口号转换NAPT
- 对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,再通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题
- 由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保证
第五章 运输层
运输层概述
物理层,数据链路层以及网络层解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP。
运输层端口号,复用与分用的概念
TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程,端口号使用16比特表示,范围为0-65535
- 熟知端口号:0-1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议。例如:FTP使用21/20,HTTP使用80,DNS使用53
- 登记端口号:1024-49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP 微软远程桌面使用的端口是3389
- 短暂端口号:49152-65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用
端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有任何联系的
UDP和TCP的对比
用户数据报协议UDP | 传输控制协议TCP |
---|---|
无连接 | 面向连接 |
支持一对一,一对多,多对一和多对多交互通信 | 每一条TCP连接只能有两个端点EP,只能是一对一通信 |
对应用层交付的报文直接打包 | 面向字节流 |
尽最大努力交付,也就是不可靠;不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
TCP
TCP的流量控制
一般来说,我们总是希望数据传输得更快一些,如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制:
- TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小
- TCP发送方收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文
TCP的拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞。(在计算机网络中的链路容量,即宽带,交换结点中的缓存和处理机等,都是网络的资源)
若出现拥塞而不进行控制,整个网络的吞吐量将随入负荷的增大而下降
发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化
- 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些。
- 判断出现网络拥塞的依据:没有按照收到应当到达的确认报文(即发生超时重传)
维护一个慢开始门限ssthresh状态变量:
- 当cwnd < ssthresh时,使用慢开始算法
- 当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法
TCP超时重传时间的选择
使用下式计算超时重传时间RTO
RTO = RTTS+ 4 * RTTD
- 加权平均往返时间RTT
S:
RTTS1 = RTT1
新的RTTS = (1 - α)* 旧的RTTS + α * 新的RTTS ( 0 <= α < 1)
α值为1/8,即0.125
- RTT偏差的加权平均RTT
D
RTTD1 = RTT1 / 2
新的RTTD = ( 1 - β)* 旧的RTTD + β * |RTTS - 新的RTT样本| (0 <= β < 1)
β值为1/4,即0.25
当出现超时重传时,新RTO = 2 * 旧的RTO
TCP可靠传输的实现
- TCP基于以字节为单位的滑动窗口来实现可靠传输
- 发送方在未收到接受反对个确认时,可将发送窗口内还未发送的数据全部发送出去
- 接收方只接收序号落入发送窗口内的数据
- 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大
- 网络传送窗口值需要经历一定的时间滞后,并且整个时间还是不确定的
- 发送方还可能根据网络当时的拥塞情况适当减少自己的发送窗口尺寸
- 对于不按序到达的数据应如何处理,TCP并无明确规定
- 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据
- TCP通常对不按序到达的数据是先临时存放咋接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程
- TCP要求接收方必须有累计确认和捎带确认机制,这样可以减少传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上
- 接收方不应该过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。TCP标准规定,确认推迟的时间不应超过0.5秒,若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认
- 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据
- TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。
TCP的运输连接管理
TCP的连接建立
TCP的连接建立要解决以下三个问题:
- 使TCP双方能够确知对方的存在
- 使TCP双方能够协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 使TCP双方能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配
TCP的连接释放
当客户端出现故障的时候,服务端如何发现:
- TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(2h定时)
- 若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就像TCP客户进程发送一个探测报文段,以后则每隔75秒种发送一次。若一连发送10个探测报文段后仍无TCP客户进程的相应,TCP服务器进程就认为TCP客户进程所在主机出现了故障,接着就关闭这个连接
TCP报文段的首部格式
TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送
- 一个TCP报文段由首部和数据载荷两部分构成
- TCP的全部功能都体现在它首部中各字段的作用
- 源端口:16bit,写入源端口号,用来标识发送该TCP报文段的应用进程
- 目的端口:16bit,写入目的端口号,用来标识接收该TCP报文段的应用进程
- 序号:32bit,序号增加到最后一个后,下一个序号就又回到0,指出本TCP报文段数据载荷的第一个字节的序号
- 确认号:32bit,确认号增加到最后一个后,下一个确认号就又回到0,指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接受序号为n的数据
- 数据偏移:4bit,并以4字节为单位,用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远,实际上指出了TCP报文段的首部长度(固定长度为20字节,最大长度为69字节)
- 保留:6bit,保留为今后使用,但目前应置为0
- 紧急标志位URG:取值为1时紧急指针有效;取值为0时紧急指针字段无效
- 确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。在连接建立后所有传送的TCP报文段都必须把ACK置1
- 推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付
- 复位标志位RST:用来复位TCP连接,当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接
- 同步标志位SYN:在TCP连接建立时用来同步序号
- 终止标志位FIN:用来释放TCP连接
- 窗口:16bit,指出发送本报文段的一方的接收窗口,窗口值作为接收方让发送方设置其发送窗口的依据,这是以接收方的接受能力来控制发送方的发送能力,称为流量控制
- 校验和:16bit,检查范围包括TCP报文段的首部和数据载荷两部分,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部
- 紧急指针:16bit,用来指明紧急数据的长度。当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立即封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据
第六章 应用层
应用层概述
应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的
客户/服务器方式(C/S方式)和对等方式(P2P方式)
动态主机配置协议DHCP
动态主机配置协议DHCP提供了一种机制,称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息而不用手动参与
DHCP主要使用以下报文来实现其功能:
- DHCP DISCOVER:DHCP发现报文
- DHCP OFFER:DHCP提供报文
- DHCP REQUEST:DHCP请求报文
- DHCP ACK:DHCP确认报文
- DHCP NACK:DHCP否认报文
- DHCP RELEASE:DHCP释放报文
DHCP报文在运输层使用UDP协议封装
- DHCP客户使用的UDP端口号为68
- DHCP服务器使用的UDP端口号为67
DHCP客户在未获取到IP地址时使用地址0.0.0.0
在每一个网络上都设置一个DHCP服务器会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中级代理(通常是一台路由器),它配置了DHCP服务器的IP地址信息,作为各网络中计算机于DHCP服务器的桥梁
域名系统DNS
域名系统DNS是因特网使用的命名系统,用来把便于人类记忆的具有特定含义的主机名,转化为便于机器处理的IP地址。域名和IP地址的映射关系必须保存在域名服务器中,供所有其他应用查询。DNS使用分布在各地的域名服务器来实现域名到IP地址的转换
因特网采用层次树状结构的域名结构
- 根DNS服务器(.)
- 顶级域DNS服务器(.com)
- 权威DNS服务器(server.com)
- 本地域名服务器
域名解析的过程使用两种域名查询方式:
- 递归查询
- 迭代查询
为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器和主机中广泛地使用了高速缓存。DNS报文使用运输层的UDP协议进行封装,运输层端口号为53
文件传送协议FTP
文件传送协议FTP是因特网上使用得最广泛得文件传送协议
- FTP提供交互式访问,允许客户指明文件的类型与格式,并允许文件具有存取权限
- FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件
FTP客户和服务器之间要建立以下两个并行的TCP连接:
- 控制连接,在整个会话期间一直保持打开,用于传送FTP相关控制命令
- 数据连接,用于文件传输,在每次文件传输时才建立,传输结束就关闭
- 默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。但是,是否使用TCP 20端口建立数据连接与传输模式有关,主动方式使用TCP 20端口,被动方式由服务器和客户端自行协商决定
电子邮件
电子邮件采用C/S。三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件
- 邮件服务器是电子邮件系统的基础设施。因特网上所有的ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱
- 协议包括邮件发送协议(SMTP)和邮件读取协议(POP3)
常用的邮件发送协议是简单邮件传送协议SMTP
- 基于TCP连接,端口号为25
- 只能传送ASCII码文本
- 用于用户代理向邮件服务器发送邮件以及邮件服务器之间的邮件发送
为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME
常用的邮件读取协议有以下两个:
- 邮局协议POP3:非常简单,功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件
- 因特网邮件访问协议IMAP:功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IMAP是一个联机协议
- POP3和IMAP4都采用基于TCP连接的C/S。POP3使用端口110,IMAP4使用端口143
基于万维网的电子邮件
- 通过浏览器登录邮件服务器万维网网站就可以撰写,收发,阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器
- 这种工作模式在用户浏览器与邮件服务器网站之间使用HTTP协议,而邮件服务器之间使用SMTP协议
万维网WWW
万维网WWW是一个大规模的,联机式的信息储藏所,是运行在因特网上的一个分布式应用
浏览器最重要的部分是渲染引擎,也就是浏览器内核,负责对网页内容进行解析和显示
万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置。其一般形式为:<协议>://<主机>:<端口>/<路径>
万维网文档:
- 超文本标志语言HTML,使用多种”标签“来描述网页的结构和内容
- 层叠样式表CSS,从审美角度来描述网页的样式
- 脚本语言JavaScript,控制网页的行为
超文本传输协议HTTP定义了浏览器(也就是万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器
- HTTP/1.0采用非持续连接方式,每次浏览器要请求一个文件都要与服务器建立TCP连接(80端口),当收到响应后就立即关闭连接
- HTTP/1.1采用持续连接方式,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和相应报文。为了进一步提高效率,还可采用流水线方式,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文
HTTP有两类报文:请求报文和相应报文。报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的
Cookie提供了一种机制使得万维网服务器能够记住用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术
在万维网中还可以使用缓存机制以提高万维网的效率。万维网缓存又称为Web缓存,可位于客户机,也可位于中间系统上,位于中间系统上的Web缓存又称为代理服务器