第六届字节跳动青训营(toc对象存储学习笔记) | 青训营

71 阅读8分钟

网络交互

网络接入

1.2网络接入-路由
  • 路由不一定是对称的(路由:跨网段的两个服务器之间的东西)

image-20230809112555212转存失败,建议直接上传图片文件

  • 路由不是改ip地址,是改Mac,找到发包口
void send_one_pkt() {
rt = find_rt(dst) //包含主机出口网口&Nexthop
...
l2 ->dst_mac = rt->next_hop->mac //怎么获取路由的mac?
p = append(p,12)
send(p, rt->port)//发包需要什么指定网卡,为什么?
}
1.3 网络接入-ARP协议

ARP的本质上是查找下一跳的MAC,不是请求目标地址!

1.4网络接入-IP协议
1.5网络接入-NAT

image-20230809120746437转存失败,建议直接上传图片文件

网络传输

1.6 网络传输-数据包

image-20230809120949199转存失败,建议直接上传图片文件

1.6 网络传输-数据包发送

image-20230809161701808转存失败,建议直接上传图片文件

1.7 网络传输-先请求DNS
1.8 网络传输-DNS的传输协议UDP

UDP是DNS默认的传输协议,它是一种无连接的、不可靠的传输协议。DNS使用UDP进行短小的查询和响应,这是因为大多数DNS查询都是简短的,而UDP的无连接特性可以提供更高的查询性能。

1.9 网络传输-TCP三次握手

什么是TCP连接?

TCP连接是在计算机网络中建立的可靠的、面向连接的通信通道。它是在发送端和接收端之间建立的一种虚拟的连接,用于确保数据的可靠传输。也可以理解是一种状态的连接。

拔了网线,连接会断吗?

在一定的情况下会断开,但是在一定的场景下又不会断开。

TCP协议具有超时机制跟保活机制,如果TCP发现无法从对端接收到确认应答ACK,根据超时机制,发送方就会认为连接已断开;此外,TCP还会定期发送保活探测包以检测对方的响应,如果发送一系列保活探测包而没有接收到对应的应答,它就会认为连接已断开,并主动关闭连接;

TCP三次握手

  • 发起方(通常是客户端)向接收方(通常是服务器)发送一个带有SYN(同步)标志的数据包,请求建立连接。
  • 接收方收到这个数据包后,回复一个带有ACK(确认)和SYN标志的数据包,表示同意建立连接。
  • 发起方再次回复一个带有ACK标志的数据包,表示确认接收方的回复。

序列号(sequence number):表示我方(发送方)这边,这个packet的数据部分的第一位应该在整个data stream中所在的位置

确认号(acknowledge number):表示期望对方(接收方)的下一次sequence number是多少。注意,SYN/FIN的传输虽然没有data,但是会让下一次的传输的packet seq增加一,但是,ACK的传输,不会让下一次的传输packet加一。

image-20230809171735740转存失败,建议直接上传图片文件

1.9网络传输-TCP传输

image-20230809171830043转存失败,建议直接上传图片文件

1.9.1 为什么老问你Timewait

TIME_WAIT是TCP连接关闭过程中的一种状态,主要用于确保网络中的延迟、丢包和重复包能够得到正确处理。在TIME_WAIT状态下,主机会继续接收数据包,并等待可能的延迟数据包在网络中传输完成。这样可以避免连接关闭过程中出现的一些问题。

TIME_WAIT状态的持续时间通常为2倍的最大段生命周期,MSL的典型值为2分钟。

TIME_WAIT状态是为了解决TCP连接的四次挥手中可能出现的几种问题:

  1. 延迟的重传:如果之前的ACK包在网络中延迟到达或丢失了,对端可能会重传FIN包。TIME_WAIT状态下的主机可以接收到该重传,然后重新发送ACK进行确认。
  2. 重复的连接:如果之前的FIN包在网络中延迟到达或丢失了,对端可能会尝试重新建立连接。TIME_WAIT状态下的主机可以接收到该重新建立连接请求,然后发送一个重复的ACK进行处理,以避免对端认为连接已经关闭。
  3. 对端的延迟数据包:TIME_WAIT状态下的主机可以继续接收到对端发送过来的延迟数据包,以保证连接关闭后的完整性。
1.9.2 滑动窗口

滑动窗口(Sliding Window)是TCP协议中用于实现流量控制和拥塞控制的重要机制之一。它是发送方和接收方之间的一个可变大小的缓冲区,用于管理发送和接收的数据包。

工作原理:

  • 发送方维持一个发送窗口,表示允许发送的数据包序列号范围。发送方将未确认的数据包放入窗口中,等待接收方确认。
  • 接收方维持一个接收窗口,表示期望接收的数据包序列号范围。接收方只将位于接收窗口内的数据包确认,超出窗口范围的数据包将被丢弃。
1.9.3 流量控制和拥塞控制

发送方通过滑动窗口进行流量控制:

  • 发送窗口的大小决定了发送方可以连续发送的数据包数量。通过调整发送窗口的大小,发送方可以限制发送速率,避免发送速度超过接收方的处理能力。
  • 发送方发送数据后,会等待接收方的确认。一旦接收到对窗口中数据包的确认,发送方可以将窗口向前滑动,继续发送新的数据包。

接收方通过滑动窗口来进行拥塞控制:

  • 接收窗口的大小决定了接收方的处理能力。如果接收窗口满了,接收方将停止发送确认ASK,从而通知发送方降低发送速率,以避免拥塞发生。
  • 一旦接收方处理窗口内的数据,并确认发送了对应的数据包,它可以将窗口想前滑动,继续处理和接收心得数据包。

滑动窗口的大小会根据网络条件和拥塞情况进行动态调整。根据TCP的拥塞控制算法,滑动窗口的大小可根据网络状况和接收方的处理能力进行调整,以实现最优的传输效率和拥塞避免。

总结:滑动窗口是TCP协议中用于流量控制和拥塞控制的机制。通过维护发送窗口和接收窗口,滑动窗口实现了发送方和接收方之间的数据包管理和调整。发送方通过滑动窗口限制发送速率,接收方通过滑动窗口管理处理能力和通知发送方进行拥塞控制。滑动窗口的大小根据网络条件和拥塞情况进行动态调整,以提高传输效率和减少拥塞。

1.10 网络传输-HTTP/HTTP1.1

HTTP协议依然是TCP,只是多加了一层规矩,这个规矩会让用户更清晰/更简洁

1.11网络传输-HTTPS

HTTPS解密出来还是HTTP

这个加密的方式有:SSL(旧的加密标准)/TLS握手(新的加密标准)

image-20230809193241792转存失败,建议直接上传图片文件

  1. 客户端发送加密通信请求:

    • 客户端发送一个连接请求给服务器,请求使用HTTPS进行加密通信。
    • 客户端将支持的SSL/TLS版本和加密算法列表发送给服务器。
  2. 服务器发送数字证书:

    • 服务器向客户端返回一个数字证书,其中包含服务器的公钥和其他身份验证信息。
    • 证书通常由可信的第三方证书颁发机构(CA)签发。
  3. 客户端验证数字证书:

    • 客户端验证服务器发送的数字证书的合法性。
    • 客户端检查证书的有效期、签名是否有效以及与服务器域名的匹配等。
  4. 客户端生成加密密钥:

    • 客户端生成一个随机的对称密钥或会话密钥,用于在后续通信中加密数据。
    • 客户端使用服务器公钥加密该对称密钥,并将其发送给服务器。
  5. 服务器解密会话密钥:

    • 服务器使用自己的私钥解密客户端发送的加密密钥,获取会话密钥。
  6. 数据传输加密:

    • 客户端和服务器之间的通信将使用会话密钥进行对称加密和解密。
    • 客户端和服务器之间开始加密的通信,确保数据传输的安全性和保密性。