网络协议分析

网络协议分析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分组的最大长度:65536

  • Identification:每发送一个分组标识+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:IPv6
    53:DNS ~修正By吕哲轩
    应用层协议判断方式:

    89:OSPF

  • Header 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
  • 更新路由表过程:

    1. 忽略无效表项
    2. 更新表项 metric = min ( metric + 1, 16 )
    3. 如果路由表中没有对应记录,加入相应表项
    4. 如果同接口更新了一个到相同IP新的记录,无条件更改为新记录表项
    5. 计算对应接口下一跳的Metric,如果计算之后小于已有记录,则更新为新记录。

      注意,接口相同,目的地址相同的不需要判断第5条,直接更新。第五条在更新时候需要计算路由器本身到邻居的距离,所以需要第二步(所有表项的Metric + 1)

  • RIP内的计时器

    • P计时器
      更新计时器,每Rs发送更新一次 R的取值为25-30的一个随机数
    • E计时器
      管理路由器有效性,180s更新一次,每收到报文复位到0
    • G计时器
      无效路由项通告。在120s内定期通告,Metric = 16。超时删除
  • 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网络类型类型

  1. 点对点网络
  2. 广播多路访问(Ethernet,Token Ring)
  3. 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数据报

    • 组播地址:224.0.0.5/224.0.0.6

    • 端口号:89

    • 数据包类型

      • Hello Packet:64B,周期性发送,保持链路存活状态
      • DBD:链路状态数据库,发送给新邻居
      • LSR,链路状态请求
      • LSU,链路状态更新
      • LSAck:OSPF基于连接进行路由更新,Ack是确认

      BGP-4

      BGP协议是应用层协议,基于TCP,端口号179

      • 基于PV
      • BGP路由表:Dest. Path,其中Path值通往目的主机的AS的路径
      • PV packets
        • ASBR收到PV packet后,判断是否更新路由表或者向邻居通告
        • 判断的标准在于AS是否符合路由策略
        • 路由选择不一定基于最小跳数

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允许随时改变滑动窗口的大小
      1. 滑动
      2. 拓展
      3. 缩回
      4. 关闭
        • 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意味着可能某一个报文段丢失,后面的安全到达。所以不需要调整拥塞窗口从慢启动开始。

        • 举例:

TCP连接管理

  • 三次握手

    这个不用多说了,已经说了三千遍了。
  • 四次挥手

    也说了好几百遍了.
  • 连接复位
    由于异常情况导致的断开连接,报文在TCP控制字段置为 RST = 1。发出该报文和收到该报文的双方立即终止连接,无确认。
  • 状态机
    • 左侧客户端,右侧服务器
    • 在客户端发送回复服务器FIN的ACK时会开启Time-waited计时器,等待两个MSL时间后关闭。

      为什么是2个MSL:出于工程考虑,2个MSL正好包含了去向的ACK (MSL)和 最坏情况重传的FIN(MSL)两个MSL时间。

  • 3个计时器:
    1. Persistence Timer(坚持定时器)发送方的窗口关闭要收到一个非零的窗口值,表示还想继续传数据,如果收到了零窗口值或者坚持计时器超时可以关闭。
    2. Keepalive Timer 一般为2个小时,如果两个小时没有收到来自对方的消息就直接关闭连接。
    3. Time-waited Timer 上文已有叙述