目录

[toc]

介绍一下 tcp 和 udp

TCP

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
  • 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃。

TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图:

TCP 断开连接是通过四次挥手方式。双方都可以主动断开连接,断开连接后主机中的「资源」将被释放,四次挥手的过程如下图:

UDP

UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。

区别

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议,具体可以参见这篇文章:如何基于 UDP 协议实现可靠传输?(opens new window)

4. 拥塞控制、流量控制

  • TCP 有拥塞控制流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

详细描述三次握手和四次挥手

三次握手能不能两次,为什么

  • 三次握手才可以阻止重复历史连接的初始化(主要原因)
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费

为什么握手是三次,挥手是四次

服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。

四次挥手中 timeWait 的作用,实际时长是多少

tcp 的粘包拆包

tcp 保证可靠传输的各项措施,以及这些措施各自的作用

TCP (Transmission Control Protocol) 采用多种机制来保证可靠传输,这些机制包括以下几个方面:

  1. 序列号和确认应答机制:TCP 通过对每个数据包的序列号进行标记,并对接收方的每个数据包进行确认应答,以确保数据在传输过程中不会丢失或损坏。
  2. 滑动窗口机制:TCP 使用滑动窗口机制来控制发送方和接收方的传输速率。发送方根据接收方返回的确认应答来调整发送速率,以避免发送过多数据导致网络拥塞。同时,接收方也会根据自身的处理能力来调整接收速率,以避免数据丢失或堆积。
  3. 重传机制:TCP 通过在一定时间内未收到确认应答时,自动重传该数据包来保证数据传输的可靠性。
  4. 拥塞控制机制:TCP 通过监测网络拥塞情况,并在发现拥塞时自动调整传输速率,以避免网络拥塞导致数据丢失或传输延迟增加。
  5. 流量控制机制:TCP 通过对发送方和接收方的传输速率进行控制,以确保数据在传输过程中不会丢失或堆积。

这些措施的作用是确保 TCP 协议在数据传输过程中能够保证数据的可靠性、完整性和顺序性,同时避免网络拥塞和数据堆积导致的传输延迟增加。这些机制的应用可以使得 TCP 协议能够在不可靠的网络环境下进行数据传输,并保证数据的完整性和正确性。

tcp 流量控制, 拥塞控制, 滑动窗口, 确认号

滑动窗口

窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值。 窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。

流量控制

TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。

拥塞控制

一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。 在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大… 所以,TCP 不能忽略网络上发生的事,它被设计成一个无私的协议,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。 于是,就有了拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。 TCP 拥塞控制是一种网络流量控制机制,用于避免网络拥塞和数据包丢失,以保证数据的可靠传输。当网络拥塞时,TCP 通过减少传输速率以及重传丢失的数据包来缓解网络拥塞,从而避免数据包的丢失和网络拥塞的加剧。 TCP 拥塞控制的主要机制包括:

  1. 慢启动:在建立连接和发生拥塞时,TCP 会以指数级别增加发送窗口的大小,以快速探测可用带宽。发送方会先发送一定数量的数据包,然后每收到一个确认应答,就将发送窗口的大小加倍,直到达到一个阈值。
  2. 拥塞避免:一旦发送方确定了可用带宽,TCP 就会进入拥塞避免状态,减缓发送速度,防止网络拥塞。此时,TCP 会以线性增加发送窗口的方式逐渐增加发送速度。
  3. 快速重传和快速恢复:如果 TCP 检测到有数据包丢失,它会使用快速重传机制立即重传缺失的数据包,并在接收到重传数据包时启用快速恢复机制,以避免发送窗口大小回退到慢启动状态。
  4. 超时重传:如果 TCP 在一段时间内没有收到确认应答,就会将该数据包视为丢失并进行超时重传。

总之,TCP 拥塞控制通过一系列机制来避免网络拥塞和数据包丢失,以保证网络传输的可靠性和效率。

慢启动

TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量

拥塞避免算法

快重传与快恢复

https 的加密机制

浏览器输入一个网址后发生的过程

DNS 原理

http 报文结构

keep alive time 作用

get 和 post

http 各版本的区别,目前主流版本

应用层、传输层有什么协议