TCP与UDP协议

TCP与UDP协议

1、TCP协议:

1、TCP特性:

  • TCP 提供一种面向连接的、可靠的字节流服务。
  • 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP。
  • TCP 使用校验和,确认和重传机制来保证可靠传输。
  • TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复。
  • TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制。

滑动窗口协议,属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量。

总的来说,TCP 协议是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现数据稳定可靠性的传输

2、TCP协议的报文格式:

在这里插入图片描述

TCP 报文段包括协议首部和数据两部分,协议首部的固定部分是 20 个字节,头部是固定部分,后面是选项部分。

  • 源端口号以及目的端口号:各占 2 个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,一般来讲,通过端口号和IP地址,可以唯一确定一个 TCP 连接,在网络编程中,通常被称为一个 socket 接口
  • 序号:Seq 序号,占 4 个字节。用来标识从 TCP 发送端向 TCP 接收端发送的数据字节流序号,发起方发送数据时对此进行标记。
  • 确认序号:Ack 序号,占 4 个字节,包含接受端所期望收到的下一个序号。只有 ACK 标记位为 1 时,确认序号字段才有效,因此,确认序号应该是上次已经成功收到数据字节序号加 1,即 Ack = Seq + 1。
  • 数据偏移:占 4 个字节,用于指出 TCP 首部长度。
  • 保留字段:占 6 位,暂时可忽略,值全为 0。
  • 六位标志位:值内容含义如下
  • 窗口:占 2 个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。
  • 校验和:占 2 个字节,范围包括首部和数据两部分
  • 紧急指针:指出了紧急数据的末尾在报文段中的位置,和 URG 搭配使用
  • 选项和填充:是可选的,默认情况是不选。

3、TCP三次握手:

计算机之间使用 TCP 协议进行传输数据时,每次连接都需要经过 3 个阶段:创建连接、数据传送和释放连接,即传输数据之前,在发送端和接收端建立逻辑连接、然后传输数据、最后断开连接,它保证两台计算机之间比较可靠的数据传输。

1、创建连接:

当两个设备之间准备传输数据之前,TCP 会建立连接,创建连接的阶段需要三次握手。

在这里插入图片描述

详细过程如下:

  • 第一次握手:客户端向服务器端发出连接请求,等待服务器确认。
  • 第二次握手:服务器端收到请求后,向客户端回送一个确认,通知客户端收到了连接请求。
  • 第三次握手:客户端再次向服务器端发送确认信息,确认连接。

完成以上 3 次握手之后,可靠性连接建立完成,就可以进行数据传输了。

4、TCP四次挥手:

1、释放连接:当数据传输完毕之后,TCP 会释放连接,连接的释放需要四次挥手。

在这里插入图片描述

  • 第一次挥手:客户端向服务器端发出请求切断连接,等待服务器确认。
  • 第二次挥手:服务器端收到请求后,向客户端回送一个确认信息,并同意关闭请求。
  • 第三次挥手:服务器端再次向客户端发出请求切断连接,等待客户端确认。
  • 第四次挥手:客户端收到请求后,向服务器端回送一个确认信息,并同意关闭请求。

5、重传机制介绍:

当网络不稳定的时候,很容易出现数据包丢失,TCP 采用了哪些重传手段来解决数据包丢失问题呢?

常见的重传方式有以下几种:

  • 超时重传
  • 快速重传
  • SACK
  • D-SACK
  1. 超时重传:

    超时重传,顾名思义,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发数据。

    TCP 会在以下两种情况发生超时重传:

    • 发送的数据包丢失。
    • 确认应答丢失。

    那如何来设定超时重传的时间呢?

    • RTT:指的是数据从网络的一端传送到另一端所需要的时间,也就是数据包发送出去的往返时间。
    • RTO:超时重传时间。

    1)当RTO较大时,重传时间间隔就会比较大,会出现数据传输效率差的现象,比如数据包丢失之后,需要等很长时间才重发,性能差;

    2)当RTO较小时,可能会出现并没有丢失包就重发,多次重发会造成网络拥堵,导致出现更多的超时,更多的超时意味着更多的重发;

    3)TCP每当遇到一次超时重传的时候,会将下一次超时时间间隔设为先前值的两倍,多次超时说明网络环境差,不宜频繁反复重发。

  2. 快速重传:

    • 快速重传就是来补充超时重传机制中时间过长的问题

    • 快速重传不像超时重传那样通过时间来驱动重发,而是通过次数来驱动重发。

    • 当收到报文重复的 ACK 数量,到达一定的阀值(一般为3),TCP 会在定时器过期之前,检查丢失的报文段并重传丢失的报文段。

  3. SACK方法:

    具体实现就是需要在 TCP 头部选项字段里加一个 SACK 的东西,接受方可以将缓存的数据地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。

    注意:如果要支持 SACK 机制,必须发送方和接受方都要支持。在 Linux 操作系统中,开发者可以通过net.ipv4.tcp_sack参数打开这个功能(Linux 2.4 后默认打开)。

  4. Duplicate SACK 方法:

    D-SACK,这个方法实现主要是使用 SACKACK来告诉发送方有哪些数据被重复接收了,以防止 TCP 反复的重发。

    使用D-SACK方法的好处,可以让发送方知道,是发出去的包丢了还是接收方回应的 ACK 包丢了,然后来决定是否需要继续重发包。

    在 Linux 操作系统下,可以通过net.ipv4.tcp_dsack参数来开启/关闭这个功能(Linux 2.4 后默认打开)。

2、UDP协议:

1、简介

UDP协议是一种在计算机网络中广泛使用的传输层协议。与TCP协议相比,UDP协议具有更轻量级、无连接和不可靠的特点。

UDP协议基于IP协议,它提供了一种简单的数据传输机制。与TCP协议不同,UDP协议不需要在通信双方建立可靠的连接。它通过将数据划分为一系列称为"数据报"的小块来传输数据。每个数据报都包含了源端口号、目标端口号、数据长度和校验和等信息。

在这里插入图片描述

2、UDP协议工作原理:

  • 应用程序将数据传递给UDP协议。
  • UDP协议将数据封装成数据报,并加上源端口号和目标端口号等信息。
  • 数据报通过网络传输到目标主机。
  • 目标主机的UDP协议接收数据报,并将数据传递给目标应用程序。

3、UDP协议特点:

  1. 无连接性:UDP协议在通信之前不需要建立连接,数据报直接发送给目标主机,从而降低了通信的延迟。

  2. 面向报文:UDP协议将应用程序传递给它的数据封装成独立的数据报进行传输,每个数据报都是独立的实体,不会进行拆分和重组。

  3. 不可靠性:UDP协议不提供数据的可靠传输,数据报在传输过程中可能会丢失、重复、乱序等。它不保证数据的完整性和顺序性,也不提供重传机制。

  4. 简单高效:由于UDP协议的简单性,它的开销相对较小,传输效率较高。适用于一些对传输速度要求较高、但对数据完整性要求不那么严格的应用场景。

4、UDP协议的应用:

  • 实时音视频传输。
  • DNS解析。
  • 游戏应用。
  • loT设备通信。
  • 广播和多播。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/160078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个?不考虑多物体提交。障碍物,尽可能选择状态发生变化的物体。如果没有明显变化的,则考虑周边的物体。车的状态最后趋于减速、停止,时序…

OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍

1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别(ASR,Automatic Speech Recognition)模型,他们通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask&am…

Windows11怎样投屏到电视上?

电视屏幕通常比电脑显示器更大,能够提供更逼真的图像和更震撼的音效,因此不少人也喜欢将电脑屏幕投屏到电视上,缓解一下低头看电脑屏幕的烦恼。 Windows11如何将屏幕投射到安卓电视? 你需要在电脑和电视分贝安装AirDroid Cast的电…

Python | 机器学习之SVM支持向量机

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之SVM支持向量机概念 1.1 机器学习 1.2 SVM支持向量机 2. SVM支持向量机…

hahahaha发到这里吧

一大早上笑死我 恭喜在座的各位,一直以为这次比赛public和private排名会相差不大,结果前6有4个人都是从银牌歘一下上来的,想象地到他们看到结果时的喜悦

python引入自己不同目录的模块

1.目录结构 from manual_data.utils import delete_and_insert_center

ceph学习笔记

ceph ceph osd lspoolsrbd ls -p testpool#查看 ceph 集群中有多少个 pool,并且每个 pool 容量及利 用情况 rados dfceph -sceph osd tree ceph dfceph versionsceph osd pool lsceph osd crush rule dumpceph auth print-key client.adminceph orch host lsceph crash lsceph…

搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用

目录 专题一 OpenAI开发者大会最新技术发展及最新功能应用 专题二 AIGC技术解析 专题三 提示词工程高级技巧 专题四 ChatGPT/GPT4的实用案例 专题五 让ChatGPT/GPT4成为你的论文助手 专题六 让ChatGPT/GPT4成为你的编程助手 专题七 让ChatGPT/GPT4进行数据处理 专题八 …

这就是不创业的最大的原因,机器视觉兄弟们创业要谨慎,为什么99.99%机器视觉公司老板是销售人员?

机器视觉公司,99%公司实行销售优先原则,企业老板99%从销售人员中产生。所以机器视觉兄弟们创业要谨慎。 企业的本质就是通过销售获得利润的组织,销售是立足之本,没有销售,创业就是耍流氓。因此,企业的一切…

CF1899B 250 Thousand Tons of TNT

题目链接 题目 题目大意 T T T 组测试数据 每组 n n n 个货物,第 i i i 个货物 的重量是 a i a_i ai​ 用k辆货车按顺序装这些货物,条件是每辆车上的货物个数都一样,也即是说 n n n 必须能被 k k k 整除, 求任意两辆车货物总…

Redis 访问控制列表(ACL)

Redis ACL 关于 Redis ACL与旧版本兼容ACL helpACL 配置模式redis.conf 配置模式外部 ACL File 配置模式 ACL 规则总结 关于 Redis ACL Redis ACL (访问控制列表) 是 Access Control List 的缩写,它允许某些连接在可以执行的命令和可以访问的密钥方面受到限制。它…

代码随想录算法训练营第五十八天丨 动态规划part18

739. 每日温度 思路 首先想到的当然是暴力解法,两层for循环,把至少需要等待的天数就搜出来了。时间复杂度是O(n^2) 那么接下来在来看看使用单调栈的解法。 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边…

智能配电房管理系统

智能配电房管理系统依托电易云-智慧电力物联网,是一种集成了互联网、物联网、大数据、人工智能等先进技术的管理系统,专门用于配电房的智能化管理和运维。以下是智能配电房管理系统的主要功能和特点: 一、主要功能: 实时监测与数据…

SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法

AND 运算符 SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录。下面是AND运算符的基本语法: SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 ...;column1, column2,等是您要选…

Go 语言数组基础教程 - 数组的声明、初始化和使用方法

数组用于在单个变量中存储相同类型的多个值,而不是为每个值声明单独的变量。 声明数组 在Go中,有两种声明数组的方式: 使用var关键字: 语法 var array_name [length]datatype{values} // 这里定义了长度 或者 var array_n…

Typora for Mac:打造全新文本编辑体验

Typora for Mac是一款与众不同的文本编辑器,它不仅拥有直观易用的界面,还融合了Markdown语法和富文本编辑的功能,为用户带来了前所未有的写作和编辑体验。 一、简洁明了的界面设计 Typora for Mac的界面简洁明了,让用户可以专注…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷F

1、常见的加密算法可以分为对称加密算法和非对称加密算法,以下关于它们的描述正确的是 A、AES是一种常见的非对称加密算法 B、凯撒密码是一种非对称加密 C、非对称加密算法的解密使用的秘钥与加密不同 D、对称加密算法无法被暴力破解 答案:C 2、12根…

我为什么开始写技术博客

今天没有技术文章,只是想聊聊认真做CSDN和公众号以来的一些感想。 1.为什么开启技术分享 我不算是一个聪明的人,没有过目不忘的本事,所以从工作开始就养成了做笔记的习惯; 最开始15、16年做模型开发,那时候环境其实就…

LINUX入门篇【6】----第一个LINUX小程序---进度条及相关知识讲解

前言: 本篇我们将开始尝试构建我们的第一个LINUX的小程序----进度条作为一个十分常见的程序,在我们之后的工程实践中也是需要多次运用,但是介于我们目前还没有去学习网络等方面的知识,没法独立的去利用程序去下载一个真正的程序&…

Humanoid Robotics Whole Body Control(WBC)全身控制

系列文章目录 文章目录 系列文章目录前言一、ROS —— 什么是全身控制?二、IEEE - RAS三、维也纳工业大学 —— 自动化与控制研究所(ACIN)四、IIt(意大利技术研究院) 前言 谷歌的几种解释 一、ROS —— 什么是全身控制…