文章目录
-
引入:
-
物理层:
-
链路层:
-
网络层:
-
运输层:
-
应用层:
-
常见的问题:
引入:
网络学习资料:
- 微信公众号:开发内功修炼
- 小林code
- 胡科大教书匠视频资料
计算机网路的定义:
现阶段计算机网络最好的定义:计算机网络,主要由一些通用的、可编程的硬件(不限于计算机,包括了具有网路功能的传感器以及智能家电等智能硬件,这些硬件必含有CPU)互联而成,而这些硬件并非专门用来实现某一特定目的(如传输数据、视频、音频等),能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
计算机网路的分类:
计算机网络的性能指标:
因特网的概述
网络、互联网与因特网的区别与联系:
-
若干
节点和链路
互联,形成网络(计算机网络就是一种通信网络 ,通过交换网络互联主机;交换节点由路由器routers或交换机switches组成); -
若干网络通过
路由器
互联,形成互联网;
- 因特网是当今世界最大的互联网;
因特网服务提供者Internet Service Provider,ISP:
因特网已发展成为基于ISP的多层次结构的互联网络:
计算机网络的体系结构:
常见的计算机网路体系结构:
计算机网络体系结构分层的必要性:
注意:MAC 用于实现 [直连] 的两个设备之间通信,而 IP 负责在 [没有直连] 的两个网络之间进行通信传输。
计算机网络体系结构分层思想的举例:
计算机网络中的专用术语:
实体
:任何可发送或接受信息的硬件或软件进程。
对等实体
:收发双方相同层次中的实体。
协议
:控制两个对等实体进行逻辑通信的规则的集合。协议的三要素:
-
语法
:定义所交换信息的格式。
-
语义
:定义收发双方需要完成的操作。 -
同步
:定义收发双方的时序关系(并非时钟时序)。
服务
:在协议的控制下,两个对等实体间的逻辑通信,使得本层能够向上一层提供服务。
-
服务访问点
:在同一系统中
相邻两层的实体交换信息的逻辑接口
,用于区分不同的服务类型。-
运输层的服务访问点是 “端口号”;
-
网络层的服务访问点是 “协议字段”;
-
数据链路层的服务访问点是 “类型” 字段;
-
-
服务原语:上层使用下层所提供的服务,必须通过下层
交换一些命令
,即服务原语。 -
协议数据单元PDU:对等层次之间传送的数据包称该层的协议数据单元。
-
服务数据单元SDU:同一系统内,层与层之间交换的数据包称为服务数据单元。
多个SDU可以合并为一个PDU,一个SDU也可以划分为几个PDU。
数据交换类型:
电路交换过程:
特点:一旦
建立连接后,会一直占用通信资源,直到释放连接时才会归还
通信资源。
计算机之间的数据传送是
突发式
的,当使用电路交换传送计算机数据时,其线路的传输效率一般很低(线路上真正用来传送数据的时间往往不到10%甚至是1%)。
报文交换:
- 报文交换是分组交换的前身
-
在报文交换中,
报文被整个的发送
,而不是拆分成若干个分组进行发送 -
交换节点将报文
整个接受完成后
才能查找转发表,之后将整个报文转发到下一个节点
,故综合来看,报文交换比分组交换的
转发延时要长很多
,且需要交换节点具有很大的
缓存空间
。
分组交换:
优点:
-
没有建立连接和释放连接的过程
-
分组传输过程中,
逐段占用通信链路
,有较高的通信线路利用率 -
交换节点可以为每一个分组独立选择转发路由
,使得网络有很好的生存性
缺点:
-
分组首部带来了
额外的传输开销
- 交换节点存储转发分组会造成一定的时延
- 无法确保通信时,端到端通信资源全部可用,在通信量较大时,可能造成网络拥塞
-
分组可能出现失序和丢失的问题
三种交换方式的对比:
-
若要连续传送大量的数据,并且数据传送时间远大于建立连接的时间,则使用电路交换可以有较高的传输效率。
然而计算机的数据传输往往是突发式的,采用电路交换时通信线路利用率会很低。
-
报文交换和分组交换都不需要建立连接
(即不需要预先分配通信资源),在传送计算机的突发数据时可以提高通信线路的利用率。 -
将报文构造成若干个更小的分组进行
分组交换
,
比
将整个报文进行
报文交换的时延更小
,并且还可以
避免太长的报文长时间占用链路,有利于差错控制
,同时具有更好的灵活性。
物理层:
功能及实现方法:
物理层考虑的是,怎样才能在连接各种计算机的传输媒体上传输数据比特流。
物理层为数据链路层屏蔽各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。
传输方式:
串行传输与并行传输:
计算机内部常采用并行传输(一般数据总线的长度为8、32、64位等),网络中采用的是串行传输。
同步传输与异步传输:
单向通信(单工)、双向交替通信(半双工)、双向同时通信(全双工):
编码与调制:
码元
:在使用时间域的波形表示数字信号时,代表不同离散数值的基本波形。
常见的编码:
常见的调制方法:
基本调制方法:
1码元只能包含1个比特信息。
混合调制方法:
正交振幅调制QAM
信道的极限容量:
奈氏准则:在假定的理想条件下,为了避免码间串扰,**码元传输速率(又称波特率、调制速率)**是有上限的。
- 当一个码元含有一个比特信息量时,波特率(码元/秒)与比特率(比特/秒)在数值上是相等的。
- 当一个码元含有n个比特信息量时,则波特率转换成比特率时,数值要乘以n。
要提高信息传输速率(比特率),就必须设法使每一个码元能携带更多个比特信息量,即
采用多元制
。
信道中的极限信息传输速率还要限于实际的信道中传输时的
信噪比
。
信道复用技术:
基本原理:
- 复用就是一条传输媒体上同时传输多路用户的信号。
- 当一条传输媒体的传输容量大于多条信道传输的总容量时,就可以通过复用技术,在这条传输媒体上建立多条通信信道,以便充分利用传输媒体的带宽。
- 尽管实现信道复用会增加通信成本(需要复用器、分用器、大容量共享通道),但如果复用的信道数量较大,还是比较划算的。
常见的信道复用技术:
频分复用FDM:
频分复用的所有用户同时占用不同的频带资源发送数据。
时分复用TDM:
时分复用的所有用户在不同的时间占用同样的频带。
注意:TDM帧实际上是一段固定长度的时间,它与数据链路层对等实体间逻辑通信的“帧”,是完全不同的概念。
波分复用WDM:
根据频分复用的设计思想,可在一根光纤上同时传输多个频率(波长)相近的光载波信号,实现基于光纤的频分复用技术。
目前可在一根光纤上复用80路或更多路的光载波信号,故又称为密集波分复用DWDM。
由于铺设光缆的耗资巨大,故应尽量在一根光缆中放入尽可能多的光纤,然后对每一根光纤使用密集波分复用技术。
码分复用CDM:
常称为码分多址,是在扩频通信技术的基础上发展起来的一种无线通信技术。
与FDM和TDM不同,CDM的每个用户可以在相同的时间使用相同的频带进行通信。
采用CDM的系统,发送的信号有很强的抗干扰能力,其频谱类似于白噪声。
链路层:
概述:
链路层在网络体系结构中所处的地位:
链路、数据链路和帧:
-
链路
Link
:指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。 -
数据链路
Data Link
是基于链路的。当在一条链路上传输数据时,不仅需要链路本身还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
注意
:计算机中的网络适配器(俗称
网卡
)和相应的
软件驱动程序
,就实现了这些协议。
一般的网络适配器都包含了物理层和数据链路层这两层的功能
。
-
帧Frame是
数据链路层
对等实体之间在水平方向进行逻辑通信的
协议数据单元PDU
。
数据链路层的三个重要问题:
封装成帧和透明传输:
1、封装成帧:指数据链路层给 “上层交付的协议数据单元PDU” 添加帧头和帧尾使之成为帧。举例点对点传输协议PPP帧。
接收方的数据链路层,如何从物理层交付的比特流中,提取出一个个的帧?
-
帧头和帧尾的作用之一,就是
帧定界
。 -
但以太网
v2
的MAC帧,不需要添加帧头和帧尾,代替的是在物理层添加
前导码
。由于
以太网
v2
的MAC帧在传输时,存在帧间间隔时间,故不需要结束标志
。
2、透明传输:指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
为了实现透明传输,即
避免出现误判
,解决方式如下:
-
面向字节的物理链路使用字节填充(或称
字符填充
)的方法实现透明传输。如下图所示,通过在非帧尾的标志前加 “转移字符”,当接收方接收到该转义字符后,直接跳过并读取下一个字符,且帧还没结束,继续向后读取…。
-
面向比特的物理链路使用
比特填充
的方法实现透明传输。如下图所示,采用 “零比特填充法“,即在发送方组织好帧后,整体扫描一遍,在帧的数据部分中每五个一后添加一个0即可,接收方读取时去掉0位即可。
注意:
- 为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些;
-
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即
最大传送单元MTU
(Maximum Transfer Unit)。
差错控制:
实际通信链路并不是理想的,即比特在传输过程中可能会出现差错:1可能变成0,0可能变成1,这被称为比特差错。
在一段时间内,传输错误比特占所传输比特总数的比率称为
误码率BER
(Bit Error Rate)。
使用
差错检验码
检测数据在传输过程中是否产生比特差错,是数据链路层所要解决的重要问题之一。
差错检测:主要有 “奇偶校验” 和 “循环冗余校验” 两种算法。
奇偶校验
:(该方法漏检率较高,一般不采用)
(1)在待发送的数据后面添加一位奇偶校验位,使整个数据(包含所添加的校验位在内)中
“1” 的个数为奇数(即奇校验)
或偶数(偶校验)。
(2)如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码,否则无法检测出是否发生误码(即称为
漏检
)。
循环冗余校验CRC
(cyclic redundancy check):(漏检率较低)
(1)收发双方约定好一个生成多项式G(x)。
(2)发送方基于待发送数据和生成多项式计算出差错检测码(
冗余码
),将其添加到待传输数据的后面一起传输。
(3)接收方通过生成多项式来计算收到的数据是否产生了误码。
注意:
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
-
检错码
只能检测出帧在传输过程中出现了差错,但并不能定位错误,故
无法纠正错误
; - 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络较少使用。
-
计网中,通常采用
检错重传
的方式
来纠正传输中的差错,或者仅仅是
丢弃有差错的帧
。
可靠传输:
基本概念:
-
使用
差错检测技术
(如循环冗余校验CRC),接受方的数据链路层就可检测出帧在传输过程中是否产生了
误码
(比特错误)。 -
数据链路层向上层提供的服务类型:可靠传输服务和不可靠传输服务。
-
一般情况下,有线链路误码率比较低,故为了减少开销,并不要求数据链路层向上提供可靠的传输服务,即使出现了误码,可靠传输的问题也由其上层处理。
无线链路易受干扰,误码率比较高,要求数据链路层必须向上提供可靠传输服务。
-
从整个计算机网络体系结构来看,传输差错包括:
比特差错、分组丢失、分组失序、分组重复
。-
分组丢失
:如当路由器输入队列快满了,则会主动丢弃收到的分组。 -
分组失序
:多个分组并未按照发送的顺序,依次达到接收端。 -
分组重复
:当某个分组未按时到达接收端,则发送端会超时重发。这样接收端就会收到两个重复的分组。
注:一般 “分组丢失、分组失序、分组重复” 的传输差错,一般不会出现在数据链路层,而会出现在其上层。
-
-
可靠传输服务并不仅限于数据链路层,其他各层均可选择实现可靠传输。
-
可靠传输实现复杂且开销较大
,故是否需要可靠传输取决于应用需求。
三种实现可靠传输的机制:
这三种可靠传输的实现机制的基本原理,并不仅限于数据链路层,
可应用到计算机网络体系结构的各层协议
。
(一)停止-等待协议SW
,常称自动请求重传ARQ(automatic repeat request)
-
接受和发送过程正常的情况下:
-
当发送方发送的数据分组中途丢失,即接收方收不到数据分组时,则不会发送ACK或NAK,从而使发送方处于一直等待的ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器,若到了超时计时器所设置的重传时间(一般重传时间略大于 “发送方到接收方的平均往返时间”),而发送方仍未接收到接收方发送的ACK或NAK,则重传原来的数据分组,该过程称为
“超时重传”
。 -
当发送方的数据分组达到接收方,但发送方始终未收到接收方传来的ACK或NAK,即中途丢失,则会导致发送方进行 “超时重传”,但该数据分组接收方已经收到过了,从而会导致分组重复。
为了避免分组重复
,则必须对
每个分组带上序号
,即进行
分组编号
。对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同即可,故只需一个比特来编号即可。
-
当出现下图所示的情况时,发送方可能误认为第二个接收到的ACK是针对数据分组DATA1的确认。
为解决上述问题,故需要对接收方发送的
确认分组进行编号
。在数据链路层的点对点传输过程中,数据分组的往返时间比较固定,故不会出现确认迟到的问题,故不需要对确认分组进行编号。
总结:
-
接收端检测到数据分组有误码时,将其
丢弃并等待发送方的超时重传
。但对误码率较高的
点对点链路
,为使发送方
尽早重传
,也可
给发送方发送NAK分组
。 -
为了让接收方能够判断所收到的数据分组是否重复,需要给
数据分组编号
。由于停止-等待协议的停等特性,只需
1比特编号
即可,即编号0或1。 -
为了让发送方能够判断所收到的ACK分组是否是重复的,需要给
ACK分组编号
。数据链路层一般不会出现ACK分组迟到的情况,故
数据链路层实现停止-等待协议可以不用给ACK分组编号
。 -
超时计时器设置的
重传时间
应仔细选择,一般可选为略大于 “
从发送方到接收方的平均往返时间
”。- 数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 运输层由于端到端往返时间非常不确定,故设置合适的重传时间有时并不合适。
-
停止-等待协议的信道利用率 U = Td / (Td + RTT + Ta)
当往返时延RTT >> 数据帧发送时延Td时,信道利用率非常低。
若出现重传,则对有用的数据信息来说,信道利用率还要降低。
(二)回退N帧协议GBN
回退N帧协议Go-Back-N,在流水线传输的基础上,利用发送窗口来限制发送方连续发送数据分组的数量,是一种
连续ARQ协议
。
在协议工作过程中,
发送窗口和接收窗口
不断向前滑动,因此这类协议又称为
滑动窗口协议
。
细节:
- 采用3个比特给分组编序号,即序号0~7;
- 发送窗口的尺寸WT的取值:1 < WT <= 2^3 – 1;
- 接收窗口的尺寸WR的取值:WR = 1;
-
累计确认
:接收方不一定要对收到的每个数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),
对按序到达的最后一个数据分组发送确认
。
ACKn表示序号为n及以前的所有数据分组都已正确接收。
优点:即使 “确认分组” 丢失,发送方也可能不必重传。
缺点:不能及时的反映出,接收方已正确接收的数据分组信息。
-
当传输过程中出现误码时,发送方会收到接收方发送的 “重复确认”(该确认是已被接受的最后一个分组),从而可以知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时立即重传。
至于收到几个重复确认就立刻重传,由具体实现决定。
- 发送窗口的WT的大小不能超过其上限,否则当确认分组丢失时,会导致超时重传,由于接收方并不能辨别新旧数据分组,故可能导致出现重复接受的问题。
总结:
由于回退N帧协议的特性,当通信质量不好时,其信道利用率并不比停止-等待协议高。
(三)选择重传协议SR
回退N帧协议的接收窗口尺寸WR只能等于1,因此接收方只能按序接收正确到达的数据分组。一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱码和误码)。这必然造成发送方对这些数据分组的超时重传,从而造成通信资源的浪费。
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸必须满足
WR > 1
,以便
接收方先收下失序到达但无误码并且序号落在接收窗口内的数据分组,
等到所缺分组收齐后再一并送交上层
,故被称为
选择重传协议
。
注:选择重传协议SR(Selective Request),为了使发送方仅重传出现差错的分组,接收方
不能再采用累积确认
,而需对每个正确接收的数据分组进行
逐一确认
。
总结:
点对点协议
PPP
:
PPP
点对点协议(Point-to-PointProtocol)是目前使用最广泛的点对点数据链路层协议。
主要构成:
PPP协议为在点对点链路传输各种协议数据提供了标准方法,主要由以下三种构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP:用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs:其中每个协议支持不同的网络层协议
帧格式:
PPP协议的工作状态:
透明传输:
面向字节的异步链路–转义字符的字节填充法:
1、发送方的处理:
-
出现的每个
7E
(PPP帧的定界符)字节转变成2字节序列(
7D,5E
) -
出现的每个
7D
(转义字符)字节转变成2字节序列(
7D,5D
) -
出现的每个
ASCII
码控制字符(数值小于
0x20
的字符),则在该字符前插入一个
7D
字节,同时该字符的编码加上
0x20
2、接收方的处理:进行
反变换
,即可恢复出原来的帧的数据部分。
面向比特的同步链路–比特0的比特填充法:
1、发送方的处理:
对帧的数据部分进行扫描(一般通过硬件实现),只要发现5个连续的比特1,则立即填充1个比特0。
2、接收方的处理:
对帧的数据部分进行扫描(一般通过硬件实现),只要发现5个连续的比特1,就把其后的1个比特0删除。
差错检测:
RFC 1662的附录部分,给出了FCS的计算方法的C语言实现(查表法)。
接收方每收到一个PPP帧,就进行CRC检验,若CRC检验正确,就收下该帧,否则会丢弃掉。
使用PPP的数据链路层向上不提供可靠传输服务。
以太网:
网络适配器 – 网卡:
要想连接到以太网,需要使用相应的网络适配器(Adapter),简称网卡。
-
计算机内部,
网卡与CPU
之间的通信,一般通过计算机主板上的I/O总线以
并行传输
方式进行。 -
网卡与外部以太网
(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以
串行方式
进行。
,故网卡除了要实现
物理层和数据链路层功能
外,还要进行
并行传输和串行传输的转换
。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于
缓存数据的存储器
。
在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须在计算机的操作系统中为网卡安装相应的设备驱动程序,负责驱动网卡发送和接收帧。
MAC地址:
基本介绍:
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则
每个主机必须有一个唯一的标识
,即一个数据链路层地址。
在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。由于这类地址是用于媒体接入控制(Media Access Control,MAC)的,因此被称为MAC地址。
MAC地址一般被固化在网卡的电可擦可编程只读存储器
EEPROM
中,因此
MAC地址
也被称为
硬件地址 / 物理地址
。
一般情况下,普通用户计算机中往往包含两块网卡(
每块网卡都有一个全球唯一的MAC地址
):
- 用于有线局域网的以太网卡
- 用于接入无线局域网的Wifi网卡
严格来说,
MAC地址是对网络上各接口的唯一标识
,而不是网络上各设备的唯一标识。
交换机和路由器
往往具有
更多的网络接口
,所以会拥有
更多的MAC地址
。
MAC地址格式:
注:
-
全球单播MAC地址:具有唯一性
,被固化在网卡上,往往与用户个人信息绑定,尽量
确保自己拥有的全球单播MAC地址不被泄露
。为避免连接wifi时泄露MAC地址,现在到多数移动设备都已采用随机MAC地址技术。
-
MAC地址的发送顺序:1)字节发送顺序:
1字节 -> 6字节
;2)字节内的比特发送顺序:
b0 -> b7
。
举例:
单播MAC地址:
广播MAC地址:
多播MAC地址:
总结:
-
网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理:
1)目的MAC地址与网卡上固化的全球单播地址相同,则接受该帧
2)目的MAC地址是广播地址(
FF-FF-FF-FF-FF-FF
),则接受该帧3)目的MAC地址是网卡上支持的多播地址,则接受该帧
-
网卡还可被设置为一种特殊的工作方式:
混杂方式
。工作在混杂方式的网卡,只要收到共享媒体上传来的帧,就会收下,而不管帧的目的MAC地址。
1)对网络维护人员来说,这种方式可监视和分析局域网上的流量,以便找到提高网络性能的具体措施;
2)
嗅探器
Sniffer就是一种工作在混杂方式的网卡,再配合相应的工具软件(
WireShark
)就可作为一种有用的网络工具来学习和分析网络。3)混杂方式,是一把双刃剑,黑客可利用该种方式非法获取网络用户的口令。
以太网的MAC帧格式:
接收方可能收到的无效MAC帧包括以下几种:
- MAC帧的长度不是整数个字节
- 通过MAC帧的FCS字段的值检测出帧有误码
- MAC帧的长度不在64~1518字节之间
注:接收方收到无效的MAC帧时,就直接丢弃该帧,
以太网的数据链路层没有重传机制
。
共享式以太网:
CSMA/CD
协议的基本原理:
CSMA/CD
共享总线以太网具有
天然的广播特性
,即总线上某个站点向另一站点发送
单播帧
时,表示帧的信号也会沿着总线传播到总线上其他站点。
当两个或多个站点同时使用总线发送帧时,就会产生信号碰撞。
为解决各站点争用总线的问题,共享总线提出了一种专用协议
CSMA/CD
协议(
Carrier Sense Multiple Access Collision Detection
载波监听多址接入/碰撞检测)。
CSMA
属于
争用型的媒体接入控制协议
,连接在同一媒体上的多个站点使用该协议以竞争方式发送数据帧,可能出现冲突(又称碰撞)。
注:
1)
载波监听
检测到总线空闲时,但
总线并不一定空闲
。
2)使用
CSMA/CD
协议的共享总线以太网上的各站点,只是尽量避免碰撞并在出现碰撞时做出
退避后重发
的处理,但
不能完全避免碰撞
。
3)在使用CSMA/CD协议时,由于正在发送帧的站点必须 “
边发送帧边检测碰撞
”,因此站点不可能同时进行发送和接收,即只能进行
半双工通信
。
最小帧长和最大帧长:
最小帧长:
为确保共享总线以太网上的每个站点在发送完一个完整地帧之前,能够检测出是否产生了碰撞,
帧的发送时延就不能少于共享总线以太网端到端的往返时间
,即一个争用期2t(t是端到端单程传播时延)。
最小帧长 = 数据传输速率 * 争用期2t。
对于10Mb/s的共享总线以太网,其争用期2t的值规定为51.2us,故最小帧长为512b/64B。
- 当某个站点在发送帧时,如果帧的前64B没有遭到碰撞,则后续部分也不会遭到碰撞。
- 由于发送帧的站点边发送边检测,一旦检测到碰撞就会立即中止帧的发送,此时已发送的数据量一定小于64B。
- 接收站点收到长度小于64B的帧,就可判定遭遇了碰撞而异常中止的无效帧,将其直接丢弃即可。
最大帧长:
一般来说,帧的数据载荷的长度,应远大于帧首部和尾部的总长度,这样可以提高帧的传输效率。
然而,如果不设置数据载荷的长度上限,就可能使得帧的长度太长,这会带来一些问题。
退避算法 – 截断二进制指数退避算法:
在使用CSMA/CD协议的共享总线以太网中,正在发送帧的站点一边发送帧一边检测碰撞,当检测到碰撞时会立即停止发送,
退一段时间
后重发。
如果连续多次发生碰撞,就表明可能有较多的站点参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(即动态退避),因而减小产生碰撞的概率。
当重传次数达16次仍不能成功时,应放弃重传并向高层报告。
信道利用率:
提高信道利用率:1)共享总线端到端的距离不应太长;2)帧的长度应尽量大。
物理层扩展以太网:
使用集线器的共享式以太网:
在使用同轴电缆的共享总线以太网之后,发展出来了一种使用大规模集成电路来替代总线、并且可靠性非常高的设备,称为集线器Hub。
另外的变化,站点通过双绞线电缆连接到集线器。
集线器的特点:
- 使用集线器的以太网虽是物理星型拓扑,但逻辑上仍是一个总线网。总线上各站点共享总线资源,使用的还是CSMA/CD协议。
-
只工作在物理层
(无法识别目的MAC地址(这是数据链路层的工作)),每个接口
仅简单转发比特
,并不进行碰撞检测(由各站点网卡负责)。 - 一般都有少量的容错能力和网络管理功能。
扩展站点与集线器之间的距离:
共享总线以太网中两站点之间的距离不能太远,否则传输信号会衰减到使CSMA/CD协议无法正常工作。
IEEE 802.3标准规定,两个网段可用一个转发器连接起来,任意两站点之间最多可经过三个网段。
随着双绞线和集线器的
10BASE-T
星型以太网成为主流,扩展网络覆盖范围就很少使用转发器了。
10BASE-T
星型以太网中每个站点到集线器的距离不能超过100m,因此两站点之间通信距离最大不能超过200m。
10BASE-T
星型以太网中,可使用光纤和一对调制解调器来扩展站点与集线器之间的距离。
数据链路层扩展以太网:
使用网桥在数据链路层扩展以太网:
网桥bridge工作在数据链路层(包含其下的物理层),因此网桥具备属于数据链路层范畴的能力。
-
可
识别帧的结构
-
可根据帧首部中的
目的MAC地址
和网桥自身的
帧转发表
来转发或丢弃所收到的帧。
网桥的主要结构和基本工作原理:
1、网桥转发帧的情况:
2、网桥丢弃帧的情况:
3、网桥转发广播帧的情况:
透明网桥的学习和转发帧的流程:
透明网桥
Transparent Bridge
通过自学习算法建立转发表。
透明网桥中的 “透明”,指以太网中的各自站点并不知道自己所发送的帧将会经过哪些网桥转发,最终到达目的站点,即
以太网中各网桥对于站点而言是看不见的
。
透明网桥标准是
IEEE 802.1D
,通过一种自学习算法
基于以太网中各站点间的相互通信
逐步建立起自己的转发表。
-
网桥收到帧后进行
登记(即自学习)
,登记的内容为帧的
源MAC地址
和进入网桥的
接口号
。 -
网桥根据帧的
目的MAC地址
和网桥的
转发表
对帧进行转发,包含三种情况:-
明确转发
:网桥明确知道从哪个接口转发帧 -
盲目转发
:网桥不知道从哪个接口转发帧,只能将其通过除进入网桥的接口外的其他所有接口转发。 -
丢弃
:网桥不知道应该转发该帧
-
-
注意:
-
如果网桥收到
误码的帧
,则直接
丢弃
; -
如果网桥收到
广播帧
,则直接从除接收该广播帧的接口外的
其他接口转发
; -
因站点可能更换网卡,故
转发表中的每条记录都有其
有效时间,到期自动删除
。
-
如果网桥收到
透明网桥的生成树协议
STP
:
STP
为了提高以太网的
可靠性
,有时需要在两个以太网之间使用多个透明网桥来提供
冗余链路
。
但冗余链路在提高以太网可靠性的同时,却给网络引入了
环路
。
广播帧将在环路中永久兜圈
,造成网络资源的白白浪费。
为避免广播帧在环路中永久兜圈,透明网桥使用生成树协议
Spanning Tree Protocol,STP
。
-
不管网桥之间连接成怎样复杂的带环拓扑结构,网桥之间通过
交互网桥协议单元
BPDU
(
Bridge Protocol Data Unit
),找出
原网络拓扑的一个连通子集
,在这个子集里整个连通的网络中
不存在环路
。
交换式以太网:
网桥接口数量很少,通常只有2-4个,
一般只用来连接不同的网段
。
交换式集线器
Switching Hub
,本质是
多接口的网桥
,常称为
以太网交换机
(
Switch
)或二层交换机。
-
“二层” 指以太网交换机工作在
数据链路层(包括物理层)
- 交换机自学习和转发帧的流程,与网桥相同
- 交换机也使用生成树协议STP,来产生能连通全网但不产生环路的通信路径。
交换机的每个接口可连接到
计算机、集线器或另一个交换机
。
-
当交换机的接口与计算机或交换机连接时,可以工作在
全双工方式
,并
能在自身内部同时连通多对接口
(每一对相互通信的计算机都能像独占传输媒体一样,无碰撞地传输数据,这样就不需要使用
CSMA/CD
协议了)。 -
当交换机的接口连接的是集线器时,该接口就只能使用
CSMA/CD
协议并只能工作在半双工方式。注意:1)现在的交换机和计算机中的网卡,都能自动的识别上述两种情况,并
自动切换到相应的工作方式
。2)交换机一般具有多种速率的接口(10Mb/s、100Mb/s、1Gb/s、10Gb/s)的接口,大部分接口
支持多速率自适应
。
一般交换机都采用
“存储转发”
的方式。但为了减少交换机的转发时延,某些交换机采用了
直通交换
方式。
-
采用直通交换(cut-through switching)方式的交换机:接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发(不必把整个帧先缓存后再进行处理)。
优点:时延非常小。
缺点:没有差错检测,可能会将一些无用帧转发给其他主机。
举例:
交换机自学习和转发帧的流程(与网桥相同)
以太网交换机工作在数据链路层(包括物理层),它接收并转发的PDU通常称为帧。以太网交换机收到帧后,在转发表中查找帧的
目的MAC地址(目的物理地址 / 目的硬件地址)
所对应的
接口号
,然后通过该接口转发帧。
共享式与交换式以太网的对比(集线器与交换机的对比):
一对主机间的通信:
- 集线器只工作在物理层,无法识别目的MAC地址(这是数据链路层的工作),只能进行简单的转发。
-
交换机工作在数据链路层(包括物理层), 可识别帧中目的MAC地址,故可通过查找转发表,对帧进行
转发、盲目转发、丢弃
。
多对主机间的通信:
集线器和交换机扩展共享式以太网:
隔离冲突域 | 隔离广播域 | |
---|---|---|
集线器 | × | × |
交换机 | √ | × |
路由器 | √ | √ |
虚拟局域网VLAN:
引入:
以太网交换机工作在
数据链路层(也包括物理层)
。
使用一个或多个以太网交换机互联起来的交换式以太网,其所有站点都属于同一个广播域
随着交换式以太网规模扩大,广播域也相应扩大。巨大的广播域会带来很多弊端。
-
广播风暴
网络中会频繁出现广播信息:
-
TCP/IP
协议栈中很多协议都会使用广播-
地址解析协议
ARP
:已知IP地址,找出相应的MAC地址 -
路由信息协议
RIP
:一种小型的内部路由协议 -
动态主机配置协议
DHCP
:用于自动配置IP地址
-
-
NetBEUI
:windows下使用的广播型协议 -
IPX/SPX
:
Novell
网络的协议栈 -
Apple Talk
:Apple公司的网络协议栈
-
-
难以维护和管理
-
潜在的安全问题
分割广播域的方法:
-
使用路由器,可隔离广播域,但成本较高
-
虚拟局域网技术VLAN(Virtual Local Area Network)是一种
将局域网内的设备划分成与物理位置无关的逻辑组技术
(这些逻辑组具有某些共同的需求)。
VLAN的实现机制:
基本格式:
IEEE 802.1Q
帧(
Dot One Q
帧):对以太网的MAC帧格式进行了扩展,
插入了4字节的VLAN标记
。
VLAN标识符VID:即VLAN标记的最后12比特,它唯一标志了以太网帧属于哪一个VLAN。
- VID取值范围:0 ~ 4095
- 0和4095都不用来表示VLAN,故VID的有效取值范围 1~4094
802.1Q帧是由交换机来处理,而不是用户主机。
-
当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称
“打标签”
。 -
当交换机转发 802.1Q帧时,可能会删除其4字节的VLAN标记转为普通的以太网帧,简称
“去标签”
。
交换机的端口类型:
交换机各端口的缺省VLAN ID,简称Port VLAN ID,即PVID。
Access端口:
-
一般用于连接用户计算机
-
只能属于一个VLAN
-
PVID值与端口所属VALN的ID相同(默认为1)
-
Access端口接受处理的方法:
一般只接受 “未打标签” 的普通以太网MAC帧。
根据接收帧的端口的PVID给帧
“打标签”
,即插入4字节VLAN标记字段(字段中的VID取值与端口的PVID取值相等)。 -
Access端口发送处理的方法:
-
当VID = PVID,则
“去标签”
再
转发
-
当VID != PVID,则
不转发
。
-
当VID = PVID,则
Trunk端口:
-
一般用于交换机之间 或 交换机与路由器之间的互联。
-
可以属于多个VLAN
-
用户可设置Trunk端口的PVID值,默认情况下为1。
-
Trunk端口接收处理方法:
接收 “未打标签” 的帧,根据接收帧的端口的PVID给帧
“打标签”
,即插入4字节VLAN标记字段(字段中的VID取值与端口的PVID取值相等)。 -
Trunk端口发送处理方法:
-
当VID = PVID时,
“去标签”再转发
-
当VID != PVID时,
直接转发
-
举例:
注意:VID(连接Trunk端口) != PVID(Trunk端口)时,可能会造成转发错误。
802.11无线局域网:
802.11无线局域网(Wireless Local Network,
WLAN
),是目前使用最广泛的无线局域网之一,简称为
WI-FI
(Wireless Fidelity,无线保真度)。
802.11无线局域网可分为:有固定基础设施的、无固定基础设施的。
固定基础设施:
固定基础设施
是指预先建立的、能够覆盖一定地理范围的、
多个固定的通信基站
。
802.11无线局域网,使用最多的是固定基础设施的组网方式。
802.11标准并没有定义实现漫游的具体方法,仅定义了一些基本服务。
-
关联
Association
服务:移动站与接入点AP建立关联的方法有以下两种。
-
被动扫描
-
主动扫描
-
-
重建关联
Reassociation
服务和分离
Dissociation
服务如果把一个移动站与某个接入点AP的关联转移到另一个AP,就可以使用重建关联服务。
无固定基础设施:
,又称自组织网络
ad hoc Network
。
CSMA/CA
协议:
CSMA/CA
802.11无线局域网使用
CSMA/CA
协议的原因:
CSMA/CA
由于无线信道与共享总线以太网的传输介质不同,故802.11无线局域网不能简单照搬共享总线以太网使用的
CSMA/CD
协议。
802.11无线局域网,采用另一种称为
CSMA/CA
的协议,即载波监听多址接入/碰撞避免(
Carrier Sense Multiple Access/Collision Avoidance,即CSMA/CA
)。
CSMA/CA
协议仍然采用
CSMA/CD
协议中的
CSMA
,以 “先听后说” 的方式来减少碰撞的发生,但将 “碰撞检测CD” 改为了 “碰撞避免CA”。
注:CA表示碰撞避免,但并不能避免所有的碰撞,而是尽量减少碰撞发生的概率。
CSMA/CA
的协议的基本工作原理:
CSMA/CA
CSMA/CA
的协议的退避算法:
CSMA/CA
执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据。
-
当退避计时器的时间还未减小到零时,而信道又转变为忙状态,需要
冻结
退避计时器的数值,重新等待信道变为空闲,
再经过帧间间隔
DIFS
后,继续启动退避计时器
。
在进行第i次退避时,退避时间在时隙编号
{0,1,...,2^(2+i)-1}
中随机选择一个,然后乘以基本退避时间(即一个时隙的长度)就可以得到随机的退避时间。当时隙编号达到255(对应第6次退避)时,就不再增加。
为进一步降低发生碰撞的概率,802.11无线局域网允许源站对信道进行预约。
细节讨论:
- 由于RTS帧和CTS帧都会携带通信需要持续的时间(与之前介绍过的数据帧可以携带通信所需持续时间的虚拟载波监听机制是一样的),故使用RTS帧和CTS帧进行信道预约,也属于虚拟载波监听机制。
- 利用虚拟载波监听机制,站点只要监听到数据帧、RTS帧或CTS帧中任何一个,就可知信道被占用的持续时间,而不需要真正监听到信道的信号,故能减少隐蔽站带来的碰撞问题。
无线局域网的MAC帧:
网络层:
概述:
网络层的主要任务是:将分组从源主机经过多个网络和多段链路传输到目的主机。可将任务划分为:分组转发、路由选择。
多个异构网络,
- 如果只需各自在其内部进行通信,则只需实现物理层和数据链路层即可;
- 如果将这些异构网络互联起来,就需要使用网络互联设备—路由器。
要将众多的异构型网络都互联起来,并且能够互相通信,则会面临许多需要解决的问题。
- 不同的网络接入机制
- 不同的差错恢复方法
- 不同的路由选择技术
- 不同的寻址方案
- 不同的最大分组长度
- 不同的服务(面向连接服务和无连接服务)
网络层向其上层提供的服务:
(一)面向连接的虚电路服务:
核心思想:可靠通信应由
网络自身
来保证。
- 必须先建立网络层连接 – 虚电路(virtual circuit,VC),以保证通信双方所需的一切网络资源。
- 通信双方沿着已建立的虚电路发送分组。
- 通信结束后,需要释放之前建立的虚电路。
(二)无连接的数据包服务:
核心思想:可靠通信应由
用户主机
来保证。
- 不需要建立网络层连接。
-
每个分组可走不同的路径,故
每个分组的首部都必须携带目的主机的完整地址
。 - 通信结束后,没有需要释放的连接。
网际协议IP:
概述:
网际协议(Internet Protocol,IP)是TCP/IP体系结构(TCP是传输控制协议、IP是网际协议)网际层中的核心协议。
IPv4概述:
IPv4地址,就是给因特网Internet上的每台主机(或路由器)的每个接口分配一个(全世界范围内唯一的)32位比特的标识符。
32位比特的IPv4地址,采用
点分十进制
表示方法。
IPv4地址的编址经历的三个阶段:
分类编址(1981) —> 划分子网(1985) —> 无分类编址(1993)
分类编址:
A类地址:
-
最小网络号0,保留不指派
。 -
最大网络127,作为本地环回测试地址,不指派
。- 最小的本地环回测试地址127.0.0.1
- 最大的本地环回测试地址127.255.255.254
-
可指派的网络号:1 ~ 126,具体如下
- 第一个可以指派的网络号1,网络地址为1.0.0.0
- 最后一个可指派的网络号为126,网络地址为126.0.0.0
-
每个网络中可分配的IP地址数量为 2^24 – 2(去掉
主机号为全0的网络地址
和
主机号为全1的广播地址
)。
B类地址:
- 最小网络号也是第一个可指派的网络号128.0,网络地址是128.0.0.0
- 最大网络号也是最后一个可指派的网络号191.255,网络地址是191.125.0.0
- 可指派的网络数量:2^(16 – 2)
- 每个网络中可分配的IP地址数量:2^16 – 2
C类地址:
- 最小网络号,即第一个可以指派的网络号192.0.0,网络地址为192.0.0.0
- 最大网络号,即最后一个可以指派的网络号223.255.255,网络地址为223.255.255.0
- 可指派的网络数量:2^(24 – 3)
- 每个网络中可分配的IP地址数量:2^8 – 2
总结:
-
网络类型的判断(网络号):
<127
为
A
类、
128 < B < 191
为
B
类、
192 < B < 223
为
C
类。 -
地址为
0.0.0.0
是一个特殊的
IPv4
地址,只能作为源地址使用,表示 “本网络上的本主机”。以127开头且后面三个字非 “全0” 或 “全1” 的
IP
地址,是一类特殊的
IPv4
地址,
既可作为源地址使用,也可作为目的地址使用
,用于本地环回测试(常用的本地环回测试地址:
127.0.0.1
)。 -
以下三种情况的地址不能指派给主机或路由器接口:
1)A类网络号的0 和 127
2)主机号为 “全0”
3)主机号为 “全1”
划分子网:
基本介绍:
32位比特的
子网掩码
可表明分类
IP地址的主机号部分借用了几比特作为子网号
。
-
子网掩码,用来连续的比特1来对应
网络号和子网号
-
子网掩码,用来连续的比特0来对应
主机号
- 将划分子网的IPv4地址与其相对应的子网掩码,进行逻辑与运算,就可得到IPv4地址所在的网络地址
-
默认子网掩码:指在未划分子网的情况下使用的子网掩码。
举例:
1、将
IPv4=218.75.230.0
,使用子网掩码为
255.255.255.1
进行子网划分。
2、将
IPv4=218.75.230.0
,使用子网掩码为
255.255.255.192
进行子网划分。
无分类编址:
由于分类编址(ABC类和子网掩码)和划分子网均会产生地址浪费的问题,故采用无分类编址方法,来进一步解决IP地址紧张的问题。
基本介绍:
无分类域间路由选择
(classless inter-domain routing)CIDR
:
-
CIDR
消除了传统的A类、B类和C类地址,以及划分子网的概念 -
CIDR
可以更有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增加
CIDR
使用 “斜线记法” ,即在IPv4地址后面加上斜线 “/”,并在其后写上
网络前缀所占的比特数量
。
CIDR
实际上是将
网络前缀都相同的连续的IP地址,组成一个 “CIDR地址块”
。只需知道CIDR地址块中的任何一个地址,就可知道该地址块的全部细节:
- 地址块的最小地址
- 地址块的最大地址
- 地址块中的地址数量
- 地址块聚合某类网络(A、B、C类)的数量
- 地址掩码(也可称为子网掩码)
举例:
路由聚合(构造超网):
路由聚合(构建超网)的方法:
找共同前缀
。
网络前缀越长,地址块越小,路由越具体。
若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,称为
最长前缀匹配
(这样的路由更具体)。
IPv4的应用规划:
定长子网掩码
(Fixed Length Subnet Mask)FLSM
:
(Fixed Length Subnet Mask)FLSM
- 使用同一个子网掩码来划分子网
- 子网的划分方式不灵活:只能划分出2^n个子网(n是从主机号部分借用的用来作为子网号的比特数量)
- 每个子网所分配的IP地址数量相同,会造成IP地址的浪费
变长的子网掩码
(Variable Length Subnet Mask)VLSM
:
(Variable Length Subnet Mask)VLSM
- 使用不同的子网掩码来划分子网
- 子网的划分方式灵活:可按需分配
- 每个子网所分配的IP地址数量可以不同,尽量减少对IP地址的浪费
IP地址:
IP地址和MAC地址:
基本介绍:
IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器接口)
之前介绍的MAC地址不具备区分不同网络的功能。
-
如果只是一个单独的网络,
不接入因特网,可只使用MAC地址
-
如果主机所在的网络
要接入因特网,则IP地址和MAC地址都需要使用
从网络体系结构,看IP地址和MAC地址:
数据包转发过程中,IP地址与MAC地址的变化:
-
数据包在转发过程中,
源IP、目的IP地址保持不变
-
数据包在转发过程中,
源MAC、目的MAC地址逐个链路(或逐个网络)改变
ARP地址解析协议:
IP_ARP_MAC总结:
IP数据报的发送和转发过程:
包含以下两个部分:
-
主机发送IP数据报
判断目的主机是否与自己在同一个网络(网段):
-
在同一个网络,则
直接交付
; -
不在同一网络,则需要间接交付,传输给主机所在网络的
默认网关(路由器)
,
由默认网关帮忙转发
;
-
在同一个网络,则
-
路由器转发IP数据报
1)检查IP数据报首部是否出错:
- 出错,则直接丢弃该IP数据报并通告源主机
- 没出错,则进行转发
2)根据IP数据报的目的地址在路由表中查找匹配的条目:
- 找到匹配的条目,则直接转发给条目中指示的下一跳
- 找不到,则丢弃该IP数据报并通告源主机
补充:
-
为了重点强调TCP/IP协议栈的网际层发送和转发IP数据报的过程上,本节忽略使用
ARP协议来获取目的主机或路由器接口的MAC地址、以太网交换机自学习和转发帧的过程
。 -
IP路由器工作在TCP/IP体系结构的网际层(或称IP层),TCP/IP体系结构的网际层并不负责可靠传输,也就是
不能确保传输的IP分组不丢失
。设备 工作范围 隔离冲突域 隔离广播域 中继器、集线器 物理层 × × 网桥、交换机(多端口网桥) 数据链路层(包含物理层) √ × 路由器 网络层 √ √ -
IP路由器对收到的IP分组进行差错校验,当发现错误时会丢弃该IP分组并向源主机发送ICMP差错报告报文(类型为参数错误)。
发送和转发过程的思考:
-
源主机如何知道目的主机是否与自己在同一个网络中?
答:目的地址 & 源子网掩码 != 源网络地址 ==> 不在同一网络
目的地址 & 源子网掩码 = 源网络地址 ==> 在同一网络
-
主机C如何知道路由器R的存在?
答:通过将路由器接口0的IP地址,作为左边子网的
默认网关
通过将路由器接口1的IP地址,作为右边子网的默认网关
-
路由器收到IP数据报后如何转发?
-
检查IP数据报首部是否出错:
出错,则直接丢弃该IP数据报并通告源主机
没有出错,则进行转发
-
根据IP数据报的目的地址在路由表中查找匹配的条目:
找到匹配的条目,则转发给条目中指示的下一跳
找不到,则丢弃该IP数据报并通告源主机
-
IPv4数据报的格式:
-
版本:表示IP协议的版本。目前广泛使用的IP协议版本号为4,即
IPv4
。注:通信双方必须使用相同版本的IP协议。
-
首部长度:表示IP数据报首部的长度。以4字节为单位。
-
可选字段:用来支持排错、测量及安全等措施。(很少被使用)
-
填充字段:确保首部长度为4字节的整数倍,用0填充。
-
区分服务:用来获得更好的服务。只有在使用区分服务时,该字段才起作用,一般情况下都不能使用该字段。
-
总长度:表示IP数据报的总长度 = 首部 + 数据载荷。
-
标识、标志、片偏移:
-
标识:属于
同一个数据报的各分片数据报应该具有相同的标识
注:IP软件维持了一个计数器,每产生一个数据报,计数器值加一,并将此值赋给标识字段。
-
标志:DF位、MF位、保留位
1)
DF
位:1表示不允许分片、0表示允许分片2)
MF
位:1表示“后面还有分片”、0表示“这是最后一个分片”3)保留位:必须为0
-
片偏移:指出分片数据报的数据载荷部分偏移其原数据报的位置有多少个单位。
举例:
-
-
生存时间TTL:
-
最初以秒为单位,最大生存周期为255秒。
路由器转发
IP
数据报(不为0才转发,否则直接丢弃)后需要减掉其在本路由器上耗费的时间。 -
现在以 “跳数” 为单位,路由器转发IP数据报(不为0就转发;否则就丢弃)后,该字段的值减1。
-
-
协议:指明
IPv4
数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议数据字段值:
协议名称 ICMP IGMP TCP UDP IPv6 OSPF 协议字段值 1 2 6 17 41 89 -
首部检验和:用来检测首部在传输过程中是否出现差错,比
CRC
检验码简单,称为因特网检验和。- IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能会发生变化。
- 因IP层本身并不提供可靠的服务,且计算首部检验和是一件耗时的事,故在IPv6中,为了更快转发IP数据报,路由器不再计算首部检验和。
-
源IP地址和目的
IP
地址:发送该IP数据报的源主机的
IP
地址、接收该IP数据报的目的主机的
IP
地址。
路由器:
路由器的基本工作过程:
路由条目的类型:
-
直连网络
-
静态路由(人工配置)
-
常见的静态路由:
① 人工配置的网络路由
②
默认路由
(目的网络为0.0.0.0,地址掩码为0.0.0.0)③
特定主机路由
(目的网络为特定主机IP地址,地址掩码为255.255.255.255)④
黑洞路由
(下一跳为
null0
) -
这种人工配置方式简单、开销小,但
不能及时适应网络状态
(流量、拓扑等) 的变化 -
一般只在
小规模网络
中采用
-
-
动态路由(路由选择协议)
-
路由器通过路由选择协议
自动获取路由信息
-
比较复杂、开销比较大,能较好地
适应网络状态的变化
-
适用于
大规模网络
-
路由器通过路由选择协议
静态路由配置及可能产生的路由环路问题:
-
静态路由配置是指用户或网络管理员,使用路由器的相关命令给路由器进行人工配置路由表。
- 人工配置方式简单、开销小,但不能及时的适应网络状态的变化。
- 一般只在小规模网络中使用。
-
使用静态路由配置,可能出现以下导致产生路由环路的错误:
-
配置错误
-
聚合了不存在的网络
-
网路故障
-
因特网采用的路由选择协议:
主要特点:
分层次
路由选择协议:
常见的路由选择协议:
-
内部网关协议IGP(如RIP或OSPF)
- 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络
- 无需考虑自治系统外部其他方面的策略
-
外部网关协议EGP(如BGP)
- 在不同的自治系统内,度量路由的 “代价”(距离、带宽、费用等)可能不同。因此,对自治系统之间的路由选择,使用 “代价” 作为度量来寻找最佳路由是不行的。
路由信息协议RIP:
路由信息协议RIP(
Routing Information Protocol
)是内部网关协议IGP中最先得到并广泛使用的协议之一。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
注:允许一条路径
最多只能包含15个路由器(16表示目的网络不可达)
,故
RIP只适用于小型互联网。
RIP要求
自治系统AS
内, 每个路由器都要维护从它自己到AS内其他每个网络的距离记录。这是一组距离,又称 “距离向量D-V(Distance-Vector)”。
-
RIP认为**
好的路由就是 “距离短” 的路由
**,即所通过路由器数量最少的路由,并没有考虑网络的带宽和时延。 -
当到达同一个目的网络有多条 “距离相等” 的路由时,可以进行
等价负载均衡
。
RIP包含以下三个要点:
-
和谁交换
信息:仅和
相邻路由器
交换信息 -
交换什么
信息:自己的
路由表
-
何时交换
信息:
周期性交换
(例如每30秒)
举例:RIP的基本工作过程。
-
路由器刚工作时,
只知道自己直连网络的距离为1
-
每个路由器
仅和相邻路由器周期性交换并更新路由信息
-
若干次交换和更新后,
每个路由器都知道到达AS内各网络的最短距离和下一跳地址
,称为
收敛
。
举例:RIP的路由条目更新规则。
RIP存在 “坏消息传播很慢” 的问题:
,又称为
路由环路
或
无穷计数问题
,这是
距离向量算法的一个固有问题
。
可采用很多措施
减少
出现该问题的概率
或
减小
该问题带来的危害
。
-
限制最大路径距离
为15(16表示不可达) -
当路由器发生变化时,就立即发送更新报文(即“
触发更新
”),而不仅仅是周期性更新 -
让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“
水平切割
”)
开放最短路径优先协议OSPF:
基本介绍:开放最短路径优先OSPF(
Open Shortest Path First
),是为了克服RIP的缺点开发出来的。
-
“开放”:OSPF协议是
公开发表
的 -
“最短路径优先”:指使用了Dijkstra提出的
最短路径算法SPF
。采用SPF算法计算路由,从算法本身保证了不会产生路由环路。
-
OSPF不限制网络规模,更新效率高,收敛速度快。
工作原理:
OSPF是
基于链路状态的
,而不像RIP那样是基于距离向量的。
链路状态:本路由器都
和哪些路由器相邻
,以及相应
链路的 “代价”
。
-
代价:表示费用、距离、时延、带宽等,这都是由网路管理人员来决定。
-
OSPF相邻路由器通过交互
问候(Hello)分组
,建立和维护
邻居关系
。-
Hello分组
封装在IP数据报
中,发往组播地址224.0.0.5
- 发送周期10s
- 40s未收到来自邻居路由器的Hello分组,则认为该邻路由器不可达
-
Hello分组
-
使用OSPF的每个路由器都会产生
链路状态通告LSA
(Link State Advertisement),并用
链路状态数据库LSDB
存储LSALSA中包含的内容:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。
-
使用链路的各路由器
基于LSDB进行最短路径优先SPF计算
,构建出各自到达其他路由器的最短路径,即构建各自的路由表。
OSPF有以下五种分组类型:
-
类型1:
问候
(Hello)分组用来发现和维护邻居路由器的可达性
-
类型2:
数据库描述
(Database Description)分组向邻居路由器给出自己的链路状态数据库中,所有链路状态项目的摘要信息
-
类型3:
链路状态请求
(Link State Request)分组向邻居路由器请求发送某些链路状态项目的详细信息
-
类型4:
链路状态更新
(Link State Update)分组路由器使用这种分组将其链路状态进行泛洪发送,即用泛洪法对全网更新链路状态
-
类型5:
链路状态确认
(Link State Acknowledgment)分组这是对链路状态更新分组的确认分组
OSPF的基本工作过程:
OSPF在多点接入网络中路由器邻居关系的建立:
-
选举指定路由器DR(designed router)和备用的指定路由器BDR(backup designed router)
-
所有的非DR/BDR只与DR/BDR建立邻居关系
-
非DR/BDR之间通过DR/BDR交换信息
为了使OSPF能够用于大规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,称为区域(Area)。
通过将AS划分为不同的区域,降低了每个区域内交换路由信息的通信量大小,从而能适应大规模的网络。
边界网关协议BGP:
不同的自治系统内,度量路由的 “代价”(距离、带宽、费用等)可能不同。在不同的自治系统间的路由选择,使用 “代价” 作为度量来寻找最佳路由是不行的。
自治系统间的路由选择必须考虑相关策略(政治、经济、安全等)。
BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈),而
并非寻找一条最佳路由
。
基本工作原理:
- 在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的 “BGP发言人”。
-
不同的自治系统的BGP发言人要交换路由信息
-
首先需建立TCP连接(端口号179),在此TCP连接上交换BGP报文以
建立BGP会话
-
利用BGP会话
交换路由信息
(增加新的路由、撤销路由、报告出错情况等) -
使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的
邻站
或
对等站
-
首先需建立TCP连接(端口号179),在此TCP连接上交换BGP报文以
- BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,如OSPF或RIP。
-
BGP发言人
交换网络可达性的信息
(要到达某个网络所要经过的一系列自治系统) -
互相交换网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中
找出到达各自治系统的较好路由
,即构造树形结构(不存在回路的自治系统连通图)
BGP-4有以下四种报文:
- OPEN报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化
- UPDATE报文:用来通告某个路由的信息,以及列出要撤销的多条路由
- KEEPALIVE报文:用来周期性地证实邻站的连通性
- NOTIFICATION报文:用来发送检测到的差错
注:目前使用最多的BGP协议的版本BGP-4。
BGP报文被封装在TCP报文段中进行传输
。
网际控制报文协议ICMP:
网络传输中遇到问题,需要传出消息(报告遇到了什么问题),这样才可以调整传输策略,以此来控制整个局面。即为了更有效地转发IP数据报和提高交付成功的机会,在
网际层使用了网际控制报文协议ICMP
(Internet Control Message Protocol)。
注:
ping 就是基于 ICMP 协议工作的
。
主机或路由器使用ICMP来
发送
差错报文和询问报文
。
ICMP报文
被
封装在IP数据报
中发送
。
差错报文:
ICMP差错报告报文共有五种:
-
终点不可达:
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可根据ICMP字段细分为:目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络/主机未知等13中错误。
-
源点抑制:
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率降低。
-
时间超时:
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段值减一。
- TTL != 0,则将该IP数据报发送出去
- TTL= 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:
-
用来
测试主机或路由器的连通性
-
应用层直接使用网际层的ICMP
(
没有通过运输层的TCP/UDP
) - 使用ICMP回送请求和回答报文
跟踪路由:
-
用来测试IP数据报从
源主机到达目的主机要经过哪些路由器
-
windows版本:
-
tracert
命令 -
应用层直接使用网际层ICMP
-
使用了ICMP
回送请求、回答报文、差错报告报文
-
-
Unix版本:
-
traceroute
命令 -
在运输层使用UDP协议
-
仅使用ICMP
差错报告报文
-
虚拟专用网VPN和网络地址转换NAT:
虚拟专用网:
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。
IPv4地址较紧张,故一个机构能申请的IPv4地址数量远小于本机构主机数量。
因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的
专用地址
。因特网使用的是
公用地址
。
网络地址转换NAT:
无分类编址、网络地址转换NAT(
Network Address Translation
),均是为了缓解IPv4地址空间即将耗尽的问题。
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
该转换方法存在的问题:如果NAT路由器具有n个全球IP地址,那么至多只能有N个主机同时和因特网上的主机通信。
由于绝大多数网络应用都是用的是TCP/UDP来传输数据,故可以利
用运输层的端口号和IP地址一起进行转换
。这样,
同一个全球IP地址,就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信
。这种将端口号和IP地址同时进行转换的技术,称
为网络地址与端口号转换NAPT
(
Network Address and Port Translation
)。
注意:1)外网主机能否首先发起通信?
2)由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护。
IP多播技术:
多播
Multicast
是一种实现 “
一对多
” 通信的技术与传统的单播 “一对一” 通信相比,可
极大地节省网络资源
。
因特网上进行的多播,称为
IP多播
。
因特网上进行IP多播通信,路由器需要解决哪些主要问题?
- IP多播数据报的寻址
- 多播路由选择协议
IPv4中,D类地址被称为多播地址。多播地址只能作为目标地址,不能作为源地址。
用每一个D类地址来标识一个多播组,使用用一个IP多播地址接收IP多播数据报的所有主机就构成了一个多播组。
- 每个多播组的成员,可以随机变动(一台主机可随时加入和离开多播组)
- 多播组成员的数量和所在的地理位置也不受限制(一台主机可属于几个多播组)
非多播组的成员,也可以向多播组发送IP多播数据报
与IP数据报相同,IP多播数据报也是“
尽最大努力交付
”,不保证一定能够交付给多播组的所有成员。
IP多播地址的分类:
IP多播可分为:
只在本局域网上进行的硬件多播:
由于MAC地址(又称为硬件地址)有多播MAC地址这种类型,故只需要把IPv4多播地址映射成多播MAC地址,即可将IP多播数据报封装在局域网的MAC帧中,而
MAC帧首部的目的MAC地址字段的值
,就设置为由
IPv4多播地址映射成的多播MAC地址
。这样,就方便地
利用硬件多播来实现局域网内的IP多播
。
由于
IP多播地址与多播MAC地址的映射关系不是唯一的
,因此收到IP多播数据报的主机还要
在网际层利用软件进行过滤
,将不是主机要接收的IP多播数据报丢弃。
在因特网上进行的多播:
在因特网上进行IP多播,就必须考虑
IP多播数据报经过多个多播路由器进行转发
的问题。
-
多播路由器必须
根据IP多播数据报首部中的IP多播地址
,将其
转发到有该多播组成员的局域网
。
在因特网上进行IP多播需要两种协议:
- IGMP协议
- 多播路由选择协议
注:目前大部分主机都是通过局域网接入因特网的。因此,在因特网上进行多播的最后阶段,还是要把IP多播数据报在局域网上用
硬件多播
交付给多播组的所有成员。
网际组管理协议IGMP:
基本介绍:
IGMP(Internet Group Management Protocol)是TCP/IP体系结构网际层中的协议,其作用是
让连接在本地局域网上的多播路由器知道本局域网上是否有主机
(实际上是主机中的某个进程)
加入或退出某个多播组
。
注:IGMP
仅在本网络中有效
,使用IGMP并
不知道多播组包含成员的数量 和 成员分布在那些网络中
。
三种报文类型:
成员查询报文、成员报告报文、离开组报文
IGMP被封装在IP数据报中传送:
基本工作原理:
加入多播组:
监视多播组成员变化:
多播路由器默认每个125秒就向其直连网络发送一个封装有
IGMP成员查询报文
的IP多播数据报。
- 同一网络中的多播路由器可能不止一个,但没有必要每个多播路由器都周期性地发送IGMP成员查询报文
-
只要在这些多播路由器中选择一个作为
查询路由器
,由查询路由器发送 IGMP成员查询报文而其他的多播路由器仅
被动接收响应并更新自己的多播组列表
即可 -
选择查询路由的方法:
- 每个多播路由器若监听到源IP地址比自己的IP地址小的IGMP成员查询报文则退出选举
-
最后,网络中只有
IP地址最小的多播路由器成为查询路由器
退出多播组:
总结:
多播路由选择协议:
基本介绍:
主要任务是:在多播路由器之间为
每个多播组
建立一个
多播转发树
。
-
多播转发树连接
多播源
和
所有拥有该多播组成员的路由器
。 -
IP数据报
只要
沿着多播转发树进行洪泛
,就能被传送到拥有该多播组成员的多播路由器。 -
之后,
在多播路由器所直连的局域网内
,多播路由器通过
硬件多播
,将IP多播数据报发送给该多播组的所有成员。
针对不同的多播树需要维护不同的多播转发树,而且必须动态适应多播组成员的变化。
为了覆盖多播组的所有成员,
多播转发树可能要经过一些没有多播组成员的路由器
。
目前以下两种方法来构建多播转发树:
-
基于源树
Source-Base Tree
多播路由选择:反向路径多播算法
Reverse Path Multicasting
,RPM(其中 “反向路径” 在计算最短路径时把源点作为终点)。RPM算法包含的步骤:
-
利用反向路径广播(
Reverse Path Broadcasting
,RPB)算法建立一个
广播转发树
RPB算法的要点:每台主机收到一个广播分组后,先
检查广播分组是否是从源点经最短路径传送来的
。- 若是,本路由器就从自己除刚接收该广播分组的接口外的其他接口转发该广播分组
- 否则,丢弃该广播分组
- 如果本路由器有好几个邻居路由器,都处在到源点的最短路径上(即存在好多条同样的最短路径),则选取邻居路由器中IP地址最小的那条最短路径
-
利用
剪枝
(Pruning)算法,剪除广播转发数树中的下游非成员路由器,获得一个
多播转发树
要建立广播转发树,可使用
洪泛(Flooding)法
。注:利用反向路径广播RPB算法生成的广播转发树,不会存在环路,因此可以避免广播分组在环路中兜圈。
-
-
组共享树
Group-Shared Tree
多播路由选择:采用
基于核心的分布式生成树算法
来建立共享树。该方法在每个多播组中指定一个
核心Core路由器
,以该路由器为
根
,建立一棵
连接多播组的所有成员路由器的生成树
,
作为多播转发树
。每个多播组中除了核心路由器,其他所有成员路由器都会向所在多播组中的核心路由器
单播
加入报文
。-
加入报文,通过单播朝着核心路由器转发,直到它
到达已经属于该多播生成树的某个节点
或者
直到到达该核心路由器
-
加入报文所经过的路径,就确定了一条
从单播该报文的边缘节点到核心路由器之间的分支
,而这个
新分支就被
嫁接
到现有的
多播转发树
上
-
加入报文,通过单播朝着核心路由器转发,直到它
移动IP技术:
移动性对因特网应用的影响:
- 用户在不同地点使用不同的IP地址,这对用户的因特网应用并没有影响
- 如果用户不断移动导致不停改变自己的IP地址,该用户将不能顺利完成这项下载任务,即这会影响该用户的因特网应用
相关的基本概念:
移动IP(Mobile IP)技术
,使得
移动主机在各网络之间漫游时,仍能保持其原来的IP地址不变
。
移动IP技术,还为因特网中的非移动主机提供了相应机制,使得它们能够将IP数据报正确发送到移动主机。
基本工作原理:
代理发现与注册:
固定主机向移动主机发送IP数据报:
移动主机向固定主机发送IP数据报:
同址转交地址方式:
三角形路由问题:
软件定义网络:
SDN基本介绍:
软件定义网络(
Software Defined Network
,
SDN
)是一种新型的网络。
路由器的功能:
-
为主机间的通信提供
转发
服务 -
路由选择
路由器之间传送的消息:
-
主机间的分组
-
路由信息
:路由信息 –[路由算法]–> 路由表 —-> 转发表
在SDN体系结构中,路由器中的路由软件都不存在了,故路由器之间不再交换路由信息。
-
在控制层面中,有一个在
逻辑上集中
的
远程控制器
- 逻辑上集中的远程控制器,物理上可由不同地点的多个服务器组成
- 远程控制器掌握各主机和整个网络的状态、能为每个分组计算出最佳的路由、为每个路由器生成其正确的转发表
SDN新型网络体系结构,
核心思想
:将
网络的控制层面和数据层面分离
,而
让控制层面利用软件来控制数据层面中的许多设备
。
OpenFlow协议:
该协议,可看作是SDN体系结构中,
控制层面与数据层面之间的通信接口
。
OpenFlow协议可使得控制层面的控制器可以对数据层面中的物理设备进行直接访问和控制。
传统意义上的数据层面的任务:
根据转发表转发分组
。转发分组分为以下步骤:
-
进行 “
匹配
”:查找转发路由表中的
网络前缀
,进行
最长前缀匹配
-
执行 “
动作
”:把分组从匹配结果指明的接口转发出去
SDN的广义转发分为以下两个步骤:
-
进行 “匹配”:能够对网络体系结构中,
各层(数据链路层、网络层、运输层)首部中的字段
进行匹配。 -
执行 “动作”:不仅
转发分组
,还可进行
负载均衡、重写IP首部
(类似NAT路由器中的地址转换),人为地阻挡或丢弃一些分组(类似防火墙一样)。
在SDN的广义转发中,完成 “匹配+动作” 的设备并不局限在网络层工作,因此不再称为路由器,而称为
OpenFlow交换机、分组交换机、交换机
。
相应的,取代传统路由器中转发表的是“
流表
(Flow Table)”。
-
一个
流
就是穿过网络的一种
分组序列
,而在此序列中的每个分组都
共享分组首部某些字段的值
。如某个流可以是具有共同源IP地址和目的IP地址的一连串分组。 -
OpenFlow交换机中,
流表是由SDN远程控制器来管理的
。SDN远程控制器通过一个
安全信道
,使用OpenFlow协议来管理OpenFlow交换机中的流表。
-
每个OpenFlow交换机,必须有
一个或多个流表
-
每个流表可以包含
多个流表项
-
每个流表项包含三个字段:首部字段值(或称匹配字段)、计数器、动作
-
首部字段值
,包含一组字段,用来使分组
Incoming Packet
的对应首部与之匹配,因此又称为
匹配字段
。
匹配不上的分组就被丢弃,或被发送到SDN远程控制器做更多处理
。 -
计数器字段
:是一组计数器-
记录已经与该流表项
匹配的分组数量
的计数器 -
记录
该流表项上次更新到现在经历时间
的计数器
-
记录已经与该流表项
-
动作字段
:是一组动作当分组匹配某个流表项时,执行该流表项中动作字段指明的以下某个或多个动作:
- 把分组转发到指明的端口
- 丢弃分组
- 把分组进行复制后,再从多个端转发出去
- 重写分组的首部字段(包括数据链路层、网际层、运输层的首部)
-
举例:
简单转发:
负载均衡:
SDN体系结构及其四个关键特征:
- 基于流的转发
- 数据层面与控制层面分离
- 位于数据层面分组交换机外的网络控制功能
- 可编程的网络
运输层:
引入:
前面提到的物理层、数据链路层、网络层等,共同解决了将主机通过异构网络互连起来所面临的问题,
实现了主机到主机的通信
。
实际中,计算机网络中进行
通信的真实实体是位于
通信两端主机中的进程
。
如何为运行在不同主机上的应用程序,提供直接的通信服务是运输层的任务
,运输层协议又称
端到端的协议
。
TCP/IP运输层中两个重要的协议:
运输层的端口号、复用、分用的概念:
运输层的端口号:
-
运行在计算机上的进程,需要
进程标识符PID
来标识 -
因特网上的计算机,不同的操作系统(windows、Linux、Mac OS)使用
不同格式的进程标识符
-
为了使运行在不同操作系统上的计算机应用程序,能够相互通信,就必须
使用统一的方法对TCP/IP体系的应用进程进行标识
-
TCP/IP体系结构的运输层,使用
端口号
来区分不同的应用进程:端口号:使用
4字节
表示,取值范围0~65535-
熟知端口号
:0 ~ 1023,IANA把这些端口号分配给了TCP/IP体系中最重要的一些应用协议,如下图 -
登记端口号
:1024 ~ 49151,为没有熟知端口号的应用程序使用,使用该类端口号需要在IANA按照规定的手续登记防止重复 -
短暂端口号
:49152 ~ 65535,
留给客户进程选择暂时使用
。当服务器进程收到了客户端进程的报文时,就知道客户进程使用了动态端口号。通信结束后,会将该端口号分配给其他客户进程以后使用。
端口号只具有本地意义,即
只是为了标识本计算机应用层中的各进程
,在
因特网中不同计算机中的相同端口是没有联系的
。 -
发送方的复用和接收方的分用:
-
当设备作为接收方时,传输层则需要将数据包传给应用进程,但一台设备上同时可能有多个应用进程在运行,故需要有一个编号将应用进程区分,即
端口号
。 -
由于
发送方传输层报文会携带端口号
,故接收方可根据端口号识别出该报文是发送给哪个应用进程。
TCP报文段的首部格式:
-
为实现
可靠传输
,TCP采用
面向字节流
的方式。 -
但TCP在发送数据时,是
从发送缓存取出一部分或全部字节
并给其
添加一个首部
,使之成为
TCP报文段
后发送。- 一个TCP报文段由首部和数据载荷两部分构成
- TCP的全部功能,都体现在首部中各字段的作用
-
源端口:用来标识
发送TCP报文段的应用进程
-
目的端口:用来标识
接收该TCP报文段的应用进程
-
序号 & 确认号 & 确认标志位ACK:
-
序号:取值范围[0, 2^32-1],序号增加到最后一个后,下一个序号就又回到0。作用:
指出本TCP报文段数据载荷的第一个字节的序号
。注:用来
解决
网络包乱序
的问题
。 -
确认号:取值范围[0, 2^32-1],确认号增加到最后一个后,下一个确认号就又回到0。作用:
指出期望接收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认
。注:若确认号=n,则标识序号
n之前的所有数据都已被正确接收,期望接收序号为n的数据
。用来
解决
丢包
问题
。 -
确认标志位ACK:
取值为1时确认号字段才有效
,为0则无效。注:
TCP规定在连接建立后,所有传送的TCP报文段都必须把ACK置1。
-
-
控制位:
-
同步标志位SYN:在TCP连接建立时,用来同步序号,
-
终止标志位FIN:用来释放TCP连接
-
复位标志位RST:用来复位TCP连接。
RST=1表明TCP连接出现异常,必须释放连接,然后再重新建立连接。(即将RST置一,可拒绝一个非法的报文段或拒绝打开一个TCP连接。)
-
推送标志位PSH:
接收方的TCP收到该标志位为1的报文段会
尽快上交应用进程
,而不必等到接收缓存都填满再向上交付。 -
紧急标志位URG :URG=1时紧急指针字段有效,否则无效。
紧急指针:用来指明紧急数据的长度。
当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。
紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
-
-
窗口:指出
发送本报文段的一方的接收窗口
。窗口值作为接收方让发送方设置其发送窗口的依据。
以接收方的接收能力,来控制发送方的发送能力,称为
流量控制
。发送窗口 = min{ 接收窗口,拥塞窗口 },即
swnd = min{ rwnd,cwnd }
注:窗口大小,用来做
流量控制
。 -
数据偏移:用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远,即
TCP报文段的首部长度
。以4字节为单位,
- 首部固定长度为20字节,故数据偏移字段的最小值为(0101)
- 首部固定长度为60字节,故数据偏移字段的最大值为(1111)
-
校验和:
检查范围包括TCP报文段的首部和数据载荷两部分
,在计算校验和时,要在TCP报文段前加12字节的伪首部。 -
保留:保留为今后使用,但目前应置为0。
-
选项(长度可变):用来
增加TCP的功能
。- 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。
- 窗口扩大选项:为了扩大窗口(提高吞吐率)。
- 时间戳选项:用来计算往返时间RTT、用来处理序号超范围的情况,又称为防止序号绕回PAWS。
- 选择确认选项:用来实现选择确认功能。
-
填充:(因选项长度可变)需要
确保报文段首部能被4整除
(因数据偏移字段(首部长度),是以4字节为单位的)。
TCP的运输连接管理:
TCP是面向连接的协议,基于
运输连接
来传输TCP报文段的。
TCP运输连接的
建立和释放
每一次面向连接的通信中必不可少的过程。
TCP的连接建立:
连接建立过程中,要解决的三个问题:
-
使TCP双方能够
确知对方的存在
-
使TCP双方能够
协商一些参数
(如最大窗口值、是否使用窗口扩大选项和时间戳选项、服务质量等) -
使TCP双方能够
对运输实体资源
(缓存大小、连接表中的项目等)
进行分配
TCP使用 “三报文握手” 建立连接:
-
起初,客户端和服务端都处于
CLOSE状态
,先是服务端主动监听某个端口,处于
LISTEN状态
。 -
客户端随机初始化序列号
client_isn
,之后置 “序号=
client_isn
” 和 ”SYN=1”,并标识该报文为SYN报文。将该
SYN报文
(该报文不包括应用层数据)发送给服务端(即向服务端发起连接),之后客户端处于**
SYN-SENT
状态**。 -
服务端收到客户端的SYN报文后,首先服务端也随机初始化自己的序号
server_isn
,并置 “序号=
server_isn
”、“确认应答号ack =
client_isn
+ 1” 和 “SYN=1”、“ACK=1”,并标识该报文为SYN+ACK报文。将该
SYN+ACK报文
发给送给客户端,之后服务器处于**
SYN-RCVD
状态**。 -
客户端收到服务器的SYN+ACK报文后,还要向服务端回应最后一个ACK应答报文,其需要置 “确认应答号ack =
Server_isn + 1
” 和 “ACK=1”。将该
ACK报文
发送给服务端(
可以携带客户端到服务端的数据
),之后客户端处于**
ESTABLISHED
状态**。
总结:
① 建立TCP连接过程中,前两次握手不可以携带数据,但第三次可携带数据。
② 一旦完成三次握手,客户端和服务器端两者均处于
ESTABLISHED状态
,即可以相互通信了。
三次握手是否可以是两次,即发送针对 “TCP连接请求的确认的确认” 是否多余?
必须经历三次握手,主要有下列三种原因:
-
阻止重复历史连接的初始化
(主要原因); -
同步双方的初始化序列号(这里的序列号是为了
避免历史连接的干扰
); - 避免资源浪费;
TCP的连接释放:
双方都可以主动断开连接
,断开连接后主机中的资源将被释放。
TCP通过“四次挥手”来释放连接:
-
客户端打算关闭连接,此时会发送一个TCP首部**
FIN
=1
的
FIN报文**,之后客户端进入**
FIN_WAIT_1
状态**。 -
服务端口接收到该报文后,就向客户端发送**
ACK
应答报文**,接着服务端进入**
CLOSE_WAIT
状态**。 -
客户端收到服务端的
ACK
应答报文后,进入**
FIN_WAIT_2
状态**。 -
等待服务端处理完数据后,也向客户端发送**
FIN
报文**,之后服务端进入**
LAST_ACK
状态**。 -
客户端收到服务端的
FIN
报文后,会发送**
ACK
报文**,之后进入**
TIME_WAIT
状态**。 -
服务端收到
ACK
报文后,就进入**
CLOSE
状态**,至此服务端已关闭连接。客户端在经历过
2MSL
时间后,自动进入**
CLOSE
状态**,至此客户端已关闭连接。
注:由于通信双方都可以发起关闭连接的请求,故主动发起关闭连接的一方,才会有
TIME_WAIT
状态。。
TIME_WAIT
状态存在的必要性?
TIME_WAIT
如果客户端发起断开请求即发送
FIN
报文,之后客户端在接收到服务器的
FIN
报文后发送
ACK
报文,进入
TIME_WAIT
状态,即需要等待
2MSL
的时间才能进入
CLOSED
状态。
如果客户端不经历
TIME_WAIT
状态,在发送完
ACK
报文后直接进入
CLOSED
状态,会出现如下图的情况:
注:TCP连接释放过程中,在发送完最后一个
ACK
报文后,会进入
TIME_WAIT
状态,该状态的等待时间
2MSL
中会使本次连接持续时间内产生的所有报文段都会从网络中消失。
TCP中保活计时器的作用?
-
TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(
2h
定时) -
若保活计时器定时周期内,未收到TCP客户进程发来的数据,则
当保活计时器到时后,TCP服务器进程就向TCP客户端进程发送一个探测报文段
,以后则
每隔
75s
发送一次
。若一连发送
10个探测报文段后仍无客户进程的响应
,TCP服务器进程就认为
TCP客户进程所在主机出故障
了,接着会
关闭这个TCP连接
。
TCP可靠传输的实现:
滑动窗口:
-
目的:解决
无需所有数据包应答的问题
-
窗口:
没有应答的情况下,发送方可以发送多少数据
- 滑动:收到确认包、移动
TCP基于
以字节为单位的滑动窗口
来实现可靠传输。
- 发送方在未收到接收方的确认时,可将发送窗口内还未发送的数据全部发送出去
- 接收方只接受序号落在接收窗口内的数据
举例说明数据传输时滑动窗口的变化:
虽然发送方的发送窗口是根据接收方窗口设置的,但
同一时刻,发送方的发送窗口并不总是和接收方窗口一样大
。
- 网络传输窗口需要经历一定的时间滞后,并且这个时间是不确定的
- 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸
对
不按需到达的数据如何处理
,TCP没有明确规定:
- 如果接收方把不按序到达的数据一律丢掉,那接收窗口的管理会较简单,但这样对网络资源的利用不利(发送方会发送很多重复数据)
-
TCP通常对不按序到达的数据,先
临时存放在接收窗口中,等到字节流中所缺字节均收到后
,再
按序交付上层应用进程处理
。
TCP要求
接收方
必须有
累积确认
和
捎带确认机制
,这样可以减小传输开销。接收方可在合适的时机发送确认,也可在自己有数据要发送时把确认信息捎带上。
-
接收方不应过分推迟发送确认
,否则会导致发送方不必要的超时重传,这反而浪费网络资源。TCP标准规定,确认推迟时间不应超过0.5 s。
若收到一连串的MSS最大长度的报文段,则必须每隔一个报文段发送一个确认。
-
TCP通信是全双工通信
,即双方都可发送和接收数据,故双方都有发送窗口和接收窗口。
TCP流量控制:
基本介绍:
如果发送方一直不断的发送数据给接收方,当接收方处理不过来且缓存已满时,就会丢弃数据包,之后会导致触发发送方的重传机制,从而导致网络资源被无故浪费。
TCP通过流量控制
flow control
,即可让
发送方根据接收方的(接收)处理能力控制发送的数据量
,避免因丢包而导致的重传问题。
利用
滑动窗口机制
可以很方便地在TCP连接上实现对发送方的流量控制。
-
TCP接收方利用自己的
接收窗口
的大小,来限制发送方的
发送窗口
大小。 -
TCP发送方收到接收方的
零窗口通知
后,应启动
持续计时器
。持续计时器超时后,向接收方发送
零窗口探测报文(设有重传计时器)
。
窗口关闭的潜在风险:
TCP中,接收方在向发送方发送
ACK
报文时,通告窗口的大小的,进而限制发送方的窗口大小进而实现流量控制。
如果窗口大小为0时,发送方会停止发送数据给接收方。直到,接收方处理完数据后,会向发送方通告一个
窗口非0的
ACK
报文
,如果该报文在网络中丢失,这回导致
发送方一直等待接收方的非0窗口通知、接收方一直等待发送方发送的数据
,如不采取措施,这种相互等待就会造成
“死锁”
的现象。
如何解决窗口关闭时,潜在的死锁问题?
为了解决窗口关闭带来的死锁问题,TCP为每个连接设有一个持续定时器,只要
TCP连接一方收到对方的零窗口通知,就
启动持续计时器
。
一旦持续计时器超时,就会发送
零窗口探测报文
,而
对方在确认该探测报文后,会向其通告自己的接收窗口大小
。
- 如果接收方收到发送方发送的自己的接收窗口大小为0,则会重新启动持续计时器,重复发送零窗口探测报文的过程…
- 如果接收方收到发送方发送的自己的接收窗口大小不为0,则会打破局面。
注:1)零窗口探测报文发送次数一般为3次,如果三次后,收到的接收窗口的大小仍为0,则会发送**
RST
报文**中断TCP连接。
2)
零窗口探测报文段,设置有重传计时器
。即使传输过程中丢失了,也会在一定时间后重传零窗口探测报文。
3)
TCP发送方的发送窗口 = min{ 自身拥塞窗口,TCP接收方的接收窗口 }。
接收方的接收窗口为0,如何接收零窗口探测报文,又如何会发送(携带有自己接收窗口大小的)确认报文呢?
答:
TCP规定,即使接收窗口为0,接收方也必须接收零窗口报文段、确认报文段、携带有紧急数据的报文段。
TCP拥塞控制:
流量控制与拥塞控制的区别?
-
流量控制是为了避免发送方的数据填满接收方的缓存,通过接收方的窗口大小来限制发送窗口的大小,从而实现流量控制。
-
在网络中出现拥塞时,如果继续发送大量数据包时,可能会导致数据包时延、丢失等,会导致TCP重传数据,进而又加大了网络的负担…
当网络出现拥塞时,TCP就会降低发送的数据量(即是无私的协议)。
基本介绍:
某段时间,若网络中某个资源(计算机中,链路的容量(即带宽)、交换节点中的缓存和处理机等,都称为网络资源)的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况称为
拥塞
congestion
。
若出现拥塞而不进行控制,
整个网络的吞吐量将随输入负荷的增大而下降
。
拥塞窗口:
拥塞窗口**
cwnd
是发送方维护的一个状态变量,该变量会
根据网路中的拥塞程度动态变化**。
-
发送窗口swnd = min{ 接收窗口rwnd,拥塞窗口cwnd }
。
-
拥塞窗口**
cwnd
的维护原则**:只要网路没有出现拥塞,拥塞窗口就再增大一些;只要网络出现拥塞,则拥塞窗口就会减少一些。 -
判断
网络拥塞的依据
:只要发送方没有在规定时间内接收到
ACK
确认应答报文(即发生超时重传),则此时出现了网络拥塞。
四种拥塞控制算法:
下面各种算法讨论中的基本假设:
- 数据是的单方向传送的,另一方只能传送确认。
-
接收方总是有足够大的缓存空间
,因而发送方发送窗口的大小由网路的拥塞程度来决定,即
swnd = cwnd
(考虑接收方缓存大小有限时,
swnd = min{ rwnd, cwnd }
)。 -
以
最大报文段
MSS
的个数
为讨论问题的单位,不是以字节为单位。
慢启动&拥塞避免:
-
由于考虑到接收方缓存大小足够大,则
swnd = cwnd
。 -
初始化
cwnd=1
,表示初始时可传输一个
MSS
大小的数据段。 -
慢启动算法的规则:
发送方每收到一个
ACK
,拥塞窗口
cwnd
的大小就增加1。
-
维护一个**慢开始门限
ssthresh
**状态变量:-
当
cwnd < ssthresh
时,则使用慢启动算法(发包个数是指数级增加的) -
当
cwnd >= ssthresh
时,则改用拥塞避免算法(发包个数是线性级增长的)
,即一旦
cwnd
超过
ssthresh
值时,会采用拥塞避免算法。 -
当
-
拥塞控制算法的规则:
发送方每收到一个
ACK
,拥塞窗口
cwnd
的大小就增加
1/cwnd
。
-
如果继续按照拥塞避免算法发送,网络就会慢慢进入拥塞状态,即会出现丢包进而导致重传计时器超时。
此时判断网络可能出现了拥塞,故对发送方做如下调整:
-
更新
ssthresh
值为发生拥塞时
cwnd
的一半,即
ssthresh = cwnd / 2(拥塞时)
-
改变
cwnd=1
,并重新开始慢启动算法
-
更新
-
之后继续前面的过程…
总的来说,当
个别报文段在网络中丢失
,但
实际上并未发生拥塞
时
-
这将会导致发送方
超时重传
,并
误认为网络发生了拥塞
; -
发送方之后会重新设置
拥塞窗口
cwnd=1
,并错误的开始
慢启动算法
,故而
降低了传输效率
。
快重传&快恢复:
-
采用快重传算法,可
让发送方尽早知道是个别报文段的丢失
。所谓快重传,就是使发送方
尽快进行重传
,而
不是等超时计时器超时再重传
。-
要求接收方不要等待自己发送数据时,才进行捎带确认,而要
立即发送确认
。 -
即使收到了失序的报文段也要立即发出对已收到的报文段的
重复确认
。 -
发送方一旦
收到3个连续的重复确认
,就将相应的报文段
立即重传
,而不是等该报文段的超时重传计时器超时才重传。
快重传算法,对于个别丢失的报文段,发送方不会出现超时重传,即也就不会立即误认为出现了拥塞(进而降低拥塞窗口
cwnd=1
)。使用快重传可使整个网络的吞吐量提高约20%。 -
要求接收方不要等待自己发送数据时,才进行捎带确认,而要
-
发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段,于是
不启动慢开始算法
,而是执行
快恢复算法
-
发送方将慢开始门限**
ssthresh
和拥塞窗口
cwnd
值调整为当前窗口的
一半**,之后开始
执行拥塞避免算法
-
也有的快恢复将恢复后开始的拥塞窗口调大一点
cwnd=ssthresh+3
- 既然发送收到了3个重复确认,就表明有三个数据报文段已经离开了网络。
- 这三个报文段不再消耗网络资源,而是停留在接收方的接收缓存中。
- 可见网络中减少了3个报文段,故可适当把拥塞窗口扩大。
-
发送方将慢开始门限**
总的来说,所涉及到的算法如下图:
TCP超时重传时间的选择:
超时重传时间RTO的计算:
不能直接使用某次测量得到的RTT样本来计算超时重传时间RTO。
利用每次测量得到的RTT样本,计算加权平均往返时间RTTs(又称为平滑的往返时间)。
-
新的RTTs = (1 - a) * 旧的RTTs + a * 新的RTT样本
-
上式中,
0 <= a < 1
,且a越接近1新的RTT样本对RTTs影响越大,a越接近0新的RTT样本对RTTs影响越小。RFC标准建议a=1/8=0.125。
-
用这种方法,得出的加权平均往返时间RTTs就比测量出的RTT值更加平滑.
超时重传时间RTO应略大于加权平均往返时间RTTs。
RFC建议使用下公式,计算超时重传时间RTO:
RTO = RTTs + 4 * RTTd
。
往返时间RTT的测量:
-
针对出现超时重传时,无法准确测量往返时间RTT的问题。
Karn
算法:在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间RTT样本。即出现超时重传,则不计算RTTs,故也不会计算RTTd。当报文段的时延突然增大,并且之后很长一段时间都保持该时延,则原来的重传时间内无法收到确认报文段,即会发生反复被重传的现象。
-
因此,对
Karn
算法做出修正,报文段每重传一次,就把超时重传时间RTO增大一些。典型做法,
超时重传后新的RTO扩大为旧RTO的一倍
。
TCP的选择确认:
之前提到的TCP的快重传和可靠传输时,
TCP接收方只能对按序收到的数据中的最高序号给出确认
。当
发送方超时重传
后,
接收方之前已收到的未按序到达的数据也会被重传
。
能否设法只传送缺少的数据而不重传已正确到达,但未按序接收的数据?
答:TCP可通过
选择确认
(Selective ACK,
SACK
)。
TCP重传机制总结:
-
目的:解决数据丢失的问题。
-
通过
序列号
和
确认应答机制
,来实现TCP重传机制。 -
如何重传?
- 超时重传:在ACK在规定的超时重传时间RTO内并未按时到达发送发,则会触发超时重传,即重传数据包。
-
快速重传:超时之前收到
三个相同的数据包ACK
,直接重传丢失的数据。(详见“TCP拥塞控制中的拥塞控制算法”) - 选择确认SACK:只需重传丢失的数据。
注:使用TCP协议传输时,
SYN、FIN、数据包
会重传,但
ACK
并不会重传
。
TCP保证可靠传输的机制包括以下几个方面:
-
序号和确认号:TCP通过
序号和确认号
来保证数据的可靠传输。发送方将每个数据报文都标记一个唯一的序号,接收方收到数据后需要回复一个确认号,表示已经成功接收到了这个数据。 -
超时重传:发送方在发送数据后会设置一个
计时器
,如果在规定的时间内没有收到确认,则会重新发送数据。这可以保证即使某个数据包在传输过程中丢失,也能够被及时地重传。 -
滑动窗口:TCP通过滑动窗口机制来控制发送方和接收方的数据发送和接收速率。发送方通过滑动窗口机制来控制发送数据的数量和速度,接收方则通过滑动窗口机制来控制接收数据的数量和速度。
使用
接收方确认报文中的
窗口字段
来控制发送方发送窗口大小
,进而控制发送方的发送速率,使得接收方来得及接收。 -
确认机制:TCP通过确认机制来确保数据的可靠传输。发送方将每个数据报文都标记一个
唯一的序号
,接收方收到数据后需要回复一个
确认号
,表示已经成功接收到了这个数据。 -
拥塞控制:TCP通过拥塞控制机制来避免网络拥塞。发送方会根据网络状况和接收方的反馈来调整数据发送的速率,以
避免网络拥塞
。
应用层:
基本介绍:
应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的。
经典的网络应用(原理、协议和实现):
C/S和P2P方式:
网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务。
网络应用程序在各种端系统上的组织方式和它们之间的关系
,目前主要有两种:
-
客户/服务器(
Client/Server,C/S
方式) -
对等(
Peer-toPeer,P2P
)方式
C/S方式:
- 客户和服务器是指通信中所涉及的两个应用进程
- 客户/服务器方式所描述的是进程之间服务和被服务的关系
-
客户是服务请求方,服务器是服务的提供方
-
服务器总是处于运行状态,并等待客户的服务请求
。服务器具有
固定端口号
(如
http
服务的默认端口号为
80
),而运行服务器的主机也具有
固定的
IP
地址
。
-
基于C/S方式的应用服务通常是
服务集中型
的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。-
由于一台服务器计算机要为多个客户机提供服务,在
C/S
应用中,
常会出现服务器计算机跟不上众多客户机请求的情况
。 -
在C/S应用中,常用的
计算机群集
(或服务器场)构建一个强大的
虚拟服务器
。
-
由于一台服务器计算机要为多个客户机提供服务,在
-
常见网络应用都采用
C/S
方式,如万维网
www
、电子邮件、文件传输
FTP
等。
P2P方式:
-
P2P方式中,
没有固定的服务请求者和服务提供者
,分布在网络边缘各端系统中的应用进程是对等的(称为对等方)。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。 -
基于P2P的应用是
服务分散型
的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,是个人控制的PC电脑(不为服务提供商所有)。 -
P2P方式的突出特点是
可扩展性
,即增加的每个对等体不仅是服务的请求者,也是服务的提供者,
系统性能不会因规模的增大而降低
。 - P2P具有成本上的优势,不必具有庞大的服务器设施和服务器带宽。
- 目前因特网上流行的P2P应用,包括P2P文件共享、即时通信、P2P流媒体、分布式存储等。
动态主机配置协议
DHCP
:
DHCP
DHCP的作用:
DHCP的工作过程:
DHCP中继代理:
域名系统DNS:
DNS的作用:
层次树状结构的域名结构:
基本介绍:
因特网采取发的域名结构,由若干个分量组成,各分量之间用 “,” 隔开,分别代表不同级别的域名。
- 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写
-
基本最低的域名写在最左边,而
级别最高的域名写在最右边
- 完整的域名不超过255个字符
域名系统,既不规定一个域名需要包含多少个下级域名,也不规定每一级域名代表的含义。
各级域名由其上一级域名管理机构管理,而最高的顶级域名由ICANN管理。
顶级域名:
顶级域名TLD
Top Level Domain
,分为三类:
- 国家顶级域名nTLD:如cn、us、uk等
- 通用顶级域名gTLD:常见有七个,即com(公司企业)、net(网络服务机构)、org(非盈利组织)、int(国际组织)、edu、gov、mil
- 反向域名arpa:用于反向域名解析,即IP地址反向解析为域名
二级域名:
在国家顶级域名下,注册的二级域名均由该国家自行确定。
我国的二级域名分类:
- 类别域名:ac(科研机构)、com(工商金融等企业)、edu(教育机构)、gov(政府部门)、net(提供网络服务机构)、mil(军事机构)、org(非营利性组织)
- 行政区域名:适用于各省
因特网的域名空间:
这种按等级管理的命名方法,便于维护名字的唯一性,并且容易设计出一种
高效的域名查询机制
。
注:域名只是逻辑概念,并不代表计算机所在的物理地点。
域名服务器:
域名与IP地址的映射关系
,必须保存在域名服务器中,供所有其他应用查询。DNS使用
分布在各地的域名服务器
来实现域名到IP地址的转换。
域名服务器可划分为以下四种类型:
-
根域名服务器
每个根域名服务器(因特网上共有13个不同IP地址的根域名服务器)都知道所有顶级域名服务器的域名及其IP地址。
每个根域名服务器,实际上都是有许多分布在世界各地的
服务器群集
组成的。当本地域名服务器向根域名服务器发出查询请求时,路由器会将查询请求报文转发到离该DNS客户最近的根域名服务器,故加快了DNS查询的过程。
根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址。
-
顶级域名服务器
这些域名服务器负责
管理在该顶级域名服务器注册的所有二级域名
。当收到DNS查询请求时,就给出相应的回答(可能是最终的结果,也可能是下一级权限域名服务器的IP地址)。 -
权限域名服务器
这些域名服务器负责
管理某个区的域名
,每个主机的域名都必须在某个权限域名服务器处注册登记。因此,权限域名服务器知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下级域名服务器的地址。
-
本地域名服务器
本地域名服务器不属于上述的域名服务器等级结构。
当一个主机发出DNS请求报文时,该报文首先被送往该主机的本地域名服务器,本地域名服务器起代理的作用,会将该报文转发到上述域名服务器的等级结构中。
本地域名服务器的IP地址,需要直接配置在需要域名解析的主机中。
域名解析的过程:
通过递归查询、
迭代查询
,完成查询过程。
为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了
高速缓存
。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于域名到IP地址的映射关系并不是永久不变的,为保持高速缓存中的内容正确,域名服务器
应为每项内容设置计时器并删除超过合理时间的项
。
不但在本地域名服务器中需要高速缓存,在用户主机也需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。
另外,主机也需要保证高速缓存中内容的正确性。
文件传送协议FTP:
将某台计算机中的文件通过网络传送到另一台计算机中,是一项基本的网络应用,即文件传送。
文件传送协议FTP
(
File Transfer Protocol
)是因特网上最广泛使用的文件传送协议。
-
FTP提供交互式的访问,允许客户
指明文件的类型和格式
,并允许文件
具有存取权限
(如访问文件的用户必须经过授权,并输入有效的口令)。 -
FTP屏蔽了各计算机系统的细节,因而适用于在异构网络中任意计算机之间的传送文件。
FTP的用途:
- 在计算机之间传输文件,尤其是用于批量传输文件。
- 让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器。
FTP客户和服务器要建立以下
两个并行的TCP连接
:
- 控制连接,在整个会话期间一直保持打开。
- 数据连接,用于文件传输,在每次文件传输时才建立,传输结束后就关闭。
电子邮件:
电子邮件的格式:
一个电子邮件有信封和内容两部分,而内容又分为首部和主体两部分构成。
客户/服务器方式:
电子邮件系统的三个主要构件:用户代理、邮件服务器、电子邮件所需协议。
- 用户代理:用户与电子邮件系统的接口,又称为电子邮件客户端软件。
-
邮件服务器是电子邮件系统的基础设施。因特网上所有的ISP都有邮件服务器,其功能是
发送和接收邮件
,同时还要负责
维护用户的邮箱
。 - 协议:邮件发送协议(SMTP)、邮件读取协议(POP3,IMAP)。
简单邮件传送协议SMTP:
Simple Mail Transfer Protocol,即SMTP的基本工作过程:
SMTP协议
只能传送ASCII码文本数据
,不能传送可执行文件或其他二进制对象(即不能传送多媒体邮件(图片、音视频数据),并且许多非英语国家的文字也无法传送)。
为解决SMTP传送非ASCII码的问题,提出了
多用途因特网邮件扩展MIME
(Multipurpose Internet Mail Extensions)。
-
增加了
5个新的邮件首部字段
,这些字段提供了有关邮件主体的信息。 -
定义了
许多邮件内容的格式
,对多媒体电子邮件的表示方法进行了标准换。 -
定义了
传送编码
,可对任何格式进行转换,而不会被邮件系统改变。
实际上,MIME不仅仅使用了SMTP,也用于后来的同样面向ASCII字符的HTTP。
常用的邮件读取协议有以下两个:
-
邮局协议POP(Post Office Protocol),POP3是其第三个版本。
不允许用户在邮件服务器上管理自己的邮件。
-
因特网邮件访问协议IMAP(Internet Message Access Protocol),用户在自己的计算机上就可以操作服务器中的邮箱,因此IMAP是一个联机协议。
,POP3和IMAP都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110,IMAP使用熟知端口143。
基于万维网的电子邮件:
通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、转发、阅读、管理电子邮件。
邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
万维网WWW:
引入:
-
万维网使用统一的资源定位符
URL
来指明因特网上,任何种类 “资源” 的位置。 -
URL
的一般格式:
<协议>://<主机>:<端口>/<路径>
。
HTTP协议:
超文本传输协议(
hyperText Transfer Protocol
),定义了浏览器与万维网服务器之间,如何进行万维网文档传输?
HTTP1.0:
采用
非持续
连接方式
。在该方式下,每次浏览器请求一个文件,都需要重新与服务器简历
TCP
连接,收到后会立即断开连接。
-
每请求一个文档就需要有两倍的
RTT
开销。若一个网页上有多个引用对象,则请求每个对象都需要花费
2RTT
的时间,开销太大。 -
为了减少时延,浏览器通常会建立并行的
TCP
连接同时请求多个对象,但这大量占用了服务器的资源,特别是在存在大量客户端请求时。
HTTP1.1:
-
采用
持续连接
的方式。连接成功后,可继续通过该链接传输
HTTP
请求报文和响应报文,且并不局限于一个页面而是只要在同一服务器上就行。 -
为进一步提高效率,
HTTP/1.1
还是用
流水线
工作方式,即浏览器在收到
HTTP
响应报文后,可连续发送多个请求报文。服务端接收到一个接一个的请求报文后,发回一个接一个的响应报文,这样节省了大量的
RTT
时间,使得
TCP
空闲时间很少,提高下载文档的效率。
HTTP报文的格式:
HTTP
是
面向文本
的,其报文中
每个字段都是一些
ASCII
码串
,并且每个字段的
长度都是不确定
的。
使用
Cookie
在服务器上记录用户信息:
-
早期万维网应用较简单,仅仅是用户查看存放在不同服务器上的各种静态文档。因此,
HTTP
被设计为一种
无状态
的协议
,这简化了服务器的设计。但现在复杂的应用,要求服务器能识别用户。 -
Cookie
提供了一种机制使得服务器能“记住”用户,而无需用户主动提供用户标识信息。
Cookie
是一种对
无状态
的
HTTP
进行
状态化
的技术。
常见的问题:
-
交换机及其作用?
交换机(交换数据)通常是2个网口以上。
现在家里的路由器其实有了交换机的功能了。交换机可以简单理解成一个设备,三台电脑网线接到这个设备,这三台电脑就可以互相通信了。
-
知道你电脑的mac地址,可以直接给你发消息吗?
Mac地址只能是两个设备之间传递时使用的,如果要从大老远相互发消息,是离不开 IP 的。
-
公网服务器的 Mac 地址是在什么时机通过什么方式获取到的?ARP 获取Mac地址只能获取到内网机器的 Mac 地址吧?
在发送数据包时,如果
目标主机不是本地局域网,
填入的 MAC 地址是路由器
,也就是把数据包转发给路由器,路由器一直转发下一个路由器,直到转发到目标主机的路由器
,
发现 IP 地址是“
自己局域网内的主机
”,就会
ARP 请求获取目标主机的 MAC 地址
,从而转发到这个服务器主机
。转发的过程中,源IP地址和目标IP地址是不会变的(前提:没有使用 NAT 网络的),源 MAC 地址和目标 MAC 地址是会变化的。
-
TCP和UDP是否可使用同一个端口?
可以的。
传输层有两个传输协议分别是 TCP 和 UDP,在
内核中是
两个完全独立的软件模块
。当主机收到数据包后,可以在 IP 包头的【
协议号
】字段知道该数据包是 TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据【
端口号
】确定送给哪个应用程序处理。如下图:
-
多个TCP服务进程可以绑定同一个端口吗?
TCP 服务进程需要绑定
“IP : 端口”
,之后就一直在监听这个地址和端口上,等待客户端连接。TCP网络编程如下,服务器执行listen()系统调用就是监听端口的动作。
UDP 网络编程如下,服务端是没有监听这个动作的,只有执行 bind() 系统调用来绑定端口的动作。
-
两个 TCP 服务进程绑定的
IP 地址不同,端口相同
的话,是可以绑定成功的。 -
两个 TCP 服务进程绑定的
IP 地址和端口都相同
,那么执行 bind() 时候就会出错。 -
0.0.0.0 地址较特殊(代表任意地址),绑定了 0.0.0.0 地址,相当于把主机上的所有 IP 地址都绑定了。
如果 TCP 服务进程 A 绑定
“0.0.0.0 : 8888”
,而如果 TCP 服务进程 B 绑定的地址是
“192.168.1.100 (或其他地址): 8888”
,那么执行 bind() 时候也会出错。
-
-
TCP与UDP的区别?
可靠性(重传机制(解决数据丢失的问题)、滑动窗口(解决无需为每个数据包应答)、流量控制(让发送方根据接收方的(接收)处理能力控制发送的数据量,避免因丢包而导致的重传问题)、拥塞控制、三次握手四次挥手)、传输方式(字节流/完整报文)、TCP中序列号(swnd、cwnd中的序列号、三次握手时随机的序列号)、传输效率(头的大小(tcp头20字节、udp头字节)、可靠传输带来的性能损失)
-
Linux系统如何收发网络数据包?
- Linux网络协议栈:
-
网络包的发送和接收流程:
-
Linux发送网络包的流程:
① 一旦应用层调用了 Socket系统调用 的接口,就会从用户态进入内核态中的 Socket 层,且内核会申请一个内核态的
sk_buff
内存,
将用户待发送的数据拷贝到
sk_buff
内存中,并将其加入到发送缓冲区
。② 网络协议栈从Socket发送缓冲区中取出
sk_buff
,并按照TCP/IP协议栈逐层处理。如果使用 TCP 传输协议发送数据,则会
先拷贝一份新的
sk_buff
副本
。这是因为
sk_buff
后续在调用网络层,最后到达网卡发送完成后,会将
sk_buff
释放掉。而TCP协议的重传机制,在收到对方的ACK之前,该
sk_buff
不能被删除。
综上,内核为了确保TCP丢失重传,在每次调用网卡发送数据时,实际上传递出去的是
sk_buff
的拷贝,
等收到ACK后才会真正删除
。
③ 对
sk_buff
填充TCP头。 注:
-
sk_buff
可以表示各个层的数据包,应用层数据包为
data
,TCP层数据包为
segment
,IP层数据包为
packet
,数据链路层为
frame
。 -
为了网络协议栈层级之间,数据传递不发生拷贝,故只用 一个
sk_buff
结构体来描述所有的网络包。在内核中向上/向下传输数据时,通过调整
sk_buff.data
的值来不断的控制不同首部的添加和剥离。-
当接收报文时,从网卡驱动开始,通过协议栈层层往上传送数据报,通过增加
sk_buff.data
的值,来逐步剥离协议首部。 -
当发送报文时,创建
sk_buff
结构体,数据缓存区的头部预留足够的空间,用来填充各层首部,在经过各下层协议时,通过减少
sk_buff.data
的值来增加协议首部。
你可以从下面这张图看到,当发送报文时,
data
指针的移动过程。 -
当接收报文时,从网卡驱动开始,通过协议栈层层往上传送数据报,通过增加
④ 网络接口层会通过
ARP
协议,获得下一跳的
MAC
地址,然后对
sk_buff
填充帧头和帧尾,之后将
sk_buff
放在
网卡的
发送队列
中。⑤ 触发
软中断
,即高速网卡驱动程序这里有新的网络包需要发送,
驱动程序从发送队列中读取
sk_buff
挂到
RingBuffer
中
,接着将
sk_buff
数据映射到
网卡可访问内存
DMA
区域
,最后触发真实的发送。⑥ 数据发送完成后,工作并没有结束,因内存并没被清理。发送完成后,网卡设备会触发一个
硬中断
来释放内存,主要是
释放
sk_buff
内存和清理
RingBuffer
内存
。⑦ 当使用
TCP
协议时,收到针对该序列的
ACK
,则表明目的端已正确接收数据,此时删除原始的
sk_buff
。 -
-
发送网络数据时,涉及几次内存拷贝操作?
-
调用发送数据的系统调用时,内核会申请一个内核态的**
sk_buff
内存**,将用户待发送的数据拷贝到
sk_buff
内存中,并将其加入到
发送缓冲区
中。 -
使用
TCP
传输协议时,从传输层进入网络层时,每个
sk_buff
都会克隆一个副本出来。副本会被送到网络层、传输层、发送队列、
RingBuffer
、网卡
DMA
内存区,并在发送完后,立即释放掉
RingBuffer
和
sk_buff
的内存。但原始的
sk_buff
还保留在传输层(目的:为了确保TCP的可靠传输(丢失重传)),只有等收到该数据包的
ACK
时,才会释放原始的
sk_buff
。 -
当IP层发现
sk_buff > MTU
时,会在申请额外的
sk_buff
并将原来的
sk_buff
拷贝为多个小的
sk_buff
。
-
调用发送数据的系统调用时,内核会申请一个内核态的**
-
访问一个网页的协议封装过程,
网卡的作用:将上述协议组成的包,封装成帧,并在末尾加校验位。
客户端与服务端拆分协议的过程: