计算机网络
计算机网络体系结构
认识计算机网络
1 | 计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统 |
1 | ip池由因特网管理机构管理 |
计算机网络的组成与分类
组成
组成成分
- 硬件
- 软件
- 协议
1 | 协议是规定这些数据如何封装、打包、传输 |
工作方式
- 边缘部分
- 核心部分
1 | 边缘部分端对端之间的通信: |
功能组成
- 通信子网
- 资源子网
1 | 通信子网: 各种传输介质、通信设备、相应的网络协议组成(把公路铺好,把数据送上路) |
分类
1 | 计算机网络按区域分类: |
性能指标
速率
1 | 是一种平均来看的标准 |
带宽
1 | 带宽是指单位时间内往链路当中“注入”的数据量 |
吞吐量
1 | 实际数据发送量,带宽为100MB/s,是指链路最大能承受100的数据量;实际吞吐量30MB/s是指实际来往的数据只有30 |
总结
1 | 带宽是理想状况下数据传送速率——假设一个人理想状态下能每秒吃10个鸡蛋 |
时延
1 | 发送时延: |
时延带宽积
1 | 时延带宽积 |
RTT往返时延
1 | RTT: |
利用率
分层结构-协议-接口-服务
为什么要分层?
怎么分层?
1 | 实体:每层要进行处理的数据单元 |
计算机网络分层结构
ISO/OSI参考模型
ISO/OSI参考模型由来
1 | 计算机网络分层结构: |
ISO/OSI参考模型解释通信过程
1 | 上四层是端对端加密,中间经过中间系统不会被解析 |
ISO/OSI各分层结构及其协议
1 | 应用层: |
TCP/IP参考模型
TCP/IP参考模型与OSI的区别
1 | TCP/IP协议栈: |
1 | OSI参考模型与TCP/IP参考模型相同点与不同点 |
5层参考模型
计算机网络结构分层汇总
| 功能 | ||||
|---|---|---|---|---|
| 应用层 | ||||
| 表示层 | 没有协议 | |||
| 会话层 | 没有协议 | |||
| 传输层 | 传输层 | 提供端对端接口 | TCP,UDP | |
| 网络层 | 网络层 | 为数据报选择路由 | IP,ICMP,OSPF,ARP,IGMP | |
| 数据链路层 | 数据链路层 | 传输有地址的帧以及错误检测功能 | PPP,ARP,ALOUA,CSMA,CSMA/CD,CSMA/CA | |
| 物理层 | 物理层 | 以二进制数据形式在物理媒体上传输数据 | IS02110,IEEE802,IEEE802.2 |
如何判断协议属于哪一层?
答:根据封装关系;例如:BGP协议是应用层的协议使用UDP封装(使用的传输层的封装和传输服务),所以根据下层为上层提供服务的原则,判断该协议属于哪一层
1.数据报(Datagram)
2. 报文(Message)
为什么传输层UPP协议的数据传输单位也是数据报?
数据报(Datagram)是网络层的传输单位,但UDP作为一种无连接的传输层协议,其传输特性类似网络层,所以其数据传输单位也采用了数据报的形式。UDP和网络层都使用数据报作为传输单位,但UDP还有一些传输层的特性,如端口号、校验等。所以UDP使用数据报只是因为其无连接的传输特性类似网络层,但UDP仍属于传输层协议。
课后习题
计算机网路概述习题
1 | A.计算机网络无法脱离硬件设施,所以不仅仅是软件模块 |
1 | 交流是一切活动的前提 |
1 | 工作站和服务器都是高性能的计算机,但是两者侧重点不一样 |
1 | 计算机网络可以没有数据库管理系统 |
1 | 计算机网络是通过通信设备与线路(硬件设施)连接起来,由功能完善的软件实现资源共享和信息传递-->所以计算机网络的资源主要指:硬件+软件+数据 |
1 | 通信子网就是硬件设施-->实现两个通信进程之间地址的连接 |
1 |
1 |
1 |
1 | 传播时延2000/2x10^8=10^-5 s |
1 | 就是传输层的可靠传输和不可靠性传输 |
1 | 电路交换: |
^a096fa
1 | (1).数据分组可以连续发送-->所以数据就只有发送时延+传播时延+建立握手的时间 |
1 | 面向字节流: |
计算机网络体系及参考模型习题
1 |
1 |
1 |
1 | 上层使用下层服务是什么意思? |
1 | 因特网的发展: |
1 | 协议: |
1 | A.数据连路程拥有寻址功能,物理寻址就是找到mac地址 |
1 | 每层封装加的信息: |
1 | A.数据链路层不仅在分组上增加了源物理地址和目的物理地址,还增加了控制信息 |
1 | ①具有流量控制的有3层: 传输层、网络层、数据链路层 |
1 |
1 | 因特网采用的核心技术是TCP/IP协议 |
1 |
1 | 服务访问点SAP:就是上层使用下层服务的接口"钥匙",只有拿到这把钥匙才能使用服务 |
物理层
物理层基本概念
*物理层接口特性
数据通信
数据通信基础知识1
典型的数据通信模型
数据通信相关术语
设计数据通信系统要考虑的3个问题
单、半、全三种通信方式
单工通信:一条单向的信道(一条信道同一时刻要么接收,要么发送)
半双工通信:两条单向的信道
全双工通信:两条双向的信道(一条信道同一时刻,可以同时发送和接收)
串行与并行传输方式
同步传输与异步传输通信方式
同步传输:传输数据是连续传输
异步传输:数据间间断断,传输
总结
数据通信基础知识2
码元
速率、波特
带宽
奈氏准则、香农定理
奈氏准则
- 是在理想低通(无噪声、带宽受到限制)条件下,避免 码间串扰 确定的极限的码元的传输速率=2W Baud,所以极限 信息传输速率=2W ×n (n是码元bit数,就是n进制码元)
- W 表示带宽,单位Hz
香农定理
- 是在带宽受限,且有噪声的信道中,规定的在该噪声条件下的,不影响码元判断的,极限数据传输速率
- S/N是信噪比,常常用作10log10(S/N) 来进行转换,从而将单位记作dB,就是定义了一个转换数值的公式
香农和奈氏
- 奈氏准则:关注的是无噪声条件下,不会造成码间串扰的极限 数据传输速率
- 香农定理:关注的是在当前噪声条件下,不会导致数据码元判断失真的 数据极限传输速率
编码与调制
基带信号与宽带信号
编码与调制
将数据 编码 /调制 –>信号
数字数据编码为数字信号
非归零编码
缺点是,需要额外的信道,传输时钟周期信号,告诉多久发一个bit信息
归零编码
反向不归零编码
- 缺点是,对于发送全1的信号,无法判断,有多少个1,因为,高低电平都有可能是1
- 还有就是,缺点在全1,的时候,会出现长条,没有时钟周期,就无法得知发送了,多少个1
曼彻斯特编码
- 1bit数据,就是1码元,被调制成两段电平,所以数据传输速率只有调制速率的1/2
- 每个码元中间,有一次跳变,可以实现同步,可通过中间跳变反应时钟信号
差分曼彻斯特编码
- 每个码元中间都有一次跳变,可以实现同步
4B/5B编码
- 编码效率80%
数字数据调制成模拟信号
- 采样频率要达到信号最高频率的2倍以上,以保证,可以在每一个最高频的信号峰之内都可以采样到2个信息,得到波峰图
数据交换方式
1.电路交换
2.报文交换
3.分组交换
数据交换方式的选择
3.1.分组交换–数据报方式
无连接服务,就是事先不为分组确定传输路径,传输路径全靠路由选择
3.2分组交换–虚电路方式
连接服务,就是事先要确定分组的传输路径,提前建立连接,然后再按照这个路径输送数据
虚电路与数据报方式的区别
传输介质(信道)
- 传输媒体并不是物理层。传输媒体在物理层的下面,因为物理层是体系结构的第一层,因此有时称传输媒体为0层。
- 在传输媒体中传输的是信号,但传输媒体并不知道所传输的信号代表什么意思。但物理层规定了 电 气 特 性,因此能够识别所传送的比特流
导向性传输介质
双绞线
电流方向相反的铜线,绞合一起,磁感线相互抵消,减少相邻导线的电磁干扰
同轴电缆
光纤
单模光纤和双模光纤
非导向性传输介质
物理层设备
放大器
对模拟信号的不加处理的放大
中继器
- 中继器是对数字信号的再生(整形)
- 中继器是连接两个网段的桥梁,以助于数字信号的再生
- 中继器,只负责将数据发送到另一网段,不管数据中是否有错误
- 中继器两端可以连接相同传输介质,也可以不同传输介质
- 中继器两端网段一定要是统一协议
集线器
集线器,就是多端口的中继器,可以连接多台主机,平分带宽,共享数据
数据链路层
数据链路层基本概念
1.1 结点:数据链路层上的结点主要是主机和路由器。由物理线路联接起来的两个结点,又叫相邻结点。
1.2 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
1.3 数据链路:两络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
1.4 帧:链路层的协议数据单元,作用是封装网络层数据报。
数据链路层的作用是负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标网络层。主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
链路层的功能
功能概述
(1)为网络层提供服务
数据链路层向网络层提供三种基本功能:1、无确认无连接服务,2、有确认无连接服务,3、有确认面向连接服务。
无确认无连接服务:通常用于实时服务,或误码率比较低的通信信道。源主机在发送数据时没有事先与目标主机建立链接,而且目的主机在收到数据时,也不需要发送确认数据,如果帧丢失,数据链路层也不负责重发,而直接交由上层处理。
有确认无连接服务:源主机在发送数据时没有事先与目标主机建立链接,但目的主机在收到数据时,必须发送确认数据帧,如果源主机在规定时间内没有收到确认数据,则源主机则重发一次数据。这就可以提搞链路上的可靠性,一般用于无线传输。
有确认面向链接服务:源主机在发送数据时事先与目标主机建立链接,同时目的主机在收到数据时,必须发送确认数据帧。
(2)链接管理,即连接的建立、维持、释放(用于面向连接的服务)。
(3)组帧。
(4)流量控制,限制发送方的发送速度。
(5)差错控制,差错控制主要有帧错或是位错。
封装成帧&透明传输
封装成帧
在一段数据添加首部、尾部构成一个帧,接收端就能收到bit流后,能识别帧的开始和结束
透明传输
就是传输数据的bit组合不会影响,到帧开始和结束的判定
四种组帧的方法
1.字符计数法
帧的开始字符记录的是该帧的字符数(包括自己)
缺点是,当前面的字符出错,往后的全部会出错
2.字符填充法传送文本,由于文本字符对应的ASCII码不会出现的bit组合充当帧头,帧尾,中间数据部分不会产生边界判定错误
如果传送的帧,由二进制程序,或图像等等非ASCII编码文本文件,数据内容有可能出现帧头,帧尾bit组合,导致中间穿插,帧边界判定错误
通过对数据部分 字节填充ESC转义字节 ,–>使得特殊字符意义失效,实现干扰的解决
3.零比特填充法
以01111110 作为帧头和帧尾,发送端先将数据扫描,将所有连续的5个1 后都插入0,这样就不会出现6个1 ,再封装成帧;接收端,再逆过程去掉0
4.违规编码法
曼彻斯特编码中不会出现的状态(高-高/低-低)来表示帧头,帧尾
差错控制(发现位错)
差错从何而来?
差错来源:随机噪声(线路本身电气特性产生)、冲击噪声(外界短暂原因)
差错:位错;帧错
链路层编码与物理层编码调制不同:链路层编码是用于一组比特,判断传输过程是否出现出错。物理层编码调制针对单个比特,解决的是传输过程中 比特同步的问题
奇偶校验码
- 奇偶校验码能发现单bit错误,无法纠正错误。
- 奇校验码,在附加一个校验元后,码长为n的码字中“1”的个数为奇数
- 偶校验码,在附加一个校验元后,码长为n的码字中“1”的个数为偶数
为什么奇偶校验码只能检测出单bit错误呢?
答:Eg.假如我发送数据10001,奇校验,添1,100011
①假如发生了单bit错误,变成了100010,接收方进行奇校验,发现1的个数为偶数,发现错误;
②假如发生双bit错误,变成了100101,接收方进行奇校验,发现1的个数Wie奇数,觉得没错
所以说,奇偶校验码只能检验出单bit错误
CRC循环冗余码
CRC循环冗余码能检发现单bit错误,双bit错误无法发现,无法纠正错误
发送方对原始数据追加校验码:
- 确定一个生成多项式例如1101表示为G(x)=X3+X2+1,最高阶为X3,所以阶r=3
- 根据在发送数据后面添r个0,并将发送数据与10011做类似除法,常规除法在上下两行数进行运算时,使用的是减法运算,而这里使用的是
异或 - 两数相除得余数,并进行补位
(补到与生成多项式最高次项一致),即得到校验码。 - 最终所得的余数就是帧检验序列FCS=
001 - 通过上述运算,得到校验码
001,添加到原始数据之后,得到的最终发送数据为101001001
接收方对收到的数据进行校验
- 继续接前文,假设收到的数据为
101001001 - 接收方对该数据做除法,除数仍然是之前使用的多项式的系数
1101 - 过程如下
- 若余数为0,则表示未出错
- 假设,接收方收到的数据出现了错误:
101101001,校验过程如下: - 余数不为0,则表示传输过程中出现了错误
海明码
非考研重点
海明码能够发现2bit错误,纠正1bit错误
海明距离
note
检测d比特错:海明距=d+1 纠正d比特错:海明距=2d+1
海明码纠错步骤
note
信息位m位,加的r位海明校验位。需要满足不等式2r≥m+r+1。
1.确定校验码位数r
2.确定校验码和数据的位置
3.求出校验码的值
4.检错并纠错
方式1
- 先每个校验码对应一个大圆,分别填入器其校验码序号
- 交集部分,填入校验码负责校验的一组序号中重叠的序号数据
- 最中间是三个校验码负责的重叠序号
- 2号校验码负责的没有出错,1,4号出错,所以3,6,7,排除,只剩下5
方式2
海明码纠错演示
1.传输的数据:1101
2.校验位计算公式:
2^k >= k+n+1,n为数据位在本例中计算的k为3;
用P1,P2,P3,表示校验位,其中
P1,的位数2^0,P2,的位数2^1,P3,的位数2^2
则:
| 1 | 2 | 1+2 | 4 | 1+4 | 2+4 | 1+2+4 | |
|---|---|---|---|---|---|---|---|
| 位数的二进制 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
| 位数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 数据位 | 1 | 1 | 0 | 1 | |||
| 校验位 | P1, | P2, | P3 |
3.分组:
| 校验位 | 位数分组 |
|---|---|
| P1, | 1,3,5,7 |
| P2, | 2,3,6,7 |
| P3 | 4,5,6,7 |
4.计算校验位值(异或运算)
P1^1^1^1=0,得P1=1
P2^1^0^1=0,得P2=0
P3^1^0^1=0,得P3=0
最终传输的数据位:1010101
5,检验
如果接收端收到的是1010111
还是按照刚才的分组进行计算P1,P2P3每个分组的异或值,为零则无错,为1则有错。
P1组 1^1^1^1=0
P2组 0^1^1^1=1
P3组 0^1^1^1=1
流量控制与可靠传输机制(防止帧错)
可靠传输协议是计算机网络中的一个重难点, 在数据链路层和运输层均有提及。其中, 数据链路层是指对帧的可靠传输, 运输层是指对TCP分组的可靠传输, 两者在细节上有些差别, 但大致分项相同。本文讨论可靠传输三种协议原理与应用。
预备知识
报文、分组和帧
报文: 需要发送的整块数据, 比如一个文件数据。
分组: 是将需要发送的整块数据进行划分, 划分的一个个更小的等长数据段,在数据段前面加上必要的控制信息(首部)后组成的数据段即为分组。
帧: IP数据包加上首部和尾部封装成为帧
传输对象以及帧或分组的编号
- 传输数据时, 通常以帧或分组为单元进行传输。
- 如果我们要对帧或分组进行编号, 为了重复利用空间单元, 我们通常采用 n比特编号的方式。即:若采用 n 比特编号, 对连续的几段帧或分组, 对每段帧或分组以0~2n-1循环编号。如下图所示
可靠传输的概念
由于数据在传输过程中, 由于信道受干扰等各种原因, 发送方发送的数据可能会中途丢失、出错。造成发送的数据与收到的数据顺序或内容不一致, 由此我们制定一系列协议, 保证接收到的数据与发送的内容一致, 这就是可靠传输。
一些规定
- 为了方便我们研究问题, 假设只有一方发送, 一方接收,假设 A 为发送方, B 为接收方。
- 规定编号为 i 的分组或帧为 Mi , Mi的确认记为 ACKi .
- 在讨论可靠传输时, 不区分帧和分组, 发送对象统一叫做帧
- 在后续滑动窗口大小的讨论中, 发送窗口大小记为 WT , 接收窗口大小记为WR.
停止等待协议
停等协议的意义
- 为了解决流量控制的问题:互相的停止等待,使得不会传输太多的数据
- 为了解决可靠传输的问题:互相停止等待,接收确认帧,能保证能发现差错,以及处理差错
停等协议的协议流程
发送方 A 发送数据, 每发送一帧就停止发送。并等待接收方 B 发送确认, 收到确认后 A 就发送下一帧
如图, 我们采用如下时序图(在表示协议流程时经常使用) 表示 A 和 B 的发送和接收过程, 其中 A 和 B 都有一个时间轴.
停等协议出现差错的情况
- 超时重传(针对 A 的差错情况)
若在发送过程中数据帧出现丢失或差错, 此时 B 不会收到数据帧或者丢弃收到的数据帧, 总之,B 不会发送确认。 此时 A 会一直等待, 但不会超过设置的等待时间(通常会设置一个超时计时器)。 A 重传该数据帧。
- 确认丢失和确认迟到(针对B的情况)
确认丢失: 若 B 在回复确认时确认出现丢失, 则 A 也会一直等待, 也不会超过设置的等待时间。 A 重传该数据帧。且B 会丢掉重复的数据帧。重传确认。
确认迟到: 若 B 在回复确认时确认很久才到, 则 A 也会一直等待, 同样也不会超过设置的等待时间。 A 重传该数据帧。且B 也会丢掉重复的数据帧。重传确认于是 A 正常收到来自重传的确认, 但是后面又收到迟到的相同的确认,A 收下但什么也不做。
停止等待协议的编号
为了能让接收方判断所收到编号是否为重复的, 停止等待协议只需使用1 比特编号即可。但一定需要编号否则不能明确是哪个帧发了过来, 哪些帧得到了确认, 也区别不了新旧帧。(区别新旧帧是个很重要的问题, 之后会详细讨论)
信道利用率
提出这个概念是为了引出停止等待协议的优缺点, 首先介绍信道利用率的概念。
如上图为接近真实发送情况的时序图。假设数据传输速率为 c , 帧长度为 L ; 则 A 需要发送帧的时间为 TA= L/c ;另外设数据帧的往返时间为 RTT , B 处理数据帧的时间为 TB .(很多时候可以忽略 TB )。
从图中可以看出, 信道有很长一段时间都在等待, 没有发送数据, 为了反应这种很长信道都是空闲的情况。我们引入信道利用率的概念。
信道利用率: 发送数据的时间与整个发送周期的比值
根据以上定义, 信道利用率 U 可由以下公式给出:
其中,
例:
后退N帧协议(GBN)
后退N帧协议的意义
由于停止等待协议,一次只发送确认一个数据帧,传输效率太低,于是推出后退N帧协议,可以连续发送数据帧,采用累积确认的方式。
GBN协议的滑动窗口
- 发送方A的滑动窗口(发送窗口)
为了让流水线传输可维持可靠传输的特性, 于是让发送方与接收到都维护一个滑动窗口
- 意义: 位于发送窗口内的连续帧均可以连续发送。
- 构成: 发送窗口(已发送未收到确认帧, 未发送数据帧)、发送缓存
- 发送窗口所遇事件及动作:
- 接收方B的滑动窗口(接收窗口)
- 意义: 后退N帧协议中位于接收窗口内的序号是接收方希望收到的下一个帧,(注: 后退N帧协议的接收窗口大小 WR=1 ,即只有窗口内只有 1 个数据。)
- 构成: 接收缓存, 接收窗口
- 接收窗口所遇事件及动作:
对该表做如下说明:
(1) 按序收到的意义在第二行括号里进行了解释
(2) 第二行说明在窗口按序收到帧后, 可以选择发送确认, 也可以选择不发, 但发送确认的帧一定是最后按序到达的。因为第三行说明若未按序收到帧, 则丢弃该帧, 并且要重传最近按序收到的帧的ACK 。这就是累计确认。因此发送方的某帧超时未收到确认, 代表该帧出现问题, 后面的帧已经被丢掉了, 需要再传。如图可助理解
总之: 累计确认的确认方式为若有 ACKn 发送, 则 n 号帧和前面所有帧均已按序接收(或:接收窗口停在 n-1 处, 则n-1 号帧和前面所有帧均已按序接收)
例3. 数据链路层采用GBN(后退N帧)协议,发送方已经发送了编号 0−7 的帧, 当计时器超时时, 若发送方只收到0、2、3 号帧的确认, 则发送方需要重发的下一个帧是( )
A. 2 B. 3 C. 4 D. 5
解答: 后退N帧协议采用累积确认的方式, 这里发送方收到 0、2、3 号帧的确认, 确认帧最大为 3 , 则说明 3 号帧和前面所有帧都已按序接收, 于是所有重传的帧为 4−7 , 下一个帧为 4 号帧, 故选 C .
GBD协议的时序图
时序图大致如上所示, 包含正常情况、接收方丢弃帧情况、累计确认情况与超时重传情况。
同时可借助时序图进行一些指标分析
GBN协议的滑动窗口大小
- 首先需要明确的是, GBN协议中接收窗口的大小WR=1
- 其次, GBN协议中, 对发送窗口的大小也有要求, 若采用 n 比特编号, 发送窗口的大小应满足: 1≤WT≤2n−1 , 这是因为发送窗口过大, 会使得接收方无法区别新帧和旧帧。
例4. 试证明: 当用 n 比特进行编号时, 仅在发送窗口不超过 2n−1 时, 后退N帧协议才能正确运行(窗口以帧或分组为单位)
证明: 当用 n 比特进行编号时, 每一轮的编号为 0−2n−1 .
不妨假设 n=3 . 则编号为 0−7 .
假设接收窗口 WT停在 7 处。那么发送窗口的位置只有可能是如下几种情况:
例:例6. 对于后退N帧协议, 窗口大小为 n 的滑动窗口, 最多可以有( )帧已发送但没有确认。
A. 0 B. n-1 C. n D.n/2
解答: 首先要明确此题的意思为有多少帧已发送但没有确认, 不是有多少个帧正在等待确认, 即最多同时遭遇超时等待,并重传的帧的个数,这里假设 n 个帧都同时遭遇了超时重传, 并且接收方已经收到所有的帧, 接收方的滑动窗口移动到了发送窗口的最右边的下一格, 但所有的帧的 ACK 全部丢失。那么发送窗口等待超时后全部重传, 但这时接收窗口已经滑到了发送窗口最右边的下一格, 这些帧都不是接收窗口期望收到的, 于是双方就都在等待对方的帧到来, 那么后退N帧协议会发生死锁。于是最多只能有 n−1 个帧遭遇超时重传。这样就算接收窗口就只会滑到最右边, 这时可以等待第 n帧发送, 收到 ACKn , 由于接收方累计确认,接收方会知道前面的帧都收到了, 继续滑动, 不会发生死锁。
GNB协议的综合应用
这里还要弄清一个概念: 捎带确认, GBN协议是全双工通信, GBN协议除了累计确认, 偶尔捎带确认
捎带确认: 在双工通信中, 返回的 ACK 帧可由反向发送的数据帧一起捎带回来。接收方转换身份为发送方并且同时返回 ACK 帧。且GBN协议中捎带确认仍然具有累计确认的性质
习题
- 1000个窗口,所以发送方同时可以发1000个帧,每个帧1000个字节
所以一次右1000x1000x8 bit数据,受到信道带宽限制,所以发送延时=
1000x1000x8b/100Mb/s =80ms - 只有受到受到1号帧的确认帧,发送框才会开始移动一个,所以,在没有受到第一个确认帧之前,发送方不会发送新的数据
- 所以计算,受到确认帧的时间=2x50ms + 1000x8b/100Mb/s =100.08ms >80ms ,所以,信道会有20ms没有新数据推入,空闲,有100.08-80ms=20ms无输入,所以实际平均数据传输率=1000x1000x8b/100.08ms=80Mb/s
选择重传协议(SR)
SR协议解决的问题
后退N帧协议由于采取累计确认的方式, 重传所有未被确认的帧, 没有按序到达的帧会被直接丢弃,这样做在某些质量差的信道中会极大降低信道利用率。
于是我们想只重传出错的帧, 这时我们需要加大接收窗口的长度, 缓存乱序到达的帧, 这就是选择重传协议(SR)。
SR协议的滑动窗口
- 发送窗口
- 意义: 位于发送窗口内的帧都可以连续发送出去
- 构成: 发送窗口(发完等待确认的帧、未发送帧)、发完被确认的帧、发送缓存
- 发送窗口所遇事件及其动作:
如图所示
其中, 假设 2 号帧超时, 只用重传 2 号帧。其他帧都收到确认了就不用重传了。
- 接收窗口
- 意义: 位于接收窗口内的帧都可以被接收并发送确认, 而不会被丢弃。
- 构成: 接收窗口(收到并且确认的帧、等待确认的帧)、接收缓存
- 接收窗口所遇事件及其动作:
第三行的情况说明接收方发送的 ACK 丢失, 需要重传 ACK , 其他情况忽略该帧。
总之, 这样设置滑动窗口可以不必重传所有帧, 只需重传已超时的帧即可。
例题:
滑动窗口协议的窗口大小与SR协议的窗口大小
- 滑动窗口协议的窗口大小
对于所有的滑动窗口协议, 为了让窗口能区别新帧和旧帧, 发送窗口同样有1 ≤ WT ≤ 2n -1
对于接收窗口而言 ,WR ≤1
两不等式联立得 WT+WR≤2n ,(因为 WR 至少为 1 ) 即为例 4 证明的结论的推广。
加粗的不等式为滑动窗口协议经常用到的判断滑动窗口协议尺寸的不等式。
例题:
- SR协议的滑动窗口大小
因为, 对于所有的滑动窗口协议都存在 WT+WR≤2n
但是, 对SR协议而言, 接收窗口与接收窗口长度都不固定, 当限制WT≤2n-1,且
WR≤2n-1,两者之和绝对不会超过2n
且对SR协议, 为提高传输效率, 滑动窗口长度等于接收窗口长度, 这样不会造成溢出(即发送了大于对方窗口上界的帧或 ACK .), 于是 2n-1是最好的值, 并且在实际应用中,最好有 WT = WR=2n-1。
例题:
小结
- 后退N帧GBN协议与选择重传SR协议属于滑动窗口协议, 当限制 WT=1,WR=1 时, 滑动窗口协议退化为停止等待协议。
- 后退N帧协议采用累计确认方式; 选择重传协议采用逐一确认方式。
- 后退N帧协议超时重传所有帧; 选择重传协议只重传超时帧。
- 对于后退N帧协议: 1≤WT≤2n−1;WR=1 。对于SR协议:WT = WR=2n-1。
- 所有滑动窗口协议均有:WT+WR≤2n
- 停止等待协议、后退N帧协议接收方有序接收, 选择重传协议接收方无序接收。
主要的可靠传输机制包括:
1. 流量控制:发送方和接收方协调传输速率,防止接收缓冲区溢出。
2. 错误检测:对传输的数据进行校验,检查是否发生错误。常用奇偶校验、CRC校验等。
3. 确认和重传:接收方发回确认帧表示正确接收,发送方如果长时间收不到确认,会重传数据。
4. 序列号:对数据包进行编号,确保按序到达。
5. 连接管理:建立连接、维护连接状态、终止连接。
6. 滑动窗口协议:扩大序列号使用范围,通过窗口控制流量。
7. 网络拥塞控制:通过流量控制和拥塞控制技术确保网络稳定运行
在TCP/IP参考模型的五层网络结构中,主要是数据链路层和传输层提供可靠的数据传输机制。
1. 数据链路层
数据链路层通过以下手段提供尽力而为的可靠传输:
2. 传输层
传输层中的TCP协议提供面向连接、全双工、可靠的传输服务。主要机制有:
信道划分介质访问控制(MAC协议)
- 当一个对讲机讲话,其他对讲机就不能够进行讲话,否则会信号冲突
- 广播式链路,如何实现,两对节点之间通信不会互相干扰,就需要介质访问控制来实现
静态划分信道(信道划分介质访问控制)
频分多路复用FDM
- 不同用户同一时间占用不同的带宽(频率资源)
- 适用于模拟信号
时分多路复用TDM
缺点是每个用户在每一个帧中占用固定的时隙,导致其他用户空闲时,不传送数据时,时隙被浪费
适用于数字信号
改进后的统计时分复用STDM,就解决了上面的问题,铜国集中器,将不同用户的数据,按照进入的先后,排列使得每一个STDM帧都排满
所以STDM帧的每个用户的时隙,不是固定的,是按照需要动态分配的时隙
波分多路复用WDM
- 实际上就是光的频分多路复用
码分多路复用CDM
- 不太理解
动态分配信道(随机访问介质访问控制)
ALOHA协议
纯ALOHA协议
- 这里帧用T0表示,T0是一个帧从的 发送时间+传播时间 这所有过程,所耗费的时间,所以是在时间坐标上表示帧
- ALOHA协议想发就发,多个站点,可以在任何时刻,发送数据帧,只是,如果有两个数据帧产生,时间重叠,那么就发生冲突,接收方会检测到差错,不返回确认,如此发送方就会等待一个随机的时刻再次发送数据帧
时隙ALOHA协议
- *把时间分为若干相同的时间片段,所有用户只允许在开始时刻且 同步接入网络信道,这样所有用户拥有一个统一的时间划分,都只能在时间片开始时刻发送数据,若发生冲突,则等到下一个时间片开始时刻发送,大大降低了数据冲突问题*
CSMA协议
载波监听多路访问协议
- CS :载波监听,每一个站发送数据前先检测总线上是否有其他计算机发送数据
- 当信道空闲:发送完整帧(具体发送看CSMA类型)
- 当信道忙:则等待一个随机时间再监听
1-坚持CSMA
- 空闲直接传输,不等待;忙则一直监听,直到空闲马上传输
- 不是都是空闲的时候再传输吗?为什么会出现冲突?
- 因为,当有两个以上站,同时在等候监听时,由于信息在两台站之间有传播时延,即使是信道上已经存在数据传输,任然检测不出,所以就当做信道空闲,也把数据传输上去,这样就导致数据碰撞,造成冲突
- 优点:只要空闲就发送,媒体利用率最高
- 缺点:冲突概率高
非坚持CSMA
- 空闲则直接传输,不等待;忙则放弃监听,随机时间后再监听
- 优点:减少了当台站,同时监听到空闲直接发送数据,产生冲突的可能
- 缺点:媒体空闲无法迅速被利用起来,利用率低
p-坚持CSMA
- 空闲时,概率p直接发送,概率1-p等待下一个时间槽传输。
- 忙则持续监听,直到信道空闲
- 冲突则等待下一个时间槽监听
- 优点:即减少了冲突发生,有能减少空间时间的浪费
- 缺点:冲突后还是会把数据帧发送完,造成浪费
- 正确使用以上策略可以在一定程度上减少碰撞的发生,但无法彻底解决碰撞问题。
比对
CSMA/CD协议
CSMA/CD协议的碰撞检测、最小帧长需要掌握
强化CSMA协议,推出CSMA/CD协议
载波监听多点接入/碰撞检测协议
- CSMA/CD适用于
半双工网络(也就是*有线以太网)–就是不能一方发送还没发送完,另一方就发送,这样会造成数据在路上的碰撞*
为什么先听后发还会产生冲突?
- 因为电磁波在总线上有传播时延,B暂时没有检测到A发送过来的数据
- 以A为基准,对于A来说,A检测到发生碰撞的最长时间=2τ
- 所以当发送数据之后过了2τ还没接受到碰撞,说明这次传输,不会产生碰撞
这里碰撞指的是,A向B发送数据,数据还在传输时,B也向A发送数据,两股数据相撞;
- A要如何知道数据中途被碰撞了? 答:B的数据在碰撞后继续向A发送,A收到数据,就知道中途发生了碰撞,于是停止发送数据
- 同样B收到A继续发来的数据,也停止发送自己的数据
如何确定碰撞后重传时机
- 碰撞之后如何重传,以及重传几次,通过以下方式截断二进制指数规避法**
最小帧长
- 当检测到碰撞之后,应当立即停止继续发送帧,但是如果检测到碰撞之前就将帧发送完毕,就显得有些尴尬
- 为了避免检测到碰撞之前,就将帧发完,应该设置一个最小的帧长度,保证2τ(最大检测到碰撞时间)之内不会将帧传输完
CSMA/CA协议
CSMA/CA协议适用于无线局域网
虽然CSMA/CD协议已成功地应用于使用有线连接的局域网,但无线局域网能不能也使用CSMA/CD协议呢?
显然,这个协议的前一部分CSMA能够使用。在无线局域网中,在发送数据之前先对媒体进行载波监听。如发现有其他站在发送数据,就推迟发送以免发生碰撞。这样做是合理的。但问题是“碰撞检测”(CD)在无线环境下却不能使用。理由如下:
碰撞检测”要求一个站点在发送本站数据的同时,还必须不间断地检测信道。一旦检测到碰撞,就立即停止发送。但由于无线信道的传输条件特殊,其信号强度的动态范围非常大,因此在**802.11适配器上接收到的信号强度往往会远远小于发送信号的强度(信号强度可能相差百万倍)**。如要在无线局域网的适配器上实现检测到碰撞,在硬件上需要的花费就会过大。
更重要的是,即使我们能够在硬件上实现无线局域网的碰撞检测功能,我们仍然无法避免碰撞的发生。这就表明,无线局域网不需要进行碰撞检测。
“无线局域网不需要进行碰撞检测”是由无线信道本身的特点决定的。我们知道,无线电波能够向所有的方向传播,且其传播距离受限。当电磁波在传播过程中遇到障碍物时,其传播距离就会受到限制。如图所示的例子表示了无线局域网的特殊问题。图中给出两个无线移动站A和B,以及接入点AP。我们假定无线电信号传播的范围是以发送站为圆心的一个圆形面积。
图,表示站点A和C都想和B通信。但A和C相距较远,彼此都听不见对方。当A和C检测到信道空闲时,就都向B发送数据,结果发生了碰撞。这种未能检测出信道上其他站点信号的问题叫做隐蔽站
当移动站之间有障碍物时也有可能出现上述问题。例如,三个站点A, B和C彼此距离都差不多,相当于在一个等边三角形的三个顶点。但A和C之间有一个座山,因此A和C彼此都听不见对方。若A和C同时向B发送数据就会发生碰撞,使B无法正常接收。
为此,802.11局域网就使用CSMA/CA协议。CA表示Collision Avoidance,是碰撞避免的意思,或者说,协议的设计是要尽量减少碰撞发生的概率。
CSMA/CA协议的工作原理
- 小绿想向中间的小橙发送数据,但是小蓝离着小绿色很远,不知道小蓝是否也要发送数据
- 所以小绿先向小橙发送
RTS,表示我想向你发送数据,同时等待确认,期间不能发送 - 小橙成功接收到
RTS,就向周围所有范围内的主机广播CTS表示我需要接收小绿的数据,别的站点别发送数据。这样就解决了隐蔽站的问题
CSMA/CA与CSMA/CD区别
动态分配信道(轮询访问介质访问控制)
- 结合了静态划分信道的优点,不会产生冲突;又结合了随机访问协议的优点发送时能独占信道,占全部带宽
轮询协议
- 主节点,挨个轮流询问(实际就是以数据帧形式)下面的主机是否要发送数据
- 主节点故障,就无法询问,所有结点就无法传输数据–称为单点故障
令牌传递协议
- 令牌传递协议用于令牌环网之中
- 令牌环网渐渐被以太网所取代(CSAM协议)
1.令牌协议介绍
- 令牌就是特殊格式的MAC协议控制帧,不包含任何信息
- 令牌用于控制信道的使用,确保同一时刻只有一个结点独占信道
2.令牌环网工作原理
- 信道空闲时,令牌在环网中循环往复游走
- 当有数据时,B想向D发送数据时,当令牌经过B时,令牌被B占用,且令牌带着数据走
- 当令牌转到目的站D ,数据会被D复制,令牌继续回到B时,将数据卸下,并更换新的令牌,继续循环
- 全程B都是独占信道的,所以令牌环网适合负载较重的网络,不会出现冲突
局域网基本概念和体系结构
决定局域网主要要素
- 网络拓扑
- 传输介质
- 介质访问控制方法
局域网拓扑结构
局域网传输介质
局域网介质访问控制方法
局域网的分类
以太网。是目前应用最广泛的局域网,逻辑拓扑是总线型,物理拓扑是星型。使用的是CSMA/CD 协议
IEEE 802标准
LLC子层和MAC子层
IEEE 802标准将局域网的数据链路层划分为:逻辑链路层LLC子层,和介质访问控制MAC子层
以太网
以太网概述
- 以太网有两个标准,DIX Ethernet V2 和IEEE 802.3 ;两种标准的帧格式只有1点点的不同
以太网提供无连接、不可靠服务
由于局域网的信道质量非常好,所以出现差错的几率小,所以能采用无连接不可靠服务
- 无连接:发送方接受方,之间通信前,不提前确立信道,无握手
- 不可靠:是指,不管接受数据帧是否乱序、差错、丢失,不对帧编号
- 无差别接收:是指,在接收数据不会有意外,来什么收什么
以太网传输介质与拓扑结构
- 现在以太网拓扑结构都是逻辑上总线型,物理上星型
- 传输介质采用双绞线+集线器
10BASE-T以太网
- BASE 表示传输基带信号,也就是数字信号
- T表示采用双绞线
- 采用曼彻斯特编码
- 采用CSMA/CD介质访问控制
适配器与MAC地址
- 通信适配器,实现计算机与外界局域网的连接,也称网络接口板,或网卡NIC
- 现在计算机都嵌入了适配器,就无须单独使用网卡了
- 适配器上装有处理器和存储器(RAM,ROM),ROM上存储了计算机硬件(网卡)地址MAC地址
- MAC地址全球唯一,换网卡,MAC地址改变
以太网MAC帧–V2格式
- *为什么有帧开始定界符 ,却没有帧结尾定界符呢?
- 因为以太网编码采用的是曼彻斯特编码,一个bit内就有一个跳变,当这种形式消失,就说明帧结束,然后只需要往前推4bit就能找到数据位置
mac帧首部+尾部=18B,mac帧数据部分46~1500B
高速以太网
100BASE-T:
100表示数据传输率为100Mb/sBASE表示采用基带传输T表示传输介质为双绞线 ;F则表示光纤
- 100BASE-T以太网: 在
双绞线上传送100Mb/s的基带信号的星型拓扑以太网,支持全双工和半双工,当使用半双工时使用CSMA/CD协议来避免碰撞 - 吉比特以太网: 在
光纤或双绞线上传送1GB/s信号支持全双工和半双工,当使用半双工时使用CSMA/CD协议来避免碰撞 - 10吉比特以太网: 在
光纤上传送10Gb/s信号,只支持全双工,无争议,无碰撞
结论:以太网带宽越大,越需要使用光纤作为传输介质
无线局域网
什么是无线局域网?
由于主机离主路由器太远,无法直接连接到路由器,那么就会通过基站的方式:
- 先在范围内设置一个基站AP,主机与AP通过无线连接,使用的是
802.11协议传输 - AP通过有线连接接入到远处的路由器,使用的是以太网技术,使用
802.3协议 - 图中主机H1 想给另一处的主机通信,需要经历协议的转换
802.11的MAC帧头格式
- 基站AP(也称无线接入点), 是主机通过连接无线网络连入有线网络(以太网)的设备
- 以下的场景:A 想要与B通信,由于距离太远,A要先通过无线网络将数据发送给Ap1,然后Ap1发送给AP2,最后由Ap2将数据发送给B
- 接收端–AP2的MAC地址 ;发送端–AP1的MAC地址;目的地址–B的MAC地址;源地址–A的MAC地址
无线局域网的分类
1.有固定基础设施无线局域网
- 一个基本服务集BSS内,的主机可以相互之间直接通过基站发送数据
- 不同基本服务集之间要进行远距离通信,需要借助基站与基站之间的互相通信来实现,称作“漫游”
- wifi名称–就是服务集标识符
2.无固定基础设施无线局域网的自组织网络
虚拟局域网VLAN
为什么提出虚拟局域网
- 广播风暴防范:每一个VLAN都是一个广播域
- 提高网络安全:含有敏感数据的用户组可与网络的其余部分隔离,从而降低泄露机密信息的可能性。
- 增加了网络连接的灵活性,有效共享网络资源:能将不同地点、不同网络、不同用户组合在一起,形成一个虚拟的网络环境,就像使用本地VLAN一样方便、灵活、有效。VLAN可以降低移动或变更工作站地理位置的管理费用,特别是一些业务情况有经常性变动的公司使用了VLAN后,这部分管理费用大大降低
- 简化项目管理或应用管理:VLAN将用户和网络设备聚合到一起,以支持商业需求或地域上的需求。通过能划分,项目管理或特殊应用的处理都变得十分方便,例如可以轻松管理教师的电子教学开发平台。外,也很容易确定升级网络服务的影响范围。
VLAN基本概念
- 就是将局域网内的设备,划分为不同的逻辑工作组,这种域与物理位置无关
- 一个逻辑工作组,就是一个子网,一个广播域
VLAN实现
- 将一个交换机下的局域网,逻辑上划分为两个虚拟的不同的局域网,同时其他交换机下的也可以划分为同样的两个分组,这样相同的分组之间就是一个可以互相通信的虚拟局域网,而不同分组之间就不能互相通信
按照交换机上的端口划分VLAN
按照接入的主机MAC地址划分VLAN
- *假如A要往E发送数据,A主机会先准备一个普通以太网帧,帧送往交换机,交换机会往帧上贴一个标签(标注VLAN1),发往交换机2,然后交换机2会根据标签,知道这是发往虚拟局域网VLAN1的然后再根据一些其他标志,判断发往E *
VLAN进行数据交换时,帧的格式变化
练习
广域网及相关协议
什么是广域网
PPP协议
PPP点对点协议,广域网使用的链路层协议,只支持全双工链路,用于用户使用拨号电话接入因特网
PPP协议应该满足的要求/无需满足的要求
- 同步线路是逐个bit发送数据,异步线路是逐个字节或字符发送数据
PPP协议的是哪个组成部分
PPP协议的帧格式
- PPP协议的帧格式,最小单位是字节,所以是面向字节的
链路层设备
基本概念
网段
- 网段计算机网络中使用同一物理层设备,能够直接通讯的那一部分,同一个网段,会有冲突域,同一时间只能有一台设备占用
冲突域与广播域
1.冲突域:
- 在以太网 中,如果某个CSMA/CD网络上的两台计算机在同时通信时会发生冲突,那么这个CSMA/CD网络就是一个冲突域(collision domain)。如果以太网中各个网段以集线器连接,因为不能避免冲突,所以它们仍然是一个冲突域
- 冲突域就是连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合,或以太网上竞争同一带宽的节点集合.
- 集线器是一个标准的共享式设备,也就是同一时刻只有一个端口下联的设备可以发送数据。正常工作时,集线器随机选出某一端口设备并让它独占全部带宽与集线器上联设备(如交换机、路由器等)进行通信。因此,集线器设备的所有端口即形成了一个冲突域。
- 为了有效避免冲突,局域网中使用交换机(Switch)来分割冲突域
2.广播域:
- 广播是一种信息的传播方式,指网络中的某一设备同时向网络中所有的其它设备发送数据,这个数据所能广播到的范围即为*广播域(Broadcast Domain)。*
3.两者区别
冲突域是基于物理层
广播域是基于数据链路层
冲突域:竞争同一带宽的节点的集合
广播域:接收同样广播消息的节点的集合
练习加深了解
链路层的设备
网桥
- 网桥有左右两个端口,分别分割两个冲突域
透明网桥
源路由网桥
网桥的自学习功能
- 网桥只有左右两个端口,分别标记位1,2号
- 网桥自学习是指,网桥转发表一开始是空的,当A->B发送信息时,A会向所有主机发送,当经过第一个网桥时,由于网桥转发表没有对A的记录,所以当数据帧经过该网桥时,就会在转发表记录 A对应1端口位置;同时由于没有对B的记录,无法选择转发,所以只能一股脑转发出去,右边的网桥也经过一样的过程
交换机
多接口网桥–交换机
- 集线器,也是多接口,集线器,会将每台计算机原有100MB/s带宽,平均为每台只有25MB/s ,同时会有冲突域,一台集线器下的计算机只能同时有一台发送数据,传输速率大大降低
- 交换机,就是一个多接口的网桥,可以隔绝冲突域,一台交换机下的每条信道都能占满带宽(独占媒体带宽),维持原有的100MB/s,同时一台交换机之内的所有计算机都可以同时传输数据
以太网交换机的两种交换方式
- 直通式交换机
- 存储转发式交换机
交换机的自学习功能
- 与网桥的自学习功能类似,只是多了几个端口
习题
数据链路层的功能
note
差错分为位错(bit跳变)和帧错(帧丢失、重复、失序) 对于帧丢失,采用计时器,超时重传;对于帧重复,采用编号,重复丢弃
note
- 面向连接好比西气东输,西边说:我要输气了;东边说:好的;西边说:收到;然后往架好的管道里输气。
- 无连接好比寄快递,写个地址就寄出去了,收件方是不知道的,同时中间是有可能丢件的。所以面向连接和无连接的区别在于,前者在管道中传输,安全不丢件,后者不然;前者收发双方是同步的,后者收方是不知情的。
note
流量控制实际上是控制发送方的数据流量
note
所以不可靠的信道,往往服务效率比较低,成功看几率不保证发送成功
组帧
caution
考察封装成帧的方式
- 字符计数法:帧的首字符记录该字符的字符数
- 字符填充的首尾界定:首尾填充字符,中间遇到特殊字符,加转义字符
- 比特填充法:01111110作为首尾界定,中间遇到连续5个1,后加1个0
差错控制
note
考察差错控制中的三种校验码
考点
考察CRC冗余校验码,需要先双方确定检验的多项式
流量控制与可靠传输
注意
- 信道利用率就是数据传输到信道上的 有效时间/总时间
- 单向传播时延要x2
- 总时间=传播时延+发送时延
warning
考查窗口大小
warning
- 滑动窗口协议:停等、GBN、SR
- 滑动窗口包括:发送窗口、接收窗口
- 根据接收窗口和发送窗口个数判断使用的哪种协议
note
- 捎带确认,确认帧捎带在数据帧后面,因此确认帧的发送时延就不能忽略
- 停等协议、后退N帧协议、选择重传协议信道利用率计算差不多,不同的是一次往返传播时间内,能最多发送的帧数目不同
在数据传输率为50kb/s的卫星信道上传送长度为1kbit的帧,假设确认帧总是由数据帧捎带,帧头的序号长度
为3bit,卫星信道端到端的单向传播延迟为270ms。对于下面三种协议,信道的最大利用率是多少?
1)停止-等待协议。
2)后退N帧协议。
3)选择重传协议(假设发送窗口和接收窗口相等)。
考点
- 信道利用率计算公式(有效时间/周期)
- 吞吐率计算公式(有效大小/周期)
- 一个周期有4个时延【又是可以忽略确认帧的发送时延】
- 利用信道利用率100% 限制吞吐率
介质访问控制
note
- TDM时分复用技术,适用与数字信号
- FDM频分复用技术,适用于模拟信号
码分复用CDM
码分复用 A、B两芯片序列相互正交(向量内积为0),互不影响
CSMA
- 三种CSMA监听协议
争议期
争议期,是知道发生碰撞所需的最长时间
最短帧长
为了确保在数据不会在碰撞检测到之前,就完全发送完毕,所以需要保证帧足够的长度,这个极限长度就是最短帧长,CSAM/CD协议
确定重传时间
二进制规避算法
CSMA/CA协议
碰撞避免的CSMA协议
真题
CSMA/CA协议才需要通过确认来预约信道
真题
- 以太网中集线器的传输速率=100Mb/s
- 以太网帧最小帧长=18+46=64B
- 本题考查的还是最小帧长的计算
note
负载:一个时隙发送的信息数量
真题
- 考察最短帧长
- 以太网数据帧 首部18B + 数据部分46~1500B ,所以最长1518B
- 有效数据传播速率,只考虑对数据部分1500字节的传播,不包括首部18B
- 总传播时延,任然需要包括首部18B的传播所占时间
局域网
网卡
- 网卡是链路层设备
- 设备的功能实现主要在本层及以下
attention
各种地址转换,需要的协议
802.3标准定义的以太网
- 数据链路层分为 LLC子层+MAC子层
- LLC层给帧加序号
- MAC层组帧,拆帧
以太网无连接不可靠
以太网信道质量好,不容易差错,所以尽可能交付,无连接不可靠,所有差错纠正交给上层完成
无线局域网
802.11协议
广域网
考点
广域网的PPP协议
- 面向字节,不可靠
- 具有CRC冗余校验
- 支持IP协议和其他多种协议,链路两端支持不同协议
链路层设备
交换机
交换机原本不能隔离广播域,但是设置虚拟局域网之后,就可以达到隔离广播域的效果
真题
- 考察,以太网mac帧头中目的mac地址字节数
网络层
网络层的功能
1.网络层功能
- 路由选择分组转发
- 异构网络互联:指的是传输介质、数据编码方式、链路控制协议以及不同的数据单元格式和转发机制的网络,也就是数据链路层和物理层协议不同的网络
- 拥塞控制:全局性的概念,是因为整个网络负载过重造成拥塞;而流量控制只是,发送方发送过快导致接收方接收不过来,所以需要流量控制
2.拥塞控制方法
- WAY1开环控制:静态方法
- WAY2闭环控制:动态方法
SDN基本概念
考察概念,主要是选择题
1.网络层的关键功能
- 转发:将分组从路由器的输入端口,转发到合适的输出端口【局部的功能】【数据平面的部分】
- 路由:使用路由算法决定分组从发送主机到目标接收主机的路径【全局的功能】【控制平面的部分】
2.网络层:数据平面、控制平面数据平面:
- 路由器本地动作
- 根据路由表,将分组从输入端口转发到合适的输出端口【路由表和转发表是控制平面的路由选择协议实体算出来的】
控制平面:
- 网络范围内的逻辑
- 决定数据报从源到目标主机的端到端路径
- 2个控制平面方法:传统方法、SDN方法(software-define-networking)
- 传统方法:运行在每一台路由器本地中
- SDN方法:在远程服务器中实现
3.控制平面两个方法
传统方式–每路由控制平面
- 传统方式下,每个路由器,即实现了控制平面功能,又实现了数据平面功能
- 每台路由器中的路由选择算法与其他路由器中的路由选择算法相互通信, 计算出路由表和转发表
- 这种方式使得路由器的控制平面与数据平面相互紧紧耦合,带来的问题是,改变路由运行逻辑变得非常困难
SDN方式–集中逻辑的控制平面
- 将控制平面从路由器物理上剥离开,在远程服务器中集中实现。在远程控制器中计算和分发转发表,以提供给每台路由器
- 计算、转发、远程控制器,是由软件实现,所以是集中式,可编程的
4.SDN方式控制平面的组成
远程控制器中包括:
- SDN控制器
- 网络控制应用程序
5.SDN控制器的三个层次
IP数据报
IP数据报格式
- 网络层的传输单位是数据报,,网络层主要用到的协议是IP协议,IP协议的数据报格式如下
- 首部长度:单位是4B,最小为5
- 总长度:首部+数据,单位是1B
- 生存时间(TTL):IP分组的保质期。经过一个路由器-1,变成0则丢弃
- 首部检验和:只检验首部
- 源IP地址和目的IP地址:32位
IP数据报分片
为什么要分片?
- 数据链路层是对IP数据报进行封装成帧,但是帧有最大传输单元MTU,如果IP数据报/分组,大于MTU,怎么办?
所以需要对IP数据报进行分片
数据报分片例子
注:由于片偏移是以
8B为单位,指明分片后某片在原分组中的相对位置,所以分片除了最后一个分片外,长度必须是8B的整数倍
IPV4地址
- 一个路由器会连接很多个主机,一个主机对应路由器一个接口(有线或无线接口),每个接口都会分配一个唯一的ip地址
- ip地址都是32bit的标识符,采用点分十进制,每一个字节,用点隔开,并且
每个字节的数字都是用十进制表示 - IP 地址包括两部分:网络 ID(网络地址) + 主机 ID(主机地址)
网络 ID 用于不同网络寻址; 主机 ID 用于局域网内通讯
IP地址的分类
根据 IP 地址(二进制下)前缀数字的不同情况,划分为 A,B,C,D,E 5个类别,如下图 (本文我们主要介绍 A,B,C 三类)
A类地址
- 第 1 字节为网络地址,其他 3 字节为主机地址,第 1 个字节第一位固定为0
- 可用网络号范围: 1.0.0.0 - 126.0.0.0
- 包含私有地址和保留地址
- 私有网络号:10 (局域网中使用的网络地址)(网段1个)
- 保留地址:127.X.X.X
- 主机数量:千万台
B类地址
- 第 1.2 字节为网络地址,其他为主机地址,第 1 个字节前两位固定为 10
- 可用网络号范围:128.0.1.0 - 191.255.0.0
- 包含私有地址和保留地址
- 私有网络号:172.16—172.31 (网段16个)
- 保留地址:169.254.X.X (IP 地址为自动获取,且无可用 DHCP 服务时,分 配该地址)
- 主机数量:最大 65534 台
C类地址
- 第 1.2.3 字节为网络地址,第 4 字节为主机地址,第 1 个字节前三位固定110
- 可用网络号范围:192.0.1.0—223.255.255.0
- 包含私有地址和保留地址
- 私有网络号 :192.168.0.0~192.168.255.255 网段共255个
- 主机数量:最大 254 台
*网段个数,代表某类ip地址网络号有几种分法*
主机号要减去全0,全1
特殊ip地址
广播地址(主机号全1)、本网络(主机号全0),都不能代指某一台主机,是一种特殊概念
私有ip
NAT网络地址转换
内网ip,不能直接与外网通信
NAT转换
- 需要通过NAT转换,将内网ip(专用网/私有ip地址)以及端口号,通过路由器 按照NAT转换表 转换为路由器的公网ip地址和端口号,才能与外部通信
- NAT路由器一般只有1个公网ip,所以内网的主机公用一个公网ip
什么时候需要NAT转发?什么时候不需要?
- 当申请的网络号是公网网络号,那么其下的ip都是公网ip,就不需要再对其NAT转换
- 当使用的都是专用网络,内网网络号,那么其下的都是私有ip,也就需要保证,路由器拥有至少一个公网ip,通过NAT转换与外部通信
子网划分与子网掩码
什么是子网?
子网或子网络是大型网络内的较小网络。子网划分使网络路由更加高效。
为什么要划分子网?
1 | 详细概述: |
什么是子网掩码?
子网划分
采用B类ip地址,该申请的网络号为145.13
由于
内部再划分子网,其中一个子网网络地址为145.13.3
这个子网里有多台主机,(子网网络地址+主机号)
子网的划分实际上就是将
二级ip地址,将原本主机号,借用若干位,作为子网号–>三级ip地址在两级IP地址两个字段的基础上新增一个
子网号字段划分子网纯属是一个单位内部的事情,单位对外仍然表现为没有划分子网的网络。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15eg. 对外表现ip为141.14.72.24【这是一个B类ip地址,网络地址为141.14.0.0,后面是主机号】
假如子网掩码是:
255.255.192.0
11111111 11111111 11000000 00000000
可以看出,该子网是借用了2bit作为子网号,后面14bit才是主机号
141.14.72.24
10001101 00001110 01001000 00011000
与子网掩码相与,得到的子网网络地址就是:
141.14.64.0
10001101 00001110 01000000 00000000
主机号是子网号后面14bit:
2072
001000 00011000
习题
CIDR无分类编址
CIDR(Classless Inter-Domain Routing)无分类域间路由选择
划分子网在一定程度上缓解了因特网发展中遇到的困难,但其仅仅是对分类编址方式的改进,A、B、C类IP网络号都为8的倍数,其划分不够精细,存在很大程度的浪费,基于此,无分类编址方式CIDR应运而生。
分类编址的问题
1992年因特网面临三个必须尽早解决的问题
- B类地址在1992年分配了近一半,眼看很快就将全部分配完毕
- 因特网主干网上的路由表中的项目数急剧增长(由几千个增长至几万个)
- 整个IPV4的地址空间最终将全部耗尽,在2011年2越3日,IANA宣布IPV4地址已经耗尽了
IETF研究采用无分类编址的方法来解决前两个问题,其认为第三个问题属于更加长远的问题,因此专门成立IPV6工作组负责研究新版本IP协议的问题
CIDR最主要的两个特点
- CIDR消除了传统的A类、B类和C类地址及划分子网的概念,因此可以更加有效地分配IPv4的地址空间,并且在新的IPv6使用前容许因特网的规模继续增长
CIDR把32位的IP地址划分为两个部分,前面的部分是网络前缀,用来指明网络,后面的部分则用来指明主机,其与分类编址最大的不同,便是网络前缀不局限于8的倍数。因此CIDR使IP地址从三级编址(使用子网掩码)又回到两级地址,但这已经是无分类的两级编址。CIDR在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
IP地址 :: = {<网络前缀>,<主机号>}
- CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(最小地址)和终止地址(最大地址),以及地址块中的地址数。
例如,已知IP地址为128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制形式,其中前20位是网络前缀,而后面的12位是主机号:
128.14.35.7/20 = 10000000 00001110 00100011 00000111
这个地址块的最小地址为:10000000 00001110 00100000 00000000
这个地址块的最大地址为:10000000 00001110 00101111 11111111
CIDR的地址掩码
为了更方便地进行路由选择,CIDR使用32位的地址掩码(address mask)。地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CIDR不使用子网了,但由于目前一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码
例如,/20地址块的地址掩码是:11111111 11111111 11110000 00000000(20个连续的1)。斜线记法中,斜线后面的数字就是地址掩码中1的个数
CIDR不划分子网的理解
另外,“CIDR不使用子网”,是指CIDR中并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位仍然可以在本单位内根据需要划分出一些子网。这些子网也都只有一个网络前缀和一个主机地址号,但子网的网络前缀比整个单位的网络前缀要长一些
例如,某单位分配到地址块/20,就可以继续划分为8个子网(即需要从主机号中借用3位来划分子网)。这时,每一个子网的网络前缀就变成23位(原来的20位加上主机号借来的3位),比该单位的网络前缀多了3位
路由聚合的概念
由于一个CIDR地址块有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合(Route aggregation),它使得路由表中的一个项目可以表示原来传统分类网络地址的很多个路由。路由聚合也称为构成超网(supernettig)
如果没有采用CIDR,则在1994年和1995年,因特网一个路由器就回超过7万个项目,而使用了CIDR以后,在1996年一个路由表的项目数菜只有3万多个。路由聚合有利于减少路由器之间的路由选择信息交换,提高整个网络性能
有如下的4个/24地址块,试进行最大可能的聚合。
1 | 212.56.132.0 /24 |
解析:将上面四个地址块进行二进制转换
212.56.10000100.0 /24
212.56.10000101.0 /24
212.56.10000110.0 /24
212.56.10000111.0 /24
相同的前缀有22位,保留相同位数,将相同比特后面的数(到末尾)填充为0
所以很容易得出聚合后的地址块为:212.56.132.0/22
最长前缀匹配
最长前缀匹配的概念
在使用CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要做相应的改变。这时,每个项目由
“网络前缀” 和 下一跳地址组成。但是在查找路由表时可能得到不止一个匹配结果。这样就带来一个问题:我们应当从这些匹配的结果中选择哪一条路由呢?
正确的答案是:应当从匹配结果中选择具有最长网络前缀的路由。这叫作最长前缀匹配(longest-prefix matching),这时因为网络前缀越长,其地址块就越小(因为主机位数越少),因而路由就越具体。最长前缀匹配又称为最佳匹配或最长匹配
1 | eg.路由器接收到一个分组R0,它的目的ip地址是132.19.237.5 |
最长匹配前缀使用在哪?
- 路由表查找
当路由器收到数据包时,会在路由表中查找与数据包目的IP最匹配的路由。这时会应用最长匹配原则,匹配路由表中前缀最长、最精确的那条路由。
- 数据包转发
在进行数据包转发时,路由器会根据数据包的目的IP地址,通过最长匹配在路由表中找到匹配的接口。然后将数据包从该接口转发出去。
- 默认路由
如果路由表里没有与数据包目的IP完全匹配的路由,那么路由器会匹配默认路由,并从默认路由出接口转发数据包。
- 路由聚合
可以使用路由聚合技术,将多个相似的路由合并到一个前缀较短的聚合路由中,以减少路由表大小。这时也需要最长匹配来区分不同的路由
在子网划分时保证每个子网有不同的网络前缀,那么在路由转发时就已经可以唯一确定数据包所属的子网了。为什么还需要最长前缀匹配呢?
主要有以下几个原因:
- 子网划分可能使用可变长子网掩码(VLSM),使得不同子网的子网掩码长度不一样。这时需要最长前缀匹配来选择最精确的路由。
- 即使子网掩码长度相同,也可能会在同一网络前缀下再次进行分 subnet。这时路由器也需要最长前缀匹配来区分。
- 路由聚合可以将多个前缀相近的路由聚合到一个较短的前缀路由,以减少路由表大小。这时也需要最长前缀匹配来实现准确转发。
- 默认路由的存在也需要最长前缀匹配,以区分精确匹配和默认路由。
ARP协议
网络层协议
ARP协议的作用
完成主机或路由器IP地址到MAC地址的映射,解决下一跳走哪的问题
由于实际网络链路中,传送数据帧时,必须使用MAC地址,
例如:在一个局域网内,所有设备使用同一套链路,主机A想要向同一个网段下的主机B,在数据链路上发送数据帧,肯定需要在帧头加上源MAC地址和目的MAC地址,但是如果主机A不知道主机B的目的MAC地址怎么办?这就需要先检查*ARP高速缓存(ARP表),检查是否有主机B的IP地址与MAC地址的映射,如果有,则直接将主机B的MAC地址封装上数据帧,放到链路上传输;如果没有,那么就需要使用ARP协议,主机A向局域网内所有设备广播ARP请求的分组,同一局域网内所有主机收到该请求,当主机B收到这个请求分组,发现目的IP就是自己的IP地址,就会向主机A 单播返回一个 带有IP和MAC地址的分组,A得到B的响应,立刻将主机B的ip和MAC地址的映射项写入ARP缓存(10-20min更新一次**),然后主机A就能向帧头加上目的MAC地址放到链路上传送了
ARP协议会有一下4种情况
- 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址:
- 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址:
- 路由器发给本网络的主机A:用ARP找到主机A的硬件地址:
- 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。
DHCP协议
应用层协议
主机如何获取ip地址?
- 动态分配
- 静态分配
什么是动态分配DHCP协议?
DHCP协议是应用层协议,使用UDP传送
ICMP协议
网络层协议
什么是ICMP?
ICMP,全称是 Internet Control Message Protocol,即互联网控制报文协议,所谓控制,就是通过下发指令来感知和控制网络环境,所以它一定是配合一个无法感知网络环境的协议来工作的,这个协议就是 IP(包括 IPv4 和 IPv6)。
所以,ICMP 通常被认为是 IP 协议的一部分,它封装在 IP 层中,使用 IP 协议进行传输。因此,严格来说,ICMP 既不是一个网络层协议,也不是一个传输层协议,而是介于两者之间的一个协议。但是一般认为属于网络层协议
它的主要功能是传输网络诊断信息,信息主要包括两类:
- 一类是 查询类报文 :主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等等。
- 另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等等。
为什么需要ICMP?
我们都知道,IP 协议是一个不可靠协议,如果 IP 包在传输过程中出现错误,比如 checksum 对不上,拥塞,超时等等,那么 IP 包是会直接被丢弃的,之后也不会有进一步的努力来修正。
这是 IP 协议的一个设计准则决定的,也就是 best effort,尽力而为,这样的好处是让 IP 协议尽量保持简单的形态,只负责有效率的数据传输,而更多的质量控制交给高层的协议去处理(比如 TCP)。
但高层能提供质量控制的协议毕竟在少数,所以就需要在下层有协议来辅助 IP 完成必要的网络质量管理。ICMP 协议自然就被提出来了。
通过 ICMP 协议,当 IP 包发生错误的时候,上层发送 IP 包的主机或路由器并不知道下层发生了错误,这个时候,下层的主机或路由器就可以通过发送 ICMP 包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整。
不过需要注意的是,ICMP 仅仅只能提供某些特定类型的错误信息汇报,并不能帮助 IP 协议成为可靠的协议。它能做的事还是有限,但用于基本的网络质量管理是足够了。
ICMP报文格式长啥样?
- 【注意区分,报文是数据部分,报文在网络层封装成IP数据报】
如下图所示,ICMP 报文是被封装在 IP 数据报中传输的。
IP 报头中的 Protocol 字段为 1 即表示该报文携带的是 ICMP 报文。(此处只是为了说明问题,因此 IP 报头是简化了的)
进一步看,ICMP 报头为 4 个字节:
- 类型 type:占 1 个字节,表示较大范围类型分类的 ICMP 报文
- 代码 code:占 1 个字节,表示较小范围类型分类的 ICMP 报文(type的细分)
- 校验和 checksum:占 2 个字节,ICMP checksum 的计算方法类似于 IP checksum,但是不同的是 IP 只校验头部,ICMP 校验头部+数据部分
后面紧接的 ICMP 数据部分,根据前面的类型和代码字段的不同,具有不同的内容。
ICMP报文分类
ICMP差错报文
5中差错报告报文
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 源点抑制:当路由器或主机由于拥塞丢弃数据,就向源点发送源点抑制报文,使源点发送慢一点
- 时间超过: 当路由器收到生存时间TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。TTL=0
- 参数问题: 当路由器或目的主机收到的数据报的首部中有的字段的值不正确,就丢弃该数据,并向源点发送参数问题报文
- 重定向: 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器可通过更好的路由)。值得更好的路由
ICMP询问报文
两种询问报文
- 回送请求和回答报文: 主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送1CMP回送回答报文。测试目的站是否可达以及了解其相关状态。
- 时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
ICMP应用场景
错误报告
ICMP 错误消息报告网络错误,例如目的地不可达、超时或分段问题。这些消息对于具有无连接通信模型的用户数据报协议 (UDP) 尤其重要。
UDP 不提供可靠、有序的数据包传输。发送 UDP 数据包时,数据包可能会丢失,也可能在传送时出现校验和错误等故障。如果发生这种情况,接收方会将 ICMP 错误报告消息发回给发送方,以通知该问题。
诊断
您可以使用 ICMP 进行网络诊断。它最常用于 ping 和 traceroute 命令。
ping 命令通过向目标设备发送 ICMP 回显请求数据包来测试网络设备的可访问性。是
ICMP询问报文,如果设备可以访问,则会返回 ICMP 回显回复。它可以可靠地检查网络延迟并确保设备可用。traceroute 命令跟踪数据包从源到目的地所采用的路径。是
ICMP差错报文为此,该命令将回显请求和回显回复消息发送到预定目的地。
例如:回显请求包含一个生存时间 (TTL) 值,数据包每通过一个路由器,该值就会减 1。当数据包到达 TTL 为零的路由器时,路由器会向源端发送一条 ICMP 消息。该消息包含有关数据包所采用路由的信息。Traceroute 会显示数据包的确切路径,可以为您提供网络性能详情。
IPV6
为什么需要IPV6?
IPv4地址采用32比特标识,理论上能够提供的地址数量是43亿(由于地址分配的原因,实际可使用的数量不到43亿)。另外,IPv4地址的分配也很不均衡:美国占全球地址空间的一半左右,而欧洲则相对匮乏;亚太地区则更加匮乏。与此同时,移动IP和宽带技术的发展需要更多的IP地址。目前IPv4地址已经消耗殆尽。针对IPv4的地址短缺问题,也曾先后出现过几种解决方案。比较有代表性的是无类别域间路由CIDR(Classless Inter-Domain Routing)和网络地址转换NAT(Network Address Translator)。但是CIDR和NAT都有各自的弊端和不能解决的问题,由此推动了IPv6的发展。
IPv6地址采用128比特标识。128位的地址结构使IPv6理论上可以拥有(43亿×43亿×43亿×43亿)个地址。近乎无限的地址空间是IPv6的最大优势。
IPV6地址表示方法
IPv6地址总长度为128比特,通常分为8组,每组为4个十六进制数的形式,每组十六进制数间用冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B,这是IPv6地址的首选格式。
为了书写方便,IPv6还提供了压缩格式,以上述IPv6地址为例,具体压缩规则为:
- 每组中的前导“0”都可以省略,所以上述地址可写为:FC00:0:130F:0:0:9C0:876A:130B
- 地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替,所以上述地址又可以进一步简写为:FC00:0:130F::9C0:876A:130B。
- 需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成128位时,无法确定每个“::”代表0的个数
IPv6数据报格式
IPV6与IPV4对比
IPV4向IPV6过渡
- 双栈技术:主机或路由器同时装有IPV4 和 IPV6两个协议栈,因此,主机既能和IPV4通信,也能和IPv6网络通信。
IPv6和IPv4是功能相近的网络层协议,两者都基于相同的物理平台,而且加载于其上的传输层协议TCP和UDP又没有任何区别。如果一台主机同时支持IPv6和IPv4两种协议,那么该主机既能与支持IPv4协议的主机通信,又能与支持IPv6协议的主机通信,这就是双协议栈技术的工作机理。
- 隧道技术:在IPV6分组进入IPV4网络时,将IPV6分组封装成IPV4分组;当封装成IPV4分组离开IPV4网络时,再装数据部分(IPV6部分)转发给目的节点。
利用隧道技术可以通过现有的运行IPv4协议的Internet骨干网络(即隧道)将局部的IPv6网络连接起来,因而是IPv4向IPv6过渡的初期最易于采用的技术。路由器将IPv6的数据分组封装入IPv4,IPv4分组的源地址和目的地址分别是隧道入口和出口的IPv4地址。在隧道的出口处,再将IPv6分组取出转发给目的站点。
路由算法与路由选择协议概述
路由算法
路由算法分类
- 静态路由算法(非自适应路由算法):管理员手动配置路由信息
- 动态路由算法(自适应路由算法):路由器彼此交换信息,自行优化路由表
- 全局性算法:链路状态路由算法OSPF
所有路由器掌握完整的网络拓扑和链路费用 - 分散性算法:距离向量路由算法RIP
路由器只掌握物理相连的邻居及链路费用
- 全局性算法:链路状态路由算法OSPF
分层次的路由选择协议
- 路由选择协议需要分层次
1.因为因特网规模大 2.因为许多单位不想让外界知道自己的路由选择协议
所以就分为多个自治系统AS,并且将不同自治系统可以使用不同协议
一个AS内使用的RIP、OSPF协议;AS与AS之间使用的BGP协议 - 自治系统AS:
是单一的技术管理下的一组路由器(这些路由器使用一种AS内部的路由选择协议);互联网是一个由网络组成的网络。它由成千上万个被称为“自治系统”(autonomous system,AS)的更小网络组成。这些网络中的每一个实际上就是由单一组织运行的一个大型路由器池。如果我们继续将 BGP 比作互联网的邮政服务,那么自治系统就相当于各邮政分局。一个城镇可能有数百个邮箱,但邮箱中的所有邮件都必须先经过本地邮政分局,然后再运送到另一个目的地。自治系统中的内部路由器就好比邮箱。它们将出站流量路由到自治系统,然后使用 BGP 路由将这些流量传输到其目的地。
RIP协议及距离向量算法
RIP协议报文格式
注意:RIP协议属于应用层协议,使用UDP传输数据
什么是RIP协议?
注意:RIP协议属于应用层协议,是一种分布式的基于距离向量的路由选择协议适用于与比较小的网络
RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(即一组距离)。距离:通常为“跳数”,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1。特别的,从一路由器到直接连接的网络距离为1。RIP允许一条路由最多只能包含15个路由器,因此距离为16表示网络不可达。
路由表有三项:目的网络、距离、下一条路由器
- 目的网络:通过该路由器能够到达的网络
- 距离:该路由器到达目的网络的最佳距离(跳数)
- 下一跳路由器:如果要走这样的最佳距离,需要走过的下一跳路由器
【直接交付,是指目的网络和该路由器直接相连的】
RIP协议的特点
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息(当链路有变化,就不等30s了,比如某个网段不存在了,会立刻告诉。)
距离向量算法
在RIP协议相邻路由器互相交换路由表之后,如何处理,才能得到到达某一个网络的最短距离?这就是距离向量算法所解决的问题
- 修改相邻路由器发来的RIP报文中 所有表项。
对地址为X的相邻路由器发来的RIP报文,修改此报文中的所有项目:把“下一跳”字段中的地址改为X,并把所有的“距离” 字段 +1。 - 对修改后的RIP报文中的每一个项目,进行以下步骤:
(1)R1路由表中若没有Net3,则把该项目填入R1路由表
(2)R1路由表中若有Net3,则查看下一跳路由器地址:- 若下一跳是X,则用收到的项目替换源路由表中的项目;
- 若下一跳不是X, 原来距离比从X走的距离远则更新,否则不作处理。
- 若180s还没收到相邻路由器X的更新路由表,则把X记为不可达的路由器,即把距离设置为16。
- 返回
距离向量算法例题
解析:
来自B的向量为(5,0,8,12,6,2);
其数字分别对应路由器C通过B 到达(A,B,C,D,E,F) 路由器的距离,
由于还有C到B的延迟6,所以每个分量还需要+6;其他的同理
好消息穿的快,坏消息传的慢
OSPF协议及链路状态算法
OSPF分组格式
注意:OSPF协议是网络层协议,使用IP数据报传输数据OSPF协议是不使用UDP数据报传送,而是直接使用IP数据报传送,因此OSPF是被划分到属于网络层协议-这一点考研党要以考纲为标准)****
为什么会有OSPF协议?
开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。
OSPF(Open Shortest Path First)并不是按照简单的跳数(条数)来计算路径的。相反,OSPF使用链路状态信息来计算最短路径,OSPF使用Dijkstra算法来计算最短路径。Dijkstra算法考虑了每个节点(路由器)之间的链路成本,然后确定最短路径。链路成本通常是基于带宽的,但也可以是其他度量标准,例如时延或可用带宽
为什么会出现OSPF?:因为RIP是一种基于距离矢量算法的路由协议,存在着
- 收敛慢;
- 易产生路由环路;
- 可扩展性差,最大只能支持15跳。
OSPF的出现很好地解决了上述3个问题
OSPF协议的特点
Dijkstea算法
链路状态路由算法
BGP协议
BGP协议报文格式
注意:BGP协议是应用层协议,使用TCP传送
什么是BGP协议?
边界网关协议 (BGP) 就是互联网的邮政服务。当有人把一封信投进邮筒时,邮政服务就会处理这封邮件,并选择一条快速、高效的路线将这封信投递给收件人。同样地,当有人通过互联网提交数据时,BGP 负责寻找数据能传播的所有可用路径,并选择最佳的路由,这通常意味着在自治系统之间跳跃。
BGP协议的特点
BGP协议交换信息过程
BGP协议四种报文
三种路由协议的比较
IP组播
IP网络的3种数据传输方式
IPv4协议定义了三种IP数据包的传输方式:单播(unicast)、广播(broadcast)和组播(multicast)。通过对三种包传播方式比较式介绍,可以看到组播方式的优越性。
组播MAC地址主要用于一对多的本地网络组播服务,会在路由器、交换机、服务器、IP设备等上使用。它是实现高效局域网组播的重要标识。
1.单播方式
单播(Unicast)是在一台源IP主机和一台目的IP主机之间进行。网络上绝大部分的数据都是以单播的形式传输的,例如电子邮件收发、网上银行都是采用单播实现的。
- 一份单播报文,使用一个单播地址作为目的地址。Source向每个接收者发送一份独立的单播报文。如果网络中存在N个接收者,则Source需要发送N份单播报文
- 网络为每份单播报文执行独立的数据转发,形成一条独立的数据传送通路。N份单播报文形成N条相互独立的传输路径
1
2
3
4单播缺点:
1.重复流量过多(每有一个用户就要发送一份同样的数据)
2.消耗设备和链路带宽资源(假如有一百个用户,就要发送一百份数据)
3.难以保证传输支质量(用户数量过大时,会造成发送端和链路上的网络设备因为流量过大以及负载过高而网络瘫痪或死机)
2.广播方式
广播是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式。
- 一份广播报文,使用一个广播地址作为目的地址。Source向本网段对应的广播地址发送且仅发送一份报文。
- 不管是否有需求,保证报文被网段中的所有用户主机接收。
1
2
3
4广播缺点:
1.地域范围限制(广播报文被限制在一个共享网段中)
2.安全性无法保障(在该网段中所有主机都接收的到广播报文,不管是否想要接收)
3.有偿性无法保障(计费困难)
3.组播方式
组播(Multicast)是在一台源IP主机和多台(一组)IP主机之间进行,中间的交换机和路由器根据接收者的需要,有选择性地对数据进行复制和转发
组播在点对多点的应用上,结合了单播和广播的优势。组播方式下,单一的信息流沿组播分发树被同时发送给一组用户,相同的组播数据流在每一条链路上最多仅有一份。
相比单播,由于被传递的信息在距信息源尽可能远的网络节点才开始被复制和分发,所以用户的增加不会导致信息源负载的加重以及网络资源消耗的显著增加。
相比广播,由于被传递的信息只会发送给需要该信息的接收者,所以不会造成网络资源的浪费,并能提高信息传输的安全性。另外,广播只能在同一网段中进行,而组播可以实现跨网段的传输。
组播IP
组播不可能以某一个主机的IP作为自己的目的IP,但是以太网报文在封装时必须要填入目的IP
怎么办?
回想一下,组播IP不能以某个主机的IP作为自己的目的IP,换句话说,组播IP不需要考虑主机标识,哪个类型的IP地址没有主机标识,D类
组播MAC
同样地,组播报文在数据链路层需要填充目的MAC地址,如何填充正确的MAC地址呢?
单播报文在填入目的MAC时,会通过ARP协议根据目的IP询问目的主机的MAC地址,而组播由于目的IP并不是某个主机的IP,所有无法用ARP协议询问目的MAC。既然ARP寻址方式行不通,组播MAC地址有自己的转换方式
*组播MAC地址主要用于一对多的本地网络组播服务,会在路由器、交换机、服务器、IP设备等上使用, 比如:
- 服务器/工作站 - 在进行组播通信时,服务器和工作站会作为发送端或接收端使用组播MAC地址。比如视频会议软件。
- 游戏主机 - 一些网络游戏主机和服务也可能使用组播MAC地址
这些实现组播的设备的MAC地址,被称为组播MAC地址,它与平时我们上网网卡的单播MAC地址不同,有以下区别
MAC地址的唯一性只是在单播MAC地址而言。单播MAC地址用于唯一标识一台网络设备,确实要求全球唯一。但是组播MAC地址用于支持一对多的组播通信,其地址格式规定了前24位是固定值,后24位可以配置。组播MAC地址之所以可以在多台设备上取相同的值,
- 组播MAC地址只需要在局域网内的设备上唯一即可,不需要全球唯一。
- 组播通信需要将报文复制给多个接收端,所以不能使用唯一的MAC地址。
- 通过配置组播MAC的后24位,可以生成多个相同的组播MAC地址。
- 不同网络接口可以配置相同的组播MAC地址,以接收同一多播流。
IGMP协议
互联网组管理协议 (IGMP) 是允许多个设备共享一个 IP 地址以便它们可以接收相同数据的协议。IGMP 是一个网络层协议,用于在使用互联网协议版本 4 (IPv4) 的网络上设置多播。具体来说,IGMP 允许设备加入一个多播组。
组播路由选择协议
移动IP
使用移动 IP 可将 IP 数据报路由到移动节点。无论移动节点连接到何处,移动节点的家乡地址可始终标识该移动节点。如果移动节点不在家乡网络上,则转交地址将与移动节点的家乡地址相关联。转交地址可提供有关移动节点当前连接点的信息。移动 IP 使用注册机制向家乡代理注册转交地址。
家乡代理可将数据报从家乡网络重定向到转交地址。家乡代理会构造一个新的包含移动节点转交地址的 IP 数据包头,将其用作目标 IP 地址。这个新的 IP 数据包头用于封装初始 IP 数据报。因此,移动节点的家乡地址不会影响已封装数据报的路由,直到数据报到达转交地址为止。这种类型的封装被称为隧道连接。数据报到达转交地址之后,将对数据报解除封装。然后,将数据报传送到移动节点。
转交地址可能属于外地代理。它可能由移动节点通过动态主机配置协议 (Dynamic Host Configuration Protocol, DHCP) 或点对点协议 (Point-to-Point Protocol, PPP) 获取。对于后一种情况,移动节点具有协同定位的转交地址。
移动代理(家乡代理和外地代理)通过使用代理通告消息来通告其是否存在。移动节点也可以选择请求代理通告消息。移动节点可使用通过代理请求消息在本地连接的任何移动代理。移动节点使用代理通告确定移动节点是在家乡网络上还是在外地网络上。
移动节点使用特殊注册过程通知家乡代理有关移动节点的当前位置。移动节点会始终“侦听”移动代理通告以确定移动代理是否存在。移动节点使用这些通告帮助确定移动节点何时移到另一个子网。如果移动节点确定其已移到新位置,则会使用新的外地代理将注册消息转发到家乡代理。移动节点从一个外地网络移到另一个外地网络时,会使用同一过程。
如果移动节点检测到其位于家乡网络上,则移动节点将不使用移动服务。移动节点返回到家乡网络时,会向家乡代理取消注册。
网络层设备
路由器
多层次协议汇总
习题
网络层的功能
网络层数据报传输是否可靠,取决于协议;如果使用有连接,有确认的协议那就是可靠传输
异构网络互联:中异构网络是指,数据链路层和物理层均不同的网络
网络拥塞是指通信子网中负载增加,随着负载增加,越来越多分组由于等待,过长会被丢弃,所以导致虽然负载增加,但是吞吐率下降
中间路由器和源主机都不知道IP分组到达目的主机需要经过的完整路径
各层常用协议
路由算法
OSPF协议采用Dijstra最短路径算法
IPV4
127开头的表示环回地址,不分配给主机;
主机号全0,全1也不分配
主机号全0,表示本网络;全1表示所有主机
- 在所有主机都是使用公网IP时,就不需要考虑NAT转换,主机A通过中间路由器向主机C发送数据
- A向路由器发送:IP数据报首部,封装A源IP地址和C目的IP地址;MAC帧额外信息部分,封装A源MAC地址和路由器的MAC地址。
- 接着由路由器向C发送:IP数据爆首部,封装路由器自己IP(源IP),和C的IP(目的IP);MAC帧额外信息部分,封装路由器自己的MAC地址(y源MAC),和C的MAC地址(目的MAC)。
- 当主机使用的内网IP时,多台主机共享路由器的一个公网IP,需要考虑NAT转换,(假设A是外网主机,BC是内网主机)主机A通过中间路由器向主机C发送数据
- A向路由器发送:IP数据报首部,封装A源IP地址和路由器的IP地址【因为C的局域网IP不能通信】;MAC帧额外信息部分,封装A源MAC地址和路由器MAC地址(目的)
- 路由器向C发送:IP数据报首部,封装路由器自己的IP地址(源IP),和C的内网IP(目的IP);MAC帧额外信息部分,封装路由器自己的MAC地址(源MAC),和C的MAC地址(目的MAC)
IPV4首部,比较重要的几个字段:首部长度,单位4B;总长度,单位1B
片偏移,单位8B;
IP分组自能在目的主机中重组
路由聚合,构成超网
内部网络ip地址范围
NAT转换表,只有当源ip地址和源端口都对应,才能转换为公网地址
私有ip
- 因特网是外部网络
- 考察私有ip地址范围
ICMP
ICMP报文虽然是作为数据部分封装在IP数据报当中,但他任然是网络层协议,不是传输层。
ICMP报文
- ICMP分为差错报文和询问报文
- ping是用来询问是否可达的询问报文
真题
ICMP网络层协议
真题
- 题出的很好
- 考察了对默认网关的理解
- NAT转换的过程
- 网段的概念:
- 分析:A.D H1与H2通过同一台交换机连接,彼此之间可以通过交换机端口直接交互,处在同一网段,所以可以直接通信。同理H3、H4
- 分析:B H2想要访问Internet,需要通过网关NAT转换,但是H2设置的默认网关不是所在子网的网关,所以无法NAT转换。H4可以
- 分析:C H1想要与H3通信,由于他俩不在同网段,H1得先找交换机,交换机查发现不属于本网段,于是发给路由器,由路由器决定发送到哪,路由器发现是本子网内的,再发给交换机,由交换机,发给集线器,再由集线器发给H4和H3。
但是H1的默认网关设置错误,无法找到网关路由器,所以也就没有后续的了
真题
考察特殊ip
真题
- 路由聚合中的子网 0 10 110 1110 1111 后面的是主机号
考点
- 子网划分
- 子网的前缀需要不同,且全面,包括所有情况
ip数据报分片
- 分片大小必须8B整数倍
- MF标志位
考点
- 首部长度字段:单位4B,最小为5值, 5x4B=20B,这是至少,因为首部固定字段20B,可变部分不确定
- 总长度:单位1B,记录的数首部+数据部分所有字节
- 片偏移:单位8B,记录数据部分分片相对原来的偏移
默认路由
0.0.0.0/0 注意路由表中默认网关的网络前缀也是0
路由表
当路由器收到一个ip分组,会先判断是否发往与自己直接连接的网络,如果是就直接转发到自己的网络当中,如果不是,就会查路由表,根据最长前置匹配原则,选择发往最匹配的网络号
IPV6
IPV6与IPV4区别
如下 【特别注意:IPV6中途不允许再分片,如果数据报过大则直接丢弃,并发送ICMP报文,报告差错】
| 表头1 | 表头2 |
|---|---|
| 地址长度为128bit(16B) | 地址长度为32bit(4B) |
| 只有在源结点才能分片传输过程中不能分片 | 传输过程中可以分片 |
| 首部长度是8B的整数倍 | 首部长度是4B的整数倍 |
| P首部更加简单灵活更新取消了许多字段(放在扩展首部中) | 相较9的萌部,IPv4首部的固定部分包含更多字段 |
考点
IPV6地址的书写格式
路由协议
考点
RIP协议的工作过程
RIP与OSPF协议
- RIP应用层协议,OSPF网络层协议
- OSPF泛洪发送相邻的链路状态信息
- RIP向相邻发送自己全部路由信息
RIP距离向量路由算法步骤
- C向B发送自己的全部路由信息(目的网络+距离)
- B接收到后再原有基础上,将下一条全改为C ,距离全部+1
- B将改后的表和自己原有的路由表对比,看是否有更短的距离,有就更新,无不变
- 距离16表示不可达到,当收到去往不可达到的目的ip的数据报会丢弃,并发送ICMP报文
OSPF路由算法步骤
- 其实就是Dijkstra算法
- 算法描述,选取一个起点,几录起点与其他点之间的直接路径长度,找出距离最近的点。新的一轮,原点通过距离最近的点去探测别的店,记录与其他点之间的新的路径,有更短的路径就更新,再次找出距离最近的点..不断重复
假设Internet的两个自治系统构成的网络如图4-6所示,自治系统AS1由路由器R1连接两个子网构成;自治系统AS2由路由器R2、R3互联并连接3个子网构成。各子网地址、R2的接口名、R1与R3的部分接口IP地址如图所示。
- 假设路由表结构如下表所示。请利用路由聚合技术,给出R2的路由表,要求包括到达题47图中所有子网的路由,且路由表中的路由项尽可能少。
考察路由聚合,无分类编址- 若R2收到一个目的1P地址为194.17.20.200的IP分组,R2会通过哪个接口转发该P分组?
考察最长匹配- R1与R2之间利用哪个路由协议交换路由信息?该路由协议的报文被封装到哪个协议的分组中进行传输?
考察内外部网关协议(路由协议)
IP组播
IP组播
- 单播:一对一,想要达到组播的效果,需要多份数据报
- 组播:一对多,一份数据报在目的网络网关处会复制多份发往多个主机
- 广播域组播的区别:广播是指一个网络内的,一个数据报广播到所有主机;组播是指一个网络与另一个网络之间的通信
避免组播路由器环路
- 多个路由器形成环路时,组播分组可能会重复发送,为了避免环路,使用最小生成树算法,构成组播转发树,寻找没有环路的路径
组播ip地址
- 组播地址是D类地址
移动IP
网络层设备
网络层设备
数据经过路由器需要解封装,然后再次封装,所以路由器需要实现网络层及以下的功能
直接交付与间接交付
- 不同子网之间的信息传输,通过路由器(网关)路由转发,属于间接交付
- 同一个子网下,相同网段的主机(由于通过交换机直接相连),可以相互之间直接传输信息不需要进过路由器
路由表和转发表
- 路由功能:是指路由器通过路由算法更新路由表,负责构建逻辑上的传输线路
- 转发功能:是指路由器根据路由表生成转发表,确定受到的每个分组应该从哪个端口输入从哪个端口输出
1). 设备1、设备2和设备3分别应选择什么类型的网络设备?
答:H1与H2的ip地址所在的网络号相同,所以是处在路由器的同一端,所以设备2就只能是交换机(如果是路由器,就会处在两个不同的子网中,网络号就不同),同理设备3也是交换机,设备1,划分出了两个子网,所以是路由器
2). 设备1、设备2和设备3中,哪几个设备的接口需要配置iP地址?为对应的接口配置正确的P地址。
答:设备1。IF2=192.168.1.1 ;IF3=192.168.1.65
3). 为确保主机H1~H4能够访问Internet,R需要提供什么服务?
答:NAT
4).若主机H3发送一个目的地址为192.168.1.127的IP数据报,网络中哪几个主机会接收该数据报?
答:H3属于右边的子网,而且192.168.1.127是该子网号的广播IP,所以H4才能收到,别的子网不会收到(路由器隔离了广播域)
传输层
传输层概述
什么是传输层?
传输层是只有主机才有的层次。
传输层的功能:
- 传输层提供进程与进程之间的逻辑通信
- 复用和分用
- 传输层对收到的报文进行差错检测
- 传输层的两种协议
传输层的两个协议TCP&UDP
传输层的寻址与端口
复用:应用层所有的应用进程都可以通过传输层再传输到网络层。
分用:传输层从网络层收到数据后交付指明的应用进程
端口:又称为逻辑端口/软件端口,用于标识主机中的应用进程,是传输层的SAP, 与交换机路由器的物理端口不同,是一种虚拟的逻辑端口。
端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。
端口号长度为16bit,能表示65536个不同的端口号。
熟知端口号,服务器端提供服务所使用的端口号,一般只用于服务器,而用户作为客户端不向外提供服务,那么所使用的端口号在49152~65535之间
UDP协议
用户数据报协议UDP特点
UDP数据报首部格式
UDP校验
TCP协议
TCP协议特点
TCP是面向字节流的,会对数据的每一个字节按序编号,一个字节占用一个序号,再由多个连续字节组成一个传输单位报文
TCP报文段首部格式
TCP基本认识
TCP头格式有哪些
序列号seq:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
确认应答号ack:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。
控制位:
- _ACK_:该位为
1时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的SYN包之外该位必须设置为1。 - _RST_:该位为
1时,表示 TCP 连接中出现异常必须强制断开连接。 - _SYN_:该位为
1时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。 - _FIN_:该位为
1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位为 1 的 TCP 段。
为什么需要 TCP 协议? TCP 工作在哪一层?
IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。
如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。
因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
什么是 TCP ?
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。
面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃。
什么是 TCP 连接?
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。
所以我们可以知道,建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识。
- Socket:由 IP 地址和端口号组成
- 序列号:用来解决乱序问题等
- 窗口大小:用来做流量控制
TCP是面向连接的协议,TCP把连接作为最基本的抽象。每一条TCP连接唯一地被通信两端的两个端点所确定。那么,TCP连接的端点是什么呢?TCP连接的端点又叫套接字(socket),根据TCP协议的规定,端口号拼接到IP地址即构成了套接字,即.
这样一来,TCP连接可以以下式子表示
源地址和目的地址的字段(32 位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机。
源端口和目的端口的字段(16 位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程。
UDP 和 TCP 有什么区别呢?分别的应用场景是?
UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。
UDP 协议真的非常简,头部只有 8 个字节(64 位),UDP 的头部格式如下:
- 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
- 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
- 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包。
TCP 和 UDP 区别:
1. 连接
- TCP 是面向连接的传输层协议,传输数据前先要建立连接。
- UDP 是不需要连接,即刻传输数据。
2. 服务对象
- TCP 是一对一的两点服务,即一条连接只有两个端点。
- UDP 支持一对一、一对多、多对多的交互通信
3. 可靠性
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
- UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议,具体可以参见这篇文章:如何基于 UDP 协议实现可靠传输?(opens new window)
4. 拥塞控制、流量控制
- TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
- UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
5. 首部开销
- TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是
20个字节,如果使用了「选项」字段则会变长的。 - UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
6. 传输方式
- TCP 是流式传输,没有边界,但保证顺序和可靠。
- UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
7. 分片不同
- TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
- UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。
TCP 和 UDP 应用场景:
由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
FTP文件传输;- HTTP / HTTPS;
由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:
- 包总量较少的通信,如
DNS、SNMP等; - 视频、音频等多媒体通信;
- 广播通信;
为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?
原因是 TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的,无需多一个字段去记录 UDP 的首部长度。
为什么 UDP 头部有「包长度」字段,而 TCP 头部则没有「包长度」字段呢?
先说说 TCP 是如何计算负载数据长度:
其中 IP 总长度 和 IP 首部长度,在 IP 首部格式是已知的。TCP 首部长度,则是在 TCP 首部格式已知的,所以就可以求得 TCP 数据的长度。
大家这时就奇怪了问:“UDP 也是基于 IP 层的呀,那 UDP 的数据长度也可以通过这个公式计算呀? 为何还要有「包长度」呢?”
这么一问,确实感觉 UDP 的「包长度」是冗余的。
我查阅了很多资料,我觉得有两个比较靠谱的说法:
- 第一种说法:因为为了网络设备硬件设计和处理方便,首部长度需要是
4字节的整数倍。如果去掉 UDP 的「包长度」字段,那 UDP 首部长度就不是4字节的整数倍了,所以我觉得这可能是为了补全 UDP 首部长度是4字节的整数倍,才补充了「包长度」字段。 - 第二种说法:如今的 UDP 协议是基于 IP 协议发展的,而当年可能并非如此,依赖的可能是别的不提供自身报文长度或首部长度的网络层协议,因此 UDP 报文首部需要有长度字段以供计算。
TCP 和 UDP 可以使用同一个端口吗?
答案:可以的。
在数据链路层中,通过 MAC 地址来寻找局域网中的主机。在网际层中,通过 IP 地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。
所以,传输层的「端口号」的作用,是为了区分同一个主机上不同应用程序的数据包。
传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件模块。
当主机收到数据包后,可以在 IP 包头的「协议号」字段知道该数据包是 TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理。
因此,TCP/UDP 各自的端口号也相互独立,如 TCP 有一个 80 号端口,UDP 也可以有一个 80 号端口,二者并不冲突。
TCP的连接管理
TCP连接的建立
图1.三次握手建立TCP连接
服务器进程准备好接受外来的连接,这通常是通过调用
socket,bind,listen这三个函数来完成,我们称之为被动打开(passive open)。然后服务器进程就处于LISTEN状态,等待客户的连接请求,如有,则作出响应。客户通过调用
connect发起主动打开(active open),向服务器发出连接请求报文段,请求中的首部的同步位SYN = 1,同时选择一个初始序号seq = x。TCP规定,SYN报文段不能携带数据,则要消耗一个序号。这时,TCP客户进入SYN-SEND(同步已发送)状态。TCP规定,序号(seq)用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。服务器收到客户端连接请求后,必须确认(ACK)客户的SYN报文段。在确认报文段中,把SYN和ACK位都置为1,确认号为ack = x + 1,同时也为自己选择一个初始序号seq = y。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时,TCP服务器进入SYN-RCVD(同步收到)状态。
TCP规定,若确认号ack = N,则表明:到序号 N - 1为止的所有数据都已正确收到。客户在收到服务器的确认后,还要向服务器进程给出确认。确认报文段的ACK置1,SYN=0,确认号ack = y + 1,而自己的序号seq = x + 1。TCP规定,这个报文段可以携带数据,也可以不携带数据,如果不携带数据,下一个数据报文段的序号仍是seq = x + 1。这时,TCP连接已经建立,客户进入ESTABLISHED(已建立连接)状态。
服务器收到客户的确认后,也进入estab-listen状态。
为什么需要三次握手
为什么客户在收到服务器的确认后,还要向服务器发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了服务器,因而发生错误。
考虑一种情况,客户发出连接请求后,但因连接请求报文丢失而未收到确认。于是客户再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。客户共发送了两个连接请求报文段,其中第一个丢失,第二个到达了服务器。没有“已失效的连接请求报文段”。
现假定一种异常情况。即客户发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达服务器。本来这是一个早已失效的报文段,但服务器收到此失效的连接请求后,就误认为是客户又一次发出一次新的连接请求。于是就向客户发出确认报文段,同意建立连接。假定不采用三次握手,那么只要服务器发出确认,新的连接就建立了。
由于现在客户端并没有发出建立连接的请求,因此不会理睬服务器的确认,也不会向服务器发送数据。但服务器却以为新的连接已经建立了,并一直等待客户发送数据。服务器的许多资源就这样白浪费了。
采用三次握手的办法可以防止上述现象的发生。例如刚才的情况下,客户不会向服务器的确认发出确认,由于服务器收不到确认,就知道客户并没有要求建立连接。
TCP的连接释放
TCP建立一个连接需要三个报文段,释放一个连接却需要四个报文段。
因此释放连接的过程也称之为四次挥手。
图2.TCP释放连接的过程
数据传输结束后,通信的双方可以释放连接。数据传输结束后的客户A和服务器B都处于ESTABLISHED状态,然后进入释放连接的过程
- A的应用进程先发出释放连接报文段,并停止发送数据,主动关闭TCP连接。A把连接释放报文段首部终止位
FIN置1,其序号为seq = u。这时A进入FIN-WAIT-1(终止等待1)状态。 - B收到连接释放报文段后即发出确认确认号为
ack = u + 1,而自己的序号为seq = v。然后B就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍接收。 - A收到来自B的确认后,就进入
FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。 - 若B已经没有要向A发送的数据,其应用进程就通知TCP释放 连接。这时B发出的连接释放报文段
FIN = 1,还必须重复上次已发送过的确认号ack = u + 1。假定B的序号为w(在半关闭期间B可能又发送了一些数据)。这时B就进入了LAST-ACK(最后确认)状态,等待A的确认。 - A收到了的连接释放报文段后,必须对此发出确认。其确认号为
ack = w + 1,而自己的序号为seq = u + 1。然后进入到TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。时间MSL叫做最长报文段寿命(Maximum Segment Lifetime)。 - B只要收到A发出的确认,就进入CLOSED状态。我们注意到,B结束TCP连接的时间要比A早一些。
之所以客户端最后要等待2MSL,是因为客户端不确定自己的最后一个确认是否被服务端收到并进入关闭状态,于是就干脆等吧,如果没等到超时重传的确认报文,就说明对方收到,所以自己也关闭把。
TCP的可靠传输
TCP实现可靠传输的机制:校验、序号、确认、重传
- TCP 给发送的每一个字节进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- TCP 的接收端会丢弃重复的数据。
- 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制:当网络拥塞时,减少数据的发送。
- ARQ协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
校验
序号
为每一个字节数据都编一个序号,报文段首部序号字段里的序号是该报文段第一个字节所占的序号编号
确认
TCP默认使用累计确认的方式,如果发送方发了包1,包2,包3,包4;接受方成功收到包1,包2,包3。那么接受方可以发回一个确认包,序号为4(4表示期望下一个收到的包的序号),那么发送方就知道包1到包3都发送接收成功,必要时重发包4。一个确认包确认了累积到某一序号的所有包,而不是对每个序号都发确认包。
重传
超时重传:确认重传不分家,TCP的发送方在规定的时间(重传时间)内没有收到确认就要重传已发送的报文段。TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)快速重传:为了防止超时重传容易等太久,所以有了快速重传,快速重传采用冗余ACK(冗余确认)
每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。
发送方已发送a,b,c,d,e报文段
接收方收到a,返回给a的确认(确认号为b的第一个字节的序号)
接收方收到b,仍返回给a的确认(确认号为b的第一个字节的序号)
接收方收到c,仍返回给a的确认(确认号为b的第一个字节的序号)
接收方收到d,仍返回给a的确认(确认号为b的第一个字节的序号)
发送方收到3个对于报文段a的冗余ACK→认为b报文段丢失,重传b号报文段
TCP流量控制
流量控制:让发送方慢点,要让接收方来得及接收。
TCP利用滑动窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口wd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。
在前面我们都看到了,TCP 通过让接收方指明希望从发送方接收的数据大小(窗口大小)来进行流量控制。
如果窗口大小为 0 时,就会阻止发送方给接收方传递数据,直到窗口变为非 0 为止,这就是窗口关闭。
窗口关闭潜在的危险!
接收方向发送方通告窗口大小时,是通过 ACK 报文来通告的。
那么,当发生窗口关闭时,接收方处理完数据后,会向发送方通告一个窗口非 0 的 ACK 报文,如果这个通告窗口的 ACK 报文在网络中丢失了,那麻烦就大了。
这会导致发送方一直等待接收方的非 0 窗口通知,接收方也一直等待发送方的数据,如不采取措施,这种相互等待的过程,会造成了死锁的现象。
TCP 是如何解决窗口关闭时,潜在的死锁现象呢?
为了解决这个问题,TCP 为每个连接设有一个持续定时器,只要 TCP 连接一方收到对方的零窗口通知,就启动持续计时器。
如果持续计时器超时,就会发送窗口探测 ( Window probe ) 报文,而对方在确认这个探测报文时,给出自己现在的接收窗口大小。
- 如果接收窗口仍然为 0,那么收到这个报文的一方就会重新启动持续计时器;
- 如果接收窗口不是 0,那么死锁的局面就可以被打破了。
TCP拥塞控制
为什么要有拥塞控制呀,不是有流量控制了吗?
前面的流量控制是避免「发送方」的数据填满「接收方」的缓存,但是并不知道网络的中发生了什么。
一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。
在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大….
所以,TCP 不能忽略网络上发生的事,它被设计成一个无私的协议,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。
于是,就有了拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。
为了在「发送方」调节所要发送数据的量,定义了一个叫做「拥塞窗口」的概念。
什么是拥塞窗口?和发送窗口有什么关系呢?
拥塞窗口 cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。
我们在前面提到过发送窗口 swnd 和接收窗口 rwnd 是约等于的关系,那么由于加入了拥塞窗口的概念后,此时发送窗口的值是swnd = min(cwnd, rwnd),也就是拥塞窗口和接收窗口中的最小值。
拥塞窗口 cwnd 变化的规则:
- 只要网络中没有出现拥塞,
cwnd就会增大; - 但网络中出现了拥塞,
cwnd就减少;
那么怎么知道当前网络是否出现了拥塞呢?
其实只要「发送方」没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了拥塞。
拥塞控制有哪些控制算法?
拥塞控制主要是四个算法:
- 慢启动
- 拥塞避免
- 拥塞发生
- 快速恢复
慢启动
TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量,如果一上来就发大量的数据,这不是给网络添堵吗?
慢启动的算法记住一个规则就行:当发送方每收到一个 ACK,拥塞窗口 cwnd 的大小就会加 1。
这里假定拥塞窗口 cwnd 和发送窗口 swnd 相等,下面举个栗子:
- 连接建立完成后,一开始初始化
cwnd = 1,表示可以传一个MSS大小的数据。 - 当收到一个 ACK 确认应答后,cwnd 增加 1,于是一次能够发送 2 个
- 当收到 2 个的 ACK 确认应答后, cwnd 增加 2,于是就可以比之前多发2 个,所以这一次能够发送 4 个
- 当这 4 个的 ACK 确认到来的时候,每个确认 cwnd 增加 1, 4 个确认 cwnd 增加 4,于是就可以比之前多发 4 个,所以这一次能够发送 8 个。
慢启动算法的变化过程如下图:
可以看出慢启动算法,发包的个数是指数性的增长。
那慢启动涨到什么时候是个头呢?
有一个叫慢启动门限 ssthresh (slow start threshold)状态变量。
- 当
cwnd<ssthresh时,使用慢启动算法。 - 当
cwnd>=ssthresh时,就会使用「拥塞避免算法」。
拥塞避免算法
前面说道,当拥塞窗口 cwnd 「超过」慢启动门限 ssthresh 就会进入拥塞避免算法。
一般来说 ssthresh 的大小是 65535 字节。
那么进入拥塞避免算法后,它的规则是:每当收到一个 ACK 时,cwnd 增加 1/cwnd。
接上前面的慢启动的栗子,现假定 ssthresh 为 8:
- 当 8 个 ACK 应答确认到来时,每个确认增加 1/8,8 个 ACK 确认 cwnd 一共增加 1,于是这一次能够发送 9 个
MSS大小的数据,变成了线性增长。
拥塞避免算法的变化过程如下图:
所以,我们可以发现,拥塞避免算法就是将原本慢启动算法的指数增长变成了线性增长,还是增长阶段,但是增长速度缓慢了一些。
就这么一直增长着后,网络就会慢慢进入了拥塞的状况了,于是就会出现丢包现象,这时就需要对丢失的数据包进行重传。
当触发了重传机制,也就进入了「拥塞发生算法」
拥塞发生算法
当网络出现拥塞,也就是会发生数据包重传,重传机制主要有两种:
- 超时重传
- 快速重传
这两种使用的拥塞发送算法是不同的,接下来分别来说说。
发生超时重传的拥塞发生算法
当发生了「超时重传」,则就会使用拥塞发生算法。
这个时候,ssthresh 和 cwnd 的值会发生变化:
ssthresh设为cwnd/2,cwnd重置为1(是恢复为 cwnd 初始化值,我这里假定 cwnd 初始化值 1)
接着,就重新开始慢启动,慢启动是会突然减少数据流的。这真是一旦「超时重传」,马上回到解放前。但是这种方式太激进了,反应也很强烈,会造成网络卡顿。
就好像本来在秋名山高速漂移着,突然来个紧急刹车,轮胎受得了吗。。。
发生快速重传的拥塞发生算法
还有更好的方式,前面我们讲过「快速重传算法」。当接收方发现丢了一个中间包的时候,发送三次前一个包的 ACK,于是发送端就会快速地重传,不必等待超时再重传。
TCP 认为这种情况不严重,因为大部分没丢,只丢了一小部分,则 ssthresh 和 cwnd 变化如下:
cwnd = cwnd/2,也就是设置为原来的一半;ssthresh = cwnd;- 进入快速恢复算法
快速恢复
快速重传和快速恢复算法一般同时使用,快速恢复算法是认为,你还能收到 3 个重复 ACK 说明网络也不那么糟糕,所以没有必要像 RTO 超时那么强烈。
正如前面所说,进入快速恢复之前,cwnd 和 ssthresh 已被更新了:
cwnd = cwnd/2,也就是设置为原来的一半;ssthresh = cwnd;
然后,进入快速恢复算法如下:
- 拥塞窗口
cwnd = ssthresh + 3( 3 的意思是确认有 3 个数据包被收到了); - 重传丢失的数据包;
- 如果再收到重复的 ACK,那么 cwnd 增加 1;
- 如果收到新数据的 ACK 后,把 cwnd 设置为第一步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态;
快速恢复算法的变化过程如下图:
也就是没有像「超时重传」一夜回到解放前,而是还在比较高的值,后续呈线性增长。
TCP与UDP对比
习题
传输层提供的服务
注意
网络层、链路层、物理层构成通信子网 以上的构成资源子网
注意
- TCP--HTTP
- UDP-- QQ
注意
TCP报头固定部分20B,IP报头固定部分20B UDP报头只有8B(没有可变部分)
UDP协议
注意
UDP数据报首部没有可变部分,所以也就没有首部长度的字段
UDP校验
- UDP伪首部只有在校验的时候会向IP数据报首部借用的临时部分,不会被发送出去
- UDP校验发现差错会立刻丢弃
- UDP校验计算结构为0,校验和字段填充1
复用分用
- 多路复用(针对发送主机)从不同套接字收集数据块,并为每个数据块封装上首部信息,生成报文段,传给网络层。
- 多路分用(针对接收主机):将报文段中的数据交付到正确的套接字
一个应用程序用UDP,到了IP层将数据报再划分为4个数据报片发送出去。结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传UDP,而P层仍然划分为4个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的4个数据报片组装成为完整的数据报?假定目的站第一次收到的后两个数据片仍然保存在目的站的缓存中。
答:不能,因为IP数据报分片,会通过ip首部的标识字段,来判断是否是同一个数据报的分片,前后两个数据报标识不同,所以不能组装成完整的数据报
注意
- UDP首部长度固定8B,所以没有首部长度字段,只有总长度字段,且单位1B
- 这里做一个小小总结,总长度字段单位都是1B,首部长度字段单位都是4B
TCP协议
TCP
TCP协议不支持广播,因为需要收到确认帧,广播会产生非常多的确认帧,确认困难
注意
ip分组中的IP数据报首部中协议字段17表示UDP协议,6表示TCP协议
拥塞控制
接收窗口与拥塞窗口
TCP连接的建立与释放
三次握手与四次挥手
拥塞控制
- 拥塞窗口是发送端,根据网络拥塞情况确定而动态改变的窗口,决定了发送方发送窗口的大小,发送窗口=min{拥塞窗口,接收端接收窗口}
attention
TCP三次握手过程
拥塞控制算法
- 发生超时事件,说明使用的是旧的拥塞算法
- 收到连续三个ACK报文,说明使用的是快速恢复的拥塞算法
attention
- 旧的拥塞算法
- 1.拥塞窗口指数增长到门限大小ss,
- 之后线性增长的发生超时
- 之后拥塞窗口回到1,门限值ss'=ss/2,之后再指数增长...
attention
- 新的拥塞算法
- 考察拥塞窗口算法的拥塞避免
- 实际发送窗口=min{接收窗口,拥塞窗口}
- 窗口字段值表示窗口大小
- 一开始初始化
cwnd = 1,表示可以传一个MSS大小的数据,这里一开始拥塞窗口大小1KB
- 一开始初始化
cwnd = 1,表示可以传一个MSS大小的数据,这里一开始拥塞窗口大小为2KB- MSS表示最大报文段大小
注意
常说的ack=x+1,指的不是只加1,而是根据报文段长度,求出的下一个期待收到报文段的第一个字节的序号
attention
- 拥塞窗口达到多大时会产生拥塞是动态不确定的,根据实际情况而定
接收窗口rwnd是从最大值(接收缓存),慢慢减少的【没有取出数据,只有接收数据】。
attention
请求连接报文和释放连接报文都不包含有效数据
这是因为:
①只有超过了重传计时器的时间之后报文才会重传。
②而本题中对端已经收到此报文,仅是确认报文段丢失。
③且TCP能够进行累积确认,在TCP报文首部中的确认号字段为N侧表示序号N之前的数据都已经收到了。
假设:
序号x的确认报文丢失了,但是比序号x大(比如x+800)的确认报文在重传计时器超时之前到达了,由于TCP的累积确认,它同时确认了在它之前的x已经收到了。所以,在此情况并不会发生重传
attention
- 数据率是周期内收到了有效数据的大小
- 报文段的寿命30s内将一次发送的最多报文段,就是能达到的最高数据率
- 注意一不能一次发送帧序号个报文段,会引起序号矛盾
1)表1中的P分组中,哪几个是由H发送的?哪几个完成了TCP连接建立过程?哪几个在通过快速以太网传输时进行了填充?
2)根据表1中的P分组,分析S已经收到的应用层数据字节数是多少。
3)若表1中的某个IP分组在S发出时的前40B如表2所示,则该IP分组到达H时经过了多少个路由器?
应用层
网络应用模型
网络应用模型分为两类:客户/服务器模型(C/S) 、P2P模型
客户/服务器模型(C/S模型)
P2P模型
DNS域名系统
DNS(Domain Name System,域名系统),是用于实现域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。通过主机名,得到该主机名对应的 IP 地址的过程叫做域名解析(或主机名解析)。
如果整个因特网都使用一个域名服务器,负荷太大, 所以 DNS 设计成一个分布式的数据库,即使单个主机出故障也不会妨碍整个 DNS 系统。另外 DNS 使得大多数域名都能在本地解析,仅少量解析需要在因特网上通信,因此 DNS 效率很高。
域名解析过程
域名的分级结构是如何划分的?
域名结构:树状结构,树的最顶端代表根域名,下一层是 .com、.cn 等顶级域名,再下层就是二级、三级、四级域名。
域名服务器分级结构
- 根域名服务器:最高层次的域名服务器,根域名服务器知道所有顶级域名服务器的域名和IP地址。任何一个本地域名服务器要对互联网上的任何域名进行解析,只要自己无法解析,就会首先求助于根域名服务器。
- 顶级域名服务器:管理在该顶级域名服务器下注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步需要去找的域名服务器的IP地址)。
- 权限域名服务器(权威域名服务器):负责一个区的域名服务器。当一个权威域名服务器不能给出最终的查询结果时,就会告诉发出请求方,下一步应该去找哪一个权威域名服务器。
- 本地域名服务器(递归服务器):主机发出 DNS 查询请求时,该请求首先会发给本地域名服务器。
域名解析的具体流程是怎样的呢?
- 在浏览器中输入
www.qq.com域名,浏览器先检查自身缓存中有没有被解析过的这个域名对应的 IP 地址,如果有,就调用这个 IP 映射,完成域名解析。 - 如果浏览器缓存中未命中,操作系统会检查本地的 hosts 文件是否有该域名和 IP 的映射,如果有,就调用这个IP地址映射,完成域名解析。
- 如果 hosts 里也没有这个域名的映射,则向本地域名服务器(LDNS)发送请求,看是否有这个域名的映射关系,如果有,直接返回,完成域名解析。(LDNS 一般在城市的某个角落,距离你不会很远,一般都会缓存域名解析结果,大约 80% 的域名解析到这里就完成了)
- 如果 LDNS 仍然未命中,LDNS 就向根服务器发送查询请求,根服务器里面记录的都是各个顶级域所在的服务器 IP,根服务器会根据域名后缀返回对应的顶级域名服务器位置。当向根请求
www.qq.com的时候,根服务器就会返回.com服务器的位置信息。 - LDNS 拿到
.com的权威服务器地址以后,就会询问.com的权威服务器,知不知道www.qq.com的位置。这个时候.com权威服务器查找并返回www.qq.com服务器的地址。LDNS 继续向www.qq.com的权威服务器去查询这个地址,由www.qq.com的服务器给出了 IP 地址:202.173.11.10 - LDNS 服务器得到了
www.qq.com对应的 IP 地址后以 DNS 应答包 的方式传递给客户机,并把域名和对应的 IP 地址在本地缓存下来。 - 客户机根据 IP 地址建立连接,并在客户端缓存域名/IP映射。
简单来说,其实只有四步:
- 在本地缓存里找映射,未命中继续下一步
- 在本地域名服务器(LDNS)里找映射,未命中继续下一步
- LDNS 向根域名服务器发送解析请求,期间迭代查询了顶级域名服务器和各权威域名服务器,LDNS 将解析结果 IP 返回给主机,并缓存域名-IP映射
- 主机在浏览器/OS缓存域名-IP映射,并建立连接
ps.本地域名服务器 = 递归域名服务器,意思是它的查询方式是递归的,即返回的是最终的查询结果而不是可能的查询路径。
前面知道了DNS解析的流程,但是DNS服务器的查询方式具体是怎样的呢?
迭代查询:DNS 服务器会向客户机提供其他能够解析查询请求的 DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台 DNS 服务器地址,客户机再向这台 DNS 服务器提交请求,依次循环直到返回查询的结果为止。迭代查询返回的是最佳的查询点或者主机地址。本地域名服务器向根域名服务器的查询通常是采用迭代查询。
递归查询:DNS 服务器必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询目标的 DNS 信息,那么该服务器会去询问其他服务器(即代替客户机去查询,而不是让客户机自己进行下一步查询),并将返回的查询结果提交给客户机。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错(表示无法查询到所需的 IP 地址)。主机向本地域名服务器的查询一般都是采用递归查询。
最终只由权限域名服务器完成将,完整域名转换为ip地址
1 | 根域名服务器不能直接将管辖的主机域名转换为IP地址。 |
文件传输协议FTP
1.FTP协议
什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。
该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。
2.FTP服务端和客户端
同大多数Internet服务一样,FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP 服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,通常 Windows自带“ftp”命令,这是一个命令行的 FTP 客户程序
3.FTP用户授权
(1)用户授权
要连上 FTP 服务器(即“登陆”),必须要有该 FTP 服务器授权的帐号,也就是说你只有在有了一个用户标识和一个口令后才能登陆FTP服务器,享受FTP服务器提供的服务。
(2)FTP地址格式
FTP地址如下: ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名
上面的参数除FTP服务器IP或域名为必要项外,其他都不是必须的。如以下地址都是有效FTP地址:
ftp://foolish.6600.org
ftp://list:list@foolish.6600.org
ftp://list:list@foolish.6600.org:2003
ftp://list:list@foolish.6600.org:2003/soft/list.txt
(3)匿名FTP
互连网中有很大一部分 FTP 服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权。Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”登陆FTP服务,就可访问远程主机上公开的文件。许多系统要求用户将Emai1地址作为口令,以便更好地对访问进行跟综。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息,数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,但是匿名FTP仍是 Internet上传输分发软件的一种基本方法。如red hat 、autodesk等公司的匿名站点。
4.FTP传输模式
FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。
FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。
ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
5. FTP的工作方式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
下面介绍一个这两种方式的工作原理:
FTP是基于TCP的高级文件协议,在传输的过程中,主要分为建立连接和数据传输两部分,响应的涉及到服务器端的命令端口和数据端口。建立连接是采用tcp的三次握手模型,对于ftp服务器来说,采用固定的21命令端口和客户端进行通信,在数据传输过程中,根据FTP传输的时候的服务端数据通信过程中选择不同数据端口,可以将ftp分为主动模式(Port)和被动模式(Pasv),这两种模式,对于客户端来说,端口没有固定性,只是在创建的时候,可以主动指定本地端口,或者是随机端口,而对于服务器来说,差异性在于采用服务器上的固定20端口,还是服务器根据连接即时创建1025以上的数据端口。但是命令传输端口,对于服务器来说,永远都是21端口。
Port模式客户端(随意端口)向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据
Passive模式客户端(随意端口)向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
下面是一个完整的FTP建立连接的过程:
- 控制连接始终保持连接的【控制连接是持续的】
- 数据连接是一个文件对应一个数据连接,一个文件传输完成就断开,要传输新的文件就要再开一个端口【数据连接是非持续的】
电子邮件
电子邮件的信息格式
- 一个电子邮件分为
信封和内容两大部分,邮件内容又分为首部和主体两部分。 - RFC 822规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。
- 用户写好首部后,邮件系统自动地将信封所需的信息提取出来并写在信封上,用户不需要亲自填写信封上的信息。
- 邮件内容的首部包含一些首部行,每个首部行由一个关键字后跟冒号再后跟值组成。有些关键字是必需的,有些则是可选的。最重要的关键字是To:和Subject。
- To是必需的关键字,后面填入一个或多个收件人的电子邮件地址。
电子邮件地址的规定格式为:收件人邮箱名@邮箱所在主机的域名如abc@cskaoyan.com其中收信人邮箱名即用户名,abc在cskaoyan.com这个邮件服务器上必须是唯一的 。这也就保证了abc@cskaoyan.com这个邮件地址在整个因特网上是唯一的。 - 还有一个必填的关键字是From,但它通常由邮件系统自动填入。
- Subject是可选关键字,是邮件的主题,反映了邮件的主要内容。
电子邮件系统的组成结构
电子邮件是一种
异步通信方式,通信时不需要双方同时在场。电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可以随时上网到自己使用的邮件服务器进行读取
电子邮件系统已改具有的三个最主要的组成部件:
用户代理(User Agent)、邮件服务器、电子邮件使用的协议
电子邮件协议
SMTP协议
SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。
负责发送邮件的SMTP进程就是SMTP客户,负责接收邮件的进程就是SMTP服务器。
SMTP规定了14条命令(几个字母)和21种应答信息(三位数字代码+简单文字说明)。
SMTP通信分为三个阶段,连接建立、邮件发送、连接释放
1.连接建立
- 发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP客户就每隔一定 时间对邮件缓存扫描一次。
- 如发现有邮件,就使用SMTP的
熟知端口号(25)与接收方邮件服务器的SMTP服务器建立TCP连接。 - 连接建立后,接收方SMTP服务器发出220 Service ready (服务就绪)。然后SMTP客户向SMTP服务器发送HELO命令,附上发送方的主机名。
- SMTP不使用中间邮件服务器。
- TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管它们相隔多远。
- 接收方的邮件服务器因故障暂时不能建立连接时,发送方的邮件服务器只能等待一段时间后再次尝试连接。
2.邮件发送
- 连接建立后,就可开始传送邮件。邮件的传送从MAIL命令开始,MAIL 命令后面有发件人的地址。如MAIL FROM:
hoopdog@hust.edu.cn。 - 若SMTP服务器已准备好接收邮件,则回答250 OK。
- 接着SMTP客户端发送一个或多个RCPT (收件人recipient的缩写)命令,格式为RCPTTO: <收件人地址>。
- 每发送一个 RCPT命令,都应有相应的信息从SMTP服务器返回,如250 OK或550 No such user here (无此用户)。
- RCPT命令的作用是,先弄清接收方系统是否已做好接收邮件的准备,然后才发送邮件,以便不至于发送了很长的邮件后才知道地址错误,进而避免浪费通信资源。
- 获得0K的回答后,客户端就使用DATA命令,表示要开始传输邮件的内容。
- 正常情况下,SMTP服务器回复信息是354 Start mail input; end with . 。表示回车换行。此时SMTP客户端就可开始传送邮件内容,并用. (两个回车,中间一个点)表示邮件内容的结束。
3.连接释放
- 邮件发送完毕后,SMTP客户应发送QUIT命令。
- SMTP服务器返回的信息是221 (服务关闭),表示SMTP同意释放TCP连接。邮件传送的全部过程就此结束。
MIME协议
SMTP的缺点:
- SMTP不能传送可执行文件或者其他二进制对象。
SMTP仅限于传送7位ASCII码,不能传送其他非英语国家的文字。- SMTP服务器会拒绝超过一定长度的邮件。
POP3协议
网际报文存取协议IMAP
万维网和HTTP协议
万维网概述
超文本传输协议HTTP
浏览器请求URL完整过程
HTTP协议特点
HTTP协议的连接方式
非持久连接
每次请求或相应都要建立一个TCP连接
持久连接
只需要建立一次TCP连接就可以对该页面内所有资源访问,不需要再建立TCP连接
持久连接的两种模式
- 流水线:可以发送多个请求报文
- 非流水线:请求报文只能发送一个,返回数据后才能发送下一个请求报文
HTTP报文结构
习题
网络应用模型
域名系统(DNS)
caution
- 单个域名可以对应多个主机和IP,实现负载均衡(例如12306网站,常常用多态服务器来实现访问一个域名的时候,转向不同ip服务器负载均衡)
授权域名服务器
- 最终有授权域名服务器完成ip地址的转换
attention
DNS协议使用UDP传输,是因为可以节约建立连接的时间,使得反应更加快速
attention
不同顶级域名可以指向同一个ip
DNS使用UDP而非TCP,如果一个DNS分组丢失,没有自动恢复,那么这会引起问
题吗?如果会,应该如何解决?
为何要引入域名的概念?举例说明域名转换过程。域名服务器中的高速缓存有何作用?
文件传输协议FTP
!!! attenion
- FTP协议允许客户指明文件的类型和格式
更有效率,可以用控制连接提出暂停等要求
电子邮件
万维网
注意
HTTP1.0使用的是非持久性连接,所以请求的每次数据都需要独立的TCP连接
HTTP请求报文
请求行,方法及其意义
注意
注意,TCP第三次握手时的数据报可以捎带请求页面的Get请求
(1)Web服务器的IP地址是什么?该主机的默认网关的MAC地址是什么?
答:前6B
(2)该主机在构造图6-18的数据帧时,使用什么协议确定目的MAC地址?封装该协议请求报文的以太网帧的目的MAC地址是什么?考点:MAC地址
答:第31B
(3)假设HTTP/1.1协议以持续的非流水线方式工作,一次请求-响应时间为RTT,rfc.html页面引用了5个JPEG小图像,则从发出图6-18中的Wb请求开始到浏览器收到全部内容为止,需要多少个RTT?
答:6RTT
(4)该帧所封装的P分组经过路由器R转发时,需修改IP分组头中的哪些字段?
答:总长度、片偏移、标志、生存时间、头部校验和、源IP地址
总结专栏
记忆点速查
各种报文格式
熟知端口号
TCP报文段、IP分组、MAC帧
TCP 连接
TCP 释放
PTF连接过程
电子邮件系统组成概述
超文本传输协议HTTP
非常重要的三个表
✓ 转发表(二层设备:交换机)
✓ ARP表(三层设备:主机、路由器)
✓ 路由表(三层设备:主机、路由器)
- 转发表/MAC表
①交换机自学习
ARP表
检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存(10-20min更新一次)。路由表
| 目的地址 | 子网掩码 | 下一跳 | 端口 |
|---|---|---|---|
| 192.168.0.0 | 255.255.255.0 | 0 | |
| 192.168.0.254 | 255.255.255.255 | 0 | |
| 192.168.1.0 | 255.255.255.0 | 1 | |
| 192.168.1.254 | 255.255.255.255 | 1 |
我们学习一种新的表示方法,由于子网掩码其实就表示前多少位表示子网的网段,所以如 192.168.0.0(255.255.255.0) 也可以简写为 192.168.0.0/24
| 目的地址 | 下一跳 | 端口 |
|---|---|---|
| 192.168.0.0/24 | 0 | |
| 192.168.0.254/32 | 0 | |
| 192.168.1.0/24 | 1 | |
| 192.168.1.254/32 | 1 |
物理层、链路层、网络层设备汇总
物理层设备
- 放大器:对模拟信号不加处理的放大
- 中继器:连接线路,对数字信号的整形放大
- 集线器:多端口的中继器
链路层设备
- 网桥:连接网段,存储转发帧,分割冲突域
- 交换机:多端口的网桥
网络层设备
- 路由器:隔离广播域,冲突域,连接不同网络
路由器与交换机有什么区别?网关又是什么意思?
1.交换机
- 交换机的功能就是将数据发送到正确的位置,根据数据包中的mac地址通过对应的端口转发出去。
- 交换机有多个端口,都有编号,我们只要知道某个网卡的mac地址在哪个端口上,就可以将数据报从对应端口发出
- 交换机维护着一张
MAC地址映射表(转发表),想要发送数据包,只需要查询一下想要发送的Mac地址,看有没有与之对应的端口记录,就可以找到对应端口将数据发送出去
- mac帧的数据包中含有
源mac地址和目标mac,交换机接收到数据包时会做两件事情:- 将源mac于接收端口绑定,填入MAC地址表
- 查找发出的端口,出现两种情况:①查找到关联端口:则从关联端口发出;②没有相应的端口记录:则从所有端口发出称为
泛洪。
- 如此一来,运行一段时间,就能找到该网络中所有网卡设备
2.路由器
- 路由器有
1个WAN口和多个LAN口。WAN口用于接入运营商网络(相对的外网),用来接入互联网;LAN口用于接入本地网络中的各种设备
子网掩码来对一个ip相与,得到的网络号ip,再与本网络的子网ip比较,看是否属于同一个子网
TCP/IP协议规定,不同子网之间是不可以直接通信的,需要通过
网关转发网关上有
两张网卡,分别配置了属于两个子网的ip地址,可以在两个网络之间转发数据包,这样就拥有了一个连接了两个子网的网络假如计算机向另一台主机发送数据,会判断目标主机是否在同一子网会有两种情况:
- 是同一子网,从本子网的网卡1直接发出(此时路由器相当于交换机)
- 不是同一子网,将目标mac改为网关mac,先发送到网关,网关根据ip地址查询路由表从子网2的网卡发出
这种根据目标ip,判断如何发送的过程,就称之为
路由路由器通过
LAN口接入互联网,通过WAN口接入内网,两个网络即使不同的两个子网,而路由器就是充当着网关的角色,拥有两张网卡,实现跨网络路由

































































































































































































































































































































































































































































































































































































