计算机网络——TCP和UDP协议

news2024/12/23 4:45:02

目录

前言

前篇

引言

TCP与UDP之间的区别

TCP

三次握手

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

丢包问题与乱序问题的解决

四次挥手

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

UDP协议

TCP和UDP的主要区别


前言

本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。

这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。

可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。

一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手_哔哩哔哩_bilibili

前篇

  1. 计算机网络——MAC地址和IP地址-CSDN博客
  2. 计算机网络——交换机和路由器-CSDN博客
  3. 计算机网络——网络地址转换(NAT)技术-CSDN博客

引言

对于TCP协议和UDP协议大家应该都有所耳闻。我们常用的网络通讯,比如浏览网页、软件、聊天以及你现在正在收看的视频,都是通过这两种协议来进行数据传输的。到底他们是如何工作的这两种协议又有什么区别呢?

TCP与UDP之间的区别

TCP协议和UDP协议都工作在传输层,他们的目标都是在程序之间传输数据,数据可以是文本文件,可以是视频,也可以是图片。对于TCP协议和UDP协议来说都是一堆二进制数,并没有多大的区别。

最大的区别是一个基于连接,一个基于非连接。

具体是什么意思?

举一个简单的例子。

如果把人与人的通信比喻为进程与进程的通信,我们基本有两种方式。

第一种方式是写信,第二种方式是打电话。

如果不考虑速度因素,这两种方式之间最大的区别是什么?

就是信寄出去之后,对方是否能收到,以及收到的信内容是否完整,先后寄两封信过去是否按照顺序接收,都变成了未知数,甚至你填写的收信地址和收信人是否存在,你都无法确认。

而打电话则不同,从拨打电话到对方接通互相通话,再到结束通话后挂断,这一系列的流程都能得到及时的反馈,并且能确认对方准确的接收到。

打电话是基于连接的,也就是TCP,而写信就是基于非连接的,就是UDP

TCP是如何保证以上过程的有三个关键的步骤,分别为三次握手、传输确认、四次挥手。

TCP

三次握手

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

  1. 当客户端向服务端发起连接时会先发一包连接请求数据过去,询问一下能否与你建立连接。这包数据我们称之为SYN同步序列编号(Synchronize Sequence Numbers)
  2. 如果对端同意连接,则回复一包SYN+ACK包
  3. 客户端收到之后回复一包ACK包(Acknowledge character)确认字符,连接建立。

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

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

为什么不服务端回复完SYN+ACK之后就建立连接?

这是为了防止因为已失效的请求报文突然又传到服务器引起错误。

假设采用两次握手建立连接,客户端向服务端发送了一个SYN包来请求建立连接,因为某些未知的原因并没有到达服务器,在中间某个网络节点产生了滞留。

为了建立连接,客户端会重发赠包。这次的数据包正常送达,服务端回复SYN+ACK后建立起了连接。

但是第一包数据阻塞的网络节点突然恢复,第一包送包又送达到服务端。

这时服务端会误认为是客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态。

服务端认为是两个连接,而客户端认为是一个连接,造成的状态不一致。

如果在三次握手的情况下,服务端收不到最后的ACK包,自然不会认为连接建立成功。

所以三次握手本质上来说就是为了解决网络信道不可靠的问题。

为了能够在不可靠的信道上建立起可靠的软件。经过三次握手之后,客户端和服务端都进入了数据传输状态。TCP协议需要在不可靠的信道上保证可靠的连接。

丢包问题与乱序问题的解决

现在就有几个问题需要面对

  • 一包数据有可能会被拆成多包发送,如何处理丢包问题?
  • 这些数据包到达的先后顺序不同,如何处理乱序问题?

针对这些要求,TCP协议为每一个连接建立了一个发送缓冲区。

从建立连接后的第一个字节的序列号为零,后面每个字节的序列号就会增加。1,2,3,4……

发送数据时,从发送缓冲区取一部分数据组成发送报文,在其TCP协议头中会附带序列号和长度。

接收端在收到数据后需要回复确认报文,确认报文中的ACK等于接收序列号加长度,也就是下一包数据需要发送的起始序列号(序列号+长度)。

这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到。

发送端也可以一次发送连续的多报数据,接收端只需要回复一次ACK就可以了。

这样发送端可以把待发送的数据分割成一系列的碎片发送到对端。

对端根据序列号和长度在接收后重构出来完整的数据。假设其中丢失了某些数据包,在接收端可以要求发送端重传。

比如丢失了100到199这100个字节,接收端向发送端发送X等于100的报文,发送端收到后重传这一包数据,接收端进行补齐。

以上过程不区分客户端和服务端,TCP连接是全双工的,对于两端来说均采用上述机制。

四次挥手

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

假设客户端主动发起连接关闭请求,他需要将服务端发起一包FIN包,表示要关闭连接,自己进入终止等待一状态。这是第一次挥手。

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

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

客户端收到之后回复ACK包进入超时等待状态,经过超时时间后关闭连接。

而服务端收到ACK包后立即关闭连接,这是第四次挥手。

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

这是为了保证对方已收到ACK包。

因为假设客户端发送完最后一包ACK包后就释放了连接。一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态。

如果客户端发送最后一包ACK包后等待一段时间,服务端还没有接收到,这时服务端因为没有收到ACK包会重发FIN包,客户端会响应这个FIN包重发ACK包并刷新超时时间。

这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。

UDP协议

首先UDP协议是基于非连接的发送数据,就是简单的把数据包封装一下,然后从网卡发出去就可以。

数据包之间并没有状态上的联系。

正因为UDP这种简单的处理方式,导致它的性能损耗非常少,对于CPU内存资源的占用也远小于TCP。但是对于网络传输过程中产生的丢包,UDP协议并不能保证。

所以UDP在传输稳定性上要弱于TCP。

TCP和UDP的主要区别

TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如传输文件、发送邮件、浏览网页等。

UDP的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高,但是对少量丢包并没有太大要求的场景,比如域名查询、语音通话、视频直播等。

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

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

相关文章

【Jenkins】Jenkins自动化工具介绍

目录 技术背景常规的手动打包步骤 Jenkins简介起源与发展Jenkins的核心价值1.自动化1.1代码构建1.2测试自动化1.3自动部署 2.持续集成与持续部署CI/CD的概念如何减少集成问题更快速地发布软件版本 Jenkins优势Jenkins的主要竞争对手Travis CI:CircleCI:GitLab CI: Jenkins与其他…

阿里云9元服务器租用收费价格表_免费云服务器领取

2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年61元,折合5元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器165元一年,2核4G服务器30元3…

出海企业如何从海外云手机中受益?

随着全球化的推进,越来越多的企业开始将目光投向海外市场。然而,不同国家和地区的网络环境、政策限制,以及语言文化的差异,给出海企业的市场拓展带来了诸多挑战。在这一背景下,海外云手机作为一种新兴解决方案&#xf…

等保测评2.0——网络安全等级保护测评的初步了解

一、什么是网络安全等级保护测评? 二、网络安全等级保护,保护的是什么? 等级保护对象:网络安全等级保护工作直接作用的对象。(注:主要包括信息系统、通信网络设施和数据资源等) 计算机信息系统…

设计模式代码实战-抽象工厂模式

1、问题描述 小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。 输入试例: 3 …

【设计模式】六大设计原则

设计原则 研究 23 种设计模式是困难的,甚至是没必要的六大设计原则零、单一职责原则开闭原则里氏代换原则依赖倒置原则接口隔离原则迪米特法则合成复用原则 研究 23 种设计模式是困难的,甚至是没必要的 设计模式有23种,我认为对普通人来说想…

【Python】读取时间判定操作次数问题和一些解决办法

几种类 datetime.striptime() 计算两个字符串之间的时间差 datetime.striptime()计算两个字符串之间的时间差 datatime类提供函数处理日期和时间 Striptime()分析字符串值以固定格式表示时间然后存储为函数参数 输出就是: time.sleep() time模块打印时间按照对…

python--递归算法篇

1、给定一个包含n1个整数的数组nums,其数字在1到n之间(包含1和n), 可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数 def repeat(ls:list) -> list:#把个数超过1的数&#xff0c…

AutoCAD 2024 安装注册教程

前言 大家好,我是梁国庆。 本篇分享的安装包是 AutoCAD 的全新版本——AutoCAD 2024,下文安装教程中简称 AutoCAD。 时间:2024年4月8日。 获取 AutoCAD 安装包 我已将本篇所使用的安装包打包上传至百度云,扫描下方二维码关注…

014:vue3 van-list van-pull-refresh实现上拉加载,下拉刷新

文章目录 1. 实现上拉加载,下拉刷新效果2. van-list,van-pull-refresh组件详解2.1 van-list组件2.2 van-pull-refresh组件 3. 完整案例4. 坑点:加载页面会一直调用加载接口 1. 实现上拉加载,下拉刷新效果 通过下拉刷新加载下一页…

DMA的认识

DMA介绍 Q:什么是DMA? DMA( Direct Memory Access,直接存储器访问 ) 提供在 外设与内存 、 存储器和存储器 、 外设 与外设 之间的 高速数据传输 使用。它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU ,在这个时间中&am…

Matlab与ROS(1/2)---Message(三)

0. 简介 消息是ROS中交换数据的主要容器。主题和服务使用消息在节点之间传输数据。为了标识其数据结构,每条消息都有一个消息类型。例如,来自激光扫描仪的传感器数据通常以sensor_msgs/LaserScan类型的消息发送。每种消息类型标识消息中包含的数据元素。…

汽车制造业PMC组态应用最佳实践

01案例及行业介绍 汽车制造工业是我国国民经济的重要支柱产业,汽车制造工厂一般包含冲压、焊装、涂装、总装四大车间。每辆汽车的生产过程被分解成很多加工任务下发给各个车间进行完成。车辆从冲压车间开始到总装车间结束一直进行不同类型的工序加工。 PMC即生产控…

docker 上达梦导入dump文件报错:本地编码:PG GBK,导入女件编码:PGGB18030

解决方案: 第一步进入达梦数据容器内部 docker exec -it fc316f88caff /bin/bash 第二步:在容器中 /opt/dmdbms/bin目录下 执行命令 cd /opt/dmdbms/bin./dimp USERIDSYSDBA/SYSDBA001 FILE/opt/dmdbms/ZFJG_LJ20240407.dmp SCHEMASZFJG_LJUSERIDSYSD…

ChatGPT基础(二) ChatGPT的使用和调优

文章目录 ChatGPT的特性采用关键词进行提问给ChatGPT指定身份提升问答质量的策略1.表述方式上的优化2.用"继续"输出长内容3.营造场景4.由浅入深,提升问题质量5.预设回答框架和风格 ChatGPT的特性 1.能够联系上下文进行回答 ChatGPT回答问题是有上下文的&…

微服务学习 Eureka注册中心

服务调用时候出现问题,当服务者很多时候,比如不同的端口。消费者如何找到服务者的地址?又如何判断服务者是否健康。 Eureka基本原理: 总结:如果有多个服务提供者,消费者该如何选择? 搭建Eureka注册中心: 1.…

django基于python的法院执法案件管理系统

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台,设计的基本思路是: 框架:django/flask 后端&#xff…

【YOLOv9改进[损失函数]】使用MPDIou回归损失函数帮助YOLOv9模型更优秀

本文中,第一部分概述了各种回归损失函数,当然也包括了今天的主角MPDIou。第二部分内容为在YOLOv9中使用MPDIou回归损失函数的方法。 1 回归损失函数(Bounding Box Regression Loss) 边界框回归损失计算的方法包括GIoU、DIoU、CI…

纯css实现switch开关

代码比较简单&#xff0c;有需要直接在下边粘贴使用吧~ html: <div class"switch-box"><input id"switch" type"checkbox"><label></label></div> css&#xff1a; .switch-box {position: relative;height: 25px…

全球媒体发稿:海外发稿数字期刊Digital Journal

全球媒体发稿&#xff1a;海外发稿数字期刊Digital Journal ​官网&#xff1a; digitaljournal.com 数字期刊&#xff0c;加拿大知名门户&#xff0c;月访量超过30万。 是一个全球媒体平台和内容合作伙伴&#xff0c;通过捕捉和报道第一&#xff0c;提升新闻周期中的声…