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

【第六天】TCP和UDP的区别 TCP连接如何确保可靠性

TCP和UDP的区别

概念:

  • TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议
  • UDP(用户数据报协议)为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。

特点:

  • TCP:面向连接,传输可靠,传输形式为字节流,传输效率慢,所需资源多。
  • UDP:无连接、传输不可靠、传输形式为数据报文段,传输效率快,所需资源少。

区别:

  • 是否面向连接:TCP是面向连接的传输,UDP是无连接的传输。
  • 是否可靠:TCP是可靠的传输服务,在传输前,会有三次握手建立连接;在传输时,有确认
  • 、窗口、重传、拥塞控制机制。UDP是不可靠传输,数据传输不需要给出确认,且不保证数据不丢失以及到达顺序。
  • 是否有状态:TCP传输是有状态的,它会去记录自己发送消息的状态,比如是否发送,是否被接收。而UDP是无状态的。
  • 传输形式:TCP是面向字节流的,UDP是面向报文的。
  • 传输效率:TCP传输时多了连接,确认重传机制,所以TCP传输效率比UDP低。
  • 首部开销:TCP首部开销(20~60字节),UDP首部开销(8字节)
  • 是否提供广播或多播服务:TCP只支持点对点通信。UDP支持一对一,一对多,多对一,多对多。

使用场景:

  • TCP常用于要求通信数据可靠的场景(如网页浏览,文件传输,邮件传输,远程登录,数据库操作等)
  • UDP常用于要求通信速度高场景(如域名转换、视频直播、实时游戏等)

TCP连接如何确保可靠性

1. 数据块大小控制:

应用数据被分割成TCP认为的最合适发送的数据块,再传输给网络层,数据块被称为报文段或段。

2. 序列号:

TCP给每个数据包指定序列号,接收方根据序列号对数据包进行排序,并根据序列号对数据包去重。

3. 校验和:

TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到的报文检验和有差错,TCP将丢弃这个报文段和不确认收到这个报文段。

4. 流量控制:

TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收端来不及处理发送方的数据时,能提示发送方降低发送的速率,防止包丢失。TCP利用滑动窗口实现流量控制。

5. 拥塞控制:

当网络拥塞时,减少数据的发送。
有以下几种方法:

  1. 慢启动:在连接刚开始时,发送方会逐渐增加发送窗口的大小,从而以指数增长的速度增加发送的数据量。
  2. 拥塞避免:一旦慢启动阶段过去,发送方进入阻塞避免阶段。在这个阶段里,发送方逐渐增加发送窗口的大小,但增加速率较慢,避免过快增加导致网络阻塞。
  3. 超时重传:如果发送方在超时时间内未收到确认,它会认为数据包丢失,并重传这些数据包。这是拥塞控制的最后手段,用于检测和处理网络中的丢包或阻塞情况。当网络出现拥塞,也就会发生数据包重传。
  4. 快速重传和快速恢复:当发送方发送的数据包丢失或网络出现拥塞时,接收方会重复发送确认(duplicate ACK)通知发送方有数据包丢失。当发送方收到一定数量的重复通知时,立刻重传丢失的数据包,而不是等待超时。这样可以减少网络拥塞程度。
  5. 拥塞窗口调整:发送方根据网络的拥塞程度动态调整发送窗口的大小,通过监测网络延迟和丢包情况来确定适合的发送速率,以避免网络阻塞。

6. 确认应答:

通过ARQ协议实现。基本原理是每发完一个分组就停止发送,等待对方确认。如果没收到确认,会重发数据包,知道确认后再发下一个分组。

7. 超时重传:

当TCP发出一个数据段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LC 128.最长连续序列
  • 【计算机网络】数据链路层实验
  • Redis-高级实战案例
  • 基于 HTML+ECharts 实现智慧交通数据可视化大屏(含源码)
  • 老司机通过一张图片就能看懂HTTP和HTTPS的区别
  • 掌握 Symfony 路由系统:配置与管理
  • 【Django】ajax和django接口交互(获取新密码)
  • 揭秘PLC工业网关:连接工业自动化的枢纽
  • java使用hutool工具判断ip或者域名是否可用,java使用ping判断ip或者域名是否可用
  • 汕头 西月 公司的面试
  • Unity中实现动画效果的几种方式
  • 云 IDE 你了解多少
  • 《MySQL DBA 修炼之道》第四章 开发进阶
  • Profinet转ModbusTCP网关模块的配置与应用详解
  • 泰山派RK3566开发板800x1280MIPI屏设备树补丁
  • @jsonView过滤属性
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【个人向】《HTTP图解》阅后小结
  • Angular数据绑定机制
  • Bootstrap JS插件Alert源码分析
  • ES6之路之模块详解
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JS基础之数据类型、对象、原型、原型链、继承
  • Markdown 语法简单说明
  • mysql innodb 索引使用指南
  • 爱情 北京女病人
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前嗅ForeSpider采集配置界面介绍
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一个JAVA程序员成长之路分享
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • MyCAT水平分库
  • ​520就是要宠粉,你的心头书我买单
  • ​Python 3 新特性:类型注解
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #QT(智能家居界面-界面切换)
  • #微信小程序(布局、渲染层基础知识)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (分布式缓存)Redis持久化
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)模仿学习-Action数据的模仿
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)RocketMQ初步认识
  • (转)h264中avc和flv数据的解析
  • (转)shell中括号的特殊用法 linux if多条件判断
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况