【计算机网络】计算机网络基础知识笔记
相关视频——计算机网络微课堂(有字幕无背景音乐版)
前言
因特网概述
网络、互联(连)网和因特网
- 网络是由若干结点和连接这些结点的链路组成的。
- 多个网络还可以通过路由器互联起来,这样就构成了一个范围更大的网络,即互联网。因此,互联网是网络的网络。
- 因特网是世界上最大的互连网络。
internet与Internet
- interne互联网是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。
- Internet因特网则是一个专用名词,它指当前全球最大的、开放的、由众多网咯相互连接而成的特定计算机网络,它采用TCP/IP协议族作为通信的规则,前身是美国的ARPANET。
因特网发展的三个阶段
因特网服务提供者ISP
Internet Service Provider
基于ISP的三层结构的因特网
因特网的标准化工作
面向公众。
因特网协会ISOC。
因特网的组成
- 边缘部分
由所有连接在因特网上的主机组成,这部分是用户直接使用的,用来通信(传送数据、音频或视频)和资源共享。
- 核心部分
由大量网络和连接这些网络的路由器组成。这部分是边缘部分提供服务的(提供连通性和交换性)。
三种交换方式
电路交换
电路交换Circuit Switching
- 电话交换机接通电话线的方式称为电路交换。
- 从通信资源的分配角度来看,交换(Switching)就是按照某种方式动态地分配传输线路的资源。
- 电路交换的三个步骤:
- 建立连接(分配通信资源)
- 通话(一直占用通信资源)
- 释放连接(归还通信资源)
电路交换示意图:
当使用电路交换来传送计算机数据时,其线路的传输效率往往很低。
分组交换Pactet Switching
表示一整块的数据称为报文。
- 发送方-构造分组-发送分组
- 路由器-缓存分组-转发分组(查表转发)
- 接收方-接收分组-还原报文
报文交换过时,不做讲解。
对比
计算机网络的定义和分类
计算机网络的定义
没有公认的唯一定义。
计算机网路最简单的定义是:一些相互连接的、自治的计算机的集合。
互连:是指计算机之间可以通过有线或无线的方式进行数据通信。
自治:是指独立的计算机,它有自己的硬件和软件,可以单独运行使用。
集合:是指至少需要两台计算机。
计算机网络较好的定义是:计算机网络主要是由一些,通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
计算机网络的分类
按交换技术分类:
- 电路交换网络
- 报文交换网络
- 分组交换网络
按使用者分类:
- 公用网
- 专用网
按传输介质分类:
- 有线网络
- 无限网络
按覆盖范围分类:
- 广域网WAN
- 城域网MAN
- 局域网LAN
- 个域网PAN
按拓扑结构分类:
- 总线型网络
- 星型网络
- 环型网络
- 网状型网络
计算机网络的性能指标
- 速率
- 带宽
- 吞吐量
- 吞吐量表示在单位时间内容通过某个网络(或信道、接口)的数据量。
- 吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。
- 吞吐量受网络的带宽或额定速率的限制。
- 时延
完成一次通信在路上各个环节所花费的时间。
- 时延带宽积
- 往返时间
-
利用率
- 信道利用率:用来表示某信道有百分之几的时间是被利用的(有数据通过)。
- 网络利用率:全网络的信道利用率的加权平均。
-
丢包率
丢包率即分组丢失了率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率。
可以分为接口丢包率、结点丢包率、链路丢包率、路径丢包率、网络丢包率等。
丢包率反映了网络的拥塞情况。
计算机网络体系结构
常见的计算机网络体系结构
计算机网络体系结构分层的必要性
计算机网络体系结构分层思想举例
计算机网络体系结构中的准用术语
来源于OSI七层网络结构,也使用与TCP/IP的四层体系结构和五层原理体系结构。
-
实体:任何可发送或接收信息的硬件或软件进程。
-
对等实体:收发双方相同层次中的实体。
- 协议:控制两个对等实体进行逻辑通信规则的集合。
之所以称为逻辑通信,是因为真是不存在,提出来是为了方便我们研究其中的某一层而不受其他层干扰。
- 协议的三个要素
- 语法:定义所交换信息的格式。(哪些字段,由哪些数据构成)
- 语义:定义收发双方所要完成的操作。
- 同步:定义收发双方的时序关系。
服务:
- 在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务。
- 要实现本层协议,还需要使用下面一层所提供的服务。
- 协议是"水平的",服务是"垂直的"。
- 实体看得见相邻下层提供的服务,但并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实现是"透明"的。
服务访问点:在同一系统中相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型。
- 数据链路层的服务区分那个问点为帧的"类型"字段。
- 网络层的服务访问点为IP数据报首部中的"协议字段"。
- 运输层的服务访问点为"端口号"。
协议数据单元PDU:对等层次之间传送的数据包称为该层的协议数据单元。(详情如下图所示)
服务数据单元SDU:同一系统内,层与层之间交换的数据包称为服务数据单元。
多个SDU可以合成为一个PDU,一个SDU也可以划分为几个PDU。
物理层(需要计算)
物理层的基本概念
- 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。
- 物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。
- 物理层协议的主要任务
- 机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置。
- 电气特性:指明在接口电缆的各条线上出现的电压的范围。
- 功能特性:指明某条线上出现的某一电平的电压表示何种意义。
- 过程特性:指明对于不同功能的各种可能事件的出现顺序。
物理层下面的传输媒体
传输方式
编码与调制
- 码元:(就是构成信号的一段波形)在使用时间域的波形表示数字信号时,代表不同离散数值的基本波形。
常用编码
基本调制方法
使用基本调制方法,1个码元只能包含有一个比特信息。
混合调制
信道的极限容量
失真因素
- 码元传输速率
- 信号传输距离
- 噪声干扰
- 传输媒体质量
奈氏准则:在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的。
理想低通道的最高码元传输速率=2W Baud = 2W码元/秒
理想带通信道的最高码元传输速率= W Baud = W 码元/秒
W:信道带宽(单位为Hz)
Baud: 波特,即码元/秒
-
码元传输速率又称为波特率、调制速率、波形速率或符号速率。它与比特率有一定关系:
- 当1个码元只携带1比特的信息时,则波特率(码元/秒)与比特率(比特/秒)在数值上是相等的;
- 当1个码元携带n比特的信息量时,则波特率转换成比特率时,数值要乘以n。
-
要提高信息传输速率(比特率),就必须设法使每个码元能携带更多个比特的信息量。这需要才用多元制。
-
实际的信道所能传输的最高码元速率,要明显低于奈氏准则给出的这个上限数值。
香农公式:带宽受限且有高斯白噪声干扰的信道的极限信息传输速率。
- 在信道带宽一定的情况下,根据奈氏准则和香农同时,先要提高信息的传输速率就必须采用多元制(更好的调制方法)和努力提高信道中的信噪比。
- 自从香农公式发表后,各种新的信号处理和调制方法就不断出现,其目的都是为了尽可能地接近香农公式给出的传输速率极限。
数据链路层
数据链路层概述
数据链路层在网络体系结构中所处的地位
- 链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
- 数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层的三个重要问题
- 封装成帧
- 差错检测
- 可靠传输:尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就成为可靠传输。
封装成帧
-
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头和帧尾中包含有重要的控制信息。
- 帧头和帧尾的作用之一就是帧定界。
- 透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
- 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
- 面向比特的物理链路层使用比特填充的方法实现透明传输。
- 为了提高帧的传输效率,应当使帧的数据的长度尽可能大些。
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分长度上限,即最大传送单元MTU(Maximum Transfer Unit)。
差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变为0,0可能变为1.这称为比特差错。
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
- 奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1"的个数为奇数(奇校验)或偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码。
- 如果有偶数个位发生误码,则奇偶性不会发生变化,不能检查出误码(漏检);
- 循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x);
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
- 接口双方通过生成多项式来计算收到的数据是否产生了误码。
- 示例:
- 检测码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 想要纠正传输中的差错,可以使用冗余信息更多的纠错码来进行向前纠错。但纠错码的开销比较大,在计算机网络中较少使用。
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常有易于用硬件实现,因此被广泛应用于数据链路层。
- 在计算机网络中通常采用我们后续课程中将要讨论的检测重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于 数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
可靠传输的基本概念
- 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。
- 数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。其实出现了误码,可靠传输的问题由其上层处理。
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
- 比特差错只是传输差错中的一种。
- 从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
- 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。
- 可靠传输服务并不仅局限于数据链路层,其它各层均可选择实现可靠传输。
- 可靠传输的实现比较复杂,开销也比较大,是否使用取决于应用需求。
三种可靠的传输机制
- 停止-等待协议SW
- 回退N帧协议GBN
- 选择重传协议SR
这三种可靠传输机制的基本原理并不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中。
可靠传输的实现机制——停止-等待协议SW(Stop-and-Wait)
注意事项:
-
接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可以给发送方发送NAK分组。
-
为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1。
-
为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用的比特数量一样,数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路成实现停止-等待协议可以不用给ACK分组编号。
-
超级计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于"从发送方到接收方的平均往返时间"。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
信道利用率
-
放往返时延RTT远大于数据帧发送时延TD时(例如使用卫星链路),信道利用率非常低。
-
若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
-
为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。
-
像停止等待协议这种通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ,意思是重传的请求时自动进行的。因为不需要接收方显式地请求发送方重传某个出错的分组。
回退N帧协议GBN
-
回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。
-
在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
-
由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高。
选择重传协议
点对点协议PPP
-
点对点协议PPP(Point-to-Protocol)是目前使用最广泛的点对点数据链路层协议。
-
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由一下三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP,用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs,其中的每一个协议支持不同的网络协议层
帧格式
透明传输
面向字节的异步链路采用插入转义字符的字节填充法
-
发送方的处理:
- 出现的每一个7E(PPP帧的定界符)字节转变成2字节序列(7D,5E)。
- 出现的每一个7D(转义字符)变成2个字节序列(7D,5D)。
- 出现的一个ASCII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上0x20。
接收方的处理:进行反变换即可恢复出原来的帧的数据部分。
面向比特的同步链路采用插入比特0的比特填充法。
发送方的处理:
- 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0。
接收方的处理:
- 对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除。
差错检测
接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据连路程向上不提供可靠传输服务。
工作状态
媒体接入控制
基本概念
- 共享信道要着重考虑的一个问题就是如何协调多个发送和接受站点对 一个共享传输媒体的占用,即 媒体介入控制MAC。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的点对点链路和链路层交换机的交换式局域网在有线领域已经完全取代了共享式局域网,但由于无线信道的广播天性,无限局域网仍然使用的是共享媒体技术。
静态划分信道
信道复用
- 复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
- 当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道充分利用传输媒体的带宽。
常见的几种信道复用技术
- 频分复用FDM
频分复用的所有用户同时占用不同的频带资源并行通信。
-
时分复用TDM
-
波分复用WDM
-
码分复用CDM
复用和多址
- 复用是将单一媒体的频带资源划分为很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分。
- 多址( 更确切说应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道用酒地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)。
- 某种程度上,FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用。
动态接入控制——随机接入
CSMA/CD协议——争用期(碰撞窗口)
CSMA/CD——总线局域网使用的协议
CSMA/CD协议——最小帧长
- 以太网规定最小帧长为64字节,即521比特(512比特时间为争用期);
- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。
- 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞。
- 如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞。
- 如果在争用期内检测到碰撞,就立即终止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧。
CSMA/CD协议——最大帧长
CSMA/CD协议——截断二进制指数退避算法
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
- 当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告。
CSMA/CA——信道利用率
CSMA/CD协议——帧发送流程
CSMA/CD协议——帧接收流程
动态接入控制——随机接入
无线局域网使用的协议——CSMA/CA
- 802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能。
- 由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收。
- 802.11的MAC层标准定义了两种不用的媒体接入控制方式:
帧间间隔IFS
CSMA/CA协议的工作原理
- 当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
- 以下情况必须使用退避算法
- 在发送数据帧之后检测到信道处于忙状态时;
- 在每一次重传一个数据帧时;
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道。)
CSMA/CA协议的退避算法
CSMA/CA协议的信道预约和虚拟载波监听
集线器与交换机的区别
- 使用集线器的以太网在逻辑上扔是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议;
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡进行检测);
- 集线器一般都有少量的容错能力和 网络管理功能。例如:若网络中某个网卡出现了故障, 不停的发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然可以正常工作。
使用集线器HUB在物理层扩展以太网
- 以太网交换机
- 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。
- 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)。
- 以太网交换机一般都具有多种速率的接口 ,例如:10mb/s、100mb/s、1Gb/s、10Gb/s接口的多种组合。
- 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,其内部的帧交换变是通过自学习算法自动地逐渐建立起来的。、
- 帧的两种转发方式:
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否有差错)。
- 交换机可以隔离碰撞域
- 对比
以太网交换机自学习和转发帧的流程
- 交换机工作在数据链路层(也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的AMC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用的设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动主键建立起帧交换表。
- 每条记录的都有自己的有效时间,到期自动删除,这是因为MAC地址交换机接口的对应关系不是永久性的。
以太网交换机的生成树协议STP
-
如何提高以太网的可靠性?
- 添加冗余链路可以提高以太网的可靠性,同时也会带来负面效应——形成网络环路。
- 网络环路会带来以下问题
- 广播风暴——会大量消耗网络资源,使得网络无法正常转发其他数据帧;主机收到重复的广播帧,大量消耗主机资源;交换机的帧交换表震荡(漂移)。
- 以太网交换机使用生成树协议STP可以在增加冗余链路来提高网路可靠性的同时又避免网络环路带来的各种问题。
- 不论交换机之间采用怎样的物理连接,交换机都能自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路);
- 最终生成的树型逻辑拓扑要确保连通整个网络;
- 当首次链接交换机或网络物理拓扑发生变化时(有可能是认为改变或故障),交换机都将进行生成树的重新计算。
虚拟局域网VLAN概述
- 以太网交换机工作在数据链路层(也包括物理层)
- 使用一个或多个以太网交换机互连起来的交换机以台网,其所有站点都属于同一个广播域。
- 随着交换式以太网规模的扩大,广播域相应扩大。
- 巨大的广播域会带来很多弊端
- 广播风暴
- 难以管理和维护
- 潜在的安全问题
广播风暴会浪费网络资源和各主机的CPU资源。
- 网络中会频繁使用广播信息
- TCP/IP协议栈中的很多协议都会使用广播
- 地址解析协议ARP(已知IP地址,找出其相应的MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP( 用于自动配置IP地址)
- 分割广播域的方法
- 使用路由器可以分割广播域
- 因为路由器默认情况下不对广播数据包进行转发,因此路由器很自然的就可以隔绝广播域,但是成本比较高,在这种情况下,虚拟局域网孕育而生。
- 虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理层位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
也就是说同一个VLAN中可以广播通信,不用 VLAN之间不能广播通信。
虚拟局域网VLAN的实现机制
-
交换机的端口类型有以下三种
-
Access
-
Trunk
-
Hybrid
-
-
交换机各端口的缺省VLAN ID
- 在思科交换机上称为Native VLAN,即本征VLAN。
- 在华为交换机上称为Port VLAN ID,即端口VLAN ID,简称PVID。
MAC地址、IP地址以及ARP协议
- MAC地址是以太网的MAC子层所使用的地址;(数据链路层)
- IP地址是TCP/IP体系结构网际层所使用的地址;(网际层)
- ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址所获取到设备的MAC地址;(网际层)
- 尽管IP地址和ARP协议属于TCP/IP体系结构的网际层(而不属于数据链路层),但是它们与MAC地址存在一定的关系,并且我们日常的网络应用都离不开MAC地址 、IP地址以及ARP协议。因此我们将这三者放在一起讨论。
MAC地址
使用点对点信道的数据链路层不需要使用地址。
- 当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;
- 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址。
- MAC地址一般是被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
- MAC地址有时也被称为物理地址。请注意:这并不意味着MAC地址属于网络体系结构中的物理层。 (属于数据链路层。)
- 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡),每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各个设备的唯一标识。
IEEE 802局域网的MAC地址格式
IEE 802局域网的MAC地址发送顺序
字节发送顺序: 第一字节——》第六字节
字节内的比特发送顺序: b0——》b7
单播MAC地址举例
广播MAC地址举例
判断地址是否是多播地址
随机MAC地址
略......
IP地址
IP地址属于网络层的范畴。
- IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
从网络体系结构看IP地址与MAC地址
上层无需看懂上一层的数据结构和内容,只需要添加首部相关信息即可,然后继续交付给下一层。
数据包转发过程中IP地址与MAC地址的变化情况
(可以想象成对应层进行水平通信)
- 数据包转发过程中源IP地址和目的IP地址保持不变;
- 数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变;
ARP协议
不能跨网路使用。
通过ARP协议来通过IP地址找到对应的MAC地址。
网络层
- 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
- 要实现网络层任务,需要解决以下主要问题:
- 网络层向运输层提供怎样的服务("可靠传输"还是"不可靠传输")
- 网络层寻址问题
- 路由选择问题
- 因特网(Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。
- 由于TCP/IP协议栈中的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
- 综上所述 ,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。
网络层提供的两种服务
面向连接的虚电路服务
- 可靠通信由网络来保证
- 必须建立网络层的连接——虚电路VC(Virtual Circuit)
- 通信双方沿着已建立的虚电路发送分组
- 目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需要携带一条虚电路的编号(构成虚电路的每一段电路都有一个虚电路编号)。
- 这种通信方式如果再使用可靠传输协议的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到到达、不丢失、不重复)。
- 通讯结束之后,需要释放之前所建立的虚电路。
- 很多广域分组交换网都使用面向无连接的虚电路服务。例如,曾经的X.25和逐渐过时的帧中继FR,异步传输模式ATM等。
无连接的数据报服务
- 可靠通信应由用户主机来保证
- 不需要建立网络层链接
- 每个分组可走不同的路径
- 每个分组的首部必须携带目的主机的完整地址
- 这种通信方式所传送的分组可能误码、丢失、重复和失序。
- 由于网络本身 不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
- 因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交换功能置于因特网核心。、
- 采用这种设计思想的好处是,网络的造假大大降低,运行方式灵活,能够适应多种应用。
由于TCP/IP体系结构的因特网的网际层提供的是简单灵活、无连接的、尽最大努力交付的数据报服务,因此本章主要围绕网际层如何传送IP数据报这个主题进行讨论。
IPv4地址概述
- IPv4地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
- IP地址由因特网名字和数字分配机构ICANN进行分配
- 我国用户可向亚太网络信息中西APNIC申请IP地址,需要缴费,且一般不接受个人申请。
- IPv4地址的编址方法经历了如下三个历史阶段:
- 32比特的IPv4地址采用点分十进制表示方法以方便用户使用。
分类编址的IPv4地址
A类地址
B类地址
C类地址
划分子网的IPv4地址
- 为新增网络申请新的网络号会带来以下弊端
- 等待需要时间和花费更多的费用
- 会浪费其他路由器中路由表记录的数据
- 浪费原有网络中剩余的大量IP地址
解决办法:
- 从主机号部分借用一部分作为子网号
- 32 比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号。
- 子网掩码使用连续的比特1来对应网络号和子网号
- 子网掩码使用连续的比特0来对应主机号
- 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可以得到IPv4地址所在子网的网络地址
- 默认的子网掩码是指在未划分子网的情况下使用的子网掩码
无分类编址的IPv4地址
- 划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部消耗的威胁。
- 为此,引因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP工作组负责研究新版本IP以彻底解决IP地址耗尽问题。
- 1993年,IETF发布了五分类域间路由器选择CIDR的RFC文档,RFC 1517 ~ 1519和1520。
- CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念
- CIDR可以更加有效的分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。
- CIDR使用“斜线记法”,或称为CIDR记法。 即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量。
- CIDR实际上是将网络前缀都相同的连续IP地址组成一个"CIDR地址块"。
- 我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节;
- 地址块的最小地址
- 地址块的最大地址
- 地址块中的地址数量
- 地址块聚合某类网络(A 类、B类或C类)的数量
- 地址掩码(也可继续称为子网掩码)
IPv4地址的应用规划
定长的子网掩码LFSM
- 使用同一子网掩码来划分子网
- 每个子网所分配的IP地址数量相同,造成IP地址的浪费
- 子网划分方式不灵活,只能划分出2的n次方个子网(n是从主机号部分借用的用来作为子网号的比特数量)
变长的子网掩码VLSM
- 使用不同的子网掩码来划分子网
- 每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费
- 子网划分方式灵活,可以按需分配。
IP数据报的发送和转发过程
- IP数据报的发送和转发过程包含以下两个部分
- 主机发送IP数据报
- 路由器转发IP数据报
主机发送IP数据报
- 判断目的主机是否与自己在同一网络
- 若在同一个网络,则属于直接交付
- 若不在同一个网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发。
路由器转发IP数据报
- 检查IP数据报首部是否出错
- 若出错,则直接丢弃该IP数据报并通报源主机;
- 若没有出错,则进行转发。
- 根据IP数据报的目的地址在路由表中查找匹配的条目
- 若找到匹配条目,则转发给条目中知识的下一跳;
- 若找不到,则丢弃该IP数据报并通告源主机。
静态路由配置及其可能产生的路由环路问题
- 静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。
- 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化。
- 一般只在小规模网络中可采用。
- 使用静态路由配置可能出现一下情况导致产生路由环路的错误
- 配置错误
- 聚合了不存在的网络
- 网络故障
- 路由条目的类型
- 直连网络
- 静态路由(人工配置)
- 动态路由(路由选择协议)
- 特殊的静态路由条目
- 默认路由(目的网络为0,0,0,0,地址掩码为0,0,0,0)
- 特定主机路由(目的网络为特定主机的IP地址,地址掩码为255,255,255,255)
- 黑洞路由(下一条为null0)
路由选择协议概述
-
静态路由选择
- 由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由。
- 这种人工配置方式简单、开销小。但不能即使适应网络状态(流量、拓扑等)的变化。
- 一般只在小规模网络中采用。
-
动态路由选择
- 路由器通过选协议自动获取路由信息。
- 比较复杂、开销比较大。
- 适用于大规模网络。
-
因特网所采用的路由选择协议主要特点
- 自适应:动态路由选择,能较好地适应网络状态的变化。
- 分布式:路由器之间交换路由信息。
- 分层次:将整个因特网划分为许多较小的自治系统AS(Autonomous System)
-
常见的路由选择协议
- 路由器的基本结构
路由信息协议RIP的基本工作原理
- 路由信息协议RIP是内部网关协议IGP中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058。
- RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其它每一个网络的距离记录。这是一组距离,称为"距离向量D-V"。
- RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
- 路由器到直连网络的距离定义为1。
- 路由器到非直连网络的距离定义为所经过的路由器数加1。
- 允许一条路径最多只能包含15个路由器。"距离"等于16时相当于不可达。因此,RIP只适用于小型互联网。
- RIP认为好的路由就是"距离短"的路由,也就是所通过路由器数量最少的路由。
- 当到达同一目的网络有多条"距离相等"的路由时,可以进行等价负载均衡。
- RIP包含以下三个要点:
- 和谁交换信息,仅和相邻路由器交换信息
- 交换什么信息,自己的路由表
- 何时交换信息,周期性交换(例如每30秒)
- RIP存在"坏消息传播 "的问题。
- "坏消息传播得慢"又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害。
- 限制最大路径距离为15(16表示不可达)
- 当路由表发生变化时就立即发送更新报文(即"触发更新"),而不仅是周期性发送。
- 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即"水平分割")
开放最短路径优先OSPF的基本工作原理
- 开放最短路径优先OSPF,是为了客服RIP的缺点在1989年开发出来的。
- "开放"表明OSPF协议不是受某一家厂商控制,而是公开发表的。
- "最短路径优先"是因为使用了Dijkstra提出的最短路径算法SPF。
- OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。
- OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。
- OSPF不限制网络规模,更新效率高,收敛速度快。
- 链路状态是指本路由器都和哪些路由器相邻,以及相应链路的"代价"(cost)。
- "代价"用来表示费用、距离、时延、带宽、等等。这些都由网络管理人员来决定。
- OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。
- Hello分组封装在IP数据报中,发往组广播地址224.0.0.5。
- 发送周期为10秒。
- 40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达。
- 使用OFS的每个路由器都会产生链路状态通告LSA,LAS中包含了以下内容:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
- LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。
- 使用OSPF的每个路由器都有一个链路状态数据路LSDB,用于从存储LSA。
- 通过各路由器洪泛法送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致。
- 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。
- OSPF有以下五种分组类型。
- OSPF的基本工作过程
- OSPF在多点接入网络中路由器邻居关系的建立
- 选举指定路由器DR和备用的指定路由器BDR
- 所有的非DR/BDR只与DR/BDR建立邻居关系表
- 非DR/BDR之间通过DR/BDR交换信息
- 为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域。
边际网关协议BGP的基本工作 原理
- 因特网采用分层次的路由选择协议
- 内部网关协议IGP(例如路由信息协议RIP或开放最短路径优先OSPF)
- 设法使分组在一个自治系统内尽可能有效地从开源网络传输到目的网络
- 无需考虑自治系统外部其他方面的策略
- 外部网关协议EGP(例如边界网关协议BGP)
- 在不同的自治系统内,度量路由的"代价"(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用"代价"作为度量来寻找最佳路由是不行的。
- 自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
- 在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的"BGP发言人"。
- 在此TCP连接上交换BGP报文以建立BGP会话。
- 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况。)
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站。
- BGP发言人除了运行BGP之外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
- BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一些系列自治系统)
- 当BGP发言人互相交换了网络可达的信息后,各BGP发言人就根据所采用的策略从收到的路由器信息中找出到达各自自治系统的较好的路由。也就是构造出树型结构、不存在回路的自治系统连通图。
- BGP适用于多级结构的因特网
- BGP-4有以下四种报文
- OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
- UPDATE(更新报文):用来通告某一路由的信息,以列出要撤出的多条路由。
- KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
- NOTIFICATION(通知)报文:用来发送检测到的差错。
IPv4数据报的首部格式
- 版本
占4比特,表示IP协议的版本。
通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
- 首部长度
占4个比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。
最小十进制取值为5,表示IP数据报首部只有20字节固定部分。
最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
- 可选字段
长度从1字节到40个字节不等。用来支持排错、测量及安全等措施。
可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
- 填充字段
确保首部长度为4字节的整数倍。使用全0填充。
- 区分服务
占8比特,用来获得更好的服务。
该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
1998年,因特网工程任务组IETF把这个字段改名为区分服务。
利用该字段的不同数值可提供不同等级的服务质量。
只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
- 总长度
占16比特,表示IP数据报的总长度(首部+数据载荷)。
最大取值为十进制的65535,以字节为单位。
- 标识
占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。
IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
与下面两个字段共同用于IP数据报分片。
- 标志
占3个比特, 各比特含义如下:
DF位:1表示不允许分片,0表示允许分片
MF位:1表示"后面还有分片",0表示"这是最后一个分片"
- 片偏移
占13个比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
片偏移以8个字节为单位。
- 生存周期TT
占8比特,最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。
现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
- 协议
占8比特,指明IPv4数据报的数据部分是何种协议数据单元。
常用的一些协议和相应协议字段值如下。
例如:
- 首部检验和
占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。
- 源IP地址和目的IP地址
各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
网际控制报文协议ICMP
- 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。
- 主机或路由器使用ICMP来发送差错报告报文和询问的报文。
- ICMP报文被封装在IP数据报中发送。
- ICMP差错报告报文共有以下5种:
- 终点不可达
- 当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
- 源点抑制
- 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
- 时间超过
- 当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。若结构不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。
- 另外,当终点在预先规定的时间内不能收到一个数据报的全部报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
- 参数问题
- 当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向)
- 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更改好的路由)。
- 以下情况不应发送ICMP差错报告报文:
- 对ICMP差错报告不再发送ICMP差错报告报文
- 对第一个分片的数据数据报片的所有后序数据报片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告
- 常见的ICMP询问报文有以下两种:
- 回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态。
- 时间戳请求和回答:ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。这种询问报文用来进行时钟同步和测量时间。
- ICMP应用举例
- 分组网间探测PING(Packet InterNet Groper)
- 用来测试主机或路由器间的连通性
- 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
- 使用ICMP回送请求和报文回答
- 跟踪路由(traceroute)
- 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
- Windows版本
- tracert命令
- 应用层直接使用网际层ICMP
- 使用了ICMP回送请求和回答报文以及差错报告报文。
- Unix版本
- traceroute命令
- 在运输层使用UDP协议
- 仅使用ICMP差错报告报文
虚拟专用网VPN与网络地址转换NAT
- 虚拟专用网VPN(Virtual Private Network)
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。
如下图所示,同一个机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。
有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网VPN。
在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN。
- 网络地址转换NAT(Network Address Translation)
虽然因特网采用了无分类编制方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。
1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题。
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。
这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口和IP地址一起进行转换的技术叫做NAPT(Network Address and Port Translation)。
对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。
另外,由于NAT对外网屏蔽了内网主机的网络地址,能为内网主机提供一定的安全保护。
运输层
- 计算机网络体系中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
- 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
- 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
运输层直接为应用进程间的逻辑通信提供服务。
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像在两个运输层实体之间有一条端到端的逻辑通信信道。
根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和面向无连接的UDP。
运输层端口号、复用与分用的概念
- 运行在计算机上的进程使用进程标识符PID来标志。
- 因特网上的计算机并不是统一的操作系统,不同的操作系统又使用不同格式的进程标识符。
- 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程之间进行标识。
- 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,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
- 端口号只具有本地意义,即端口号知识为了标识本计算机的应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的。
- 发送方的复用和接收方的分用
- TCP/IP体现的应用层常用协议所使用的运输层熟知端口号。
UDP和TCP的对比
- UDP和TCP是TCP/IP体系结构运输层中的两个重要协议。
总结:
TCP的流量控制
- 一般来说,我们总是希望数据传输的快一点。
- 但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
- 所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
- 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
- TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。
- TCP发送方收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文。
TCP的拥塞控制
- 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞。
- 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
-
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
TCP四种拥塞控制算法
假定如下条件:
- 数据是单方向传送,而另一个方向只传送确认。
- 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。
- 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。
- 慢开始和拥塞避免算法是1988天提出的TCP拥塞控制算法(TCP Tahoe版本)。
- 1990年又增加了两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复(TCP Reno版本)
- 有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞。
- 这将导致发送方超时重传,并误认为网络发生了拥塞;
- 发送方把拥塞窗口cwnd又设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率。
- 有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞。
- 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
- 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
- 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认。
- 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
- 发送方一旦收到了3个连续的重复确认,就将相应的报文段立即重传,而不是等待该报文段的超时重传计时器超时再重传。
- 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为11)。使用快重传可以使整个网络的吞吐量提高约20%。
- 发送方一旦接收3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法。
- 发送方将慢开始门限ssthresh值和拥塞窗口值调整为当前窗口的一半;开始执行拥塞避免算法。
- 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh+3。
- 既然发送方收到3个重复的确认,就表明有3个数据报文已经离开了网络;
- 这3个报文段不再小号网络资源而是停留在接收方的接受缓存中;
- 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。
TCP超时重传时间的选择
- 超时重传时间的选择是TCP最复杂的问题之一
TCP可靠传输的实现
- TCP基于以字节为单位的滑动窗口来实现
发送方个各部分解释
如何描述发送窗口的状态?
接收方各部分解释
- 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接受窗口一样大。
- 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
- 发送方还可能根据网路当时的拥塞情况适当减小自己的发送窗口尺寸。
- 对于不按序到达的数据应如何处理,TCP并无明确规定。
- 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样对网络资源的利用不利,因为发送方会重复传送较多的数据。
- TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
- TCP要求接收方必须有积累确认和捎带确认机制,这样可以减小传出开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送的时候把确认信息顺便捎带上。
- 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。
- TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122]
- 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
- TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清是哪一方的窗口。
TCP的运输连接管理——TCP的连接建立
- TCP是面向连接的协议,它基于运输连接来传送TCP报文段。
- TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。
- TCP运输连接有以下三个阶段:
- 建立TCP连接
- 数据传送
- 释放TCP连接
- TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。
- TCP的连接过程建立要解决以下三个问题:
- 使TCP双方能够确知对方的存在;
- 使TCP双方能够协商一些参数(如:最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
- 使TCP双方能够对运输实体资源(如:缓存大小、连接表中的项目等)进行分配。
- TCP使用"三报文握手"建立连接
将TCP建立连接的过程比喻为"握手"。
注意:
- TCP的标准规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号。
- TCP的标准规定,普通的确认报文段如果不携带数据,则 不消耗序号。
TCP的运输连接管理——TCP的连接释放
- TCP通过"四报文挥手"来释放连接
- TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(2小时定时)。
- 若保活计时器定时周期未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每个75秒发送一次。若发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。
TCP报文段的首部格式
- 为了实现可靠传输,TCP采用了面向字节流的方式。
- 但TCP在发送数据时,是从发送缓存中去除一部分或全部自己并给其添加一个首部使之成为TCP报文段后进行发送。
- 一个TCP报文段由首部和数据载荷两部分构成。
- TCP的全部功能都体现在它首部中各字段的作用。
TCP报文段的首部格式
-
源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。
-
目的端口号:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。
-
序号:占32比特,取值范围[0,2的32次方-1],序号增加到最后一个后,下一个序号就又回到0。
- 指出本TCP报文段数据载荷的第一个字节的序号。
-
确认号:占32比特,取值范围[0,2的32次方-1],确认号增加到最后一个后,下一个确认号就又回到0。
- 指出期望收到对方下一个TCP报文段的数据的第一个字节的序号,同时也是对之前收到的所有数据的确认。
- 若确认好为n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。
-
确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。
-
数据偏移:占4比特,并以4字节为单位。
- 用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。
- 这个字段实际上是指出了TCP报文段的首部长度。
- 首部固定长度为20字节,因此数据偏移字段的最小值为0101(2进制)。
- 首部最大长度为60字节,因此数据偏移字段的最大值为1111(2进制)。
-
保留字段:占6比特,保留为今后使用,但目前应置为0。
-
窗口:占16比特,以字节为单位。指出发送本报文段的一方的接受窗口。
- 窗口值作为接收方让发送方设置其发送窗口的依据。
- 这是以接受方的接收能力来控制发送方的发送能力,称为流量控制。
-
校验和:占16比特,检查范围包括TCP报文段的首部和数据载荷两部分。
- 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。
-
同步标志位SYN:在TCP连接建立时用来同步序号。
-
终止标志位FIN:用来释放TCP连接。
-
复位标志位RST:用来复位TCP连接。
- 当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。
- RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
-
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。
-
紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。
-
紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。
- 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
-
选项(长度可变)字段
- 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。
- 窗口扩大选项:为了扩大窗口(提高吞吐率)。
- 时间戳选项:
- 用来计算往返时间RTT
- 用于处理序号超范围的情况,又称为防止序号绕回PAWS。
-
填充字段:
- 由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,也就是首部长度字段,是以4字节为单位的)。
应用层
应用层概述
- 应用层是计算机网路体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。
- 早起基于文本的应用(电子邮件、远程登录、文件传输、新闻组)
- 20世纪90年代将因特网带入千家万户的万维网WWW
- 当今流行的即时通信、P2P文件共享及各种音视频应用
- 计算设备的小型化和"无处不在",宽带住宅接入和无线接入的日益普及和迅速发展,为未来更多的新型应用提供了广阔的舞台。
客户/服务器方式(C/S方式)和对等方式(P2P方式)
- 网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务。
- 开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。目前流行的主要有一下两种:
- 客户/服务器(Client/Server,C/S)方式
- 对等(Peer-to-Peer,P2P)方式
- 客户/服务器方式
- 客户和服务器是指通信中所涉及的两个应用进程。
- 客户/服务器方式所描述的是进程之间服务和被服务的关系。
- 客户是服务请求方,服务器是服务提供方。
- 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址。
- C/S方式是因特网上传统的、同时也是最成熟的方式,很多我们熟悉的网络应用采用的都是C/S方式。包括万维网WWW、电子邮件、文件传输FTP等。
- 基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。
- 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况。
- 为此,在C/S应用中,常用计算机集群(或服务器场)构建一个强大的虚拟服务器。
- 对等方式
- 在P2P方式中,没有固定的服务请求者和服务提供者,分部在网络边缘的各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。
- 目前,在因特网上流行的P2P应用主要包括P2P文件共享、即时通信。P2P流媒体、分布式存储等。
- 基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分部在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中。
- P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
- P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。
动态主机配置协议DHCP
- DHCP的作用
- 动态主机配置协议DHCP提供了一种机制,称为即插即用连网。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息,而不用手工参与。
- DHCP的工作过程
-
DHCP中继代理
- 在每一个网络上都设置一个DHCP服务器会使DHCP服务器的数量太多。因此现在是使每一个网络至少有一个DHCP中继代理(通常是一台路由器),它配置了DHCP服务器的IP地址信息,作为各网络中计算机与DHCP服务器的桥梁。
域名系统DNS(Domain Name System)
- 域名系统DNS的作用
因特网是否可以只使用一台DNS服务器?
这种做法并不可取。因为因特网的规模很大, 这样的又名服务器很定会因为超负荷而无法正常工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。
早在1983年,因特网就开始采用层次结构的命名树作为主机的名字(即域名),并使用分布式的域名系统DNS。
DNS使大多数域名都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。
由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个系统的正常运行。
- 因特网采用层次树状结构的域名结构
- 域名的结构由若干个分量组成,各分量之间用"点"隔开,分别代表不同级别的域名。
- 例如:......三级域名.二级域名.顶级域名
- 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写字母。
- 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。
- 完整的域名不超过255个字符。
- 域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。
- 各级域名由其上一级的域名管理机构管理,而最高的顶级域名则是由因特网名称与数字地址分配机构ICANN进行管理。
举例:因特网的域名空间
- 为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存,高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
- 由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存表中的内容正确, 域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)。
- 不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。
文件传送协议FTP
- 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。
- 文件传送协议FTP是因特网上使用最广泛的文件传送协议。
- FTP提供交互式的访问, 允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
- FTP屏蔽了各计算机系统的细节,因而适用于在异构网络中任意计算机之间传送文件。
- 在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量。只是到了1995年,万维网WWW的通信量才首次超过FTP。
- FTP的常见用途是在计算机之间传输文件,尤其是用于批量传输文件。
- FTP的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器。
- FTP的基本工作原理
电子邮件
- 电子邮件系统采用客户/服务器方式;
- 电子邮件系统的三个主要组成构建:用户代理,邮件服务器,以及电子邮件所需的协议。
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
- 邮件服务器是电子邮件系统的基础设施,因特网上所有的LSP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。
- 协议包括邮件发送协议(例如SMTP)和邮件读取协议(例如POP3,IMAP)。
- 简单的邮件传送协议SMTP的基本工作原理
-
电子邮件的信息格式并不是SMTP定义的,而是在RFC 822中单独定义的。这个RFC文档已在2008年更新为RFC 5322。一个电子邮件有信封和内容两部分。而内容又由首部和主体两部分构成。
-
SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象。
-
SMTP不能满足传送多媒体邮件(例如带有图片、音频或视频数据)的需要。并且许多其他非英语国家的文字(例如中文、俄文、甚至带有重音符号法文或德文)也无法用SMTP传送。
-
为了解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME。
- 增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
- 实际上,MIME不仅仅用于SMTP,也用于后来的同样面向ASCII字符的HTTP。
- 常用的邮件读取协议有以下两个:
- 邮局协议POP,POP3是其第三个版本,是因特网正式标准。
- POP3非常简单、功能有限的有限读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹,对邮件进行分类管理等)。
- 因特网邮件访问协议IMAP,IMAP4是其第四个版本,目前还只是因特网建议标准。
- IMAP4功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮件,就像在本地操控一样,因此IMAP是一个联机协议。
- POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110,IMAP4使用熟知端口143。
- 基于万维网的电子邮件
- 通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发。阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。
- 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
- 这种工作模式在用户浏览器与邮件服务器之间使用HTTP协议,而邮件服务器之间使用SMTP协议。
万维网WWW
- 浏览器最重要的部分是渲染引擎,就是浏览器内核。负责对网页内容进行解析和显示。
- 不同的浏览器内核对网页内容的解析也有不同,因此同一网页在不同内核的浏览器里显示的效果可能不同;
- 网页编写者需要在不同内核的浏览器中测试网页显示效果 。
- 为了方便地访问在世界范围的文档,万维网使用同一资源定位符URL来指明因特网上任何种类"资源"的位置。
- URL的一般形式由以下四个部分组成:
- 超文本传输协议HTTP
HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
- HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到相应后就立即关闭连接。
- 每请求一个文档就要两倍的RTT的开销。若一个网页上有多个引用对象(例如图片等),那么请求每个对象都需要花费2RTT的时间。
- 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。
- HTTP/1.1采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。
- 为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。
- HTTP的报文格式
HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。
HTTP请求报文支持以下方法
HTTP相应报文格式
相应报文中常见的状态行
- 使用Cookie在服务器上记录用户信息
- 万维网缓存与代理服务器