python网络编程-TCP/IP

链路层

帧组成(按顺序):

目标MAC:6B

源MAC:6B

类型:2B

数据:46B-1500B

CRC:4B

其中,源MAC为主机网卡地址,类型为来源网络层的数据类型,ipv4为0800,arp为0806,pppoe为8864,1qtag为8100,ipv6为86dd

python可以通过uuid模块获取到本机mac地址

网络层

数据报结构

首部:20-60B,其中前20B必选项,后40B可选项

数据:0-65516B

首部结构

版本:4位,表示ipv4还是ipv6

ihl:4位,表示首部长度,单位位4B,所以最大为4x15=60B,刚好是首部最大长度

ds:区分服务,8位,前三位表示优先级,接下来四位表示最小时延,最大吞吐量,最高可靠性和最小代价,最后一位未使用

总长度:16位,表示首部和数据总长度,单位为B。注意到链路层数据长度为46-1500,当网络层数据报不够46B时会填补数据,超过1500时会切片

标识:16位,表示分片数据的唯一id

标志:3位,最高位为预留位,第二位表示是否可分片,0表示可分片,1表示不可分片,最后一位表示此数据报是否为分片,0表示非分片,且是最后一个分片,1表示分片,且后面还有分片

分片位移:13位,8B

生存时间,8位,最大255,表示路由最大跳数

协议:8位,表ip数据报类型,如ICMP,IGMP,TCP,UDP等

首部校验和:16位

源ip地址和目标ip地址,各32位

python获取网络信息可通过psutil和netifaces两个模块去获取,其中netifaces版本废弃了,可以安装netifacce2

传输层

udp

不保证数据可达

报头8B:源端口2B,目标端口2B,长度2B,校验和2B

数据0-65527B

TCP

创建连接3次握手,关闭连接4次握手

数据报结构

首部20-60B

数据0-65535B

首部结构

源端口16位

目标端口16位

序号:32位:每个字节的数据都有序号,到pow(2,32)后从0开始

确认号:32位,接收方发给发送方,希望收到下一个数据报文第一个字节的序号,比如发送方发了0-999字节,接收方发的确认号就是1000

数据偏移:4位,单位位4B,类似ipv4报头的ihl

保留:6位,一般为0

URG:1位,1表示紧急数据,紧急指针有效

ACK:1位,为1表示确认号字段有效

PSH:1位,1表示报文被创建并立即发出去,接收端收到后会立即交给进程,而不是放缓存中等缓存满了才递交

RST:1位,为1表示当前连接出现严重问题,徐奥释放连接并重新创建连接,RST为1还可用于拒绝接受非法报文或拒绝打开非法连接

SYN:1位,为1表示报文为连接请求或连接接受报文

FIN:1位,为1表示数据发送完毕并要求释放连接

窗口:16位,由接收方发给发送方,表示期望接受下个报文的长度

校验和:16位

紧急指针:16位,URG为1时指出紧急数据结束位置

python获取网络信息

psutil可以获取网络一些统计信息,net_io_counters方法默认收集整机的网络统计信息,入参pernic=True会单独收集每个网卡的统计信息

应用层

http

http默认是无状态通信,可以通过cookie进行有状态的服务

http端口一般为80

报文结构

请求报文:方法,url,版本,其他首部字段,报文实体(可选)

应答报文:版本,状态码,短语,其他首部字段,报文实体(可选)

方法:有8种,get,post,head,put,delete,option,connect,trace

版本:http版本号

其他首部字段:比如Cache-Control, Accept-Encoding等

报文实体:长度不限,可以为0

状态码:即404这种,三位数。1xx表示服务器收到了请求,2xx表示服务器接受客户端请求,3xx表示服务器对客户端请求重定向,4xx表示客户端请求有误,5xx表示服务端有问题

短语:对状态码的注释,比如202返回码对应的短语是Accept,404对应的短语是Not Fount

https

http没有安全保证,可以被抓包,https使用ssl或tls对数据报文加密后tcp传输,默认端口443

一般会使用对称加密和非对称加密,对称加密一般用于报文加密,非对称加密一般用于密码加密

请求流程

客户端请求时会将自己支持的一套加密规则发给服务器

服务器根据客户端加密规则组合出一组加密和hash算法,连同自己的身份信息,以数字证书形式返回给客户端

客户端验证服务器证书合法性,通过后生成一串随机数密码,并用服务器公钥对这个随机数密码加密。客户端对要发送的消息计算hash,用随机数密码对要发送的消息和消息的hash值进行加密,最后将服务器公钥加密的随机数密码,用随机数密码加密的消息和消息是hash一起返回给服务器

服务端收到客户端数据后,用自己的私钥揭密处随机数密码,然后用随机数密码解密消息和消息hash值,对比解密出的hash值和收到消息的hash值是否一致。若一致,则客户端和服务端连接建立成功,此后,双方使用随机数密码对数据进行加解密。后续数据传输过程中,如果出错或hash不一致则连接自动终止

ftp

dns

snmp

snmp简单邮件传输协议,用于将邮件从源地址传送到目的地址,端口一般为25

是常用的邮件发送协议,发邮件后,邮件会发到snmp服务器上

pop3

收信方用来从自己服务器上接受其他用户发给自己的邮件,端口一般110

pop3是离线协议,用户登录时会一次性将pop3服务器的邮件下载到本地,同时服务器的邮件都删掉自动

imap是在线的收信协议,弥补了pop3离线的问题,是目前最常用的邮件接受协议,端口一般143

dhcp

有dhcp的客户端连接网络时,会广播dhcp disocover报文,按一定规则进行有限次次数广播后如果未收到响应则dhcp失败

服务器收到报文后会从可用地址池挑一个ip,广播形式发送dhcp offer报文把这个ip返回给客户端

客户端收到dhcp服务器分配的ip后,会发送一个arp请求看这个ip有没有被占用,如果被占用了则客户端发送dhcp decline报给dhcp服务器,如果没被占用则发送dhcp request给服务器,服务器收到后会给客户端发送一个dhcp ack响应,至此一个dhcp服务流程结束

dhcp服务端端口一般67,dhcp客户端端口一般68.dhcp使用udp通信

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringMvc+Vue技术智慧校园系统设计与实现--60页及以上论文参考

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

Python 爬虫 tiktok API接口获取tiktok用户关注列表

此接口可获取tiktok用户关注列表。若有需要,请点击文末链接联系我们。 详细采集页面如下https://www.tiktok.com/quanap_official 请求API http://api.xxxx.com/tt/user/following?user_id7252644648840381445&count10&offset0&tokentest 请求参数 返…

雅虎财经世媒讯全球软文发稿对于企业宣发的意义

在当今信息爆炸的时代,企业宣传和品牌推广的方式变得多种多样,其中软文发稿成为了一种颇受欢迎的宣传手段。雅虎作为全球知名的门户网站之一,拥有广泛的用户基础和强大的影响力,通过雅虎进行软文发稿,不仅可以有效提升…

移远BC28_opencpu方案_开发环境搭建

OPEN CPU 代码采用的是 Python 脚本写的 scons 自动化构建工具。从构建这个角度说,它与 GNU make 是同一类的工具。它是一种改进,并跨平台的 gnu make 替代工具,其集成功能类似于 autoconf/automake。 这里给出简单安装方式

WAIC | 2024年世界人工智能大会“数学与人工智能”学术会议成功举办!

由斯梅尔数学与计算研究院(Smale Institue of Mathematics & Computation)主办的2024年世界人工智能大会(WAIC)“数学与人工智能”学术会议7月4日在上海世博中心圆满落幕!作为全球性高级别学术研讨会,此次会议由华院计算技术&…

如何通过ip地址判断网络类别

在计算机网络中,IP地址不仅是设备在网络中的唯一标识,同时也隐含了网络类别的信息。了解如何根据IP地址判断网络类别,对于网络管理员、系统工程师以及网络爱好者来说都是一项基本技能。本文将详细介绍如何通过IP地址判断网络类别。 一、IP地址…

伦敦银交易平台价格的突破成不成功?这点很重要!

在伦敦银交易中,当银价出现突破的时候,也正是引起很多投资者关注的时候。一旦银价出现突破,很可能是新行情的开端。但是做过突破交易,有相关经验的朋友会发现,自己在伦敦银交易平台做突破的时候,也并不是每…

等保2.0中,云计算平台如何做到数据的分类和加密?

在信息化浪潮的激荡中,云计算平台已然成为企业智慧运作的心脏,承载着海量的数据资产。随着中国国家网络安全等级保护制度迈入2.0时代,对云计算平台的数据安全提出了更为严苛的要求。在这一背景下,如何巧妙地编织数据的分类之网&am…

MySQL的慢sql

什么是慢sql 每执行一次sql,数据库除了会返回执行结果以外,还会返回sql执行耗时,以mysql数据库为例,当我们开启了慢sql监控开关后,默认配置下,当sql的执行时间大于10s,会被记录到慢sql的日志文件…

【AI资讯】可以媲美GPT-SoVITS的低显存开源文本转语音模型Fish Speech

Fish Speech是一款由fishaudio开发的全新文本转语音工具,支持中英日三种语言,语音处理接近人类水平,使用Flash-Attn算法处理大规模数据,提供高效、准确、稳定的TTS体验。 Fish Audio

【MySQL】MySQL连接池原理与简易网站数据流动是如何进行

MySQL连接池原理与简易网站数据流动是如何进行 1.MySQL连接池原理2.简易网站数据流动是如何进行 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃&#x1f60…

Avalonia 常用控件四 Text Controls

1、AutoCompleteBox <StackPanel Margin"20"><TextBlock Margin"0 5">选择一种动物</TextBlock><AutoCompleteBox x:Name"animals" FilterMode"StartsWith"/><!--AutoCompleteBox:Items:要匹配的项目列表。…

如何检查 Windows 版本?这几种方法都可以查看

设置界面查看 要想查看电脑安装的 Windows 版本我们可以在设置界面进行查看&#xff0c;打开设置界面之后点击系统。 接下来在左边框中往下滑动&#xff0c;点击关于选项&#xff0c;然后在右边框中往下滑动找到 Windows 规格模块&#xff0c;在这里就可以看见安装的 Windows …

windows sshkeygen 多平台添加配置

文章目录 .ssh目录生成新的ssh配置添加公钥到仓库验证 .ssh目录 windows下一般为&#xff1a;C:\Users\15237.ssh &#xff0c;其中“15237”为当前登录用户 生成新的ssh .ssh目录下打开“Git Bash Here”&#xff08;如果没有&#xff0c;先安装 Git 软件&#xff09; 执行…

学会python——用python生成一个验证码(python实例二十)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.生成验证码 3.1 代码构思 3.2 代码实例 3.3 运行如果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…

无人直播怎么玩,一文带你了解AI小姐姐自动换装玩法

最近经常有小伙伴问我 就是像这种&#xff0c;一刷礼物&#xff0c;小姐姐就换装的视频到底该怎么做 今天就来教大家 如何来制作这种直播视频 第一步&#xff1a;搭建OBS 1、设置屏幕分辨率&#xff1a; 背景&#xff1a;因为一般初始状态&#xff0c;屏幕是横屏的&#xf…

从零开始的python学习生活1

python函数的对返回值 本来多个return是不行的 这种语法就能接受多个返回值 def hanshu():return 1,"hello",True x,y,z hanshu() print(x) print(y) print(z)函数的多种传参方式 提前说明白了顺序就无所谓了 关键字传递一个传递参数&#xff0c;一个传递键值…

04-Haproxy搭建Web群集

理论讲解 Haproxy 是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如LVS 和Nginx。相比较而言&#xff0c;LVS 性能最好&#xff0c;但是搭建相对复杂:Nginx的upstream模块支持群集功能&#xff0c;但是对群集节点健康检查功能不强&#xff…

人员定位系统于不同场景的实际应用

人员定位系统的应用&#xff0c;尽管还没有做到大范围的普及&#xff0c;但是这一系统在不同企业&#xff0c;不同单位的实际应用效果还是很好的&#xff0c;所以人员定位系统也应用于不同场景当中了&#xff0c;那么&#xff0c;本文就来讲讲这一系统在不同场景的实际应用。 人…

CV每日论文--2024.7.3

1、HouseCrafter: Lifting Floorplans to 3D Scenes with 2D Diffusion Model 中文标题&#xff1a;HouseCrafter&#xff1a;使用 2D 扩散模型将平面图提升为 3D 场景 简介&#xff1a;HouseCrafter是一种新的方法,能够将平面图转换为完整的大型3D室内场景(如房屋)。它的关键…