TCP/UDP

article/2025/9/21 2:01:50

Tcp / ip : 应用层、传输层、网络层、网络接口层
查看本机ip:

  1. windons + r (进入交互换环境)
  2. ipconfig
  3. ping 本机ip 查看本机网络有无问题

端口:

  1. 知名端口(固定端口):0—1023
  2. 动态端口:程序可以设置的端口 1024—65535

查看端口使用情况:
netstat -ano

TCP的三次握手

简单理解
在这里插入图片描述
深入理解
加粗样式在这里插入图片描述
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。

TCP的四次挥手

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接

那对于TCP的断开连接,这里就有了“四次挥手”

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

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

4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

在这里插入图片描述

socket(套接字):
把数据从一方 传递到 另一方 完成不通电脑间的通信

import socket 
socket.socket((AddressFamily,Type)) 写 AF_INET(ipv4)

Type:套接字类型:

SOCK_STREAM (运用于 TCP 协议)  默认
SOCK_DGRAM  (运用于 UDP 协议)

创建套接字:

import socket 
mk_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)     可不写 默认为 Tcp 协议
print("我爱你,宝宝") 
mk_socket.close( ) 

套接字使用流程:

  1. UDP 通信模型
创建套接字
绑定端口    bind(("",5201))
准备数据(编码 转为二进制 encode("gbk"))
发送数据(sendto(数据,给谁(ip,port端口)))    
接受响应   recvfrom(字数节数)
展示并关闭      展示 decode("gbk")  解码        #创建  
import socket   
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)    
#绑定端口
udp_socket.bind(("",5201))   发消息都是在此端口发送的
#准备数据
write ="我爱你,宝宝"   
zhuan = write.encode("gbk")    
#发送数据                                      ip              端口
udp_socket.sendto(zhuan,("192.168.1.125",9090))       
#接受响应  (对方发的消息 接收)   
shou,ip_port = udp_socket.recvfrom(4096)
#展示并关闭  
print("收到的数据为:%s"%shou.decode("gbk"))   
dup_socket.close( )    
  1. TCP 通信模型
创建套接字                端口
建立连接 connect((ip,poty))
准备数据(编码 转为二进制 encode("gbk"))
发送数据  send(数据)
接受响应 recv(字数节数)
展示并关闭#建立
import socket   
tcp_socket =socket.socket(socket.AF_INET,socket.SOCK_STREAM)    
#建立连接                        ip                    端口
tcp_socket.connect(("192.168.1.125",9090))    
#准备数据
write = "我爱你,宝宝"   
zhuan = write.encode("gbk")    
#发送数据
tcp_socket.send(zhuan)    
#接收响应
shou = tcp_socket.recv(4096)    
#展示并关闭
print("接受的数据为:%s"%shou.decode("gbk"))   
tcp_socket.close( )   

设置监听,listen 将主动套接字变为被动套接字,最大连接人数128 可随意定义

服务端与客户端创建tcp服务端套接字   
绑定端口  bind(("",5201))     bind((ip,端口)) ip 不写
设置监听   listen(128)  最大连接人数 128  
等待接受连接,返回新客户端名字与地址    accept( )    
发送数据(新客户端发送给另一个客户端(网络助手)) send(数据) 
接受响应和展示 (新客户端接收数据)  recv(4096)  
关闭 (先关闭客户端,再关闭服务端)   #创建tcp服务端套接字  
import socket   
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    
#绑定端口
tcp_server.bind(("",5201))    
#设置监听,将主动套接字变为被动套接字
tcp_server.listen(128)     
#等待接受连接,返回新客户名字与地址 
tcp_client,ip_port = tcp_server.accept( )    
#发送数据 
tcp_client.send("我爱你,宝宝".encode("gbk"))   
#接受响应 和 展示
tcp_recv = tcp_client.recv(4096).decode("gbk")    
print(tcp_recv)    
#关闭 
tcp_client.close( )    
tcp_server.close( )     

TCP 与UDP的区别:

  1. TCP是面向连接(如打电话先拨号建立连接);UDP是无连接的,发送数据之前不需要建立连接

  2. TCP提供可靠的服务;UDP尽最大努力交付,不保证可靠交付

  3. UDP具有较好的实时性,工作效率比TCP高,适用于高速传输和实时性有较高的通信或广播通信

  4. 每一条TCP连接是 点到点的,UDP支持 一对一、一对多、多对一、多对多的交互通信

  5. TCP 对系统资源 要求较多, UDP 对系统资源 要求较少

get和post区别
GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

32位和64位区别
32位系统CPU一次可处理32位数据,即一次处理4个字节。

64位系统CPU一次可处理64位数据,即一次处理8个字节。

通俗一点说: 32位,就相当于你拥有32个工人,每次能完成32个工人的工作量

64位,就相当于你拥有64个工人,每次能完成64个工人的工作量

总结: 由32位系统过渡到64位系统,CPU处理数据能力提升了一倍。

来说说寻址能力

内存中一个地址占用8bit,即一个字节,32位cpu含有32根地址线,寻址能力为2的32次方个字节,相当于4G内存(所以,如果我们装32位系统,安装8G内存实际上是没有用的)。而64位cpu理论上寻址能力为2的64次方个字节,但目前硬件还达不到这个水准,当然我们用不了这么大的内存。


http://chatgpt.dhexx.cn/article/2UIJyIvH.shtml

相关文章

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;不…

三分钟教你怎么截屏识别文字内容

在大学写期末小论文的时候&#xff0c;经常需要上网搜索一些资料&#xff0c;不过现在网站一般都是需要开通会员才可以对文字进行复制&#xff0c;这让囊中羞涩的我比较难受&#xff0c;于是就上网搜索了一些可以进行截图文字识别的软件&#xff0c;总算是顺利的将小论文完成了…