网络通信(TCP/UDP协议 三次握手四次挥手 )

news2025/1/11 2:40:07

三、TCP协议与UDP协议

1TCP/IPTCP UDP是什么

TCP/IP协议是一个协议簇,里面包括很多协议的, UDP只是其中的一个, 之所以命名为TCP/IP协议,  因为TCP IP协议是两个很重要的协议,就用他两命名了,而TCPUDP是位于TCP/IP模型中传输层的两 个协议,他们代表着TCP/IP模型所具备的两种通信模式。

TCP (Transmission Control Protocol)传输控制协议,也叫数据流协议 。 UDP (User Datagram Protocol)用户数据报文协议,也叫报文协议。

2TCP协议介绍

TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条安 全可靠的通信方式:

TCP的主要特点:

  基于流的方式 

   面向连接;

  可靠通信方式;

  在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;

  通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。

TCP的传输机制:

数据分片: 在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和 重组;

到达确认: 接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;

超时重发: 发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发 分片;

滑动窗口: TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能 接纳的数据, TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;

失序处理: 作为IP数据报来传输的TCP分片到达时可能会失序, TCP将对收到的数据进行重新排序,将 收到的数据以正确的顺序交给应用层;

重复处理: 作为IP数据报来传输的TCP分片会发生重复, TCP的接收端必须丢弃重复的数据;

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

TCP的首部格式:

3TCP的连接过程

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对 方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连   接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造 成的。

TCP三次握手的过程:

1. 客户端发送SYNSEQ=x)报文给服务器端,进入SYN_SEND状态。

2. 服务器端收到SYN报文,回应一个SYN SEQ=yACKACK=x+1)报文,进入SYN_RECV态。

3. 客户端收到服务器端的SYN报文,回应一个ACKACK=y+1)报文,进入Established状态。 三次握手完成, TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

TCP四次挥手的过程:

1. 某个应用进程首先调用close,称该端执行主动关闭active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。

2. 接收到这个FIN的对端执行 被动关闭passive close),这个FINTCP确认。

注意: FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候  该应用进程接收的任何其他数据之后,因为,  FIN的接收意味着接收端应用进程在相应连接上再无 额外数据可接收。

3. 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发 送一个FIN

4. 接收这个最终FIN的原发送端TCP (即执行主动关闭的那一端)确认这个FIN [3]

既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节,所以叫四次挥手。

注意:

1. “通常是指,某些情况下,步骤1FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执 行被动关闭那一端,有可能被合并成一个分节。

2. 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为半关

half-close)。

3. 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的 信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个

FIN

4. 无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某 些协议,例如, HTTP/1.0却由服务器执行主动关闭。

4 UDP协议介绍

是一种支持无连接的传输协议, UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于 传输层,处于IP协议的上一层,与TCP互为补充, UDP为应用程序提供了一种无需建立连接就可以发送    封装的 IP 数据包的方法。

由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时 向多个客户机传输相同的消息(多对多通信)。

UDP的主要特点:

UDP它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做 什么特别的事情,而TCP协议几乎做了所有通信协议该做的事情。

UDP不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法 得知其是否安全完整到达的。

UDP的首部格式:

UDP信息包的标题很短,只有8个字节,相对于TCP20个字节信息包而言UDP的额外开销很小。

Length

数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被 用来计算可变长度的数据部分(又称为数据负载)。

数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为 65535字节。不过, 一些实际应用往往会限制数据报的大小,有时会降低8192字节。

吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的

限制。

UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层,既不 拆分,也不合并,而是保留这些报文的边界,由应用程序需要选择合适的报文大小。

Checksum

UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得 出,在传递到接收方之后,还需要再重新计算。

如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验 计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验  值。

UDP的适用范围:

它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成 ,也就是可靠性 由应用层负责, UDP协议适用运行在同一台设备上的多个应用程序进行通信,即使进行网络通信也只适  合于一次传输少量数据,使用UDP协议包括: TFTPSNMP NFS DNS BOOTP

UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选 项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保 障可靠性的应用程序。

多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。当强调传输性能而不是 传输的完整性时,如:音频和多媒体应用, UDP是最好的选择。在数据传输时间很短,以至于此前的连 接过程成为整个流量主体的情况下, UDP也是一个好的选择。

5、选择TCP还是UDP

TCP向上层提供面向连接的可靠服务  UDP向上层提供无连接不可靠服务。

虽然 UDP 并没有 TCP 传输来的准确,但是 也能在很多实时性要求高的地方有所作为。

UDP

TCP

是否连接

无连接

面向连接

是否可靠

不可靠传输,不使用流量控制和拥塞控制

可靠传输,使用流量控制和拥塞 控制

连接对象个 

支持一对一 ,一对多,多对一和多对多交互 通信

只能是一对一通信

传输方式

面向报文

面向字节流

首部开销

首部开销小,仅8字节

首部最小20字节,最大60字节

适用场景

适用于实时应用(IP电话、视频会议、直播 等)

适用于要求可靠传输的应用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别知云单一选择,这些文献翻译工具同样值得信赖!

在翻译领域,知云文献翻译以其专业度和便捷性赢得了众多用户的青睐,但市场上还有许多其他翻译工具同样值得关注。本文将为您推荐几款优秀的翻译工具。 Foxit在线翻译 链接: https://fanyi.pdf365.cn/ Foxit在线翻译以其高效的翻译速度和准…

创建第一个Qt项目

创建第一个QT项目 创建工程名称一般不要有特殊符号,不要有中文 项目工程保存路径可修改,路径不要带中文 Base class中的三个选项 QMainWindow:主窗口类,包括菜单栏、工具栏、状态栏。 QWidget:可以创建一个空白的窗口,是所有界…

嵌入式软件--数据结构与算法 DAY 13

在嵌入式中,对算法的要求不高,但顺序查找和冒泡排序是经典算法,必须掌握。 1.算法定义 算法是一个用于解决特定问题的有限指令序列(计算机可以执行的操作)。通俗的理解就是可以解决特定问题的方法。 2.时间复杂度 …

手动和torch.nn实现卷积神经网络、空洞卷积、残差网络

一、数据集 1. 分类问题 数据集——车辆分类数据 ⚫输入图片,输出对应的类别 ⚫共1358张车辆图片 ⚫分别属于汽车、客车和货车三类 ⚫汽车:779张 ⚫客车:218张 ⚫货车:360张 ⚫每个类别随机取20-30%当作测试集 ⚫各图片的大小不一,需要将图片拉伸到相同大小 汽车 …

three.js 安装方法、基础简介、创建基础场景

threejs简介 Three.js是一个基于JavaScript编写的开源3D图形库,‌利用WebGL技术在网页上渲染3D图形。‌ 它提供了许多高级功能,‌如几何体、‌纹理、‌光照、‌阴影等,‌使得开发者能够快速创建复杂且逼真的3D场景。‌ threejs提供了丰富的功…

云原生日志Loki

1. Loki简介 1.1 Loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签…

关于Vue项目npm快捷键,点击run启动报错,及npm i也报错的解决办法

1.配置idea的npm 2.点击运行按钮 3.结果 分析原因及问题: npm i npm run dev 由于是刚刚从gitlab新拉的前端代码,可能没有用命令install过类似于没有编译过,所以执行一下上面的命令 结果报错如下: F:\tbyf\qjyy\hip-manager-ui&…

SpringBoot整合MyBatis-Plus完整详细版(提供Gitee源码)

前言:本篇文章完整详细介绍了SpringBoot整合MyBatis-Plus的完整过程,这边我的SpringBoot版本是2.4版本、JDK1.8和Maven3.8.1版本,跟着文章一步步走就可以了,MyBatis-Plus整合非常方便,也是现在企业开发中经常会用的一个…

学习笔记第二十四天

1.exec族函数的区别 int exec l(const char *path, const char *arg, ...); int exec l p(const char *file, const char *arg, ...); int exec l e(const char *path, const char *arg,..., char * const envp[]); int exec v(const char *path, char *const argv[]); …

1011 World Cup Betting

题目 解释 题目讲的就是,给你三行数,每一行包含3个浮点小数,让你找到最大的那个小数,然后如果最后的小数是第一个,输出W,是第二个,输出T,是第三个,输出L,最后…

Day37 | 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

语言 Java 188.买卖股票的最佳时机IV 买卖股票的最佳时机IV 题目 给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多…

Broken: Gallery靶机复现

靶机设置 靶机设置为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.142 目录扫描 dirsearch 192.168.112.142 访问浏览器 发现文件页面 查看后发现都没什么用 getshell hydra -L rockyou.txt -P rockyou.txt 192.168.112.142 ssh 尝试爆破ssh账号密码…

互联网应用主流框架整合【Redis常用技术】

和其他大部分NoSQL不同,Redis是支持事务的,尽管没有数据库那么强大,但非常有用,在某些高并发但又要保证高度一致性的场景下,代替数据库事务非常有效;在Redis的机制中,允许通过流水线一次性发给R…

DATAX自定义KafkaWriter

因为datax目前不支持写入数据到kafka中,因此本文主要介绍如何基于DataX自定义KafkaWriter,用来同步数据到kafka中。本文偏向实战,datax插件开发理论宝典请参考官方文档: https://github.com/alibaba/DataX/blob/master/dataxPlug…

2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第二弹 手搓机械臂

第一弹赛题的选择与前期方案的准备 opencv调用摄像头bug的解决 机械臂的组装 采用三个舵机,组成一个三自由度的机械臂。 并且利用电磁吸盘的方式,完成对棋子的抓取工作,后面的事实证明,在预算不足的情况下,队友手搓…

顺序表的实现——数据结构

线性表 文章目录 线性表线性表的定义和基本操作线性表的定义线性表的基本操作 线性表的顺序表示顺序表的定义顺序表的实现——静态分配顺序表的实现——动态分配顺序表的特点 线性表的定义和基本操作 线性表的定义 线性表(Linear List)的定义 ​ 线性…

多进程多线程

exec 系列函数 结束代码函数 atexec 函数 结束标志,从下往上 先出2再出1 void cleanup1() {printf("clean1"); }void cleanup2() {printf("clean2"); }atexec(cleanup1) atexec(cleanup2)

28. 找出字符串中第一个匹配项的下标【 力扣(LeetCode) 】

一、题目描述 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 二、测试用例 示例 1: 输…

Cmake编译工程

Cmake目录结构:项目主目录中会放一个CmakeList.txt的文本文档,后期使用cmake指令时候,依赖的就是该文档 1.包含源文件的子文件夹包含Cmakelist.txt文件时,主目录的Cmakelists.txtx要通过add_subdirector添加子目录 2.包含源文件…

算法3:二分查找(下)

文章目录 寻找峰值寻找旋转数组最小值 寻找峰值 class Solution { public:int findPeakElement(vector<int>& nums) {int left 0, right nums.size() - 1;while(left < right){int mid left (right - left) / 2;if(nums[mid] < nums[mid 1])left mid 1;…