当前位置: 首页 > article >正文

TCP、UDP

TCP和UDP的区别

是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接

是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任何确认,并且不保证数据不丢失不保证是否顺序到达。TCP 提供可靠的传输服务,TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达

是否有状态:有状态说的是 TCP 会去记录自己发送消息的状态比如消息是否发送了、是否被接收了等等。为此 ,TCP 需要维持复杂的连接状态表。而 UDP 是无状态服务,只管发送不管后果。

传输效率:由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。

传输形式:TCP 是面向字节流的,UDP 是面向报文的。

首部开销:TCP 首部开销(20 ~ 60 字节)比 UDP 首部开销(8 字节)要大。

TCP和UDP的使用场景

UDP 一般用于即时通信,比如:语音、 视频、直播等等。这些场景对传输数据的准确性要求不是特别高,比如你看视频即使少个一两帧,实际给人的感觉区别也不大。

TCP 用于对传输准确性要求特别高的场景,比如文件传输、发送和接收邮件、远程登录等等

TCP的三次握手和四次挥手

三次握手过程中:一共涉及到三个包的传输。

如果第一次包没有成功发送到,即C给S的,那么C会超时重传,直到收到S的确认。

如果第二次包没有成功发送到,即S给C的确认,那么S会超时重传,直到收到S的确认。

如果第三次包没有成功发送到,即C给S的确认,分为三种情况:
①如果此时双方都没有数据发送,那么S会认为自己的消息没有传输到,会超时重传,直到收到C的确认。
②如果此时正好C要开始发数据了(因为在C的角度,三次握手已经建立好了),那么S收到C的data+ACK,自然会切换为established状态,并接受C的data。
③如果S有数据发送,数据发送不了,会一直周期性超时重传SYN + ACK,直到收到A的确认才可以发送数据。

 注意,第三次传输如果丢包的话,只涉及S的超时重传,不涉及C!!!

TCP的超时重传机制主要是针对数据传输的,而不是专门为了确认报文。在TCP协议中,当一个确认(ACK)报文单独发送时(即不携带任何数据),如果这个ACK报文丢失,发送方不会等待一个超时时间然后重传这个ACK。

//TODO 四次挥手


http://www.kler.cn/news/331572.html

相关文章:

  • Java 异常一口气讲完!(_ _)。゜zzZ
  • 【SQLite】基础操作
  • 【快速删除 node_modules 】rimraf
  • 深入理解回调函数:指针世界的终极挑战(完)
  • CSS内边距
  • ES索引备份
  • 关于建表字段是否该使用 `NOT NULL` 的问题,你怎么看?
  • ubuntu命令行连接wifi
  • Hive数仓操作(十二)
  • C++ 语言特性13 - 强枚举类型
  • IP 数据包分包组包
  • mit6824-01-MapReduce详解
  • 解决 TypeError: Expected state_dict to be dict-like, got <class ‘*‘>.
  • 在 Ubuntu 下通过 Docker 部署 NAS 服务器
  • 损失函数篇 | YOLOv5 引入Unified-IoU 高质量目标检测IoU损失
  • Vue3项目开发——新闻发布管理系统(九)(完结篇)
  • 项目-坦克大战学习-资源冲突解决
  • 算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测
  • redis 5的安装及启动(window)
  • csapp_计算机系统通览