关于TCP/UDP

article/2025/9/21 1:29:24

目录

1、TCP协议

1.1 TCP协议格式

1.2 TCP协议原理

2、UDP协议


在学习TCP/UDP之前先来了解以下整体的通信传输,它是一个向下封装、向上分用的过程:

 这是TCP/IP四层模型,所以要想实现通讯,通过TCP建立和断开连接是至关重要的,图中的每一层都不可或缺。

1、TCP协议

TCP,即传输控制协议,就是对数据的传输进行一个详细的控制。

1.1 TCP协议格式

·源/目的端口号:表示数据从哪个进程来,到哪个进程去;

·6位的标志位:常用的:ACK(确认号是否有效)、SYN(请求建立连接)、FIN(通知对方,本端要关闭)

....

1.2 TCP协议原理

TCP对数据传输提供管控机制,主要体现在两个方面:安全和效率。

这些机制和多线程的设计原则类似:保证数据传输安全的前提下,尽可能的提高传输效率。

①确认应答机制(安全机制)

 每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发数据。

②超时重传机制(安全机制)

 主机A发送数据给主机B后,可能因为网络拥堵等原因,数据无法到达主机B,如果主机A在一个特定的时间间隔内未能收到主机B的确认应答,就会重新发送。

 但也可能是因为ACK丢包了,此时间隔一段时间后重新发送也不会导致数据重复,因为它可以利用前面的序列号,很容易就做到去重的效果。

超时时间如何确定?

TCP为了保证无论任何环境下都能比较高性能的通信,因此会动态地计算这个最大超时时间:超时以500ms为一个单位进行控制,之后每次判定超时重发时间都是500ms的整数倍。比如第一次重发前等待500ms,若是仍无响应,下一次重传等待时间就为2*500ms。

③连接管理机制(安全机制)

在正常情况下,TCP都要经过三次握手建立连接,四次挥手断开连接。

                                                             三次握手建立连接

 为什么需要三次握手?

为了防止已经失效的连接请求突然又传送到了服务器端,因而产生错误。

比如:客户端发出的第一个连接请求并没有丢失,而是在某个网络节点长时间滞留了,以至于先前的连接释放以后的某个时间才到达服务器端。本来这是一个早已失效的请求,但是服务器端接收到以后,就会误以为是新的连接请求,于是就向客户端发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要服务器端发出确认,新的连接就建立了,由于此时客户端已经没有了连接请求,因此不会理睬服务器端的确认,也不会向服务器端发送数据,但此时服务器端却以为新的连接已经建立,并且一直等待客户端发来数据。所以没有采用“三次握手”,这种情况下服务器端的很多资源就白白浪费掉了。

类比打电话的过程:

张三:喂?李四你能听到我说话吗?

                                                  李四:喂?我能听到,你能听到我说话吗?

张三:我能听到,我们开始对话吧。

                                                   李四:好!

                                                               四次挥手断开连接

为什么需要四次挥手呢?

TCP是全双工模式(双向通信),当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接。

与“三次挥手”一样,在客户端与服务器端传输的TCP报文中,双方的确认号Ack和序号Seq的值,都是在彼此Ack和Seq值的基础上进行计算的,这样做保证了TCP报文传输的连贯性,一旦出现某一方发出的TCP报文丢失,便无法继续"挥手",以此确保了"四次挥手"的顺利完成。

单工、半双工、全双工:(184条消息) 单工,半双工,全双工区别以及TDD和FDD区别_路漫远吾求索的博客-CSDN博客_tdd是全双工还是半双工

④滑动窗口机制(效率机制)

上面我们讨论了确认应答机制,对于每发送的一个数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段。这样传输就是性能比较差。既然一发一收的性能较低,那我们可以一次发送多条数据,就可以大大提高性能(实际上就是将多个等待时间重叠到一起)

滑动窗口的两个问题:

问题一:数据包已经到达,但是ACK被丢了

这种情况,部分ACK丢了不要紧,因为可以通过后续的ACK进行确认。

问题二:数据包直接丢了

比如:1-1000数据发送正常,而1001-2000的数据包丢了,这时发送端会一直接收到”下一个是1001“的ACK,就像在提醒发送端”我想要的是1001“,如果发送端主机连续三次收到了同样的ACK,它就会重发丢包字段。

⑤流量控制机制(安全)

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端缓冲区被打满,这个时候发送端继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。

因此TCP根据自己处理能力,来决定发送端的发送速度。接收端将自己可以接收的缓冲区大小放入TCP首部中的”窗口大小“字段中,通过ACK端通知发送端。

 

⑥拥塞控制机制(安全)

虽然TCP有了滑动窗口这个机制来提高性能,但是因为网络上有很多计算机,可能当前的网络状态就已经比较拥堵。在不清楚网络状况的情况下,贸然发送大量数据,是很有可能雪上加霜的。

TCP引入了慢启动机制:先发送少量的数据,探探路,摸清情况后,再决定按照多大的速度传输数据。

定义一个初始拥塞窗口为1,每次收到ACK,拥塞窗口加1,每次发送数据包的时候,将拥塞窗口和接收端主机反馈的窗口进行对比,取较小的作为实际发送窗口,为了不增长那么快,引入了一个慢启动的阈值,当超过这个阈值的时候,不再按照指数式爆炸增长,而是线性方式增长。当TCP开始启动的时候慢启动阈值等于窗口最大值,在每次超时重传后,慢启动阈值变为原来的一半,同时拥塞窗口置为1。

拥塞控制归根结底就是TCP协议想尽可能快的把数据传输给对方,但又要避免给网络造成太大的压力的一种折中方案。

⑦延迟应答机制(效率机制)

假设接收端缓冲区为1M。一次收到了500K的数据,如果立即应答,返回的窗口大小就是500K;但实际上可能处理端处理速度极快,10ms之内就把500K数据从缓冲区消费掉了,如果接收端稍微等一会儿再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M。

⑧捎带应答机制(效率机制)

在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是”一发一收“。意味着客户端给服务器说了”hello“,服务器端也会给客户端回个”hi“;那么这个时候ACK就可以搭顺风车,和服务器回应信息一起回到客户端。

2、UDP协议

2.1 UDP特点

无连接:知道对端的IP和端口号直接进行传输,不需要建立连接。

不可靠:没有任何安全机制,发送端发出数据报后,如果因为网络故障该段无法发到对方,UDP协议也不会返回任何消息。

面向数据报:原样发送

只有接收缓冲区,没有发送缓冲区。


http://chatgpt.dhexx.cn/article/tS9fGjPD.shtml

相关文章

UDP详解

1、UDP数据包格式 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传…

TCPUDP相关介绍

TCP and UDP TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次握手才能建立起来。断开连接需要四次挥手才…

TCPUDP

TCP:面向连接的服务,可靠的进程到进程的通信协议。(因为TCP里面封装了端口号,端口号就意味着一个服务,进程);应用场景:如:文件传输;HTTP应用层协议 UDP&…

TCP/UDP

Tcp / ip : 应用层、传输层、网络层、网络接口层 查看本机ip: windons r (进入交互换环境)ipconfigping 本机ip 查看本机网络有无问题 端口: 知名端口(固定端口):0—1023动态端口:程序可以设置的端口 1…

UDP协议的详细解析

UDP数据报 一、UDP的概述(User Datagram Protocol,用户数据报协议) UDP是传输层的协议,功能即为在IP的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。 UDP提供不可靠服务,具有TCP所没有的优…

UDP协议详解

一、UDP协议概述 传输层另一个重要的协议就是用户数据报协议 UDP。UDP 只在 IP 的数据报服务之上增加了很少一点的功能&#xff0c;这就是复用和分用的功能以及差错检测的功能。 <注> UDP(User Datagram Protocol&#xff0c;用户数据报协议) UDP的主要特点是&#xff1a…

截图文字识别工具

tkinter程序源码&#xff1a;初识Python&#xff0c;如有不足请多指教。 import tkinter as tk import keyboard # 安装&#xff1a; pip install keyboard from PIL import ImageGrab # pip install pillow import time from aip import AipOcr # pip install baidu-a…

电脑截图如何快速识别文字?3分钟教会你快速截图识别怎么做

电脑截图已经成为我们日常生活中的常见操作&#xff0c;无论是工作还是学习&#xff0c;我们都有可能需要截取电脑屏幕上的某个区域进行保存或分享。但是&#xff0c;有时候我们需要识别截图中的文字内容&#xff0c;这时候该怎么办呢&#xff1f;接下来&#xff0c;本文将为大…

python截图识别文字_10几行代码,用python打造实时截图识别OCR|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/ 你一定用过那种“OCR神器”&#xff0c;可以把图片中的文字提取出来&#xff0c;极大的提高工作效率。 &#xff01; 今天&#xff0c;我们就来做一款实时截图识别的小工具。顾名思义&#xff0c;运行程序时&#xff0c;可以…

chrome拓展 --截屏文字识别

文章目录 场景源代码功能实现点击在页面上出现裁剪框百度云文字识别复制选中 参考 场景 因为学习通题目都加密了复制过来也无法进行搜题 无奈写了这个插件 为什么使用插件的形式 而不是脚本 &#xff1f; 使用了html2canvas结果是比的是dom文字变成了加密过的 无法识别 于是使用…

微信怎么识别图片文字?其实操作很简单

微信作为中国最流行的社交媒体应用程序之一&#xff0c;已经成为人们分享照片和信息的主要平台之一。在微信中&#xff0c;用户可以轻松地将照片上传到朋友圈或与朋友共享。然而&#xff0c;在某些情况下&#xff0c;这些照片上可能有一些重要的文字信息&#xff0c;这些信息需…

电脑截图怎么识别文字?识别原理又是什么?

在日常工作和生活中&#xff0c;我们经常需要从图片或截图中提取文字&#xff0c;但是手动输入费时费力&#xff0c;因此电脑截图文字识别技术应运而生。本文将介绍电脑截图文字识别的原理和方法。 OCR技术的原理 OCR是一种光学字符识别技术&#xff0c;其原理是将图片中的文字…

C# 通用OCR识别 文字识别 中文识别

软件说明 基于以下两个开源项目&#xff0c;做了再次封装 https://github.com/paddlepaddle/PaddleOCR PaddleOCRSharp: 本项目是一个基于PaddleOCR的C代码修改并封装的.NET的OCR工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能&#xff0c;同…

手把手教截图识别文字

点击上方 毛利学python&#xff0c;选择置顶或星标 第一时间送达Python 技术干货&#xff01; 最近不想打字&#xff0c;直接截图然后识别出来文字&#xff0c;不就可以不用打吗&#xff1f;我就是太懒了。 keyboard 这个库让你可以控制和监控输入设备。 对于每一种输入设备&a…

屏幕可以截图识别文字?我来教你

我们经常浏览一些网页的时候&#xff0c;看到一些优美的文字&#xff0c;想将它复制下来&#xff0c;却发现粘贴的时候都是一些乱码之类的&#xff0c;以前我估计你们大多数的人都会选择用手抄&#xff0c;但是今天我来了&#xff0c;我给大家介绍一个非常有用的一个方法&#…

python截图识别文字_Python技术:截图文字识别工具

#01 截图文字识别工具 有时候在海报上面&#xff0c;图片上面&#xff0c;或者PDF文档中&#xff0c;经常出现一些唯美的文字。这个时候想要复制下来才发现不能复制。因为有的是图片&#xff0c;有的是PDF。 可以使用Python制作一个小工具&#xff0c;来识别图片上的文字。但…

这几个截图文字识别软件可以自动识别文字

从事新媒体行业的朋友&#xff0c;是不是经常在电脑桌面上或者在浏览也中临时截图识别文字呢&#xff1f;尤其是为了方便&#xff0c;直接识别图片转为文字的话&#xff0c;我们就可以节省了很多打字的时间。那你们知道怎么截图文字识别吗&#xff1f;今天我来教你们3个非常简单…

图片截图识别文字怎么操作?这两个方法不要错过

现如今&#xff0c;图片截图识别文字是一项非常有用的技术。很多小伙伴平时在工作或者生活中都会保存很多图片格式的资料文件把。如果遇到需要讲内容图区到文档中编辑的话&#xff0c;识别技术就可以帮助我们快速识别图片中的文字&#xff0c;从而节省大量的时间。那么图片截图…

python截屏图片识别点击,用python实现截屏识别其中的文字

大家好,欢迎来到 Crossin的编程教室 ! 你一定用过那种“OCR神器”,可以把图片中的文字提取出来,极大的提高工作效率。 今天,我们就来做一款实时截图识别的小工具。顾名思义,运行程序时,可以实时的把你截出来的图片中的文字识别出来。 下次,当你想要复制“百度文库”中的…

截图识别文字软件哪个好?推荐四个屏幕截图文字识别软件推荐?

屏幕截图识别文字可以帮助学生将教材中的重点内容进行截取和识别&#xff0c;加快学习效率&#xff1b;也可以帮助商务人士将会议纪要、报告等文本进行快速转换和编辑&#xff0c;提高工作效率&#xff1b;还可以将图片中的文字进行识别&#xff0c;方便大家快速处理大量的名片…