TCP和UDP的对比| 青训营笔记

87 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

  1. TCP使用字节流传输数据,UDP使用数据报传输数据

  2. 通过C语言代码实现

    fd = socket(AF_INET, 具体协议,0);

    • 具体些协议传入 SCOK_STREAM 表示TCP协议, SOCK_DGRAM表示UDP协议
    • fd 表示句柄,一个句柄对应计算机内核中唯一一个SOCK结构
  3. TCP和UDP实现数据传输的过程

    • 服务端在本地创建一个socket,并与本主机的特定端口进行bind,随后服务端的进程会监听这个端口的数据,等待客户端的连接请求,处理和相应客户端发来的数据
    • 客户端创建socket
    • 客户端通过sendto函数发送数据,服务端通过recvfrom函数接收数据
  4. 流量控制针对的是单个连接数据处理能力的控制,即点对点连接中连接双方的传输速度的控制,使得数据传输可以满足双方的速度限制

  5. 拥塞控制针对的是整个网络环境数据处理能力的控制,是在整个网络的信息高度公路上不同连接共同占据、竞争网络资源时的网络拥塞处理。

  6. TCP的流量控制:控制滑动窗口的大小

  7. TCP的拥塞控制:TCP会先慢慢试探的发数据,不断加码数据量,越发越多,先发一个,再发2个,4个...。直到出现丢包。

  8. TCP的分段机制:为了避免大规模重传,需要将数据分段,最大分段长度MSS=MTU-40Byte,其中40字节表示TCP头部和IP头部。

  9. 大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。

  10. 对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。