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通信

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

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

相关文章

如何有效管理你的Facebook时间线?

Facebook作为全球最大的社交平台之一,每天都有大量的信息和内容在用户的时间线上展示。有效管理你的Facebook时间线,不仅可以提升用户体验,还能够帮助你更好地控制信息流和社交互动。本文将探讨多种方法和技巧,帮助你有效管理个人…

分班结果老师怎么发给家长?

分班结果老师怎么发给家长? 随着新学期的脚步渐近,老师们的工作也变得愈发繁忙。从准备教学计划到整理课程材料,每一项任务都不容小觑。而其中,分班结果的告知工作,更是让不少老师头疼不已。传统的分班通知方式&#…

Python爬虫与数据可视化:构建完整的数据采集与分析流程

Python爬虫技术概述 Python爬虫是一种自动化的数据采集工具,它可以模拟浏览器行为,访问网页并提取所需信息。Python爬虫的实现通常涉及以下几个步骤: 发送网页请求:使用requests库向目标网站发送HTTP请求。获取网页内容&#xf…

15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》

15集终于编译成功了-个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》 还是参考这个官方文档: https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干货! 这里面提到的这个Micro工程已经移开了&#xff1…

【微服务】springboot对接Prometheus指标监控使用详解

目录 一、前言 二、微服务监控概述 2.1 微服务常用监控指标 2.2 微服务常用指标监控工具 2.3 微服务使用Prometheus监控优势 三、环境准备 3.1 部署Prometheus服务 3.2 部署Grafana 服务 3.3 提前搭建springboot工程 3.3.1 引入基础依赖 3.3.2 配置Actuator 端点 3.…

【Linux】信号的处理

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 信号的处理 1 信号的处理2 内核态 VS 用户态3 键盘输入数据的过程4 如何理解OS如何正常的运行5 如何进行信号捕捉信号处理的总结6 可重入函数volatile关…

C# 如何获取属性的displayName的3种方式

文章目录 1. 使用特性直接访问2. 使用GetCustomAttribute()方法通过反射获取3. 使用LINQ查询总结和比较 在C#中,获取属性的displayName可以通过多种方式实现,包括使用特性、反射和LINQ。下面我将分别展示每种方法,并提供具体的示例代码。 1.…

数据库逆向工程工具reverse_sql

reverse_sql 是一个用于解析和转换 MySQL 二进制日志(binlog)的工具。它可以将二进制日志文件中记录的数据库更改操作(如插入、更新、删除)转换为反向的 SQL 语句,以便对系统或人为产生的误操作进行数据回滚和恢复。 *…

JVM专题之垃圾收集器

JVM参数 3.1.1 标准参数 -version -help -server -cp 3.1.2 -X参数 非标准参数,也就是在JDK各个版本中可能会变动 ``` -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定 3.1.3 -XX参数 > 使用得最多的参数类型 > > 非…

【Python】已解决:(paddleocr导包报错)ModuleNotFoundError: No module named ‘paddle’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:(paddleocr导包报错)ModuleNotFoundError: No module named ‘paddle’ 一、分析问题背景 近日,一些使用PaddleOCR库进行文字…

Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)

案例背景 trec06c是非常经典的邮件分类的数据,还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易,肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了,但是传统的机器学习也能做。本案…

Xilinx FPGA:vivado关于真双端口的串口传输数据的实验

一、实验内容 用一个真双端RAM,端口A和端口B同时向RAM里写入数据0-99,A端口读出单数并存入单端口RAM1中,B端口读出双数并存入但端口RAM2中,当检测到按键1到来时将RAM1中的单数读出显示到PC端,当检测到按键2到来时&…

Vim编辑器与Shell命令脚本

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、Vim文本编辑器 二、编写Shell脚本 三、流程控制语句 四、计划任务服务程序 致谢 一、Vim文本编辑器 “在Linux系统中一切都是文件&am…

dependencyManagement的作用、nacos的学习

使用SpringCloudAlibaba注意各组件的版本适配 SpringCloudAlibaba已经包含了适配的各组件(nacos、MQ等)的版本号,也是一个版本仲裁者,但是可能已经有了父项目Spring-Boot-Starter-Parent这个版本仲裁者,又不能加多个父…

6、Redis系统-数据结构-06-跳表

六、跳表(Skiplist) 跳表是一种高效的动态数据结构,可以用于实现有序集合(Sorted Set,Zset)。与平衡树相比,跳表具有实现简单、效率高的优点,因此被 Redis 选用作为有序集合的底层数…

阶段三:项目开发---搭建项目前后端系统基础架构:任务13:实现基本的登录功能

任务描述 任务名称: 实现基本的登录功能 知识点: 了解前端Vue项目的基本执行过程 重 点: 构建项目的基本登陆功能 内 容: 通过实现项目的基本登录功能,来了解前端Vue项目的基本执行过程,并完成基…

如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力

目录 01Future 是什么? 为什么选择 Future? 安装与配置 02Future 的基本用法 1、兼容 print 函数 2、兼容整数除法 3、兼容 Unicode 字符串 03Future 的高级功能 1. 处理字符串与字节 2. 统一异常处理…

移动校园(7)ii:uniapp路由响应拦截器处理token,以及微信小程序报错当前页面正在处于跳转状态,请稍后再进行跳转....

依据昨天的写完,在token过期之后,再次调用接口,会触发后端拦截,扔进全局错误处理中间件 前端说明提示都没有,只有一个这个,现在优化一下,再写一个类似全局后置守卫,当状态码是401的时…

增强安全防护,解读智慧校园系统的登录日志功能

在构建智慧校园系统时,登录日志功能扮演着不可或缺的角色,它不仅是系统安全的守护者,也是提升管理效率和确保合规性的有力工具。这一机制详细记录每次登录尝试的方方面面,涵盖了时间戳、用户身份、登录来源的IP地址乃至使用的设备…

phpcms 升级php8.3.8

windows 2008 server 不支持php8.3.8,需升级为windows 2012 1.下载php8.3.8 PHP8.3.9 For Windows: Binaries and sources Releases 2.配置php.ini (1.)在php目录下找到php.ini-development文件,把它复制一份,改名为php.ini (2.)修改php安装目录 根…