Network

程序员小x大约 9 分钟面经计算机网络面经

Network

TIME_WAIT的状态是在哪一端产生的?它的作用是什么?

TIME_WAIT状态在主动关闭端产生。主要作用如下:

  • 可靠的关闭连接。TIME_WAIT状态确保了最终的ACK(确认)消息能够被成功接收。根据TCP协议,当一端(主动关闭连接的一端)发送FIN(终止)请求后,进入FIN_WAIT_1状态,然后等待对方的ACK消息并进入FIN_WAIT_2状态。对方接收到FIN后,回复ACK并发送自己的FIN请求。主动关闭连接的一端收到对方的FIN后,回复ACK,并进入TIME_WAIT状态。TIME_WAIT状态持续两个最大报文段寿命(MSL, Maximum Segment Lifetime),确保最后的ACK能被对方接收,即使对方的FIN因为网络问题需要重传。
  • 防止旧连接的数据干扰新连接。TIME_WAIT状态的另一个重要作用是防止在网络中滞留的旧连接数据包干扰新连接。由于TCP连接是通过五元组(源IP地址、源端口、目标IP地址、目标端口、协议)唯一标识的,TIME_WAIT状态的持续时间(通常为2倍的MSL)足够确保旧连接的所有数据包在新连接建立前都已经过期和丢弃。这样可以避免新连接接收到旧连接遗留的数据包,从而保持数据传输的正确性和完整性。

https加密过程是怎样的?

HTTPS(Hypertext Transfer Protocol Secure)是通过在HTTP协议基础上加入SSL/TLS协议来实现安全通信的。以下是HTTPS加密过程的详细描述:

1.客户端向服务器发起请求

客户端(通常是浏览器)向服务器发送一个HTTPS请求,要求建立一个安全连接。

请求包含客户端支持的SSL/TLS版本、加密算法、生成的随机数等信息。

2.服务器响应客户端请求

服务器选择SSL/TLS版本和加密算法,并生成一个随机数。

服务器将其SSL证书发送给客户端。该证书包含服务器的公钥和服务器的身份信息(由可信的证书颁发机构(CA)签名)。

3.验证服务器证书

客户端验证服务器证书的有效性,包括验证证书是否由可信的CA签发,证书是否过期,证书中的域名是否匹配请求的域名。

如果验证成功,客户端将生成一个新的随机数(称为Pre-Master Secret)。

4.生成会话密钥

客户端使用服务器的公钥加密Pre-Master Secret,并将其发送给服务器。

服务器使用其私钥解密Pre-Master Secret。

客户端和服务器现在都拥有三个随机数:客户端的随机数、服务器的随机数和Pre-Master Secret。双方使用这三个随机数通过约定的算法生成会话密钥(Session Key)。

5.加密通信

客户端和服务器使用会话密钥进行对称加密和解密,确保数据在传输过程中不被窃听或篡改。

6.结束会话

当通信结束时,客户端和服务器可以通过发送“关闭连接”的消息来终止安全连接。此时,会话密钥将被销毁,避免其被滥用。

加密技术概述

  • 对称加密:使用相同的密钥进行加密和解密。会话密钥就是对称加密的密钥。

  • 非对称加密:使用一对密钥(公钥和私钥),公钥用于加密,私钥用于解密。客户端使用服务器的公钥加密Pre-Master Secret,服务器使用其私钥解密。

  • 散列函数:用于生成消息摘要,确保数据完整性。

SSL/TLS握手过程

  • 客户端Hello:客户端发起连接请求,提供支持的协议版本、加密算法和随机数。
  • 服务器Hello:服务器回应选择的协议版本、加密算法和随机数,并发送证书。
  • 服务器Key Exchange(如果需要):服务器可能会发送额外的公钥交换信息。
  • 客户端Key Exchange:客户端发送加密的Pre-Master Secret。
  • Change Cipher Spec:客户端和服务器交换“更改密码规范”消息,表示后续消息将使用协商的会话密钥加密。
  • Finished:双方发送“完成”消息,验证握手成功。

数据传输加密

握手过程完成后,客户端和服务器之间的所有数据传输都将使用生成的会话密钥进行加密。

安全性

HTTPS通过加密和证书验证机制,提供了三种主要的安全保障:

  • 加密:防止数据被窃听。
  • 完整性:防止数据在传输过程中被篡改。
  • 身份验证:确保通信双方的身份真实。

通过上述过程,HTTPS实现了安全的数据传输,保护了用户的隐私和数据的完整性。

上面问题的附加问题:

RSA算法是怎么样的,大致说说?

RSA 的安全性依赖于大整数质因数分解问题的难度。即便知道一个大整数,如果它是两个大质数的乘积,想要分解出这两个质数非常困难。这一数学特性成为 RSA 加密的基础。RSA算法基于数论中的欧拉定理以及同余定理等。

RSA 使用一对密钥:

公钥(Public Key):公开的密钥,用于加密数据。 私钥(Private Key):私有的密钥,保密,用于解密数据。

RSA算法需要选择两个大质数 p和q。质数越大,安全性越高。

n=p×qn = p \times q

通过p、q、n可以生成出RSA算法的公钥和私钥对。

当应用层的数据包超过了MTU会怎么样?

当应用层的数据包超过了网络层的最大传输单元(MTU,Maximum Transmission Unit)时,数据包需要被分片处理,以适应网络的传输要求。以下是当数据包超过 MTU 时的处理步骤和相关细节:

1. MTU 概念

  • MTU 是网络接口层能传输的最大数据单元的大小。对于以太网,常见的 MTU 大小是 1500 字节。这包括数据部分和头部部分。

2. 数据包分片

当应用层的数据包(例如 TCP/IP 数据包)大小超过 MTU 时,需要进行分片。分片是在网络层(IP 层)进行的。处理步骤如下:

分片过程

1.数据包分片:

  • 网络层的协议(如 IPv4)会将大的数据包分成适合 MTU 的小片段,每个片段都包含必要的头部信息和数据。 添加片段头部:

  • 每个片段会有一个 IP 头部,其中包括片段的序号、总片段数等信息,以便接收方能够重新组装完整的数据包。

2.发送片段:

  • 每个片段作为独立的 IP 数据包被发送到网络中。

重新组装

1.接收片段:

  • 目标主机接收到所有的片段后,会使用 IP 头部中的信息来重新组装这些片段。

2.完成数据包重组:

  • 在接收到所有片段后,主机会将它们组合成原始的数据包,以便交给上层协议(如 TCP)进行处理。

分片的注意事项

性能影响

  • 开销增加:分片会增加网络开销,因为每个片段都有自己的头部,增加了网络负担。
  • 延迟增加:数据包需要被分成多个片段并重新组装,可能会引入延迟。

可能的问题

  • 丢包:如果一个片段丢失,整个数据包的重新组装会失败,导致数据包丢失。需要通过重传机制(如 TCP)来处理。
  • 碎片重组失败:如果某些片段在传输过程中损坏或丢失,数据包无法正确重组。

避免分片

路径MTU发现(PMTU)

PMTU 发现 是一种机制,用于确定从源主机到目的主机的路径上最低的 MTU 大小。通过这种方式,源主机可以避免分片,直接发送适合网络路径的大小的数据包。

PMTU 发现 的工作流程如下:

  • 源主机开始发送较大的数据包。
  • 如果中间的路由器发现数据包过大,会丢弃该数据包,并返回一个 ICMP 错误消息("需要分片但标志位不允许")。
  • 源主机接收到 ICMP 消息后,调整数据包大小,发送适合网络路径的大小。

应用层调整

应用程序层:一些应用程序可以在发送数据之前检查路径 MTU 或选择合适的消息大小,以减少分片的需求。

总结

当应用层的数据包超过 MTU 时,网络层会将其分片,每个片段独立传输,接收方重新组装成原始数据包。虽然分片可以解决 MTU 限制问题,但它增加了网络开销和潜在的延迟。因此,路径 MTU 发现机制和应用层调整是有效的避免分片的方法。

补充:如果IP层不允许分片会怎么样

在现代网络中,如果 IP 层不允许分片,数据包的处理方式会受到影响。下面详细描述了这种情况的处理过程及其影响:

  • 数据包被丢弃

    超大数据包:如果一个数据包的大小超过了网络路径的 MTU,并且 IP 层不允许分片,该数据包将不能被发送。 丢弃和 ICMP 消息:中间的网络设备(如路由器)会丢弃这个数据包,并向源主机发送一个 ICMP 错误消息(在 IPv4 中是 "Fragmentation Needed and Don't Fragment Set")。在 IPv6 中,路由器会发送一个 ICMPv6 "Packet Too Big" 消息。

  • 源主机处理 ICMP 消息

    接收 ICMP 消息:源主机收到 ICMP 错误消息后,了解到网络路径的 MTU 小于数据包的大小。 调整数据包大小:源主机会根据 ICMP 消息中的信息调整数据包的大小,以适应路径的 MTU。源主机将重新发送调整后的数据包,确保它不会超出路径 MTU。

Loading...