【计算机网络】TCP中payload的解析,在python中的体现?字节、字符?为啥字节用十六进制表示?

这篇具有很好参考价值的文章主要介绍了【计算机网络】TCP中payload的解析,在python中的体现?字节、字符?为啥字节用十六进制表示?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编码

问题来源

最近要根据一份国家标准协议进行解码,但是对于进制,字节,字符,编码,转码有比较多的问题。其中我想实现的主要需求如下:

  1. 有客户端与服务端,进行tcp通信,客户端要发送一个请求,tcp中payload请求大概是这样,有很多个十六进制表示的字节组成

image.png

  1. 根据协议的规定,从中间取出某几个字节进行编码 ,比如第五个位置-第六个位置,2个字节的代表 学生人数,某几个字节代表学生姓名。协议指出采用ASCII码编码,与汉字采用GBK编码

字符与字节

  • 字符:数字,符号,字母
  • 字节:8byte位构成一个字节,单个字节可以由两个十六进制数或者8个二进制进行标识。

一个字节在十进制表示中是0-255,即0000 0000到1111 1111,十六进制字符可以表示4个二进制位,所以两个十六进制字符可以表示8个二进制位

  • 在计算机中每一个字符都对应着唯一的数字编码,也被称为字符编码或者字符集

举个例子

如果有客户端跟服务端,那么中间传输的字节,可以有不同的编码方式,比如说字母跟数字可以采用最常见的ASCII编码方式,但是如果有中文时,我们还可以对这个中文字符采用GBK编码,只不过在解码的时候再通过这种方式解决。

常见的编码方式

  • ASCII:最常见的编码方式
  • UTF-8:变长字节存储unicode字符,用于保存文本数据的编码
  • UTF-16:使用两个字节表示unicode
  • GBK编码:国家标准编码,支持简体中文和繁体中文。
  • ISO-8859编码:使用单字节表示字符,支持多种语言,包括英语、西班牙语、德语等

在python中进行解码的方式

struct是用来解决bytes和其他二进制数据类型的转换的模块,它使得流的操作变得非常简单,完美解决了Python没有字节数据类型的尴尬。
注意我们这里说的字节串可以是这样的

#其中\x代表的就是
str=b'\x00\x12'

struct.pack

作用:Python数据类型 ——> “字节串”
格式:struct.pack(format, v1, v2, …)

struct.unpack

作用:“字节串” ——> Python数据类型
格式:struct.unpack(format, buffer)

format:格式

  1. 对齐方式

image.png

  1. 格式字符

image.png

payload=b'\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12'
# 大端,按照协议规定的字节数,进行解码。这部分的四个字节进行解码
msg_length = struct.unpack('>i',payload[1:5])[0]
# 大端,按照协议规定的字节数,进行解码。这部分的2个字节进行解码
msg_id = struct.unpack('>H', payload[9:11])[0]

大端与小端

为什么会出现大小端?

因为计算机内部存储数据的方式不同

什么是大小端

大端: 首先明确一点就是他与我们的阅读习惯是一致的,在书本上,我们是从左往右来看数字的,这个不牵扯到存储。
例如 0x0102 十六进制进制数,其实这就是大端存储。将01这个数据的高字节存储到内存的底地址中
小端:
例如 0x0201 十六进制进制数,其实这就是小端存储。将01这个数据的高字节存储到底地址中

引用 :https://blog.csdn.net/Robin_Pi/article/details/112233764文章来源地址https://www.toymoban.com/news/detail-501118.html

到了这里,关于【计算机网络】TCP中payload的解析,在python中的体现?字节、字符?为啥字节用十六进制表示?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络-TCP协议

    TCP被称为面向连接的,因为在应用程序开始互传数据之前,TCP会先建立一个连接,该连接的建立涉及到 三次“握手 ”。 TCP的连接不是一条真实存在的电路,而是一条逻辑链接 ,其共同状态仅保留在两个通信端系统的TCP程序中。 TCP连接也是点对点的,即TCP连接只能存在于一

    2024年02月08日
    浏览(56)
  • 【计算机网络】TCP协议

    实验目的 应用所学知识: 1. 熟悉 TCP 的协议格式。 2. 理解 TCP 对序列号和确认号的使用。 3. 理解 TCP 的流量控制算法和拥塞控制算法。 实验步骤与结果 1.任务一: 将Alice.txt上传到服务器: 使用wireshark捕获数据包,看到计算机和gaia.cs.umass.edu之间的一系列 TCP 和 HTTP 通信,包

    2023年04月20日
    浏览(55)
  • 【计算机网络】简易TCP网络小程序

    1.1.1 服务端创建套接字 我们将TCP服务器封装成一个类,当我们定义出一个服务器对象后需要马上对服务器进行初始化,而初始化TCP服务器要做的第一件事就是创建套接字。 TCP服务器在调用socket函数创建套接字时,参数设置如下: 协议家族选择 AF_INET ,因为我们要进行的是网

    2024年02月16日
    浏览(83)
  • 05.计算机网络——TCP协议

    TCP协议——TCP全称为 “ 传输控制协议 (Transmission Control Protocol)”,对数据的传输进行一个详细的控制。 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去; 32位序号/32位确认号: 用来支持确认应答和按序到达 4位TCP报头长度: 表示该TCP报头有多少个4字节大小; 6位标志位

    2024年02月16日
    浏览(51)
  • 【计算机网络】TCP协议详解

    目录 1. TCP协议头部格式 2. TCP协议原理  2.1 可靠传输机制 2.1.1 确认应答机制 2.1.2 超时重传机制 2.1.3 连接管理机制(三次握手,四次挥手) 2.1.4 流量控制 2.1.5 拥塞控制  2.2 效率机制  2.2.1 滑动窗口  2.2.2 延迟应答  2.2.3 捎带应答  3. 粘包问题  4. TCP的异常情况  5. TCP协议特

    2024年01月18日
    浏览(50)
  • 【计算机网络篇】TCP协议

    ✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! TCP(Transmission Control Protocol)是一种在计算机网络中广泛使用的传输层协议,用于在网络上可靠地传输数据。 TCP 提供了可靠的、面向连接的通信,并负责数据的划分、排

    2024年02月11日
    浏览(52)
  • 计算机网络(3) --- 网络套接字TCP

    计算机网络(2) --- 网络套接字UDP_哈里沃克的博客-CSDN博客 https://blog.csdn.net/m0_63488627/article/details/131977544?spm=1001.2014.3001.5501 目录 1.TCP 1.服务端接口介绍 1.listen状态 2.accept获取链接 2.客户端接口介绍 2.TCP的服务器和客户端接口实现 1.服务端 1.成员函数 2.接口 start()实现方式 1.单

    2024年02月14日
    浏览(53)
  • 计算机网络——TCP/IP网络层次模型

    我们上一次了解了OSI的网络层次模型,如果还没有看过上一次OSI网络模型的可以点击这里: https://blog.csdn.net/qq_67693066/article/details/136597950 我们今天来看实际在生活中使用更广的 TCP/IP网络模型 : TCP/IP网络模型的起源可以追溯到20世纪60年代末和70年代初,当时美国国防部的高级

    2024年03月17日
    浏览(47)
  • 【计算机网络】TCP|IP协议

    目录 前言 什么是TCP/IP协议? TCP/IP协议的层次结构 TCP/IP协议的工作原理 TCP/IP协议的重要性 结语   TCP/IP协议是当今互联网世界中最重要的网络协议之一,它是网络通信的基石,为数据在网络中的传输提供了可靠性和有效性。本文将深入探讨TCP/IP协议的重要性、基本原理以及其

    2024年02月03日
    浏览(60)
  • 【计算机网络】 TCP——四次挥手

    主动方打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后主动方进入FIN_WAIT_1状态。 被动方收到该报文后,就向主动方发送ACK应答报文,接着被动方进入CLOSE_WAIT状态。 主动方收到被动方的ACK应答报文后,进入FIN_WAIT_2状态。 等待被动方处理完数

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包