网络协议分析
网络协议分析2020-2021 冬季学期复习提纲
本来说实话没打算整理这个东西的,因为计网的东西太多太杂,图还多……本着好好复习的想法,还是重新搞一下吧(今年是历年来复习态度最不端正的了吧…
目录
- IP
- Router
- RIP
- OSPF
- BGP
- UDP
- TCP
IP
目录
- IP原理
- IP数据报
- IP编址
- IP选路
- IP整体构造
- IP输入处理
- IP输出处理
IP原理
- 无连接 (通用性)
- 不可靠(可靠性交付高层协议解决)
注意:面向连接不一定可靠,无连接不一定不可靠。面向连接容易实现可靠性机制。
IP数据报
VER: IPv4 or IPv6
HLEN: 5-15(4B为单位,即总数为20-60bytes)Header Length
TOS:服务类型,旨在要求分组期望的路由转发的服务类型(对路由算法的提示)
Total Length:首部+数据长度
存在此字段因为存在PAD(补充0),
以太网帧最少长度需要46bytes修正By黄林超
这里应该是以太网帧数据部分的长度最短为46Bytes,因为需要包含6+6+2的MAC帧头和后部分FCS的4字节,一共最短需要填满64B,所以以太网帧最短64B。
最短为64B的原因:按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器,因此规定对10Mbps以太网一帧的最小发送时间为51.2微秒。这段时间所能传输的数据为512位,因此也称该时间为512位时。这个时间定义为以太网时隙,或冲突时槽。512位=64字节
IP分组的最大长度:65536Identification:每发送一个分组标识+1,全网唯一
Flag:RDM(保留,不分片和更多分片)有对应状态就置1
offset: M字段为1时候的片偏移量
TTL: 最大值255(2^8 - 1)每转发一次就减1。减到0即可丢弃。
Protocols:指明IP数据部分的协议(指明应该交付到的高层协议)是IP对高层协议的复用和解复用。
1:ICMP
2:IGMP
4:IP
6: TCP
8: EGP
17:UDP
41:IPv653:DNS~修正By吕哲轩
应用层协议判断方式:
89:OSPFHeader checknum:
- 只检验IP头部,对数据区不检验
- 每经过一个路由器重新计算checknum
- 提供差错检测
Option: 0~40B 附加选项
注意:在IP数据部分会有MTU相关的考点
- MTU是数据所能传输的最大长度,取决于物理网络的不同
- MTU从大往小,往往需要分片(M=1)
- offset字段值为8的整数倍(Flag字段占用了3位,这样使得计算总长度时候会片偏移字段是13bit,为了计算方便,以8B为单位)
- MTU的长度实际上是Total部分的长度,所以计算总数据传输长度要减掉IP Header的长度
- 分片之后的重组:根据IP标识和ID辨别来自哪个分组,根据Offset决定顺序。
IP编址
此部分在计算机网络中有所说明,不做过多的解释。
具体会放PDF:IP编址
- 有关IP的计算在PDF已有总结,不多赘述
- 给定IP地址和掩码,求子网地址:关于PPT上的计算可以分为三种方法:
- IP与掩码与运算
- 按块与运算(较聪明的算法)
- 根据掩码求主机位数,然后根据IP地址的十进制找到对应子网:
- 例:已知IP地址:201.70.64.122 / 27,确定子网地址
- 主机数=2(32-27)=25=32
- 3 < 122/32 < 4 所在子网是3号子网,地址是201.70.64.(32×3)=201.70.64.96
- CIDR(Classless Inter-Domain Routing)无类别域间路由
用超网技术减少路由项,是一种路由技术,不是路由协议
IP选路
- Routing 路由(选路)
- Delivery 交付(实际转发)
网络层向上提供两种分类服务,分别是面向连接和无连接交付方式。
面向连接
- 通信过程:建立连接->交付分组->终止连接
- 路由选择:仅在连接时选择链路
- 传输路径相同
无连接
- 通信过程:交付分组
- 路由选择:每个分组独立选路
- 传输路径可以不同
注意交付方式和交付对象
- 同一内网下直接交付
- IP网间通过路由器间接交付(提供下一跳接口/IP地址)
- 在交付过程中,IP 分组保持不变,帧根据目标物理地址(MAC)的不同而改变
路由表:
- 方法1:Next-Hop基于主机
- 方法2:Next-Specific基于网络
- 方法3:特定主机
- 方法4:默认路由
注意,路由选路不唯一,且路由表大小和网络数有关,与网络内含有主机个数无关。仅最后一个网络知道目标主机是否存在。
路由匹配
最长前缀路由聚合
确定超网块->确定子网->分配
IP整体结构
XINU
…
Router
目录
- 几个概念
- RIP
- OSPF
- BGP
几个概念
- Metric:跳数,根据跳数表示优先级
- 所有Metric选择最少的作为最优路径
- 收敛[从不一致到一致经历的时间],能够体现路由器的效率
- AS:Autonomous system 自治系统。 出现的原因在于因特网网太大,一种路由协议不可能更新所有路由器路由表
- AS内的协议可以自由选择是RIP或者是OSPF,但是AS之间的协议必须统一。(eBGP)
- 协议:
RIP
NOTE
- RIP是应用层协议,基于UDP,端口520
- RIP原理:DV向量
- 3W:向邻居(WHERE)在 一定周期(WHEN) 发送 整个网络的路由表(WHAT)
DV向量
- DV仅会周期性从邻居获取
- DV是一个有序对(v,d)其中v代表目的站点,d表示到目的站点的Metric
- 从邻居获得的DV表示邻居可以花费d Metric 到达 v
- 对于接受到报文的本路由器可以根据邻居算出自己到v的距离
RIP报文
- 报文格式
- 对应的是RIP v1的格式,具体详见 RIP报文格式
- Command字段
- CMD = 1 Request。 出现在路由器刚接入网络或某表项超时 [广播]
- CMD = 2 Response。 出现在有请求的响应 [单播] 或者周期性的向外广播
- 周期:一般30s
更新路由表过程:
- 忽略无效表项
- 更新表项 metric = min ( metric + 1, 16 )
- 如果路由表中没有对应记录,加入相应表项
- 如果同接口更新了一个到相同IP新的记录,无条件更改为新记录表项
- 计算对应接口下一跳的Metric,如果计算之后小于已有记录,则更新为新记录。
注意,接口相同,目的地址相同的不需要判断第5条,直接更新。第五条在更新时候需要计算路由器本身到邻居的距离,所以需要第二步(所有表项的Metric + 1)
RIP内的计时器
- P计时器
更新计时器,每Rs发送更新一次 R的取值为25-30的一个随机数 - E计时器
管理路由器有效性,180s更新一次,每收到报文复位到0 - G计时器
无效路由项通告。在120s内定期通告,Metric = 16。超时删除
- P计时器
RIP Problems
- Slow convergence 缓慢收敛 原因是RIP的路由项是周期更新
- Unstability 不稳定
- 补救措施:
- 触发更新
正常更新30s为周期的广播,但是收到request请求后立即响应 - 水平分割
通过某接口出去的信息不再经过该接口返回 - 毒性逆转
路由更新仍然为整个路由表,但是如果某接口收到了来自本接口出去的信息时,要将对应表项Metric设置为16 - 抑制定时器
路由器在收到某网络不可达的消息后,忽略该网络的一切信息一段时间[设置计时器]总之,如果要RIP使某网络不可达的消息发送给所有路由器是一定要花费很长时间的,这是为了确保所有路由器都能接收到不可达信息。”好消息传得快,坏消息传的慢“
RIP2
具体在上边报文对应的链接有详细说明
验证字段时将family = 0xFFFF
OSPF
目录
- OSPF概述
- OSPF网络类型
- OSPF链路类型
- 平面路由与分层路由
- Router Type
- LSA Type
- OSPF数据报
OSPF概述
Open Shortest Path First开放最短路径优先。OSPF属于应用层协议,基于UDP,端口89。
OSPF严格意义上基于网络层,不属于应用层协议。89表示的是在IP首部的协议字段值为89。OSPF没有端口号
- OSPF基于链路状态(Link-State)
- 基于Dijkstra算法(SPF)
- 3W:向其他所有路由器(WHERE)在 有路由项改变时(WHEN) 发送 LSA(WHAT)
关于LSA的相关内容在后面会有涉及。
OSPF网络类型类型
- 点对点网络
- 广播多路访问(Ethernet,Token Ring)
- NBMA 非广播型多路访问(帧中继,X.25)
OSPF链路类型
OSPF中一条连接就是一条链路
- 点到点链路,每个路由器只有一个邻居节点。
- 转接链路,是有若干个路由器的网络,每个路由器可能有若干个邻居节点。
- 残桩链路:只连接到一个路由器的网络
- 虚链路两个路由器之间的链路断开时,人工创建一条更长路径的虚拟链路(经过多个路由器)
举例:- C 残桩链路
- ABC 转接链路
- AD与BE 点对点链路
- DE与N3、F转接链路
平面路由和分层路由
- RIP是平面路由,AS内所有路由器平等,执行功能相同
- OSPF是一种分层路由,AS划分成若干区域Area,路由器在功能上分工不同。
- 分区域目的:减轻大网络下OSPF路由器的负担
- 分区域结果:区域间交换汇总之后的路由信息,而不是详细的路由信息
- OSPF区域类型:
- 标准区域:接受路由更新和路由归纳
- 主干区域:路由更新,区间路由更新以及互联其他所有区域
- 残桩区域:不接受来自自治系统外的路由信息,对于含有到其他自治系统的网络分组,路由器使用默认路由。
Router Type
- IR 内部路由
- BR 主干路由(至少有一个接口连接Area0主干区域)
- ABR 区域边界路由(不同的接口连接不同区域)
- ASBR AS边界路由(连接不同的自治系统)
OSPF LSA
Type1 Router-LSA
一般由内部路由发送,但是取决于路由信息的不同,其他类型的路由器也可能发送Type1的信息。Type2 Network-LSA
具有DR(指定路由器)在其所属的网络发送所在网络内其他路由器的信息,一般只有DR可以发送Type2类型。Type3 Summary link to network-LSA
- 产生于ABR
- 发送给所属区域路由器到其他区域的信息
Type4 Summary link to boundary router-LSA
- 产生于ABR
- 产生的信息:到达ASBR的路径
- 发送对象:本AS的所有区域
这里需要注意,本AS内所有区域必然有ABR路由器,一般来说需要经过其他ABR路由器才能发送给所有区域。
Type5 AS-external-LSA
- 产生于ASBR
- 发送给本AS的某些区域
- 发送内容为到达其他AS的路径
残桩区域不会收关于其他AS的信息。
举例:
- 发送Router-LSA的路由器 所有
- 发送Network-LSA的路由器 所有
R1通告本身Net1,Net2可能是R1,R2,R3三者中任意一个通告,R3通告Net3
LSA发送方式
- 组播发送:224.0.0.5
- BR和BDR:224.0.0.6
转接网络中,一般路由器只与DR/BDR 存在邻居关系,所以LSA一般都会被发送到224.0.0.6
- 举例:
- 第一次变化的LSA:
- 子网1:Type1,R1,Area1 (To Net1)
- 子网2:Type3,R3,Area0 (To Net4 Unreachable)
- 子网3:Type3,R4,Area3(To Net4 Unreachable)
- 第二次变化的LSA:
- 子网1:
- Type1 R1 Area1 (Net1 Net4)
- Type4 R3 Area1 (To ASBR)
- Type5 R6 R3 Area1 (To AS20)
- 子网2:
- Type1 R6 Area0 (R6->ASBR)
- Type3 R3 Area0 (To Net4)
- Type5 R6 Area0 (To AS20)
- 子网3:
- Type3 R4 Area2 (To Net4)
OSPF数据报
UDP
User Datagram Protoco,UDP 用户数据报协议
传输层协议 IP头部协议字段为17(11(H))
目录
- UDP报文格式
- UDP特点
- UDP应用
- 常用基于UDP应用层协议以及对应端口号
UDP报文格式
- UDP checknum:减少高可靠性网络上的传输开销
- UDP 伪首部:不会发送到网络上,确保UDP报文送到正确主机的正确端口上
- 与IP校验和计算方法相同
- 封装:
直接封装在IP分组中
UDP特点
- 无连接
- 不可靠
常用基于UDP应用层协议以及对应端口号
- 0-1023 为已知服务保留
- 1024-49151 已注册端口号,普通用户进程使用
- 49152-65535 动态专用端口号
- 常用端口号 在网站RFC内
UDP应用
- 简单请求
- IP phone
- 内部具有流控和差错控制的Process(TFTP)
- 组播/广播
TCP
Transmission Control Protocol,TCP 传输控制协议
传输层协议,IP首部协议字段为6 \
目录
- TCP报文格式
- TCP特点
- TCP机制
- 流量控制
- 拥塞控制
- 差错控制
- TCP连接管理
TCP报文格式
TCP特点
TCP面向连接。
可靠
实现的技术前提:序号,确认号,超时重传机制,窗口管理- 举例:
- 确认号:
TCP中的确认号代表该确认号之前的所有信息已经接受,希望收到从该确认号之后的数据报。(累计确认)seq = x ,发送数据长度为L ,则已发送(若成功)的数据段为 x 到 x+L-1,TCP 返回确认号为 x + L
- 超时重传:计时器内没有收到报文,进行二次判断
- 确认号:
- 报文丢失
- 报文损坏
- ACK丢失
- 窗口管理
TCP允许随时改变滑动窗口的大小- 滑动
- 拓展
- 缩回
- 关闭
- rwnd = 0,发送方停止数据的发送
- 暂时
窗口的提出是为了TCP的流量控制管理,连接双方通过rwnd大小确定传输的数据流量
- 有序
- 端到端流量控制
- 面向字节流(最小1B)
- 需要Buffer
为进程构建tube(可靠传输的前提) - 公平
- 吞吐量增加:加性增长(拥塞避免)
- 吞吐量减少:乘性减少(降为原来的1/2)
- 多媒体应用不多使用TCP,因为TCP相对公平,为了独占带宽,以及不想被拥塞控制管理,选择UDP
- TCP允许多连接(WEB访问)
- 举例:
TCP机制
流量控制
- 窗口管理
差错控制
- 基于Packet发送字节流
- 失序:重组
- 重复:丢弃
- 丢失:超时重传
- 损坏:超时重传
- 确认
[分为肯定确认和累计确认],TCP中使用的是累计确认
- 确认
- ACK报文段不消耗序号
- 延迟确认
- 捎带确认
- 立即确认
- 重传
- 重传计时器超时
对应对应报文段丢失或者损坏 - 3个重复ACK
对应某个报文丢失且收到很多失序的报文- 应该快速重传
- 重传超时时间
动态变化,基于RTT,简单算法是2*RTT
拥塞控制
- 拥塞窗口cwnd
发送方会接收到来自接收方返回的rwnd值,此时发送方发送窗口大小从cwnd和rwnd值中取小值 - 拥塞策略
- 慢启动
指数增长,每经过一个RTT之后cwnd就翻倍,直到达到门限阈值ssthresh - 拥塞避免
当窗口值到达ssthresh之后立即停止指数增长,从cwnd = ssthresh之后 cwnd每RTT增1,持续这个状态直到收到3个重复ACK或者计时器超时。实质上:每收到1个ACK,cwnd=cwnd+1/ cwnd.当RTT较大时,可以认为是每隔一个RTT,拥塞窗口cwnd+1 加性增加(Addictive Increase
- 拥塞检测
- 超时:ssthresh降为原来的一半,窗口 cwnd = 1,执行慢启动过程
- 3个重复ACK
- 快速重传与快速恢复:慢启动阈值ssthresh降低为当前窗口一半,窗口值为当前一半(即等于当前的ssthresh阈值),直接开启拥塞避免阶段
TCP Reno为窗口值一半 + 3,就本节课来说不需要 + 3.
直接拥塞避免的原因:3个重复ACK意味着可能某一个报文段丢失,后面的安全到达。所以不需要调整拥塞窗口从慢启动开始。
- 快速重传与快速恢复:慢启动阈值ssthresh降低为当前窗口一半,窗口值为当前一半(即等于当前的ssthresh阈值),直接开启拥塞避免阶段
- 举例:
- 慢启动
- 拥塞窗口cwnd
TCP连接管理
- 三次握手
这个不用多说了,已经说了三千遍了。 - 四次挥手
也说了好几百遍了. - 连接复位
由于异常情况导致的断开连接,报文在TCP控制字段置为 RST = 1。发出该报文和收到该报文的双方立即终止连接,无确认。 - 状态机
- 左侧客户端,右侧服务器
- 在客户端发送回复服务器FIN的ACK时会开启Time-waited计时器,等待两个MSL时间后关闭。
为什么是2个MSL:出于工程考虑,2个MSL正好包含了去向的ACK (MSL)和 最坏情况重传的FIN(MSL)两个MSL时间。
- 3个计时器:
- Persistence Timer(坚持定时器)发送方的窗口关闭要收到一个非零的窗口值,表示还想继续传数据,如果收到了零窗口值或者坚持计时器超时可以关闭。
- Keepalive Timer 一般为2个小时,如果两个小时没有收到来自对方的消息就直接关闭连接。
- Time-waited Timer 上文已有叙述