TCP与UDP的区别(什么是三次握手和四次挥手)

news2024/11/24 2:10:30

目录

一、TCP和UDP是什么

二、TCP和UDP的区别

三、TCP协议三次握手

 为什么是三次握手而不是两次握手 ?

在不可靠信道上建立可靠连接会产生什么问题呢?

四、四次挥手

为什么客户端需要等待超时时间? 

总结:


我们日常生活中微信聊天,浏览网页,和你现在正在看的csdn 都是通过TCP和UDP这两种协议进行数据传输的。

TCP和UDP都工作在传输层,他们的目的都是在程序和程序之间传输数据(文本,视频,图片等)这些数据对于TCP和UDP来说都是一堆二进制数,那他们之间的区别是什么呢?

一、TCP和UDP是什么

TCP:
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

UDP:
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。 

 是不是看懵了。。。。。。

其实我们可以将UDP当作我们平时写信来传输数据,而TCP就是打电话来传输数据。

那这两者有什么区别呢?


二、TCP和UDP的区别

上面我们说了,UDP->写信,TCP->打电话。这两者本质的区别就是写信是基于非连接的,打电话是基于连接的。也就是说UDP是基于非连接的TCP是基于连接的。

写信的时候我们要考虑:

<1> 发出去的信对方是否收到;

<2> 信的内容是否完整;

<3> 发出去的信的顺序是否正确;

打电话的时候就没有上面的顾虑:

<1> 电话接通,建立连接。

<2> 互相通话,你说出去的话能及时的得到对方的回应。

<3> 结束通话。

通过对上面的理解我们来看下面的总结:

  1. TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数据的发送成功。
  2. TCP是可靠的通信方式。通过TCP连接传送的数据,TCP通过超时重传、 数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
  4. 每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个人的包。

三、TCP协议三次握手

三次握手是建立连接的过程。

我们对比下图来看:

当客户端向服务端发起连接时,会先发一包连接请求数据(SYN),询问服务端能否建立连接,如果服务端同意建立连接,会回复客户端一个(SYN+ACK)包数据,客户端收到之后,回复一包(ACK)包,连接建立。

因为这个过程中互相发送了三包数据,所以称之为三次握手。

 为什么是三次握手而不是两次握手 ?

服务端回复完SYN+ACK之后就建立连接,为了防止已失效的请求报文,突然又传到服务器引起错误。

假设用两次握手建立连接,客户端向服务器端发送了一个(SYN)A包,来请求建立连接,因为一些未知的原因A包未到达服务器,在中间某个网络结点产生了滞留,为了建立连接,客户端会重发(SYN)B包,这次B包正常送达,服务端回复(SYN+ACK)之后建立连接,两次握手完成。但是这时候A包阻塞的网络结点突然恢复,A包又送达到服务端,服务端以为客户端又发送了一次连接,在发送完(SYN+ACK)包之后进入等待数据状态。客户端认为是一个连接,但是服务端认为是两个连接,造成了状态不一致问题。

如果是三次握手的话,服务端接收到A包,回复(SYN+ACK)包之后会等待客户端的ACK包,如果等不到,连接建立失败。

三次握手目的就是在不可靠的信道上建立可靠的连接。

在不可靠信道上建立可靠连接会产生什么问题呢?

一包数据可能会被拆成多包发送,就会产生丢包问题,这些数据包到达的先后顺序不同,就会产生乱序问题

为了解决这两个问题TCP为每一个连接建立了一个发送缓冲区,从建立连接后的第一个序列号为0,后面每个序列号依次加1,发送数据时,从发送缓冲区取一部分数据组成发送报文,在TCP头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ACK=接收序列号+长度=下一包数据发送的起始序列号。服务端根据序列号和长度重构出完整的数据,如果传输过程中有数据包丢失,服务端会要求客户端重发。


四、四次挥手

处于连接状态的客户端和服务端,都可以发起关闭连接请求,需要四次挥手来进行连接关闭。

客户端主动发起连接关闭请求,它需要向服务端发送一包(FIN)包,表示要关闭连接,自己进入终止等待1状态,这就是第一次挥手。

服务端收到(FIN)包,发送一包(ACK)包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这就是第二次挥手

服务端此时还可以发送未发送的数据,客户端也可以接收数据,等服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这就是第三次挥手

客户端收到之后,回复一包(ACK)包,进入超时等待状态,经过超时时间后关闭连接,服务端收到(ACK)包之后立即关闭连接,这就是第四次挥手

为什么客户端需要等待超时时间? 

为了保证服务端已收到(ACK)包,如果客户端发完(ACK)包之后就关闭,但是(ACK)包如果在发送过程中丢失,服务端就会一直停留在最后确认状态。

如果客户端发完(ACK)包之后等待一段时间,服务端如果没有收到(ACK)包会重发(FIN)包,客户端收到(FIN)之后继续发(ACK)包,并更新超时时间。

四次挥手和三次握手一样,在不可靠的网络链路种,进行可靠的连接断开。


总结:

UDP:性能损耗少,资源占用少,稳定性弱

           eg:域名查询,语音通话,视频直播,隧道网络(VPN)

TCP:稳定可靠

           eg:传输文件,发送邮件,浏览网页等;

本文参考:

【一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手】 https://www.bilibili.com/video/BV1kV411j7hA/?share_source=copy_web&vd_source=65d2d677bbcda991d3d564eaa4e4c4d3

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

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

相关文章

医疗中心管理环境温湿度,这样操作就对了!

随着医疗技术的不断发展&#xff0c;越来越多的医疗设备对于稳定的工作环境要求越来越高&#xff0c;而环境温湿度是影响这些设备性能和可靠性的关键因素之一。 为了确保医疗设备的正常运行和患者的安全&#xff0c;医疗机构越来越倾向于采用精密空调监控系统来维护设备的稳定性…

如何输出高质量软文,媒介盒子教你4大技巧

作为一名软文作者&#xff0c;只有知道软文写作的要求&#xff0c;才能打造一篇成功的软文&#xff0c;以便为企业或产品带来较高的关注度和曝光率&#xff0c;提高企业的知名度和品牌形象。下面就随小编一起来看看吧&#xff01; 1、吸引眼球的标题 标题是软文写作的灵魂&am…

css-伪类:not实现列表最后一项没有样式

有了&#xff1a;not这个选择符&#xff0c;那么你将可以很好的处理类似这样的场景&#xff1a;假定有个列表&#xff0c;每个列表项都有一条底边线&#xff0c;但是最后一项不需要底边线。 示例&#xff1a; html: <ul><li>111111111111</li><li>21…

传统品牌如何通过3D虚拟数字人定制和动捕设备加速年轻化发展?

步入Z时代&#xff0c;年轻一代消费者的生活方式深受互联网技术和媒介环境影响&#xff0c;对新潮事物感兴趣&#xff0c;消费思维也相对前卫&#xff0c;品牌需要探索契合Z世代的消费观念&#xff0c;寻找新的链接拉近品牌与消费者的距离&#xff0c;而3D虚拟数字人定制可以帮…

900ES1-0100 honeywell 可减少视觉引导应用的整体开发时间

900ES1-0100 honeywell 可减少视觉引导应用的整体开发时间 CV2视觉系统配有高柔性电缆(以太网或USB)。通过将高柔性电缆作为所有CV2视觉系统的标准配置&#xff0c;Epson CV2摄像机可以安装在机器人臂(移动)或固定装置(固定)上。基于向导的校准使机器人到视觉系统的校准变得轻…

内网穿透——搭建私人影音媒体平台

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

第四讲Java基本语法——数组结构(多维数组)

前言 前面几讲,我们讲了Java基本语法,初学者也能够有一定的入门。本讲,我们也是继续来讲解一下Java另一个基础语法——数组,其实在前面讲解数据类型的时候,我们也有提到数组是引用类型,那今天我们就来分析一下什么是数组,怎么用数组呢? 一、数组是什么 数组是…

软件测试用例经典方法 | 逻辑覆盖测试法及案例【文末赠书】

逻辑覆盖测试法是常用的一类白盒测试方法&#xff0c;其以程序内部逻辑结构为基础&#xff0c;通过对程序逻辑结构的遍历来实现程序测试的覆盖。逻辑覆盖测试法要求测试人员对程序的逻辑结构有清晰的了解。 逻辑覆盖测试法是一系列测试过程的总称&#xff0c;是使测试过程逐渐…

如何做科研--英文文献阅读

以下是截取书中的一段话&#xff0c;这对于所有科研工作者感觉都适用&#xff0c;也能让自己了解自己领域前沿的东西&#xff0c;应该也能提高大家英文阅读能力&#xff0c;一起学习共勉&#xff01; “从1998年在普林斯顿大学任职&#xff0c;到在清华大学当教授&#xff0c;…

需求变化频繁的情况下,如何实施自动化测试

一.通常来说&#xff0c;具备以下3个主要条件才能开展自动化测试工作: 1.需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本。如果需求变动过于频繁&#xff0c;那么测试人员就需要根据变动的需求来不断地更新自动化测试用例&#xff0c;从而适应新的功能。…

024:vue中动态添加ref,通过ref更改css

第024个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

【视觉SLAM入门】6.1. (基于直接法的视觉里程计)LK光流法,代码解读, 直接法,特征点法对比,稀疏,半稠密,稠密地图

"刺卵掷地&#xff0c;逐蝇弃笔" 0. 数据集1. 光流法(Optical Flow)1.1. 光流1.2. LK光流法1.3 关键代码&#xff1a;1.4 特点 2. 直接法(Direct Methods)2.1 分类比较2.2 优缺点 前置事项&#xff1a; 特征点耗时&#xff0c;丢弃有用信息&#xff0c;特征缺失&…

vite 配置自动补全文件的后缀名

vite 不建议自动补全&#xff0c;文件的后缀名的 const Home ()>import("/views/Home.vue");文件是必须要加上 .vue 的后缀名的 如果 想要像 webpack 一样的不用写&#xff0c; 可以在vite.config.js中配置如下就可以了

【bug记录】RuntimeError: CUDA error: device-side assert triggered

RuntimeError: CUDA error: device-side assert triggered 我个人使用pytorch lightning时&#xff0c;报错RuntimeError: CUDA error: device-side assert triggered 我个人是因为分类类别数目对不上&#xff0c;但是在gpu上运行是不会提示错误的 解决方案&#xff1a;建议…

kubesphere中部署grafana实现dashboard以PDF方式导出

1&#xff0c;部署grafana-image-renderer 2&#xff0c;部署grafana GF_RENDERING_SERVER_URL http://ip:30323/render #grafana-image-renderer地址 GF_RENDERING_CALLBACK_URL http://ip:32403/ #grafana地址 GF_LOG_FILTERS rend…

【ES】笔记-Promise基本使用

笔记-基本使用 一、初始Promise1. 抽象表达:2. 具体表达:为什么要用 Promise?promise的基本流程 二、fs读取文件三、AJAX请求四、Promise封装fs模块五、util.promisify方法六、Promise封装AJAX操作 一、初始Promise 1. 抽象表达: 1. Promise 是一门新的技术(ES6 规范) 2. Pr…

关于单例模式

单例模式的目的&#xff1a; 单例模式的目的和其他的设计模式的目的都是一样的&#xff0c;都是为了降低对象之间的耦合性&#xff0c;增加代码的可复用性&#xff0c;可维护性和可扩展性。 单例模式&#xff1a; 单例模式是一种常用的设计模式&#xff0c;用简单的言语说&am…

uview ui 1.x ActonSheet项太多,设置滚动(亲测有效)

问题&#xff1a;ActionSheet滚动不了。 使用uview ui &#xff1a;u-action-sheet, 但是item太多&#xff0c;超出屏幕了&#xff0c; 查了一下文档&#xff0c;并没有设置滚动的地方。 官方文档&#xff1a;ActionSheet 操作菜单 | uView - 多平台快速开发的UI框架 - uni-a…

oracle 基础运用2

首先在电脑上安装PLSQL developer&#xff0c;这个是oracle图形化连接工具&#xff0c;然后安装win64_11gR2_client&#xff0c;这个是orace客户端&#xff0c;安装完成后可以在cmd命令行输入sqlplus命令进行验证&#xff0c;如图表示安装成功。 作为sys的连接应该是SySDBA或Sy…

AD中如何给过孔添加盖油

AD中如何给过孔添加盖油 画PCB时通常我们会放一些过孔&#xff0c;起到上下层信号转接或者地过孔的作用&#xff0c;当这些过孔较大较密时如果不做盖油处理&#xff0c;就会影响电气性能而且很不美观。如下图&#xff1a; 如果要盖油&#xff0c;点击对应的过孔&#xff0c;将…