1.A、B、C类网络号各有多少个?
A类网络号:共有2^7 - 2个,即126个。这是因为A类网络号的第一个字节范围是1.0.0.0到126.0.0.0,其中0.0.0.0和127.0.0.0是特殊保留地址,不能用于网络划分。
B类网络号:共有2^14个,即16,384个。B类网络号的第一个字节范围是128.0.0.0到191.255.0.0。
C类网络号:共有2^21个,即2,097,152个。C类网络号的第一个字节范围是192.0.0.0到223.255.255.0。
计算过程如下:
- 对于A类网络号,第一个字节的范围是1-126,共有126个可能的值。
- 对于B类网络号,第一个字节的范围是128-191,共有64个可能的值。第二个字节的范围是0-255,共有256个可能的值。总共的组合数为64 * 256 = 16,384。
- 对于C类网络号,第一个字节的范围是192-223,共有32个可能的值。第二个字节和第三个字节的范围都是0-255,每个字节都有256个可能的值。总共的组合数为32 * 256 * 256 = 2,097,152。
2.如果你的系统支持netstat命令,那么请用它确定系统上的接口及其MTU。
netstat命令用于查看网络连接、路由表和网络接口信息
netstat -in
查看接口名称、MTU、网络流量统计等。
也可用ifconfig -a
(Linux系统)查看
3.找出数据报网络层 IP层 提供的三个优点
- 网络互连,IP层提供了网络互连,允许不同网络和子网间进行通信
- 网络路由,通过路由选择算法将包从源主机发送到目的主机,通过路由表选择最佳路径。实现包的转发和路由功能
- 无连接通信:IP层是无连接协议,每个包独立处理,无建立连接的开销
4.为什么存在两类ICMP重定向报文—网络和主机?
- 网络重定向(Network Redirect)报文:网络重定向报文用于指示源主机在发送数据包时更改其默认路由,以便通过更直接的路径发送数据包。这种重定向通常是由路由器生成的,目的是告知源主机存在更佳的路径选择。网络重定向报文是针对整个网络的,发送者提供了一个更好的下一跳路由器的IP地址。
- 主机重定向(Host Redirect)报文:主机重定向报文用于指示源主机在发送数据包时更改其下一跳主机,以便通过更近的主机发送数据包。这种重定向通常是由目标主机生成的,目的是告知源主机存在更接近目标的下一跳主机。主机重定向报文是针对具体目标主机的,发送者提供了更佳的下一跳主机的IP地址。
区分网络重定向和主机重定向的目的是让源主机能够根据不同的情况进行适当的路由调整。优化整个网络的路径选择
5.OSPF报文格式中有一个检验和字段,而 RIP报文则没有此项,这是为什么?
- RIP运行在UDP上,而UDP提供了UDP数据报中数据部分的一个可选的检验和(11.3节)。
- OSPF运行在IP上,IP的检验和只覆盖了IP首部,所以OSPF必须增加它自己的检验和字段。
6.假定有一个以太网和一份8192字节的UDP数据报,那么需要分成多少个数据报片,每个 数据报片的偏移和长度为多少?
UDP数据报的最大长度是65535字节(包括UDP头部和数据部分)。然而,以太网的MTU通常为1500字节,因此UDP数据报超过MTU限制时需要进行分片。
每个IP数据报片(包括UDP数据报片)的数据部分长度需要是8字节的整数倍
- 需要的数据报片数量 = ceil(UDP数据报长度 / MTU) = ceil(8192 / 1500) ≈ 6
- 数据报的数据部分长度为: MTU - IP头部长度 = 1500 - 20(假设IP头部长度为20字节)= 1480字节
- 偏移量计算:后续数据报片的偏移量 = (数据报片的索引 - 1) * 每个数据报片的数据部分长度 / 8 = (索引 - 1) * 1480 / 8
7.TCP提供了一种字节流服务,而收发双方都不保持记录的边界。应用程序如何提供它们 自己的记录标识?
在这种情况下,应用程序需要自己确定和管理记录的边界,并为每个记录提供自己的标识。这可以通过在应用层协议中定义特定的记录格式或使用特殊的标记来实现。
常用的方法来提供应用程序自己的记录标识:
- 定长记录:程序约定每个记录固有长度
- 分隔符标记:程序约定记录之间用特定分隔符作为标记,接收方收到分隔符,认为是一个完整的记录
- 长度前缀:程序在每个记录上添加指示数据长度的前轴
8.TCP的三次握手与四次挥手
为什么要等2MSL(报文最大生命周期)才关闭连接?
客户端发送ACK后,需要保证服务端已经收到了并且关闭连接,而报文在网络中最大存活时间就是2MSL。就是为了确保网络中没有关于这个连接的旧报文段存在了,保证TCP连接的可靠性。
9.TCP 半打开连接和半关闭连接的区别是什么?
- 半打开连接(Half-Open Connection):半打开连接是指在TCP三次握手过程中的某个阶段中的连接状态。在这个阶段,一方已经发送了SYN报文段并等待对方的确认,但还没有收到对方的确认。这种状态通常表示连接正在建立中或存在问题。半打开连接可能发生在网络故障、网络延迟或对方主机未响应的情况下。
- 半关闭连接(Half-Closed Connection):半关闭连接是指在TCP四次挥手过程中的某个阶段中的连接状态。当一方发送了FIN报文段表示关闭连接后,另一方仍然可以发送和接收数据,但不再发送新的数据。这种状态允许一方先关闭发送数据通道,但仍然可以接收对方发送的数据。半关闭连接通常用于一方需要终止发送数据,但仍然需要接收对方发送的数据的情况,比如服务器向客户端发送终止连接请求,但允许客户端继续发送数据。
总结来说,半打开连接是建立连接过程中的一种临时状态,表示连接正在建立或存在问题。半关闭连接是在关闭连接过程中的一种状态,允许一方关闭发送数据通道但仍然可以接收对方发送的数据。这两种连接状态发生在不同的阶段,用于不同的目的。
TCP
-
TCP和UDP之间的区别是什么?它们适用于哪些不同的应用场景?
-
TCP三次握手的过程是什么?为什么需要三次握手来建立连接?
-
TCP四次挥手的过程是什么?为什么需要四次挥手来关闭连接?
4.TCP的流量控制和拥塞控制是什么?它们的区别和目的是什么?
- TCP的流量控制用于控制发送方发送数据的速率,以避免接收方来不及处理或溢出。通过使用滑动窗口机制,接收方可以通知发送方可以接收的数据量。
- TCP的拥塞控制用于控制网络中的拥塞情况,防止过多的数据注入网络导致网络性能下降。TCP通过使用拥塞窗口和拥塞避免算法(如拥塞避免、慢启动、快速重传和快速恢复)来调整发送方的发送速率
5.TCP的窗口大小是什么?如何调整窗口大小以优化传输性能?
- TCP的窗口大小是指发送方在等待确认之前可以发送的未确认数据量。它决定了发送方可以持续发送的数据量。
- TCP使用拥塞窗口和接收窗口来确定窗口大小。拥塞窗口受网络拥塞程度的影响,而接收窗口受接收方的可用缓冲区大小影响。
- 通过拥塞控制算法和动态调整窗口大小,TCP可以优化传输性能,提高带宽利用率和减少拥塞。
6.TCP的可靠性是如何实现的?它使用了哪些机制来保证数据的可靠传输?
- TCP使用多种机制来实现可靠传输。其中包括序列号和确认机制,发送方发送带有序列号的数据,接收方通过发送确认报文段来确认已接收的数据。
- TCP还使用超时重传机制来处理丢失的数据,如果发送方在一定时间内未收到确认,将重传该数据。
- 还有其他机制,如滑动窗口协议、选择确认和累计确认等,都用于确保数据的可靠传输。
7.TCP的超时重传机制是什么?当发生丢包或延迟时,TCP如何处理?
- TCP的超时重传机制是为了应对网络中发生的丢包、延迟或乱序等情况,当发送方发送数据后,它会启动一个定时器。如果在定时器超时之前未收到接收方的确认,发送方会假设数据丢失,并重新发送该数据。重传时间使用RTO动态算法根据网络延迟、拥塞程度动态调整。
- 当发生丢包时,接收方会忽略重复的数据,并向发送方发送确认来指示所期望的下一个数据序号。
8.TCP的拥塞控制算法有哪些?分别介绍它们的原理和应用场景
- TCP的拥塞控制算法主要包括慢启动、拥塞避免、快速重传和快速恢复。
- 慢启动(Slow Start)算法用于连接初始阶段,发送方逐渐增加发送窗口的大小,以便在网络中建立适当的负载。
- 拥塞避免(Congestion Avoidance)算法在慢启动阶段结束后启动,发送方根据网络的拥塞程度来逐渐增加发送窗口的大小,以避免过度拥塞。
- 快速重传(Fast Retransmit)算法用于快速检测和处理丢失的数据段。当接收方收到乱序的数据段时,它会立即发送对于最后正确接收的数据段的重复确认,以触发发送方进行快速重传。
- 快速恢复(Fast Recovery)算法用于恢复拥塞状态。当发送方接收到三个重复的确认时,它会减少发送窗口的大小,并进入快速恢复状态
9.TCP的重传机制是如何工作的?它如何检测和处理丢失的报文段?
- 发送方发送数据段:发送方将数据分割成较小的报文段,并为每个报文段分配一个序列号。发送方开始计时,启动一个定时器,等待接收方的确认。
- 接收方接收数据段:接收方收到报文段后,将其缓存起来,并向发送方发送确认报文段,其中确认号表示已成功接收的最后一个连续字节的序列号。
- 发送方接收确认:发送方接收到确认后,将确认号与已发送的报文段进行比较,确认接收方已正确接收到该报文段。
- 定时器超时:如果发送方在定时器超时之前未收到确认,它将假设该报文段已丢失。发送方将重新发送该丢失的报文段,并重启定时器等待下一个确认。
- 重传次数限制:如果发送方连续多次未收到确认,它将假设网络出现了较严重的问题,并采取相应的措施,例如减少发送窗口的大小、启动拥塞控制机制等。
- 接收方检测丢失的报文段:接收方通过确认报文段中的确认号来指示所期望的下一个连续字节的序列号。如果接收方在一定时间内未收到序列号连续的数据段,它将重复发送上一次正确接收的确认,以指示发送方重传丢失的报文段。
10.什么是TCP的滑动窗口协议?它如何实现可靠的数据传输和流量控制?
滑动窗口协议的工作原理如下:
- 发送窗口:发送方维护一个发送窗口,表示可以发送但未收到确认的数据段的范围。发送窗口由两个参数确定:发送窗口的起始位置和窗口的大小。
- 接收窗口:接收方维护一个接收窗口,表示它能够接收的数据段的范围。接收窗口由两个参数确定:接收窗口的起始位置和窗口的大小。
- 发送方的操作:发送方根据接收方发送的确认信息和窗口大小来确定可以发送的数据段的数量。发送方发送窗口的起始位置随着数据的确认不断向前滑动,以允许发送新的数据段。
- 接收方的操作:接收方根据接收到的数据段和发送方的期望序列号来确定确认的数据段。接收方的接收窗口的起始位置随着接收到连续的数据段不断向前滑动,以允许接收新的数据段。
通过滑动窗口协议,TCP实现了可靠的数据传输和流量控制的功能:
- 可靠的数据传输:发送方发送数据段后,等待接收方的确认。如果发送方在一定时间内未收到确认,它会重传丢失的数据段。接收方根据序列号确认已接收到的数据段,并通过确认信息告知发送方。
- 流量控制:发送方根据接收方的窗口大小来控制发送的数据量。发送方不会发送超过接收方窗口大小的数据,以避免接收方缓冲区溢出。接收方可以根据处理能力和缓冲区大小调整窗口大小。
11.TCP的粘包和拆包问题是什么?如何处理这些问题?
粘包问题: 粘包问题指的是发送方发送的多个数据包在接收方接收时被合并成一个大的数据包。这可能会导致接收方无法正确解析和处理数据。
拆包问题: 拆包问题指的是发送方发送的一个数据包在接收方接收时被拆分成多个小的数据包。这可能会导致接收方无法完整地获取到发送方原始发送的数据
解决方法:
- 消息长度固定
- 特殊字符分隔
- 消息头部标识
- 应用层协议设计
12.如何通过netstat命令查看TCP连接状态和相关信息?
netstat -a
:显示所有的连接和监听端口,包括 TCP 和 UDP。netstat -t
:显示所有的 TCP 连接。netstat -u
:显示所有的 UDP 连接。netstat -n
:以数字形式显示地址和端口号,不进行主机和端口的解析。netstat -p
:显示与连接相关的程序名或进程 ID。netstat -s
:显示 TCP 和 UDP 的统计信息,如接收和发送的数据包数量、错误等。netstat -r
:显示路由表信息。netstat -l
:显示正在监听的端口。
组合使用,netstat -atn
显示所有TCP连接的端口号和地址,进程IP