计算机网络的OSI七层模型

https://blog.csdn.net/m0_62006803/article/details/134516305

口诀:物-数-网-传-会-表-应

  • 物理层(Physical Layer)
  • 数据链路层(Data Link Layer)
  • 网络层(Network Layer)
  • 传输层(Transport Layer)
  • 会话层(Session Layer)
  • 表示层(Presentation Layer)
  • 应用层(Application Layer)

TCP与UDP的位置及其区别

tcp与udp的位置

TCP和UDP都是传输层协议,处于OSI参考模型的第四层。在TCP/IP协议栈中,TCP和UDP也位于网络层和应用层之间,负责提供端到端的数据传输服务。其中,TCP是一种面向连接的协议,提供可靠的数据传输服务,而UDP则是一种无连接的协议,提供不可靠但高效的数据传输服务。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。

tcp与udp的区别

  • 连接导向 vs 无连接:TCP是一种面向连接的协议,通信双方在传输数据前需要先建立连接,然后再进行数据传输,最后释放连接;而UDP是无连接的,通信双方直接发送数据包,不需要建立连接。

  • 可靠性:TCP提供可靠的数据传输,通过序号、确认和重传机制来确保数据的完整性和顺序性;而UDP不提供可靠性保证,数据包可能会丢失或者乱序到达。

  • 拥塞控制:TCP具有拥塞控制机制,可以根据网络情况动态调整传输速率,以避免网络拥塞;UDP没有拥塞控制机制,数据包会以最大速率发送,可能导致网络拥塞。

  • 数据量限制:TCP没有固定的数据包大小限制,可以根据需要动态调整;而UDP有固定的数据包大小限制,每个数据包的大小都有一个上限。TCP的头部开销大,UDP的头部开销小。

  • 应用场景:TCP是面向字节流的,UDP是面向报文的。TCP适用于要求可靠传输、顺序传送的应用,如文件传输、邮件等;UDP适用于实时性要求高、可以容忍少量数据丢失的应用,如音频、视频流等。

总的来说,TCP和UDP各有优势,适用于不同的应用场景。TCP适合对数据可靠性要求高的场景,而UDP适合对实时性要求高的场景。在实际应用中,根据具体需求选择合适的协议非常重要。

三次握手、四次挥手

三次握手、七次握手、四次挥手 - 简书
TCP 中的数据传输、连接建立与终止都由特定控制参数管理,控制参数有以下这些:

参数 用途
SYN 用于启动和建立连接时,同步设备之间的序列号。0到2^32 - 1的随机数。
ACK 向另一端确认已经收到 SYN,数值为收到 SYN 增一。
SYN-ACK 确认之前收到了 SYN,数值为自定义值。
FIN 终止连接。
RST 重置连接。

三次握手

建立 TCP 连接需要三次握手:

  1. 客户端想要连接服务端时,向服务端发送 SYN message。Message 还包含 sequence number(32位的随机数),ACK 为0,window size、最大 segment 大小。例如,如果 window size 是 2000 bits,最大 segment 大小是 200 bits,则最大可传输 segments 是 10 data。
  2. 服务端收到客户端 synchronization request 后,回复客户端 SYN 和 ACK。ACK 数值是收到的 SYN 加一。例如客户端发送的 SYN 是 1000,则服务端回复的 ACK 是 1001。如果服务端也想建立连接,回复中还会包括一个 SYN,这里的 SYN 是另一随机数,与客服端的 SYN 不相同。这一阶段完成时,客户端与服务端的连接已经建立。
  3. 收到服务端的 SYN 后,客户端回复 ACK,ACK 值是 SYN 值加一。这一过程完成后,服务端与客户端的连接也建立了起来。

TCP 连接的双方通过三次握手确定 TCP 连接的初始序列号、窗口大小以及最大数据段,这样通信双方就能利用连接中的初始序列号保证双方数据段的不重不漏,通过窗口大小控制流量,并使用最大数据段避免 IP 协议对数据包分片。

换个角度看为什么需要三次握手?客户端和服务端通信前要进行连接,三次握手就是为了确保自己和对方的收发能力是正常的。

  1. 第一次握手:客户端发送、服务端接收网络包,服务端可以得出:客户端发送能力、服务端接收能力是正常的。
  2. 第二次握手:服务端发送、客户端接收网络包。从客户端的视角来看,我接收到了服务端发送的响应数据包,说明服务端收到了第一次握手时我发出的网络包,且收到请求后进行了响应,这说明服务端的接收、发送能力正常,我的发送、接收能力正常。
  3. 第三次握手:客户端发送、服务端接收网络包,这样服务端就能得出结论:客户端的接收、发送能力正常,服务端的发送、接收能力正常。第一次、二次握手后,服务端并不知道客户端的接收能力,以及自己的发送能力是否正常。第三次握手后,这些能力才得以确认。

三次握手后,客户端、服务端才确认了自己的接收、发送能力均是正常的。

四次挥手

建立连接时需要发送三个 packet,但终止连接时需要四个 packet,也称为四次挥手。因为 TCP 连接是全双工的,每个方向都必须独立终止。

终止 TCP 连接的四次挥手:

  1. 第一次挥手:客户端想要终止连接时,向服务端发送 FIN。该 segment 有两个功能:
    • FIN 用于告诉服务端不会再向其发送数据。
    • FIN 中的 ACK 标记要终止的连接。
  2. 第二次挥手:服务端收到客户端终止请求后,回复 ACK 确认 FIN。
  3. 第三次挥手:TCP 的连接是相互独立的。因此,服务端也需要向客户端发送 FIN。
  4. 第四次挥手:客户端收到服务端的 FIN 后,回复 ACK 确认,序列号增一。

总结

客户端想要通过 HTTP 请求访问服务端时,需要经过三次握手;通过 HTTPS 访问服务端时,需要额外增加四次握手。

总结一下 HTTP 建立连接、终止连接:

  • TCP 协议需要通过三次握手建立可靠连接。
  • 想要建立 HTTPS 安全连接,需要在 TCP 可靠连接基础上使用 TLS 协议。TLS 协议需要四次握手才能建立安全连接。
  • 终止 TCP 可靠连接时需要四次挥手。