TCPUDP

article/2025/9/21 2:05:04

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

UDP:无连接服务、不可靠的传输协议;
应用场景:广播;早期的QQ,视频传输等,

  • ACK:标识确认序号是否有效;TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送报文的 ACK 必须为1.
  • SYN:请求建立连接,含有 SYN 标识的报文称为同步报文段。当 SYN = 1,ACK = 1时则表示对方同意连接。
  • FIN:当FIN = 1时,表明结束报文段的发送方不再发送数据,请求释放单向连接。
  • SYN-SENT:同步已发送状态
  • SYN-RCVD:同步收到
  • 序列号:TCP 将每个字节的数据都进行了编号, 即为序列号
  • 确认序列号:每一个 ACK 都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你要从哪里开始发。
  • FIN-WAIT-1:终止等待1;
  • FIN-WAIT-2:终止等待2;
  • TIME-WAIT状态:TCP 协议规定,主动关闭连接的一方要处于 TIME-WAIT 状态,等待 2*MSL 的时候后才能回到 CLOSE 状态。
  • LAST-ACK:最后确认状态;
  • CLOSE-WAIT:关闭等待状态;

三次握手:

image

  1. 客户端发送连接请求报文给服务端,SYN = 1,seq = x(初始序列号),发送后客户端进入SYN - SENT(同步发送)状态。TCP规定, SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
  2. 服务器收到请求报文后,若同意则发出确认报文。确认报文 ACK = 1,SYN = 1,确认序号为x+1,同时初始化序列号 seq=y,之后服务器进入 SYN-RCVD(同步收到)状态。
  3. 客户端接收到报文后,发送确认报文,其中ACK=1,确认序列号:ack=y+1。自己的序列号:seq:x+1 发送完客户端进入ESTABLISHED状态,服务端接收到报文后,进入ESTABLISHED状态。到此,连接建立完成。
?问:为什么不是2次握手?

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

四次挥手

image

  1. 客户端进程发出断开连接报文,并停止发送数据。其中:FIN = 1,序列号为 seq = u (等于之前已经传送的数据序号+1),此时客户端进去 FIN - WAIT-1(终止等待1)状态。TCP 规定,FIN 报文段即使不带数据,也要消耗一个序号。

  2. 服务器收到连接释放报文,发出确认报文,ACK =1,确认序号ack=u+1,自己序列号:seq=v。服务器->CLOSE-WAIT(关闭等待)状态。这个时间段,客户端没有数据发送了,若服务器还有数据,客户端依然要接受,这个状态就是CLOSE-WAIT的时间段。

    客户端收到确认请求后,客户端进入FIN-WAIT2(终止等待2)状态,等待服务器发送释放报文(在这之前还需要接受服务器发送的最后数据)。

  3. 服务器发送完数据后,最后向客户端发送释放报文,FIN = 1,确认序号ack=u+1,由于处在半关闭状态,服务器可能又发送了一些数据,假定序列号:seq=w,此时,服务器进入LAST-ACK(最后确认)状态。

  4. 客户端收到服务器的连接释放报文后,发出确认,ACK= 1,ack = w+1,seq=u+1.此时,客户端进入TIME-WAIT(时间等待状态)。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入Close状态。服务器只有收到客户端的确认就会立刻close,而客户端需要等待2MSL后才close.服务器更早close.

? 为什么最后客户端要等待2*MSL的时间呢?
  • MSL(Maximum Segment Lifetime),TCP允许不同的实现设置不不同的值。Win10是2min.

  • 第一,保证客户端发送的最后的ACK报文能到达服务器,若这个ACK丢失,服务器若收不到确认报文会重新发送FIN请求,而客户端收到重传的报文,再次发送确认报文,重启2*MSL计时器。

?为什么建立连接是3次,关闭却要4次?
  • 建立连接的时候,服务器收到连接请求的 SYN 报文后,把 ACK 和 SYN 放在一个报文里发给客户端。

  • 关闭连接的时候,服务器收到 FIN 报文时,仅仅是客户端不再发送数据了,而自己可能还有数据未发送,故多了一步,先确认回复同意关闭请求,进入close-wait状态,发送完数据再发送FIN 释放报文。

保障可靠性的机制:
- 检验和
- 序列号
- 确认应答机制(ACK 机制)

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

比如:客户端向服务器发送了1005字节的数据,服务器返回给客户端的确认序号是1003,那么说明服务器只收到了1-1002的数据。1003,1004,1005没收到,此时客户端就会从1003开始重发。

- 超时重传

如:客户端发送数据给服务端后,可能因为网络拥堵等原因,数据无法到达(也可能是服务器传送的ACK丢失了),如果客户端在一个特定的时间间隔内没有收到服务器发来的确认应答,就会进行重发。

这种情况下服务器会收到很多重复数据,那么TCP 协议需要识别出哪些包是重复的,通过序列号进行去重。

超时时间确定?

TCP为了保证任何环境下都能保持较高性能的通信,因此会动态计算这个最大的超时时间;

Linux和Windows,超过500ms为一个单位进行控制,再次发送会是500ms的整数倍。如第2次发送为2*500ms.

- 连接管理
- 流量控制
- 拥塞控制
提高性能的机制:
- 滑动窗口
  • 窗口大小指的是无需等待确认应答就可以继续发送数据的最大值;
  • 如果窗口最大为4000个字节(四个段),发送前4个段的时候不需要等待任何ACK,之后收到第一个ACK 确认应答后,窗口向后移动,继续发送第5,6,7,8段的数据。 因为这个窗口不断向后滑动,所以叫做滑动窗口
- 快速重传
- 延迟应答
- 捎带应答
定时器:
- 超时定时器
- 保活定时器
- TIME_WAIT定时器

参考:

https://blog.csdn.net/sinat_36629696/article/details/80740678?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162184417316780255255630%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162184417316780255255630&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-80740678.pc_search_result_cache&utm_term=TCP&spm=1018.2226.3001.4187

http://chatgpt.dhexx.cn/article/1cYU6EDC.shtml

相关文章

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;方便大家快速处理大量的名片…

【Python应用】自制截图取词小工具-- 解锁文字识别新姿势

大家好 我是Yhen 很久不见呀 今天给大家分享一个自制的小工具—截图取词 及其制作过程 本工具是用Python写的 程序及代码的获取方式会在文末 文章目录 一.创作缘由二.项目简介三.思路分析四.代码演示五.程序及源代码获取方式 一.创作缘由 为什么会想到写这么一个小程序&#…

电脑截图如何快速识别文字

你知道电脑截图如何快速识别文字吗&#xff1f;电脑截图快速识别文字功能是一种非常实用的技术&#xff0c;它可以让用户在浏览网页或阅读文档时快速获取其中的文字信息。 在本文中&#xff0c;我将介绍4款支持电脑截图快速识别文字功能的软件&#xff0c;以帮助用户更好地了解…

1分钟教会你如何截图文字识别,建议收藏备用

在工作学习中大家难免会遇到一些疑问&#xff0c;像是领导发下了一张工作内容的图片呀&#xff0c;自己需要使用到里面的一些文本内容&#xff0c;但由于无法直接将文字直接提取出来&#xff0c;也无法拷贝粘贴&#xff0c;所以只能截下需用到的内容进行手动搬运&#xff0c;不…