八股文0902-2

知识列表

  1. TCP和UDP的区别
  2. IP地址分类及其作用
  3. 子网掩码
  4. MAC地址和IP地址的区别
  5. 网络带宽
  6. 丢包和延迟
  7. 端口的有效范围
  8. TCP三次握手
  9. TCP四次挥手
  10. 三次握手中如果数据发送失败,让你设计,你会怎么处理?
  11. TCP 和 UDP 的头部结构
  12. TCP 流量控制
  13. TCP拥塞控制
  14. KCP

1.TCP和UDP的区别

TCP是面向连接的(需要建立连接),TCP传输可靠,提供确认,重传和流量控制,保证数据按序到达,速度较慢,适用于文件传输,HTTP,邮件

UDP是无连接的(无需建立连接),传输不可靠,不保证数据到达,数据可能乱序到达,速度较快,适用于视频流,VoIP,DNS

2.IP地址分类及其作用

A类:1.0.0.0 – 126.0.0.0 网络数量:128,每个网络的主机数:256*256*256=16777214 ,适用于大型网络

B类:128.0.0.1-191.255.0.0 网络数量:16384,每个网络的主机数:65534,适用于中型网络

C类:192.0.0.0-223.255.255.0 网络数量:2097152,每个网络的主机数:254,适用于小型网络

D类:224.0.0.0-239.255.255.255 适用于多播

E类:240.0.0.0-255.255.255.255 实验用途

3.子网掩码

子网掩码是形如:255.0.0.0 / 255.255.0.0 /255.255.255.0 的计算机网络中用于划分子网的工具

子网掩码的表示法

  • 点分十进制: 例如,255.255.255.0。
  • CIDR表示法: 例如,/24表示前24位是网络部分。

主要作用是分析一个32位IP地址中的网络部分和主机部分

通过子网掩码,设备可以辨别一个IP地址是否在同一个网络中,进而决定数据包的转发

子网掩码中的1表示网络部分,0表示主机部分

使用子网掩码与IP地址进行按位与运算,可以得到网络地址

可用主机数可以通过公式计算:2^n - 2,其中n是子网掩码中“0”的数量(主机部分)(减去网络地址和广播地址)

子网掩码可以用于将一个大的网络划分为多个小的子网,以提高网络的管理效率和安全性。例如,一个Class C网络(如192.168.1.0/24)可以通过改变子网掩码(如255.255.255.192)划分为多个子网。

  • 使用子网掩码255.255.255.192(/26),可以将192.168.1.0网络划分为4个子网,每个子网有62个可用主机:
    • 子网1: 192.168.1.0/26(可用主机:192.168.1.1 – 192.168.1.62)
    • 子网2: 192.168.1.64/26(可用主机:192.168.1.65 – 192.168.1.126)
    • 子网3: 192.168.1.128/26(可用主机:192.168.1.129 – 192.168.1.190)
    • 子网4: 192.168.1.192/26(可用主机:192.168.1.193 – 192.168.1.254)

4.MAC地址和IP地址的区别

MAX地址是使用于数据链路层的,长度为48位,每个MAC地址都是全球唯一的

IP地址是使用于网络层的,长度为32位/128位,网络内唯一,可配置和更改

5.网络带宽

网络带宽是指网络能够传输数据的最大速率,通常以比特每秒(bps)为单位表示。

带宽越大,网络传输能力越强。

网络带宽的优化方法
  1. 增加带宽
  2. 数据压缩,使用数据压缩减少传输的数据量
  3. 负载均衡,使用负载均衡技术将流量分配到多个服务器上,避免单点过载
  4. 网络缓存,使用缓存技术减少重复的传输内容
  5. 流量控制,实施流量控制策略,防止网络拥塞,确保重要的数据优先传输

6.丢包和延迟

丢包是指数据包在传输过程中丢失,导致接收方未能接收到数据

延迟是指数据从发送方到接收方的时间延迟

(1)丢包处理:

1)增加带宽:通过升级网络设备和服务增加带宽,减少丢包率。

2)优化网络设备:使用高性能路由器、交换机等设备,确保数据包顺利传输。

3)使用可靠传输协议:如 TCP 协议,通过确认和重传机制保证数据传输的可靠性。

4)重传机制:在检测到丢包时,重新发送数据包。

(2)延迟处理:

1)优化路由和网络路径:选择最优路径传输数据,减少中间节点和跳数。

2)使用内容分发网络(CDN):在接近用户的位置缓存内容,减少传输距离和时间。

3)减少中间节点:通过直连方式减少数据传输中的中间节点,降低延迟。

7.端口的有效范围

0-1023:系统保留端口(知名服务),Http:80,Https:443,FTP:21,SSH:22

1024-49151:用户端口(用于用户注册服务和应用)

49152-65535:动态端口(用于临时连接,也称为私有端口或临时端口,由操作系统动态分配,用于客户端连接)

8.TCP三次握手

  1. 第一次握手(SYN):客户端发送SYN:客户端选择一个初始化序列号 seq = x,发送SYN包给服务器,这个包仅包含SYN标志位,表示客户端请求建立连接客户端的状态:客户端进入SYN-SENT状态,等待服务器的响应
  2. 第二次握手(SYN-ACK)服务器收到并响应SYN:服务器收到客户端的SYN包后,选择一个初始化序列号seq = y,并发送一个SYN-ACK包给客户端,SYN-ACK包中包含服务器的序列号seq = y以及对客户端SYN的确认ack = x + 1服务器状态:服务器进入SYN-RECEIVED状态,等待客户端的确认
  3. 第三次握手(ACK)客户端确认连接:客户端收到服务器的SYN-ACK包后,发送一个ACK的包给服务器,ACK包中包含对服务器序列号的确认ack = y +1以及本身的seq = x + 1,表示客户端已经收到了服务器的SYN包双方状态:客户端和服务器都进入 ESTABLISHED状态,表示成功连接建立,接下来可以进行数据传输

9.TCP四次挥手

(1)第一次挥手(FIN):

1)客户端发送 FIN:客户端选择一个序列号 seq=x,发送 FIN 包给服务器。这个包表示客户端已经没有数据要发送,准备关闭连接。

2)客户端状态:客户端进入 FIN-WAIT-1 状态,等待服务器的响应。

(2)第二次挥手(ACK):

1)服务器发送 ACK:服务器接收到 FIN 包后,发送一个 ACK 包(ack=x+1)给客户端,表示已经收到客户端的关闭请求。

2)服务器状态:服务器进入 CLOSE-WAIT 状态,表示服务器仍然可能有数据要发送。

3)客户端状态:客户端进入 FIN-WAIT-2 状态,等待服务器的关闭请求。

(3)第三次挥手(FIN):

1)服务器发送 FIN:服务器完成数据发送后,选择一个序列号 seq=y,发送 FIN 包给客户端,表示服务器也准备关闭连接。

2)服务器状态:服务器进入 LAST-ACK 状态,等待客户端的确认。

(4)第四次挥手(ACK):**1)客户端发送 ACK:**客户端收到服务器的 FIN 包后,发送一个 ACK 包(ack=y+1)给服务器,

表示确认关闭连接。

2)客户端状态:客户端进入 TIME-WAIT 状态,等待 2MSL(最大报文生存时间)后关闭连接,确保连接彻底断开。

3)服务器状态:服务器收到 ACK 包后,进入 CLOSED 状态,连接断开。

注意事项:

TIME-WAIT 状态:客户端在进入 TIME-WAIT 状态后,需等待 2MSL(Maximum Segment Lifetime,最大报文生存时间)以确保所有报文在网络中被正确处理,避免旧的重复数据包干扰新连接

10.三次握手中如果数据发送失败,让你设计,你会怎么处理?

(1)重试机制:

在客户端发送 SYN 包后,如果在设定的超时时间内未收到服务器的 SYN-ACK 包,客户端将重

发 SYN 包。

重试次数有一个上限,例如 5 次,如果重试次数达到上限,客户端将放弃连接请求。

(2)超时机制:

设定一个合理的超时时间,例如2秒,客户端在发送SYN包后等待这个时间,如果未收到SYN-ACK

包,则进行重试。

11.TCP 和 UDP 的头部结构

TCP头部结构

1)源端口(Source Port):发送方的端口号。

2)目的端口(Destination Port):接收方的端口号。

3)序列号(Sequence Number):用于标识发送的数据字节流的顺序。4)确认号(Acknowledgment Number:用于确认接收到的数据字节的下一个序列号。

5)数据偏移(Data Offset):表示 TCP 头部的长度,以 32 位字为单位。

6)保留(Reserved):保留位,未使用。

7)控制标志(Control Flags):包括 URG、ACK、PSH、RST、SYN、FIN 六个控制位。

8)窗口大小(Window Size):接收窗口的大小,用于流量控制。

9)校验和(Checksum):用于校验头部和数据部分的完整性。

10)紧急指针(Urgent Pointer):指示紧急数据的结束位置。

11)选项(Options):可选字段,长度可变。

UDP头部结构

1)源端口(Source Port):发送方的端口号。

2)目的端口(Destination Port):接收方的端口号。

3)长度(Length):UDP 头部和数据的总长度,以字节为单位。

4)校验和(Checksum):用于校验头部和数据部分的完整性。

12.TCP 流量控制

TCP 流量控制是通过滑动窗口机制实现的**,确保发送方不会淹没接收方的处理能力。**

(1)滑动窗口机制:

1)发送窗口:发送方维护一个发送窗口,用于控制可以发送但未确认的数据量。发送窗口由

发送但未确认的数据和可以发送的最大数据量组成。

2)接收窗口:接收方维护一个接收窗口,用于控制可以接收但未处理的数据量。接收窗口由

收到但未处理的数据和可以接收的最大数据量组成。

(2)窗口大小的控制:

1)发送方根据接收窗口大小发送数据:发送方在发送数据时,会根据接收方的接收窗口大小来

控制发送的数据量,确保不会超出接收方的处理能力。

2)接收方通知发送方当前窗口大小:接收方在接收到数据后,会通过 ACK 包通知发送方当前

的接收窗口大小,表示接收方可以继续接收的数据量。

3)零窗口的处理:当接收方的接收窗口为 0 时,发送方会停止发送数据,直到接收到非零窗口

通知。发送方可以周期性地发送窗口探测包,询问接收方的接收窗口大小。

13.TCP拥塞控制

TCP 拥塞控制机制通过慢启动、拥塞避免、快重传和快恢复来防止网络拥塞。

(1)慢启动(Slow Start):

初始阶段:当连接刚建立时,拥塞窗口(cwnd)从 1 开始,慢启动阈值(ssthresh)通常设为

64。

指数增长**:**每次收到一个 ACK,拥塞窗口(cwnd)加倍,直到达到慢启动阈值(ssthresh)。

(2)拥塞避免(Congestion Avoidance):

达到阈值:当拥塞窗口(cwnd)达到慢启动阈值(ssthresh)后,进入拥塞避免阶段。

线性增长**:**每次收到一个 ACK,拥塞窗口(cwnd)增加 1,避免网络拥塞。

(3)快重传(Fast Retransmit):

检测重复 ACK:如果发送方收到三个重复的 ACK,立即重传丢失的数据包。

快速恢复:避免等待超时重新传输,减少数据传输的延迟。

(4)快恢复(Fast Recovery):

恢复拥塞窗口:重传丢失的数据包后,拥塞窗口(cwnd)恢复到慢启动阈值(ssthresh)的一

半,避免拥塞窗口重置为 1。

14.KCP

(1)KCP 协议概述:

1)基于 UDP:KCP 是在 UDP 协议之上实现的,利用 UDP 的简单和快速传输特点,同时引入

了 TCP 的一些可靠传输机制。

2)目标:通过减少延迟和提高传输效率,为实时应用(如在线游戏(王者荣耀),实时视频等)

提供更好的传输性能。

(2)主要功能:

1)可靠传输:通过确认机制和重传机制,确保数据包按顺序、完整地到达接收方。

2)流量控制:KCP 使用滑动窗口和流量控制算法,动态调整发送速率,避免网络拥塞。

3)拥塞控制:KCP 实现了一种自适应的拥塞控制算法,根据网络状况调整发送窗口大小,优化

网络资源利用。

4)快速重传:检测到数据包丢失时,KCP 可以快速重传丢失的数据包,减少传输延迟。

(3)KCP 与 TCP 的区别:

1)传输层协议:TCP 是内置于操作系统的传输层协议,而 KCP 是基于 UDP 实现的用户态协议。

2)传输效率:KCP 通过减少握手过程和拥塞控制的优化,具有更高的传输效率和更低的延迟。

3)实现复杂度:TCP 由操作系统管理,而 KCP 需要在应用层手动管理和实现,但提供了更灵

活的控制和优化空间。