# UDP 协议
# 主要特点
- 协议开销小、效率高。
- UDP 是无连接的,即发送数据之前不需要建立连接。
- UDP 使用尽最大努力交付,即不保证可靠交付。
- UDP 没有拥塞控制。
- UDP 支持一对一、一对多、多对一和多对多交互通信。
- UDP 的首部开销小,只有 8 个字节。
# TCP 协议
# 简介
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 RFC 793 定义。
# 三次握手
三次握手(Three-Way Handshake)是指建立一个 TCP 连接时,需要客户端和服务端总共发送 3 个包以确认连接的建立。
第一次握手客户端将标志位 SYN 置为 1,随机产生一个值 seq=s ,并将该数据包发送给服务端,客户端进入 SYN_SENT 状态,等待服务端确认。
第二次握手服务端收到数据包后由标志位 SYN=1 知道客户端请求建立连接,服务端将标志位 SYN 和 ACK 都置为 1,ack=s+1,随机产生一个值 seq=k ,并将该数据包发送给客户端以确认连接请求,服务端进入 SYN_RCVD 状态。
第三次握手客户端收到确认后,检查 ack 值是否为 s+1,ACK 标志位是否为 1,如果正确则将标志位 ACK 置为 1,ack=k+1,并将该数据包发送给服务端,服务端检查 ack 值是否为 k+1,ACK 标志位是否为 1,如果正确则连接建立成功,客户端和服务端进入 ESTABLISHED 状态,完成三次握手。
# 四次挥手
四次挥手(Four-Way Wavehand)指断开一个 TCP 连接时,需要客户端和服务端总共发送 4 个包以确认连接的断开。
第一次挥手客户端发送一个 FIN ,用来关闭客户端到服务端的数据传送,客户端进入 FIN_WAIT_1 状态。
第二次挥手服务端收到 FIN 后,发送一个 ACK 给客户端,确认序号为收到序号 + 1,服务端进入 CLOSE_WAIT 状态。
第三次挥手服务端发送一个 FIN ,用来关闭服务端到客户端的数据传送,服务端进入 LAST_ACK 状态。
第四次挥手客户端收到 FIN 后,客户端进入 TIME_WAIT 状态,接着发送一个 ACK 给服务端,确认序号为收到序号 + 1,服务端进入 CLOSED 状态,完成四次挥手。
# 拥塞控制
拥塞是指网络中报文数量过多,使得服务端来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿即出现死锁现象。
TCP 采用拥塞控制算法来减少或者避免拥塞现象的发生,TCP 的拥塞算法有过多种实现,包括 Tahoe、Reno、NewReno、Vegas、Hybla、BIC 、CUBIC、SACK、Westwood、PRR、BBR 等。
# DHCP 协议
# 简介
动态主机配置协议 (Dynamic Host Configuration Protocol,DHCP) 是一个用于局域网的网络协议,位于 OSI 模型的应用层,使用 UDP 协议工作,主要用于自动分配 IP 地址给用户,方便管理员进行统一管理。
DHCP 服务器端使用 67/udp,客户端使用 68/udp。DHCP 运行分为四个基本过程,分别为请求 IP 租约、提供 IP 租约、选择 IP 租约和确认 IP 租约。客户端在获得了一个 IP 地址以后,就可以发送一个 ARP 请求来避免由于 DHCP 服务器地址池重叠而引发的 IP 冲突。
# DHCP 报文格式
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op (1) | htype (1) | hlen (1) | hops (1) |
+---------------+---------------+---------------+---------------+
| xid (4) |
+-------------------------------+-------------------------------+
| secs (2) | flags (2) |
+-------------------------------+-------------------------------+
| ciaddr (4) |
+---------------------------------------------------------------+
| yiaddr (4) |
+---------------------------------------------------------------+
| siaddr (4) |
+---------------------------------------------------------------+
| giaddr (4) |
+---------------------------------------------------------------+
| chaddr (16) |
+---------------------------------------------------------------+
| sname (64) |
+---------------------------------------------------------------+
| file (128) |
+---------------------------------------------------------------+
| options (variable) |
+---------------------------------------------------------------+
# 路由算法
# 简介
路由算法是用于找到一条从源路由器到目的路由器的最佳路径的算法。存在着多种路由算法,每种算法对网络和路由器资源的影响都不同;由于路由算法使用多种度量标准 (metric),所以不同路由算法的最佳路径选择也有所不同。
# 路由选择算法的功能
源 / 宿对之间的路径选择,以及选定路由之后将报文传送到它们的目的地。
路由选择算法的要求:
- 正确性:确保分组从源节点传送到目的节点
- 简单性:实现方便,软硬件开销小
- 自适应性:也称健壮性,算法能够适应业务量和网络拓扑的变化
- 稳定性:能长时间无故障运行
- 公平性:每个节点都有机会传送信息
- 最优性:尽量选取好的路由
# 自治系统(Autonomous System)
经典定义:
- 由一个组织管理的一整套路由器和网络。
- 使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由。
- 使用一种 AS 之间的路由选择协议用以确定分组在 AS 之间的路由。
尽管一个 AS 使用了多种内部路由选择协议和度量,但对其他 AS 表现出的是一个单一的和一致的路由选择策略。
# RIP
路由信息协议 (Routing Information Protocol, RIP) 是一种基于距离 向量的路由选择协议。RIP 协议要求网络中的每一个路由器都要维护从它自己到自治系统内其他每一个目的网络的距离和下一跳路由器地址。
# OSPF
开放最短路径优先 (Open Shortest Path First,OSPF),这个算法名为 “最短路径优先” 是因为使用了 Dijkstra 提出的最短路径算法 SPF,只是一个协议的名字,它并不表示其他的路由选择协议不是 “最短路径优先”。