计算机网络
计算机网络体系结构
计算机网络概念
计算机网络:
由若干结点(计算机、集线器、交换机、路由器等)和连接这些结点的链路(网线、无线链路)组成。
互连网(internet):
由两个或多个计算机网络互相连接起来,形成规模更大的计算机网络。
互连网可使用任意协议通信。
互联网(因特网、Internet):
由各大ISP(Internet Service Provider)和国际机构组建的,覆盖全球范围的互连网,计算机网络可以通过ISP的服务加入互联网。
互联网必须使用TCP/IP协议通信。
计算机网络构成
计算机网络作用:数据通信、资源共享、分布式处理、容灾备份、负载均衡等
组成划分
硬件:
主机(连接网络的终端设备)、通信设备(路由器、交换机等)、通信链路(光纤等)
软件
协议:
规定计算机网络中的通信规则,由硬件和软件共同实现,如网络适配器+驱动软件实现
网络适配器:将主机数据发送到网络中,并接受来自网络的数据
工作方式划分
- 边缘部分:直接为用户服务,连接到互联网上的设备及其软件组成。
- 核心部分:为边缘部分提供服务,由大量网络和连接网络的路由器组成。
逻辑划分
- 资源子网:计算机网络中实现资源共享功能的设备及其软件的集合
- 通行子网:计算机网络中实现网络通信功能的设备及其软件的集合

数据传输技术
电路交换(用于电话网络)
适用于低频、大量地传输数据。计算机之间数据往往是 “突发式”传输,高频、少量。
流程
①建立连接(尝试占用通信资源)
②通信(一直占用通信资源)
③释放连接(归还通信资源)
优缺点
- 传输双方直连,传输速率高。
- 建立/释放连接,需要额外的时间开销。且建立连接后,线路被通信双方独占,其他设备无法使用。
- 交换节点不支持“差错控制”(无法通过校验码发现传输过程中的发生的数据错误,因为电话交换机仅仅只是简单的将两个线路物理上连接在一起)

报文交换(用于电报网络)
流程
电报机将数据和控制信息组装成Message发送给连接的交换机,交换机通过读取控制信息和路由表,选择合适的节点进行发生,直到接收方
优缺点
- 通信前无需建立连接,且通过储存转发,两个用户无需独占一整条物理线路。
- 交换节点支持“差错控制”(通过校验技术)。
- 报文不定长,不方便存储转发管理。
- 长报文的存储转发时间开销大、交换机缓存开销大,出错重传代价高。

分组交换(用于现代计算机网络)
流程
- 将长报文切分成多个大小相同的数据包,并且在每个数据包前拼接上控制信息(源地址、目的地址、分组号),构成分组。
- 将分组一次发送到连接的某个交换机上,交换机通过读取控制信息和路由表,选择合适的节点进行发送,直到接收方。
- 接受方接收到所有的分组,按照分组号将其中的数据拼接。(因为所有分组并不一定都通过一条路线传输,所有分组并不一定有序)
优缺点
- 在报文交换基础上进行的修改,继承了其几乎所有优点。且分组定长,方便存储转发管理,缓存开销小,出错重传代价低。
- 控制信息占比增加,报文被拆分为多个分组,传输过程中可能出现失序、丢失等问题。

虚电路交换
在分组交换的基础上,所有分组都按照既定路线发送
①建立连接(虚拟电路)
②通信(分组按序、按已建立好的既定线路发送,通信双方不独占线路)
③释放连接
计算机网络分类
范围分类
- 广域网(Wide Area NetWork,跨省、跨国)
- 城域网(Metropolitan Area NetWork,几km~几十km)、局域网( Area NetWork,几十m~几km):通常采用以太网交换技术
- 个域网(Personal Area NetWork,几十米内):通常采用无线技术
传输技术分类
- 广播式网络:当一台计算机发送数据分组时,广播范围内所有计算机都收到该分组,并通过检查分组的目的地址决定是否接收该分组。(所有无线网络)
- 点对点网络:数据只会从发送方“点对点”发到接收方。(路由器转发的数据分组)
拓扑结构分类

使用者分类
公用网、专用网
传输介质分类
有线网络、无线网络
网络性能指标
数据传输速率(比特率)
指连接到网络上的节点在信道上传输数据的速率,单位为bps(bit/s)
- 信道:表示向某一方向传送信息的通道,一条通信线路在逻辑上往往对应一条发送信道和一条接收信道
- 速率单位:1T = 10^3G = 10^6M = 10^9K = 10^12b
- 储存单位:1T = 2^10G = 2^20M = 2^30K = 2^40b
带宽
- 计算机网络中:某条信道所能传输的最高数据率,节点间通信最高速率由带宽和节点性能共同决定。
- 通信原理中:某条信道允许通过的信号频带范围。设最高频率为750THZ,最低频率400THZ为,则其带宽为350THZ
吞吐量
指单位时间内通过某个网络(或信道、接口)的实际数据量。
时延
指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。

时延带宽积
时延带宽积=传播时延×带宽,表示一条链路中,已从发送端发出但尚未到达接收端的最大比特数
往返时延(Round-Trip Time )
表示从发送方发送完数据,到发送方收到来自接收方的确认总共经历的时间。
信道利用率
信道利用率 = 有数据通过时间 / 总时间,过低浪费资源,过高易导致网络拥堵。
丢包率
丢包率即分组丢失率,是指在一定时间范围内,传输过程中丢失的分组数量与总分组数量的比率。
计算机网络分层架构
网络分层架构概述
将复杂的计算机网络在逻辑上划分为多个层次,定义各层功能、协议,不涉及具体实现。由软件或硬件遵循这种体系结构的前提下进行实现。
分层结构的设计并不唯一,同一个功能可以在多个层次中重复出现。
计算机网络功能实现要求
- 差错控制: 确保数据在传输过程中不出错,检错、纠错、重传。
- 流量控制: 发送端的发送速率必须使接收端来得及接收,不要太快。
- 分段和重装: 发送端将要发送的数据块划分为更小的单位,并在接收端将其还原
- 复用和分用: 发送端几个高层会话复用一条低层的连接,在接收端再进行分用。
- 连接建立和释放: 交换数据前先建立一条逻辑连接,数据传送结束后释放连接。
计算机网络层间关系
- 实体:第n层结构(软件+硬件)通常称为第n层实体。不同机器上的同一层称为对等层,同一层的实体称为对等实体。
- 协议:即网络协议(Network Protocol),是控制对等实体之间进行通信的规则的集合。
- 接口:即同一节点内相邻两层的实体交换信息的逻辑接口,又称为服务访问点(Service AccessPoint,SAP) 。
- 服务:服务是指下层为紧邻的上层提供的功能调用。

发送方将数据压缩后,需要增加“首部”,说明采用了哪种压缩算法,接收方根据“首部”信息选择解压缩算法将数据解压。首部的格式由协议中规定完成。

- 协议数据单元(PDU):对等层次之间传送的数据单位。第n层的PDU记为n-PDU、
- 服务数据单元 (SDU):为完成上一层实体所要求的功能而传送的数据。第n层的 SDU记为n-SDU
- 协议控制信息 (PCI):控制协议操作的信息。第n层的PCI记为n-PCI。
- 三者的关系为n-SDU + n-PCl = n-PDU = (n - 1)-SDU

常见网络体系结构

协议三要素
- 语法:数据与控制信息的格式
- 语义:需要发出何种控制信息,完成何种动作,做出何种应答
- 同步(时序):执行各种操作的时序
OSI参考模型

物理层
实现相邻节点之间比特的传输(通过物理传输媒体连接接口,第0层),定义电路接口参数(形状、引脚数等)和传输信号的含义(0、1信号的表示,电信号的持续时间)。
数据链路层
确保相邻节点之间的链路逻辑上无差错,在数据上添加上了校验码,以帧为单位发送给物理层传输。
- 差错控制
- 流量控制
网络层任务
把分组(数据报) 从源结点转发到目的结点,一个分组会拆分为多个帧传输给数据链路层。
- 构造并维护路由表,将分组转发到下一个合适的节点
- 拥塞控制:发现网络拥塞,并采取措施缓解拥塞(转发至压力较低的节点)
- 网际互联:实现不同结构的网络互联
- 其他功能:差错控制(防止丢帧、帧出错)、流量控制、连接建立与释放(虚电路,确保帧有序到达)、可靠传输管理(需接收方返回帧接受确认消息)
传输层
实现进程端口到端口的通信,以报文段为单位,一个报文段会拆分为多个分组传输给网络层
- 复用和分用:复用:不同进程使用同一个传输层协议传送数据,分用:将数据正确地交付给目的应用进程
- 其他功能:差错控制、流量控制、连接建立与释放(虚电路,确保报文段有序到达)、可靠传输管理(需接收方返回报文段接受确认消息)
会话层、表示层、会话层

TCP/IP模型

网络接口层
网络接口层为网络层传输“分组”。但TCP/IP并不具体描述网络接口层的功能、协议(交给网络设备商自由发挥)
网络层接口
把分组(数据报) 从源结点转发到目的结点
- 构造并维护路由表,将分组转发到下一个合适的节点
- 拥塞控制
- 网际互联
- 不进行差错控制、流量控制、连接建立与释放、可靠传输管理
传输层
实现进程端口到端口的通信
- 复用和分用:复用:不同进程使用同一个传输层协议传送数据,分用:将数据正确地交付给目的应用进程
- 其他功能:差错控制、流量控制、连接建立与释放、可靠传输管理。整体正确(报文段),一定代表局部正确(网络接口层传输的帧数据)。
- 不在网络层做数据校验,而是在传输层进行数据校验,将压力给了网络边缘节点,大大降低了路由器等互联网中间设备的压力。
应用层
并不是所有网络应用都需要数据格式转换、会话管理功能,所以取消会话层和表示层,如果某些应用需要这些功能,就交给应用层的特定协议去实现
OSI对比TCP/IP

物理层
通信基础
一个信号周期(码元宽度)内,传送的一个信号就是一个码元,这个信号可以有多种状态,假设有n种,则称为n进制码元。
一码元可携带比特数据:如信号有四种状态,那么就可以携带2bit
波特率:每秒传输码元数

信道容量
信号:是数据的载体,在信道上传输
噪声:对信道产生干扰,影响信道的数据传输效率
奈奎斯特定理
对于一个理想低通信道(没有噪声、带宽有限的信道)
- 如果波特率太高,会导致“码间串扰”,即接收方无法识别码元
- 带宽越大,信道传输码元的能力越强
香农定理
对于一个有噪户、带宽有限的信道,信噪比越高,噪声对信号传输影响越小
- 提升信道带宽、加强信号功率、降低噪声功率,都可以提高信道的极限比特率
- 在带宽、信噪比确定的信道上,一个码元可以携带的比特数是有上限的
编码与调制
编码解码器:有线网络适配器
调制解调器:光猫
常用编码
自同步能力: 信源和信宿可以根据信号完成“节奏同步”,无需时钟信号。
如RZ编码等,因为其每个周期都有电平跳变,接收端可以通过检测电平转换来同步时钟
如NRZ编码等,因为其每个周期不一定都会跳变,如果出现长时间0/1,就会导致同步问题,需要再接入时钟同步。
浪费带宽: 根据信号映射为的bit数量进行判断
如曼彻斯特编码,浪费,因为每个比特需要两个符号周期来表示。
如不归零编码,不浪费,因为每个比特直接映射为一个符号。
抗干扰能力:
电平转换的频率高,如果由于噪声或干扰导致某个比特周期内没有电平转换或电平转换位置错误,接收端可以立即检测到这种异常。

常用调制方法
基带信号:来自信源的数字信号,需要调制后才能在某些信道上进行传输
调幅AM(幅移键控):不同幅度表示不同信号
调频FM(频移键控):不同频率表示不同信号
调相PM(相移键控):不同相位差表示不同信号
正交幅度调制:幅值和相位共同结合表示不同信号
传输介质
有线传输介质命名:速度+base+介质
10Base5:10Mbps,同轴电缆,最远传输距离500m 10BaseF*:10Mbps,光纤,*可以替换为其他参数。 10BaseT*:10Mbps,双绞线,*可以替换为其他参数。
双绞线
通过两条导线绞合在一起,以及添加屏蔽层可以提升抗电磁干扰能力,早期电话线、近期的局域网。

同轴电缆
内导体用于信号传输,外导体屏蔽层用于抗电磁干扰。早期局域网、有线电视。
内导体越粗,电阻越低,传输过程中信号衰减越少,传输距离越远

光纤
由纤芯(高折射率)和包层(低折射率)构成,利用光的全反射特性,有光表示1,无光表示0,多模光纤通过判断角度来确认当前传输的bit位置。
对电磁干扰不敏感,传输信号损失小

无线介质
长波更适合长距离、非直线通信。
短波更适合短距离、高速通信,若用于长距离通信需建立中继站,短波信号指向性强,要求信号接收器“对准”信号源
物理层设备
中继器和集线器不能无限串联,如:5-4-3原则:使用集线器(或中继器)连接10Base5网段时,最多只能串联5个网段,使用4台集线器(或中继器),只有3个网段可以挂接计算机。
- 信号衰减:每次通过集线器或中继器,即使重整信号后,都会有所衰减。
- 延迟:每个集线器或中继器在接收和转发数据时都会产生一定的延迟。
- 冲突:所有设备都在一个冲突域中,设备越多,冲突概率越大
中继器
若距离过长,则数字信号会失真。中继器只有两个端口。通过一个端口接收信号,将失真信号整形再生,并转发至另一端口(信号再生会产生一些时延)
集线器
本质上是多端口中继器,物理上拓扑结构是星型,逻辑上拓扑结构是总线型。集线器将其中一个端口接收到的信号整形再生后,转发到所有其他端口,所以端口连接的结点不可同时发送数据,会导致“冲突”
数据链路层
物理层为数据链路层提供的“比特传输”服务,而数据链路层为网络层提供服务,将网络层的IP数据报(分组)封装成帧,传输给下一个相邻结点。
组帧
字符计数法
- 原理:在每个帧开头,用一个定长计数字段表示帧长
- 最大缺点:任何一个计数字段出错,都会导致后续所有帧无法定界

字节填充法
使用控制字符SOH和EOT分别表示一个帧的开始和结束
如果帧的数据部分包含“特殊字符”(SOH、EOT、ESC),则发送方需要在这些“特殊字符”前填充“转义字符ESC”(接收方要做逆处理)

零比特填充法
使用特殊比特串表示帧开始、结束,其包含了连续的六个1,HDLC,PPP等协议均采用该编码,为解决数据帧中出现该特殊比特串:
- 发送方需要对帧的数据部分进行处理,每当遇到连续5个1,就填充一个0
- 接受方需要对帧的数据部分进行逆处理,每当遇到连续5个1,就删掉后面的0

违规编码法
通过不规范的曼彻斯特编码表示帧的开始和结束,需要物理层的硬件配合。

差错控制
奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
- 校验位生成:所有信息位异或得到偶校验位
- 偶校验:整个校验码所有位进行异或,为1表示出错。(为0未必正确,如出现偶数位跳变)
CRC校验码
数据发送、接受方约定一个“除数”,K个信息位+R个校验位作为“被除数”,添加校验位后需保证除法的余数为0。接收方收到数据后,进行除法检查余数是否为0,若余数非0说明出错,则进行重传或纠错。
【例2-5】设生成多项式为G(x)=x^3+x^2+1,信息码为101001,求对应的CRC码。
1.确定K、R以及生成多项式对应的二进制码
K=信息码的长度=6,R=生成多项式最高次幂= 3 → 校验码位数N=K+ R=9
生成多项式G(x) = 1*x^3+1*x^2+0*x^1+ 1*x^0。,对应二进制码1101
⒉移位
信息码左移R位,低位补0(位数等于校验码位数),101001000
3.相除
对移位后的信息码,用生成多项式进行模2除法,产生余数001,得到对应的CRC码: 101001 001
模二除:除数开头为1,则商1;开头为0则商0;相减值为异或值。

4.检错和纠错
发送:101001001:记为C9C8C7C6C5C4C3C2C1
接收:101001001:用1101进行模2除,余数为000,代表没有出错
接收:101001011:用1101进仃模2陈,余数为010,代表出错

若2^R >= K+R+1(K+R种错误编码,1中正确编码),即上图中信息为仅有四位,则CRC码可纠错一位,
海明校验码
将信息位分组进行偶校验,使用多个校验位,这些校验位可以标注出错位置。
校验位k位,信息位n位:2^k >= n + k + 1(n + k种错误编码,1中正确编码)


可靠传输与流量控制
滑动窗口协议
发送窗口Wt:当前允许发送的帧,若帧在Wt外则不能发送。
接受窗口Wr:当前允许接受的帧,若帧在Wr外则直接丢弃。
若Wn+Wr > 2^n:发送方发送0,1帧,接收方接受后,Wr向后移动两个位置,但是确认帧丢失。Wt不移动,发送方重发0帧,此时掉落在Wr内,可以接受,但实际上该帧并不应该接受。

停止-等待协议

正常情况
发送方发送数据帧,接收方接受,且校验后不存在问题后,则返回确认帧,Wr向后移动。
发送方接受到确认帧,Wt向后移动,准备下一帧数据的发送。
数据帧丢失/差错
接收方未接收到数据帧,不会返回确认帧,所以发送方会超时重传
接收方接收到数据帧,校验出现差错,直接丢弃帧,不会返回确认帧,所以发送方会超时重传
确认帧丢失
接收方接受到数据后,Wr向后移动,但返回的确认帧未被发送方收到,Wt不会移动。超时后发送方重传,接收方接收到后发现帧编号与当前窗口编号不一致,丢弃帧,并返回原先帧编号的确认帧。
后退N帧协议
缺点︰如果接收方接收帧的速度很慢,或在信道误码率很高的情况下,可能会导致发送方的发送进度经常需要"后退",传输效率低下

正常情况
发送方按照顺序连续将窗口内的帧发送,接收方连续收到多个数据帧时,返回ACKi,表明正确接受了i及i号前的所有帧(累积确认)。

数据帧丢失/差错
当发送方发送的多个数据帧中,某些数据帧丢失/差错,导致接收方接收到窗口之外的帧时,将会直接丢弃该帧,返回目前已正确接收的最后一个帧的ACKi。
超时后,发送方将会重传i+1帧及后续的所有帧,并重置所有计时器。

确认帧丢失
当第2确认帧丢失,因为累计确认,所以接受到第3帧、第4帧,就会当做第二帧接受正确。
若是第4确认帧丢失,会触发超时机制,接收方接受超出窗口的帧,将会返回目前已正确接收的最后一个帧的ACKi,即重发第4确认帧

选择重传协议
发送方的窗口需要大于等于接收方窗口,一般二者取等于(如果小于,那么接收方多出的部分将无法接收到数据)。
正常情况
发送方顺序发送窗口内的数据帧,接收方连续接收多个帧,且每个帧都需要返回ACK。

数据帧丢失/差错
数据帧丢失:丢失的帧将会超时重传
数据帧差错:将会直接将差错的帧丢弃,并发送一个否认帧,要求发送方重传该帧。

确认帧丢失
未接收到确认帧,超时后,发送方将会重传该帧,接收方发现其不在当前窗口内,将会再次返回对应的确认帧。

介质访问控制
多个节点共享同一个“总线型“广播信道时,可能发生“信号冲突”,通过控制各节点对传输介质的访问,避免或减少冲突。
信道划分
时分复用
将时间分为等长的“TDM帧”,每个“TDM帧”又分为等长的m个“时隙”,将m个时隙分配给m对用户(节点)使用。
- 每个节点最多只能分配到信道总带宽的1/m。
- 如果某节点暂不发送数据,会导致被分配的“时隙”闲置,信道利用率低。

统计时分复用
在TDM的基础上,统计每个节点对信道的使用需求,动态按需分配时隙
- 如果需要时,一个节点可以在一段时间内获得所有的信道带宽资源。
- 如果某节点暂不发送数据,可以不分配“时隙”,信道利用率更高。
频分复用
将信道的总频带划分为多个子频带,每个子频带作为一个子信道,每对用户使用一个子信道进行通信。
- 优点:各节点可同时发送信号;充分利用了信道带宽(Hz)
- 缺点:FDM技术只能用于模拟信号的传输

波分复用
即光的频分复用,不同波长即不同频率。

码分复用
规格化内积
因为互相垂直,所以不同向量积为0,将叠加后的向量乘以某个码片序列,就可以得到对应的bit值。

随机访问
纯ALOHA协议
如果准备好数据帧,就立刻发送;如果失败就随机等一段时间后重传。

时隙ALOHA协议
时隙大小固定=传输一个最长帧所需时间,只有在每个时隙开始时才能发送帧。
时隙ALOHA避免了用户发送数据的随意性,降低了冲突概率,提高了信道的利用率

CMSA协议
即载波监听多路访问协议,在ALOHA协议基础上提出改进:在发送数据之前,节点通过网络适配器安装 “载波监听装置”,来监听信道是否空闲,只有信道空闲时,才会尝试发送。
下方协议中:前方表示信道空闲发送概率,坚持与非坚持表示是否对信道持续监听。
1-坚持CSMA协议
- 优点:信道利用率高,信道一旦空闲,就可以被下一个节点使用。
- 缺点:当多个节点都已准备好数据时,一旦信道空闲,会有多个节点同时发送数据,冲突概率大。

1-非坚持CSMA
- 优点:当多个节点都已准备好数据时,如果信道不空闲,则各节点会随机推迟一段时间再尝试监听,从而使各节点“错开”发送数据,降低冲突概率。
- 缺点:信道刚恢复空闲时,可能不会被立即利用,导致信道利用率降低

p-坚持CSMA
优点:属于1-坚持CSMA、非坚持CSMA的折中方案,降低冲突概率的同时,提升信道利用率。

CMSA-CD协议(冲突检测)
用于早期的有线以太网(总线型),如用同轴电缆、集线器连接多个节点组成的有线局域网。现在的有线局域网也使用“以太网”技术,但不一定都是“总线型”。
CSMA/CD没有ACK机制(但上层协议(如TCP)会有自己的错误检测和纠正机制),若发送过程中未检测到冲突,就认为帧发送成功。若争用期内未发生冲突,就不可能再冲突。

假设:A、C、D、B依次相距2000m,即A、B两个节点相距最远,6000m,信号的传播速度=2×10^8m/s,即200m/us。信道带宽= 10Mbps,即10b/us。则最大单向传播时延 = 6000 / 200 = 30us
- 若A节点往信道上发送数据,最多需要多久可以被其他所有节点“监听”到信号:30us
- A节点往信道上发送的数据可能与其他节点发生“冲突”。那么在最极限的情况下,从A节点发出数据开始,到A节点一定可以检测到冲突,最多需要:2×30us = 60us(A发送信息到达B,B恰好发送信息造成冲突,冲突信息传递到A)
最短帧长(以太网规定64B):2×最大单向传播时延×信道带宽,若收到的帧小于最短帧长,视为无效帧。如果实际需要发送的数据很少,可填充至合法长度后再发送。
- 最短帧长=2×30usx 10Mbps = 60us x 10Mbps= 600bit,假设A节点发送的数据帧长度小于600bit,如果A发送信息到达B,B恰好发送信息造成冲突,则冲突信息传递到A之前,A的数据帧就已经发送完毕了。
最长帧长(以太网规定1518B):规定最长帧长可防止某些节点一直占用信道。

CMSA-CA协议(冲突避免)
用于IEEE 802.11无线局域网(WiFi)。
为什么不采用CSMA/CD协议?
1)硬件上很难实现“边听边发,冲突检测”,因为接收信号的强度往往远小于发送信号的强度,且在无线介质上信号强度的动态变化范围很大。
2)存在“隐蔽站”问题――在无线通信中,并非所有站点都能够听见对方。发送结点处没有冲突并不意味着在接收结点处就没有冲突。
eg: A无法监听到B、C的信号,B、C对于A而言就是“隐蔽站”。

CMSA-CA基本模型

信道预约机制
预约是否启用,可以通过帧长度判断,长帧启用,短帧不启用

令牌传递协议
获得令牌帧的设备(令牌号为当前设备号),将数据封装为数据帧(转化为数据帧),按照顺序方式传递,接受到数据帧的设备,节点检查目的地址是否与自己相同,如果是,就复制数据部分,并将数据帧标记为已接收,在将数据帧向后传递。
当发送数据帧的节点接收到自己发生的数据帧,如果数据帧检查有异常,可尝试重发,如果不存在异常,就将转化为令牌帧,令牌号修改为下一台设备,传递给下一台设备。

局域网

局域网基本概念体系

以太网与IEEE802.3
IEEE802.3标准的以太网MAC帧

V2标准的以太网MAC帧

冲突域与广播域
冲突域:如果两个节点同时发送数据,会导致冲突,则二者处于同一个“冲突域”
广播域:如果一个节点发送广播帧,可以被另一个节点接收,则二者处于同一个“广播域”

单播帧:
A→C:仅c能收到并接收帧
A→F:E、F、G能收到,仅F会接收帧
E→A:F、G、A能收到,仅A会接收帧
E→F:F、G能收到,仅F会接收帧
广播帧(目的地址全为1)
- A发出广播帧,B、C、D、E、F、G、R都能收到并接收帧
- E发出广播帧,A、B、C、D、F、G、R都能收到并接收帧
- 注意:路由器R收到广播帧后,不会再转发至其他网络。只有同一个局域网内的各节点才属于同一个“广播域”
虚拟局域网
将一个大型局域网分割成若干个较小的VLAN,每个VLAN对应一个VID,处在一个广播域中,需要使用支持VLAN功能的以太网交换机来实现,解决以下问题:
- 1.局域网内任何一个节点,发出的广播帧,都会被广播至所有节点。可能出现广播风暴。
- 2.不安全,局域网内可能,会有一些敏感节点。
基于接口
因为干线链路通过8号和1号接口进行链接,所以两个VLAN都包含8号和1号接口。

基于MAC地址

基于IP
这种方式可以让VLAN范围跨越路由器,让多个局域网的主机组成一个VLAN(需要网络层功能支持)

802.1Q帧的作用
主机与交换机之间,传输标准以太网帧
交换机与交换机之间,传输802.1Q帧

广域网
待补充
物理层设备
以太网交换机
交换机工作在数据链路层,可以根据目的MAC地址转发帧
交换机自学习
假设各节点知道彼此的MAC地址,节点A向节点C发送数据帧。
A——>C
A从1端口发送数据帧,交换表1记录设备A的MAC地址和其对应的端口号。又因为交换表1中找不到接收方的MAC地址和端口号的对应关系,所以将该帧发送为广播帧,转发到除了入口的所以设备。
接收到该帧的设备,通过比对接收方的MAC地址,如果相同则接受,如果不同则丢弃(交换机2接受到该帧,同样将其记录到交换表2中)。

H——>A
H设备通过端口2将数据帧发送到交换机2,因为交换表2中已有对应MAC帧,所以不需要记录。再查询交换表2,得到其目的MAC地址对应端口为1,将帧通过端口1发送至交换机1。
交换机1查询交换表1,得到其目的MAC地址对应端口为1,通过端口1,将数据帧转发给设备1.

L——>J
L设备通过端口5发送数据帧,通过集线器后,转发到 J和L,而当交换机2收到该帧后,发现目的MAC地址与源MAC地址相同,则不再转发。
直通交换与存储转发交换

网络层
概述
网络层为传输层提供服务,将传输层的数据封装成“IP数据报”。网络中的路由器根据IP数据报首部中的源IP地址、目的IP地址进行“分组转发”。因此,网络层实现了 “主机到主机”的传输
- 接入网络的每台主机至少拥有一个IP地址
- 通常,路由器的每个接口都需要分配一个IP地址(最新技术标准已经取消了这个强制要求)

协议服务关系
- IP协议(Internet Protocol):实现“主机到主机”传输的核心协议
- ARP协议:用于查询同一网络中的<主机IP地址, MAC地址>之间的映射关系
- ICMP协议:用于网络层实体之间相互通知“异常事件”
- lGMP协议:用于实现IP组播

IPV4
IP数据报(分组)协议
首部信息

数据分片
一个链路层数据帧能承载的最大数据量称为最大传送单元(MTU)。若链路1MTU为4000B,而链路2MTU仅有1500,则数据帧(封装了IP数据报)需要在路由器进行分片。
- IP数据报的“分片”可能在源主机、或任何一个路由器中发生。每个分片都是一个可以被单独转发的IP数据报,都包含首部。只有目的主机才会对分片进行“重组”
- 各分片有可能乱序到达目的主机
- 由于首部的“片偏移”字段是以×8B为单位,因此,除了最后一个分片外,其他每个分片的数据部分必须是8B的整数倍

早期IP地址
IP地址划分
- 每台主机、每个路由器接口被分配的IP地址都是全球唯一的。
- 路由器和路由器连接的接口可以不分配IP地址,但路由器和其他节点连接的接口必须分配IP地址。从属于同一个网络的所有主机、路由器接口的IP地址“网络号”都相同。
- 当一台新主机接入网络时,需要给它分配一个IP地址、并配置“默认网关”(即该主机接入互联网的路由器,数据发送至不同网络才需要默认网关)

特殊IP地址
- 特殊地址不能指派给网路中的任何一台主机或路由器“私用”
- 如果一个网络中,主机号占N bit,那么这个网络中,最多支持2N-2台主机&路由器
| 网络号 | 主机号 | 作为分组源地址? | 作为分组目的地址? | 代表的含义 |
|---|---|---|---|---|
| Y | 全0 | ✖ | ✖ | 表示整个网络本身(只能用于路由表、转发表中) |
| Y | 全1 | ✖ | ✔ | 向网络号为Y的网络广播IP分组 |
| 0 | Y | ✔ | ✖ | 表示本网络中主机号为Y的主机 |
| 全0 | 全0 | ✔ | ✖ | 本网络上的本主机(会在DHCP协议中使用) |
| 全1 | 全1 | ✖ | ✔ | 向本网络广播IP分组 |
| 127 | 非全0或非全1的任 何数值 | ✔ | ✔ | 环回自检地址。表示一台主机本身,用于本地软件测试。数据包会被直接返回到发送者,而不会通过任何网络接口发送到外部网络 |
数据帧传输
H1—>H7
H1构造IP数据报,源地址为166.1.0.1,目的地址为200.1.1.2,不考虑分组。检测源地址和目的地址网络号,发现二者不在同一网络下,所以H1需要将数据报封装为MAC帧发送至默认网关。通过ARP协议,使用B2(默认网关)的IP地址,获取其MAC地址,经过交换机,将MAC帧通过B2接口送入。
路由器匹配路由表的目的网络号,从B0接口发送,从C0接口接受至路由器。
路由器匹配路由表的目的网络号,发现需要从C2接口发送,并修改数据帧MAC地址为H7,然后发送数据帧。
H7收到MAC帧,去除帧附加信息,得到IP数据报。
H1—>H6
H1构造IP数据报,源地址为166.1.0.1,目的地址为166.1.4.4,不考虑分组。检测源地址和目的地址网络号,发现二者在同一网络下,所以H1将数据报封装为MAC帧(通过ARP协议获得目的MAC地址)直接通过集线器转发,最终H5和H6均收到该帧。
H6发现MAC地址与当前设备MAC地址不一致,直接丢弃,而H5则收下该MAC帧,去除帧附加信息,得到IP数据报。

子网划分与子网掩码
子网掩码的配置:<网络号,子网号>对应的bit全为1,剩余部分全为0,即可得到子网掩码。子网掩码与子网内的IP地址相与,得到的就是网络前缀(网络号+子网号)
主机发送IP数据报的过程
路由器转发一个IP数据报的过程
数据帧传输
H3—>H6
H3构造IP数据报,源地址为166.1.128.2,目的地址为166.1.150.1,不考虑分组。将源地址和目的地址分别与其子网掩码相与,可得二者相等,即在同一网络下,所以H3将数据报封装为MAC帧(通过ARP协议获得目的MAC地址)直接通过集线器转发,最终H5和H6均收到该帧。
H6发现MAC地址与当前设备MAC地址不一致,直接丢弃,而H5则收下该MAC帧,去除帧附加信息,得到IP数据报。
H1—>H3
H1构造IP数据报,源地址为166.1.0.1,目的地址为166.1.128.2,不考虑分组。将源地址和目的地址分别与其子网掩码相与,可得二者不相等,即不在同一网络下,所以H1需要将数据报封装为MAC帧发送至默认网关。通过ARP协议,使用B3(默认网关)的IP地址,获取其MAC地址,经过交换机,将MAC帧通过B3接口送入。
将目的地址与每个表项的子网掩码相与,再与表项的目的网络号相比,发现需要从B2接口发送,并修改数据帧MAC地址为H3,然后发送数据帧。
H3收到MAC帧,去除帧附加信息,得到IP数据报。
H1—>Internet
H1构造IP数据报,源地址为166.1.0.1,目的地址为111.2.3.4,不考虑分组。将源地址和目的地址分别与其子网掩码相与,可得二者不相等,即不在同一网络下,所以H1需要将数据报封装为MAC帧发送至默认网关。通过ARP协议,使用B3(默认网关)的IP地址,获取其MAC地址,经过交换机,将MAC帧通过B3接口送入。
将目的地址与每个表项的子网掩码相与,再与表项的目的网络号相比,发现最终只有0.0.0.0(其子网掩码和任何IP相与均是0.0.0.0)可以进入。将数据帧从B1接口发送,从A2接受。
ISP路由器为老式路由器,将目的IP直接与路由转发表比较,将数据帧从A1发送出。

若存在多个子网,可以布置多台路由器,避免所有请求都需要由总路由器处理。

无分类编址CIDR
CIDR优势
某单位有2000台主机想要联网,C类地址(包含2^8个IP地址)无法满足,就不得不申请一个B类地址块(包含2^16 = 65536个IP地址),分配不灵活,利用率低。
CIDR编址取消了IP地址传统的A/B/C/D/E分类,使用不定长的网络前缀,IP地址构成为 :{<网络前缀>,<主机号>},若某单位有2000台主机想要联网,IP地址管理机构可以给他分配一个21bit网络前缀的CIDR地址块。
128.14.32.153/30,表示在这个IP地址中,网络前缀占30bit,主机号2bit。
子网划分
一个单位获得CIDR地址块后,可以把它划分为多个子网。
注意:在每个子网中,主机号全0、全1的IP地址不能分配给特定节点私用;
定长子网划分
在一个CIDR地址块中,把主机号前k bit抠出来作为定长子网号这样就能划分出2^k个子网(每个子网包含的IP地址块大小相等,不够灵活,与传统子网划分技术同理)
变长子网划分
在一个CIDR地址块中,划分子网时,子网号长度不固定(每个子网包含的IP地址块大小不同)

原始CIDR地址块作为根节点(假设可以自由分配的主机号占h bit),每个分支节点必须同时拥有左右孩子,左0,右1(反过来也行)
每个叶子结点对应一个子网,根据根节点到达叶子结点的路径来分析子网对应的IP地址块范围。整棵树的高度不能超过h-1(因为即便最小的子网也至少要保留2bit主机号)

路由聚合
对于一个路由转发表,如果几条路由表项的转发接口相同部分和网络前缀也相同,那么可以将这几条路由表项聚合为一条。这种地址的聚合称为路由聚合,也称构成超网。
路由聚合可以减少路由表的大小,但也可能会引入额外的无效地址。如:128.14.32.156/30,在县里电信实际上并不存在该IP,但是路由聚合后,前27bit盘匹配成功后,仍旧会转发。

采用CIDR技术后,由于“路由聚合”,一个IP地址在转发表中可能会匹配多个表项,此时应使用最长前缀匹配原则。如128.14.32.128会通过G3端口转发(G1的IP由咸鱼电信分配(子网F),G3的IP由铁柱网吧(子网S)分配,由于S是F下一级的子网,而128.14.32.128在S子网下,所以其匹配位数会更多)

网络地址转换NAT
普通路由器转发IP数据报时,不会改变源IP、目的IP地址。普通路由器仅包含网络层及以下的功能
数据帧传输
以手机1到手机2为例
假设手机1上的微信进程,向手机2的微信进程发送数据(实际上,应该手机1将数据发送给微信服务器,由其转发给手机2,但此处我们假设直接转发)
手机1在传输层,添加上目的端口(4096)、源端口(9855)等首部信息,封装为TCP数据报,转交给网络层;网络层添加上目的IP地址(66.211.88.55)和源IP地址(192.168.3.48)等首部信息,封装为IP数据报,转交给数据链路层;数据链路层添加源MAC地址和目的MAC地址等首部信息,封装为数据帧交由物理层发送。
通过子网掩码,判断目的IP与源IP不在同一网络,转发至默认网关。路由器对照NAT表,得到源地址192.168.3.48:9855对应的外网地址为59.175.49.153:7788,于是将源IP地址和源端口修改为对应的外网地址,最终经过层层转发,数据帧得到手机2所在局域网。
路由器对照NAT表,得到目的地址66.211.88.55:4096对应的内外地址为192.168.3.74:6666。于是将目的IP地址和端口修改为对应的内网地址,最终经过层层转发到达手机2。

网络总体模型

地址解析协议ARP
ARP过程
假设H3要向默认网关发送数据帧,虽然已经配置了默认网关,但是还不知晓其MAC地址。
H3构造IP数据报(ARP请求分组),指明当前设备IP为166.1.128.2,MAC地址为AA:BB:CC:DD:EE:33,目的IP地址为166.1.128.1(默认网关)的MAC地址。再将ARP请求分组封装为数据帧,标明目的MAC地址为全1(广播帧)。
接受到ARP请求分组后,设备会比对目的IP地址,若不相同则丢弃;若相同则接受,并将发送方的MAC地址和IP记录到ARP表中,并且封装单播帧返回。以下图为例,默认网关构造IP数据报(ARP响应分组),指明当前设备IP为166.1.128.1,MAC地址为AA:BB:CC:DD:EE:B2。再将ARP响应分组封装为数据帧,标明目的MAC地址为AA:BB:CC:DD:EE:33。
H3接收到数据帧后,解析出发送方的MAC地址和IP,并将其记录到ARP表中,

ARP分组的格式

动态主机配置协议DHCP

新设备接入网络网络流程,以H3为例。
新设备广播DHCP发现报文
H3接入网络后,首先发送DHCP报文,指明自己的MAC地址。将DHCP报文交由传输层,封装为UDP数据报,添加目的端口67和源端口68等首部信息(这两个端口不会被其他进程使用,所以可以直接指定)。再将UDP数据报交由网络层,封装为IP数据报,添加目的IP 255.255.255.255(表明是广播帧)和源IP 0.0.0.0(表明本网络上的本主机,因为其暂时还未有IP地址)等首部信息。再将IP数据报交由数据链路层,添加目的MAC地址(全1表示广播帧)和源MAC地址(H3 MAC地址)等首部信息。最后交由物理层发送。
设备接收到数据组装成MAC帧后,发现其目的MAC地址全1,是广播帧,所以都会保留该帧,去除数据链路层首部信息,将其交给网络层。网络层检测发现其目的IP也为全1,是广播IP数据报,所以都会保留该数据报,去除网络层首部信息,将其交给传输层。传输层检测后发现,其目的端口为68,非DHCP服务器不会使用该端口,于是便将其丢弃,而DHCP服务器则会接受,交由应用层,获取其封装的H3 MAC地址。
DHCP服务器发送提供报文
DHCP服务器收到H3广播帧,封装DHCP提供报文,指明为H3分配的IP、租用期、子网掩码、默认网关等信息后发送。因为此刻H3还没有IP,所以目的IP地址还是全1;但已经从发现报文中获取了H3的MAC地址,所以目的MAC是确认的,其是一个单播帧。
新设备广播DHCP请求报文
H3接受到提供报文,封装当前MAC地址和接受的IP地址后发送。因为在大型局域网中,可能存在多台DHCP服务器,且可能有不止一台服务器响应了H3发送的发现报文,所以该帧是一个广播帧。
DHCP服务器广播确认报文
DHCP接受到请求报文,确认该IP分配,发送确认报文,携带信息与提供报文类似。此时H3才有了IP。

IPV6
待补充
路由算法与路由协议

RIP协议
即Routing Information Protocol(路由信息协议),用于自治系统内任意两个通信主机间,经过路由器的数量不超过15个。
基于算法
采用Bellman-Ford单源最短路径算法,假设Dx(y)表示从节点x到节点y的带权最短路径费用,C{x,v}表示x到v的距离,v是x的所有邻居,则x到y最短距离可以表示为:
协议规定
- RIP协议中,将路由器跳数视为距离,路由器直达网络,距离为1;每经过一个路由器,距离+1;距离=16时,表示不可达。
- 每个路由器仅告诉相邻节点路由器距离向量(即从本路由器到达每一个目的网络的距离)
- 自治系统刚启动时,定期交换;当收敛后,定期交换+距离向量有更新就交换。
路由表创建流程
假设自治系统内部存在四个路由,连接结构如下图,假设每三十秒,各个路由器之间交换距离向量。使用以下字母代替各个网络(实际上使用CIDR前缀表示)。

初始状态
各个路由器探测与自己直连的网络,并将其记录。
| 路由器 | 目的网络号 | 距离 | 下一跳 |
|---|---|---|---|
| R1 | N1 | 1 | 无 |
| R2 | N2 | 1 | 无 |
| R3 | N3 | 1 | 无 |
| R4 | N4 | 1 | 无 |
第0秒
此时各个路由器向相邻的路由器节点发送距离向量,以R1为例,其接收到R2和R3发送的距离向量,则R1经过R2和R3可以到达对应网络N2和N3,距离为2,其余路由器同理。
<table> <tr> <th>路由器</th> <th>目的网络号</th> <th>距离</th> <th>下一跳</th> </tr> <tr> <td rowspan="3">R1</td> <td>N1</td> <td>1</td> <td>无</td> </tr> <tr> <td>N2</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N3</td> <td>2</td> <td>R3</td> </tr> <tr> <td rowspan="3">R2</td> <td>N1</td> <td>2</td> <td>R1</td> </tr> <tr> <td>N2</td> <td>1</td> <td>无</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R4</td> </tr> <tr> <td rowspan="3">R3</td> <td>N1</td> <td>2</td> <td>R1</td> </tr> <tr> <td>N3</td> <td>1</td> <td>无</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R4</td> </tr> <tr> <td rowspan="3">R4</td> <td>N2</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N3</td> <td>2</td> <td>R3</td> </tr> <tr> <td>N4</td> <td>1</td> <td>无</td> </tr> </table>
第三十秒
此时各个路由器之间再次交换距离向量,以R1为例,其接收到R2和R3发送的距离向量
R2和R3到达各网络:R2 { <N1,2>, <N2,1>, <N4,2> },R3 { <N1,2>, <N3,1>, <N4,2> }
R1经过R2、R3到达各网络:R1—>R2 { <N1,3>, <N2,2>, <N4,3> },R1—>R3 { <N1,3>, <N3,2>, <N4,3> }
如果更新后的距离大于更新前的距离,则不更新;如果小于或者之前不存在则更新。
<table> <tr> <th>路由器</th> <th>目的网络号</th> <th>距离</th> <th>下一跳</th> </tr> <tr> <td rowspan="4">R1</td> <td>N1</td> <td>1</td> <td>无</td> </tr> <tr> <td>N2</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N3</td> <td>2</td> <td>R3</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R2</td> </tr> <tr> <td rowspan="4">R2</td> <td>N1</td> <td>2</td> <td>R1</td> </tr> <tr> <td>N2</td> <td>1</td> <td>无</td> </tr> <tr> <td>N3</td> <td>3</td> <td>R1</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R4</td> </tr> <tr> <td rowspan="4">R3</td> <td>N1</td> <td>2</td> <td>R1</td> </tr> <tr> <td>N2</td> <td>3</td> <td>R1</td> </tr> <tr> <td>N3</td> <td>1</td> <td>无</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R4</td> </tr> <tr> <td rowspan="4">R4</td> <td>N1</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N2</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N3</td> <td>2</td> <td>R3</td> </tr> <tr> <td>N4</td> <td>1</td> <td>无</td> </tr> </table>
RIP收敛后网络离线
除非路由器节点发生变化,否则路由表将不会改变。此时将会定期交换(即使感知到拓扑结构的变化,如新节点的加入),以及距离向量有更新就交换。
假设R1节点与N1网络之间的通讯中断,因为路由器中储存着上一次其他路由器发送的距离向量,所以更新R1到N1的距离为3
R1更新后路由表
R1更新路由表后,向其他路由器交换,以R2为例。
<table> <tr> <th>路由器</th> <th>目的网络号</th> <th>距离</th> <th>下一跳</th> </tr> <tr> <td rowspan="4">R1</td> <td>N1</td> <td>3</td> <td>R2</td> </tr> <tr> <td>N2</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N3</td> <td>2</td> <td>R3</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R2</td> </tr> </table>
R2更新后路由表
原本R2通过R1到达N1的距离是2,但是R2接收到R1的交换新距离向量,R1到达N1的距离是确是3,所以R2到R1再到N1只能更新为4。
R2更新路由表后,向其他路由器交换。
<table> <tr> <th>路由器</th> <th>目的网络号</th> <th>距离</th> <th>下一跳</th> </tr> <tr> <td rowspan="4">R2</td> <td>N1</td> <td>4</td> <td>R1</td> </tr> <tr> <td>N2</td> <td>1</td> <td>无</td> </tr> <tr> <td>N3</td> <td>3</td> <td>R1</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R4</td> </tr> </table>
R1更新路由表
原本R1通过R2到达N1的距离是4,但是R1接收到R2的交换新距离向量,R2到达N1的距离是确是4,所以R1到R2再到N1只能更新为5。
R2更新路由表后,向其他路由器交换。
<table> <tr> <th>路由器</th> <th>目的网络号</th> <th>距离</th> <th>下一跳</th> </tr> <tr> <td rowspan="4">R1</td> <td>N1</td> <td>5</td> <td>R2</td> </tr> <tr> <td>N2</td> <td>2</td> <td>R2</td> </tr> <tr> <td>N3</td> <td>2</td> <td>R3</td> </tr> <tr> <td>N4</td> <td>2</td> <td>R2</td> </tr> </table>
以此类推,直到距离更新为十六,此时认为N1不可达。(好消息传得快,坏消息传的慢。如两次传播RIP就收敛了,但是N1网络断开连接,却需要来回传递多次)
OSPF协议
即Open Shortest Path First(开放式最短路径优先)
基于算法
采用图的数据结构,基于迪杰斯特拉算法求最短路径,相邻节点之间的距离由网络管理员自定义(如:以链路TTL作为距离,可以动态变化)。
每台路由器都要构造整个自治系统的网络拓扑结构。路由器、某个网络作为图的顶点。
协议规定
每个路由器通过洪泛法告诉自治系统内所有路由器自己的相邻节点有哪些,并收集其他路由器发送的信息构建领接表。
新节点加入时,直接通过相邻节点获取完整的领接表结构;当收敛后,定期交换+相邻节点、路径信息有变化时交换。
路由表创建流程

初始状态
各个路由器探测与自己直连的网络,并将其记录到图中。
第0秒
以R1设备为例,R1将自身的图结构封装到OSPF报文中,转发至相邻节点R2,R3中。R2,R3接收到这个图结构,将其添加到自身的图结构中,然后将这个报文转发到自己的相邻接口(除了入口),其他节点也会重复该操作。
每个节点最终都会将图结构封装到OSPF中转发,每个OSPF报文都有一个序列号,如果路由器接收到相同序列号的报文,就将其丢弃。
OSPF网络收敛后
当新的网络加入后:连接它的路由器,将会通过洪泛法向相邻节点广播这个消息。
当新的路由器加入后:直接向相邻的路由器获取网络完整的图结构。
BGP协议
即Border Gateway Protocol(边界网关协议),在不同AS内,度量路由的代价(距离、带宽、费用)等不同,还需要考虑相关策略(安全,如某些自治系统不允许转发),所以BGP协议仅为了寻找一个能到达且较好的路由,而非最佳。
每个AS都必须指定一个运行BGP的节点(主机或路由器,称为边界路由器),由于可能与不同的AS相连,所以在一个AS内部可能存在多个运行BGP的边界路由器。
- eBGP(External Border Gateway Protocol):用于不同AS间,BGP进行路由信息交换。
- iBGP(Internal Border Gateway Protocol):用于同一个AS内,多个BGP间进行路由信息交换。
当BGP交换了网络可达性信息后,会根据各自所采用的策略,构造出合适的树形。且不存在回路的自治系统连通图。

若R14和R15均收到分别由R11、R12、R13通告的到达网络136.5.16.0/20的可达性信息如下。
- 目的网络:136.5.16.0/20,AS路径:AS2,AS8,AS19,下一跳:R11
- 目的网络:136.5.16.0/20,AS路径:AS3,AS7,AS11,AS19,下一跳:R12
- 目的网络:136.5.16.0/20,AS路径:AS4,AS10,AS19,下一跳:R13
则R14和R15会首先选择路径短的AS路径,若是相同,则会选择下一跳距离最近的路由器,如R14会选择R11,R15会选择R13。
IP组播
待补充
移动IP
待补充
传输层
传输层实现了“端到端”(进程到进程)的通信。传输层在TCP(或UDP)报文段的首部,指明源端口、目的端口
概述
当两个进程之间想要通信时,需要指明:
- 使用哪种传输层协议(TCP或UDP);
- 本进程绑定的端口号;
- 对方的IP地址和端口号;

有链接与无连接:
- 有连接:传输前先打招呼,先确认对方已经准备好接收数据。传输结束时也要告知对方已结束
- 无连接:不打招呼,直接把数据传给对方。
可靠与不可靠:
- 可靠的:接收方使用“确认机制让发送方知道哪些数据已被正确接收
- 不可靠的:接收方无论收没收到数据、数据是否正确,都不给发送方反馈

UDP
UDP数据报
UDP首部只占8B,每次传输一个完整的报文,不支持报文自动拆分、重装。
UDP是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制。
UDP支持一对一(封装成单播IP数据报)、一对多传输(封装成广播/多播IP数据报)。


UDP校验
校验算法
检验和的计算: 将原始数据以16bit为一组,进行二进制加法(最高位产生的进位需要回卷,即将进位当做1加到最低位),加法运算的最终结果逐位取反,得到16bit检验和。

差错检验方法: 接收方将收到的内容以16bit为一组,进行二进制加法(最高位产生的进位需要回卷)
- 如果加法结果为全1,说明没有差错(因为所有数据部分相加后,再与取反后的值相加,必然全1)
- 如果加法结果不是全1,说明有差错
校验流程
添加伪首部的作用仅仅是对源IP地址,目的IP地址等等信息进行校验
发送方
- 传输层的UDP协议在计算检验和之前,先添加伪首部。
- 把伪首部、首部、数据部分以16bit为一组,进行二进制加法(最高位产生的进位需要回卷)。
- 将最终的加法结果逐位取反,就得到16bit检验和,将其填入UDP首部。
- 去掉伪首部,并将UDP数据报交给网络层,封装成IP数据报。

接收方
- 网络层向传输层递交UDP数据报。
- 传输层在UDP数据报之前,添加伪首部。
- 把伪首部、UDP首部、数据部分以16bit为一组,进行二进制加法(最高位产生的进位需要回卷)。
- 如果加法结果为全1,说明没有比特错误,于是接收该UDP数据报,并根据目的端口号,向应用层递交报文。如果加法结果不是全1,说明有差错,于是丢弃该UDP数据报。

TCP
TCP报文段
报文段传输
TCP首部占20~60B,支持报文自动拆分、重装,因此可以传输长报文。
TCP是有连接的、可靠的、支持拥塞控制。
TCP仅支持一对一传输(因为通信双方的传输层必须先建立连接)。

- 每次建立TCP连接,可以传输多个报文(双向)。
- TCP是面向字节流的(而UDP是面向报文的)。无论传输多少个报文,在TCP协议看来都是一连串字节流(如下图中,一个报文段中可以有多个报文的数据)。
- TCP并不会强制要求每个TCP段都满载数据,只要别超过MSS就行(避免数据在IP层分片)。下方图中,假设建立TCP连接时MSS = 1000B (Maximum Segment Size,即最大段长,不包括首部,双方MSS可以设置不一样,在握手①和握手②中双方协商)。

报文段格式
- 源端口: 发送方进程的端口。
- 目的端口: 接收方进程的端口号。
- 序号(seq): 用于标记数据部分第一个字节在原始字节流中的位置,起始的序号是在建立连接时由发送方自己设置的,不一定从0开始。 数据传输过程中,每一个字节对应一个序号。
- **确认号(ack或ack_seq): **用于反馈,表示字号在该确认号之前的所有字节都已正确收到。
- 数据偏移:4bit,以4B为单位,表示TCB首部长度(因此TCB首部最长为15*4=60B),TCP数据长度 = IP数据报总长度 - IP首部 - TCP首部。
- 保留: 6bit,暂时未使用,通常设置为全0。
- URG(紧急位,Urgent): 1bit,URG=1时。表示这是紧急数据,应尽快插队发送,此时紧急指针有效。
- ACK(确认位,Acknowledge): 1bit,ACK=0时,ack_seq无效;ACK=1时,ack_seq有效。
- PSH(推送位,Push): 1bit,PSH=1时,表示希望接收方尽快回复(用于交互式通信)
- RST(复位位,Reset): 1bit,RST=1时,表示出现严重差错(如主机崩溃),必须释放连接。也可用于拒绝一个非法报文段(如恶意的黑客攻击)
- SYN: 1bit,当 SYN =1 时,表示这是一个连接请求或连接接受报文。
- FIN : 1bit,当 FIN=1时,表明此报文段的发送方的数据已发送完毕,要求释放传输连接。
- 窗口: 16bit,表示接收窗口的大小。即从本报文段首部中的ack_seq算起,接收方还能接收多少数据(以字节为单位)
- 校验和: 原理与UDP雷同,计算检验和之前也需要添加12B 伪首部(只需将UDP 伪首部的协议字段的 17 改成6,UDP 长度字段改成 TCP 长度)。
- 紧急指针: 紧急数据专用序号,原理与上方序号字段相同
- 选项(可变长度): 可以为空,也可以非空。
- 填充: 用于凑足4B的整数倍。

TCP连接管理
建立连接必须由客户端先发起请求,但是断开连接,可以由客户端先发起请求,也可以由服务器先发起请求

三次握手
- 在TCP全过程中,只有握手①、握手②的SYN=1。
- 在TCP全过程中,只有握手①的ACK=0,因为之前没有数据,所以不需要确认。
- 握手①、握手②不能携带数据(只有TCP首部),但是仍要消耗一个序号。握手③可以携带数据,如果不携带就不消耗数据。
- 从发出握手①,至到客户端进程可以发送数据,至少需要:1RTT
- 从发出握手①,到服务器进程可以发送数据,至少需要:1.5RTT

四次挥手
- 在TCP全过程中,只有挥手①、挥手③的FIN=1
- 挥手①、挥手③即使不携带数据,也要消耗一个序号
- 挥手②可以携带数据,挥手④不可以携带数据,因为挥手①已经关闭进程A到进程B的传送链接。
- 客户进程收到挥手③后,立即进入TIME-WAIT状态,并启动“TIME-WAIT计时器”,倒计时2MSL(Maximum Segment Lifetime,最长报文段寿命,是由TCP协议规定的一个固定时间长度)后才能进入CLOSE状态(目的是防止挥手④丢失,若丢失后,进程B将会重发挥手③,如果进程B在等待期间重复收到挥手就重置计时器)

- 如果服务器进程收到挥手①时,已经没有待传送数据,那么可以连续发出挥手②、挥手③。
- 从客户发出挥手①,到客户进程进入CLOSE状态,至少需要:1RTT+2MSL
- 从客户发出握手①,到服务器进程进程进入CLOSE状态,至少需要:1.5RTT

TCP可靠传输与流量控制
基本流程
发送窗口为对方接受窗口和缓冲区间的较小值。
客户进程1发送握手1,设置初始序号seq为599,因为此前没有数据,所有ack设为无效(不携带数据)。
客户进程2接收到握手1,返还握手2,设置初始序号seq为199,确认号为600,表明前一个数据已经收到了,并指明接受窗口大小为8(不携带数据)。
客户进程1接受到握手2,返还握手3,设置序号为600,确认号为200,接受窗口大小为10(不携带数据)。
接下来双放开始发送数据,每次发送完数据后,根据对方返回的窗口大小确定下一次还能发送多少数据。而当数据到达接受缓冲区之后,并不一定要等待数据填满后才能拷贝到应用层,只需要当前数据部分是有序且不存在缺漏的就可以拷贝。

累计确认

捎带确认

超时重传

快重传与立即确认

多链接
一个端口可以建立多个TCP链接

TCP拥塞控制
概述
流量控制与拥塞控制
- 流量控制:控制端到端的数据发送量,是“局部的“
- 拥塞控制:控制整个网络中每台主机的数据发送量,降低路由器负载,是“全局的”
如何判断网络拥塞?
- 发出的每个报文段,都能顺利地收到ACK确认:不拥塞
- 收到冗余ACK,引发快重传:有点拥塞
- 发出的报文段未能按时收到ACK,引发超时重传:严重拥塞
如果检测到网络拥塞怎么办?
- 迅速减少发送的数据量
- 严重拥塞就迅速缩小拥塞窗口
- 有点拥塞就适当缩小拥塞窗口
慢开始与拥塞避免


快重传与快恢复


应用层
应用层模型
域名系统DNS
文件传输FTP
电子邮件
WWW与HTTP协议
概述
WWW(World Wide Web),是全球广域网,各种“资源”通过HTTP协议传送给用户。
- HTTP/1.0 默认采用韭持续连接
- HTTP/1.1 默认采用持续连接(除非在HTTP请求报文中设置参数 Connection: Close )
浏览器访问网页流
1.用户输入网址(域名)
2.浏览器通过DNS服务器查询域名对应的IP地址(浏览器会将查询结果 “域名→P” 缓存在本地)
3.浏览器与<Web服务器IP地址:80端口>建立TCP连接
4.浏览器在握手③中携带HTTP请求报文(指明要访问哪个html网页)
5.服务器返回HTTP响应报文(携带html文件)
6.如果html引用了其他n个元素,还需要n组HTTP请求&响应(持续、非持续工作方式有所区别)

HTTP工作协议
请求首部字段名以key-value形式存在,如:
- Connection:close,非持续连接,HTTP/1.0默认采用
- Connection:keep-alive,持续连接,HTTP/1.1默认采用
