网工 传输层其它的协议

以下是一些除了TCP和UDP之外相对常见的传输层协议:

SPX(Sequenced Packet Exchange,顺序包交换协议)

  • 由Novell公司开发,主要用在Novell NetWare网络操作系统中,它与TCP类似,是面向连接的可靠协议,确保数据按顺序传递,它和IPX协议(网络层协议)组合构成NetWare的核心通信机制,但随着NetWare操作系统使用的减少,SPX的使用场景也变得非常有限。

DCCP(Datagram Congestion Control Protocol,数据报拥塞控制协议) :

  • 提供了一种介于TCP的可靠性和UDP的低开销与低延迟之间的通信服务。它支持拥塞控制机制,但又是面向数据报的(类似UDP不是面向流的),适用于一些对拥塞控制有要求但又不想用TCP的场景如流媒体等。

SCTP(Stream Control Transmission Protocol,流控制传输协议) :

  • 结合了TCP和UDP的一些优点。
  • 它支持多流(在一个连接中可以有多个独立的逻辑流)和多宿(一个端点可以有多个IP地址用于通信)特性等。常用于电信领域等需要可靠且复杂数据传输场景。

RTP(Real – time Transport Protocol,实时传输协议)和RTCP(Real – time Transport Control Protocol ,实时传输控制协议) :

  • RTP 用于承载实时数据比如音频和视频等媒体流数据;
  • RTCP 用于监控服务质量和传递与正在进行的会话相关的信息(如统计数据、反馈等),通常它们配合使用,广泛应用于网络多媒体通信如视频会议、IP电话等。

网工 tcp 与udp 的伪首部

一、TCP伪首部

  1. 组成:
    • 源IP地址:发送方的IP地址,占4字节。
    • 目的IP地址:接收方的IP地址,占4字节。
    • 保留:置为0,占1字节。
    • 协议:标识上层协议是TCP,值为6,占1字节。
    • TCP报文长度:TCP报文段的长度(包括TCP首部和数据),占2字节。
  2. 作用:
    • 在计算TCP校验和时使用。通过把伪首部与TCP报文(包括TCP首部和数据)一起进行校验和计算,可以增强校验的准确性,确保TCP报文在传输过程中没有被篡改,并且能够正确地到达目标地址和上层协议。

二、UDP伪首部

  1. 组成:
    • 源IP地址:同样是发送方的IP地址,4字节。
    • 目的IP地址:接收方的IP地址,4字节。
    • 保留:也是置为0,1字节。
    • 协议:标识上层协议是UDP,值为17,1字节。
    • UDP报文长度:UDP数据报的长度(包括UDP首部和数据),2字节。
  2. 作用:
    • 与TCP伪首部类似,主要用于计算UDP校验和。确保UDP数据报在网络中传输的完整性和正确性,防止在传输过程中因各种原因导致的数据错误或被篡改。

三、两者的共同点和意义

  • 共同点:
    • 都包含源IP地址、目的IP地址、协议类型和报文长度等关键信息。
    • 都不实际在网络中传输,只是在计算校验和时临时参与运算。
  • 意义:
    • 增强了校验的可靠性:通过引入这些网络层的关键信息(IP地址等)到传输层校验和的计算中,可以更全面地验证数据在网络中传输的正确性,因为IP地址的参与可以确保数据到达了正确的目的地,协议类型的确认可以保证上层协议的匹配性。
    • 提高数据传输的准确性:有助于检测和防范在传输过程中可能出现的各种错误,如数据位的篡改、传输路径错误等,从而提升了整个网络通信的质量和可靠性。

示例

某UDP报文的2个16bit 为 1110011001100110 1101010101010101 得到的校验和是

  1. 首先将两个 16 位的数据相加: 1110011001100110 +1101010101010101 = 1 1011101110111011
  2. 然后对结果进行回卷进位:
    • 如果相加结果超过 16 位,将进位值与低 16 位的值再次相加。这里超过了 16 位,只取低 16 位,进位是1。
    • 把进位与低 16 位相加:1011101110111011+1 = 1011101110111100
  3. 最后对结果取反:
    • 对1011101110111100取反,得到0100010001000011
    所以校验和是 0100010001000011

网工 TCP 计时器

在 TCP 中有多种计时器用于不同的目的,以下是几种主要的 TCP 计时器:

一、重传计时器(Retransmission Timer)

  1. 作用:
    • 主要用于处理报文段丢失和确认超时的情况。当发送方发送一个数据报文段后,就会启动重传计时器。
    • 如果在计时器超时之前没有收到接收方对该报文段的确认,发送方就认为该报文段丢失或损坏,然后触发重传操作。
  2. 工作原理:
    • 发送方在发送数据时启动该计时器,并根据估算的往返时间(RTT)和一些动态调整的因子来设置计时器的时长。
    • 随着网络状况的变化,RTT 会发生波动,发送方会通过一些算法(如指数加权移动平均法)来不断更新和调整 RTT 的估算值,进而调整重传计时器的时长,以适应网络的变化。

二、坚持计时器(Persistent Timer)

  1. 作用:
    • 用于解决零窗口死锁问题。当接收方的接收缓冲区已满,它会向发送方通告一个零窗口大小,此时发送方会停止发送数据
    • 然而,接收方的缓冲区可能会在稍后有空间接收新的数据,为了让发送方能够探测到接收方窗口的变化,坚持计时器就发挥作用。
  2. 工作原理:
    • 当发送方收到零窗口通知时,启动坚持计时器。
    • 计时器周期性地触发发送方发送一个探测报文段,询问接收方的窗口大小是否已经改变。
    • 这个探测报文段只有 1 字节的数据,它可以触发接收方重新通告窗口大小。如果接收方的窗口仍然为零,发送方会继续等待并重新启动坚持计时器;如果接收方有了可用的缓冲区空间,它会返回一个非零的窗口通告,发送方就可以恢复正常的数据发送。

三、保活计时器(Keepalive Timer)

  1. 作用:
    • 用于检测一个空闲连接是否仍然有效。在一些长时间没有数据传输的连接中,可能会由于网络故障或其他原因导致某一方出现异常,而另一方无法察觉。保活计时器可以帮助检测这种情况。
  2. 工作原理:
    • 当连接双方长时间没有数据交互时,服务器端(通常是服务器)会启动保活计时器。
    • 如果在计时器超时之前仍然没有数据传输,服务器会向客户端发送一个探测报文段,查看客户端是否还存在。
    • 如果客户端正常响应,连接继续保持;如果客户端没有响应,服务器会在经过一定次数的重试后,认为客户端已经出现故障或异常,然后关闭连接。

四、时间等待计时器(Time_Wait Timer)

  1. 作用:
    • 在 TCP 连接关闭时,确保旧的报文段在网络中完全消失,防止已关闭连接的报文段对新连接造成干扰。
  2. 工作原理:
    • 当主动关闭连接的一方(通常是客户端)发送了最后一个 ACK 确认报文后,会进入 TIME_WAIT 状态并启动时间等待计时器。
    • 计时器设置一个固定的时长(通常是 2 倍的最大报文段生存时间,即 2MSL)。在这段时间内,该连接所使用的端口号不能被重新使用。
    • 这样可以保证在这个时间段内,如果有延迟到达的旧报文段,它们会在计时器超时之前被丢弃,从而不会干扰新建立的连接。

重传计时器的时长是根据往返时间(RTT)来计算的,并且会随着网络状况的变化动态调整。其计算过程大致如下:

一、初始 RTT 测量与估算

  1. 在 TCP 连接建立初期,会通过发送一个测试报文段来测量初始的 RTT。
    • 发送方记录下发送报文段的时间点 。
    • 当接收到对应的确认报文时,记录下时间点 。
    • 初始 RTT 就计算为 。

二、后续 RTT 的平滑处理与更新

  1. 指数加权移动平均(Exponential Weighted Moving Average,EWMA)算法:
    • 后续的 RTT 估算不会只依赖于某一次的测量值,而是采用指数加权移动平均的方法。
    • 新的 RTT 估算值  计算公式为:。
      • 其中, 是上一次的 RTT 估算值, 是本次测量得到的实际 RTT 值, 是一个加权因子(通常取值在 0.1 到 0.2 之间),它决定了新测量值在估算中所占的权重。较小的  意味着更平滑的变化,对突发的网络变化不太敏感;较大的  则使估算值更快地适应网络的变化。
  2. 重传超时时间(RTO,Retransmission Timeout)计算:
    • RTO 通常基于当前的 RTT 估算值来计算。
    • 一种常见的计算方法是 。
      •  是经过平滑处理后的 RTT 估算值。
      •  是 RTT 的偏差估计值,初始时也可以通过测量得到,后续同样可以通过类似 EWMA 的方法进行更新,例如 ,其中  是另一个加权因子(通常也在 0.1 到 0.2 之间)。

三、根据网络状况动态调整

  1. 当网络状况变化时(如出现拥塞、链路质量变化等),测量得到的实际 RTT 会发生波动。
  2. 如果连续几次测量的 RTT 增大,说明网络可能出现拥塞或延迟增加,此时 RTO 会相应地增加,以避免过于频繁的重传。
  3. 如果 RTT 减小,表明网络状况改善,RTO 可以适当减小,以提高数据传输的效率,但调整幅度会受到算法的限制,以避免过于频繁的大幅调整。

例如,开始时测量得到的初始 RTT 为 100ms,假设 ,。第一次测量得到新的 RTT 为 120ms,那么:

  • 新的 RTT 估算值为:。
  • 假设初始偏差估计值为 10ms,新的偏差估计值为:。
  • 则 RTO 可以计算为:。

随着更多的 RTT 测量值不断到来,会继续按照上述算法不断更新 RTT 估算值、偏差估计值和 RTO,以适应网络的动态变化。

网工 应用层协议

DNS 协议

DNS(Domain Name System,域名系统)协议是互联网的一项核心服务,主要用于将人类可读的域名转换为机器可识别的 IP 地址,它具有以下特点和作用:

一、基本概念和作用

  1. 域名与 IP 地址的转换:
    • 互联网上的设备通过 IP 地址进行相互通信,但 IP 地址(如 192.168.1.1)难以记忆,而域名(如 www.example.com)更符合人类的记忆习惯。DNS 协议就负责在两者之间进行转换。
    • 例如,当用户在浏览器中输入“www.example.com”时,浏览器会向 DNS 服务器发送请求,询问该域名对应的 IP 地址,然后使用获取到的 IP 地址与对应的服务器建立连接。

二、DNS 系统的组成结构

  1. 域名空间:
    • 它是一个层次化的命名系统,类似于一棵树的结构。
    • 顶级域(如.com、.org、.net 等)位于树的顶部,其下是二级域(如 example.com),再往下可以有三级域、子域等。每个域名都是从根节点开始,通过一系列标签(如“www”“example”“com”等)组成的路径来标识。
  2. 域名服务器:
    • 根域名服务器:是 DNS 系统的最高层次,全球共有 13 组根域名服务器(实际上是数百台服务器组成的集群),它们存储着顶级域名服务器的地址信息。
    • 顶级域名服务器:负责管理顶级域名(如.com、.net 等),知道相应顶级域下的二级域名服务器的地址。
    • 权威域名服务器:由域名的所有者或管理者负责维护,存储特定域名(如 example.com)的详细 IP 地址和其他相关信息。
    • 本地域名服务器:通常由互联网服务提供商(ISP)设置,在用户的本地网络中。它可以缓存域名解析结果,提高查询效率,并且当它无法解析域名时,会向其他层次的域名服务器发起查询请求。

三、DNS 查询过程

  1. 递归查询:
    • 客户端向本地域名服务器发起查询请求,如果本地域名服务器不知道答案,它会代替客户端向其他域名服务器继续发起查询请求,直到获取到结果并返回给客户端。
    • 例如,用户的电脑向本地 DNS 服务器查询一个域名,本地服务器不知道答案,就会依次向根域名服务器、顶级域名服务器、权威域名服务器查询,最后将结果返回给用户的电脑。
  2. 迭代查询:
    • 当本地域名服务器向其他域名服务器发起查询时,接收查询的服务器如果不知道答案,它会返回下一个可能知道答案的服务器地址,让本地服务器继续向该地址发起查询,而不是代替它进行查询。
    • 例如,本地服务器向根域名服务器查询,根服务器不知道具体答案,但会返回顶级域名服务器的地址,本地服务器再向顶级域名服务器查询,依此类推,直到获取到最终答案。

四、DNS 记录类型

  1. A 记录:
    • 用于将域名映射到 IPv4 地址。例如,域名“www.example.com”的 A 记录可能指向 IP 地址“192.168.1.1”。
  2. AAAA 记录:
    • 用于将域名映射到 IPv6 地址。随着 IPv6 的普及,AAAA 记录变得越来越重要。
  3. CNAME 记录:
  4. MX 记录:
    • 邮件交换记录,用于指定负责接收该域名电子邮件的邮件服务器。例如,“example.com”的 MX 记录可能指向“mail.example.com”,表示邮件应该发送到“mail.example.com”服务器进行处理。
  5. NS 记录:
    • 域名服务器记录,用于指定该域名由哪些域名服务器进行解析。例如,“example.com”的 NS 记录可能指向特定的权威域名服务器。

五、DNS 缓存

  1. 作用:
    • 为了提高域名解析的效率,减少网络延迟和 DNS 服务器的负载,DNS 系统中存在各级缓存。
    • 本地域名服务器会缓存查询结果,下次相同的查询可以直接从缓存中获取答案,而不必再次向其他服务器发起查询。
    • 操作系统和浏览器也可能会缓存 DNS 解析结果。
  2. 缓存时间(TTL,Time To Live):
    • DNS 记录在缓存中都有一个生存时间(TTL),当 TTL 过期后,缓存中的记录会被清除,下次查询时需要重新获取最新的解析结果。
    • 域名所有者可以在权威域名服务器上设置 TTL 值,根据实际需求来平衡域名解析的准确性和缓存的效率。

六、DNS 安全

  1. DNS 劫持:
    • 攻击者通过篡改 DNS 解析结果,将用户的请求导向恶意网站或服务器。
    • 例如,用户本来要访问银行网站,但 DNS 被劫持后,可能会被引导到一个假冒的钓鱼网站,导致用户信息泄露。
  2. DNSSEC(DNS Security Extensions,DNS 安全扩展):
    • 它是一种通过数字签名来保证 DNS 数据完整性和真实性的技术。
    • 权威域名服务器对 DNS 记录进行数字签名,客户端和递归服务器可以验证签名的有效性,防止 DNS 劫持和数据篡改。
  3. DNS over HTTPS(DoH)和 DNS over TLS(DoT):
    • 传统的 DNS 查询使用 UDP 或 TCP 协议,数据以明文传输,容易被窃听和篡改。
    • DoH 通过 HTTPS 协议来加密和传输 DNS 查询,DoT 则使用 TLS 协议,增强了 DNS 查询的安全性和隐私性。

如何优化 DNS 解析速度?

递归查询和迭代查询的区别是什么?

递归服务器和迭代服务器的工作原理分别是怎样的?

网工 路由协议

浮动静态路由

优先级值高的优先级低,不解决负载均衡,解决了线路冗余。

静态黑洞路由

在RTE 上配置路由聚合:ip route-statci 10.0.0.0 255.255.0.0 RTD

在RTC连接RTD线路故障的情况下,如果RTA发往RTC的数据包会在RTD和TRE之间形成环路。加上黑洞路由数据包丢弃。

RIP(Routing Information Protocol,路由信息协议)是一种广泛使用的内部网关协议(IGP),主要用于小型到中型网络中的路由选择。RIP有两种版本:RIPv1 和 RIPv2。RIPv1 是最初的版本,而 RIPv2 支持无类别域间路由(CIDR)和认证功能,是目前更常用的一个版本。

RIP的工作原理概述:

  1. 度量标准:
    • RIP 使用跳数作为度量标准来计算到达目的网络的最佳路径。每个路由器到直接相连的网络的距离定义为1跳。最大跳数为15,超过15跳(即16跳及以上)的目标网络被视为不可达。
  2. 路由更新:
    • RIP 路由器每隔30秒向相邻路由器广播路由更新消息。这些更新包含路由器所知的所有可达网络的列表,以及到达每个网络所需的跳数。
    • 路由器接收到更新后,会与自己的路由表进行比较,更新或添加新路由条目。
  3. 路由选择:
    • 路由器选择具有最少跳数的路径作为最佳路径。如果有两条或多条相同跳数的路径,路由器会选择其中一条,通常随机选择或基于其他策略选择。
  4. 计时器:
    • 更新计时器 (Update Timer): 每隔30秒发送一次路由更新。
    • 无效计时器 (Invalid Timer): 如果在180秒内没有收到邻居的更新,则认为该邻居不可达,路由变为“无效”状态。
    • 清除计时器 (Flush Timer): 在邻居变为“无效”状态后等待240秒,如果在此期间仍未收到更新,则从路由表中删除该路由条目。
    • 抑制计时器 (Hold Down Timer): 当一个路由条目的跳数增加时,启动抑制计时器,防止在计时期间内对该路由进行更新,以避免路由抖动。在抑制状态中的路由时收到其它路由器发送的抑制路由时等待的时间
  5. 水平分割 (Split Horizon):
    • 为了避免路由环路,RIP 实施了一种称为水平分割的技术。路由器不会将自己学到的路由信息广播回通告该信息的邻居路由器。
  6. 毒性反转 (Poison Reverse):
    • 为了进一步防止路由环路,当路由器发现一个路由不再有效时,它会在路由更新中将该路由的跳数设置为16(即不可达),并向所有邻居广播这一信息,包括通告该路由的邻居。
    • 触发更新 :当路由发现有路由不可达是,立即通报给其它的路由器
  7. 认证 (Authentication):
    • RIPv2 支持明文或MD5密钥认证,以确保路由更新的安全性。
  8. CIDR 支持:
    • RIPv2 支持无类别域间路由(CIDR),允许路由器通告子网掩码和前缀长度,从而支持可变长度子网掩码(VLSM)。

路由协议使用的广播或者组播更新

RIP、OSPF 和 BGP 这三种路由协议在发送路由更新时采用不同的目的 IP 地址和传输机制。下面是每种协议如何发送路由更新的简要说明:

RIP (Routing Information Protocol)

  • 目的 IP 地址:
    • RIP 使用广播或组播地址来发送更新。
    • 对于 RIPv1,默认情况下使用广播地址 255.255.255.255
    • 对于 RIPv2,默认情况下使用组播地址 224.0.0.9
  • 传输层协议:
    • RIP 使用 UDP 协议。
    • UDP 端口号为 520

OSPF (Open Shortest Path First)

  • 目的 IP 地址:
    • OSPF 使用组播地址来发送更新。
    • 所有 OSPF 路由器都监听组播地址 224.0.0.5 (所有 DR 路由器)和 224.0.0.6 (所有 SPF 路由器)。
  • 传输层协议:
    • OSPF 使用 IP 协议直接发送数据包,不使用 UDP 或 TCP。

BGP (Border Gateway Protocol)

  • 目的 IP 地址:
    • BGP 使用 TCP 连接来发送更新。
    • 目的 IP 地址是 BGP 对等体的 IP 地址。
  • 传输层协议:
    • BGP 使用 TCP 协议。
    • TCP 端口号为 179

总结如下:

协议目的 IP 地址传输层协议TCP/UDP 端口
RIP255.255.255.255 (RIPv1) 或 224.0.0.9 (RIPv2)UDP520
OSPF224.0.0.5 或 224.0.0.6IPN/A
BGPBGP 对等体的 IP 地址TCP179

请注意,RIPv1 使用广播地址,这可能导致广播风暴问题,因此建议使用 RIPv2 的组播地址。另外,OSPF 使用 IP 直接发送数据包,这意味着它不需要使用 UDP 或 TCP 来封装数据包。

负载均衡

多出口负载分担方案是指在网络中通过多个互联网出口来分散流量,以提高网络的可用性、性能和可靠性。这种策略对于大型企业、数据中心以及需要高带宽和高可靠性的机构尤为重要。以下是几种常见的多出口负载分担策略:

  1. 基于源IP或目的IP的负载均衡
    • 根据数据包的源IP地址或目的IP地址来决定使用哪个出口。这种方法简单直接,但可能导致某些出口过载而其他出口利用率不足。
  2. 基于会话的负载均衡
    • 对于每个新建的TCP/UDP会话,路由器可以选择一个当前负载较低的出口来转发数据包。这种方式可以较好地平衡各出口之间的流量。
  3. 基于应用类型的负载均衡
    • 不同类型的应用(如Web浏览、视频流媒体等)对带宽的需求不同,可以根据应用类型选择最合适的出口。例如,将高优先级的应用分配给质量更好的线路。
  4. 基于带宽利用率的动态负载均衡
    • 监控各个出口的实际带宽使用情况,并根据实时负载动态调整流量分布。当某个出口接近饱和时,新的流量会被导向其他较为空闲的出口。
  5. 基于地理位置的负载均衡
    • 如果用户群体分布在不同的地理区域,可以根据用户的地理位置选择最近或者最佳路径的出口,减少延迟并优化用户体验。
  6. 基于链路健康状况的负载均衡
    • 通过持续监测每个出口链路的状态(包括丢包率、延迟等),自动避开故障或性能不佳的链路,确保只有健康的链路参与负载分担。
  7. 基于权重的负载均衡
    • 给每个出口分配一个权重值,权重值高的出口会被分配更多的流量。这样可以根据链路的质量和服务水平协议(SLA)要求来分配流量。
  8. 基于策略的负载均衡
    • 结合多种因素制定综合策略,比如结合时间、成本、服务等级等因素来决定如何分配流量。
  9. ECMP (Equal-Cost Multi-Path) Routing
    • 在路由层面上实现的一种技术,允许路由器在到达同一目的地的多条等价路径上均匀分配流量。这通常用于BGP或多路径OSPF环境中。

实施这些策略通常需要支持高级功能的网络设备,如支持策略路由、负载均衡算法和动态路由协议的路由器或防火墙。同时,也需要考虑网络架构设计、安全性以及与现有网络管理系统的集成。