版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据序列化与压缩DataSerializationandCompression计算机网络编程核心概念第5章本章概览ChapterOverview01字符串和字节数据StringandByteDataPython中的文本与二进制数据处理02数据封装和帧结构DataEncapsulation网络数据传输的基本单位03序列化格式SerializationFormatsJSON、XML、Protobuf的应用与对比04数据压缩技术DataCompression提升网络传输效率的关键技术05错误处理和异常ErrorHandlingandExceptions|构建健壮的网络应用01字符串和字节数据StringandByteDataPython中的文本与二进制数据处理5.1.1Python中的字符串和字节类型StringandByteTypesinPython字符串String定义:Unicode字符序列,用于表示文本数据特性:不可变(Immutable),一旦创建内容不能改变定义方式:单引号、双引号或三引号操作:支持拼接、分割、格式化等text="Hello,World!"字节Byte定义:不可变的字节序列,用于表示二进制数据表示:字面量通过前缀b表示,如b'hello'元素:0~255之间的整数,而非字符操作:支持大多数字符串类似操作data=b'hello'字符串与字节类型的转换字符串→字节encode()字节→字符串decode()网络编程要点:网络协议通常基于二进制数据,因此需要将字符串转换为字节类型进行传输。接收到的二进制数据也需解码回字符串处理。务必正确使用编码和解码,否则可能导致乱码。5.1.2编码转换和兼容性EncodingConversionandCompatibility1确定编码识别数据当前编码格式UTF-8ISO-8859-1GBK2解码将字节数据解码成Unicode字符串decode('原始编码')3重新编码编码成目标格式的字节数据encode('目标编码')编码兼容性问题数据传输:发送方和接收方编码不一致导致乱码系统间交互:不同操作系统默认编码设置不同国际化:全球化应用需支持多语言和字符集处理编码兼容性措施使用通用编码:尽可能使用UTF-8明确指定编码:HTTP头部指定charset错误处理:使用errors='ignore'或'replace'编码检测:使用chardet等第三方库编码转换示例代码original_data=b'TextwithISO-8859-1'unicode_text=original_data.decode('iso-8859-1')utf8_data=unicode_text.encode('utf-8')5.1.3字节序和网络字节顺序ByteOrderandNetworkByteOrder大端字节序Big-Endian最高字节(最重要的部分)存储在最低的内存地址,其余字节按照重要性递减的顺序存储。示例:32位整数0x1234567812345678↑低地址高地址→小端字节序Little-Endian最低字节(最不重要的部分)存储在最低的内存地址,其余字节按照重要性递增的顺序存储。示例:32位整数0x1234567878563412↑低地址高地址→网络字节顺序定义网络协议中保证数据一致性的约定,用于多字节数值传输的字节序标准互联网协议(TCP/IP)使用大端字节序作为网络字节顺序重要性确保不同系统间数据正确传递和解析,避免通信失败Python字节序转换函数(socket模块)htons(x)16位:主机→网络ntohs(x)16位:网络→主机htonl(x)32位:主机→网络ntohl(x)32位:网络→主机02数据封装和帧结构DataEncapsulationandFrame网络数据传输的基本单位5.2.1数据帧的概念和结构FrameConceptandStructure数据帧的三个主要部分帧头FrameHeader包含用于网络通信的控制信息,如源地址、目的地址、类型、长度等。可能还包括用于错误检测和纠正的信息,如校验和或序列号。有效载荷Payload帧中实际传输的数据部分。可以包含来自上层协议的数据包,如IP数据包或TCP/UDP段。帧尾FrameTrailer通常包含一个或多个校验字段,用于确保帧在传输过程中未被损坏。常见的校验方法包括循环冗余校验(CRC)。以太网帧结构示例目的MAC地址6字节源MAC地址6字节以太网类型2字节数据46~1500字节CRC校验4字节帧的处理流程帧到达目的地后,数据链路层检查帧尾校验字段验证数据完整性校验成功:帧头和帧尾被移除,有效载荷传递到上层协议校验失败:帧被丢弃,可能触发重传机制5.2.2封装和解封装数据EncapsulationandDecapsulation数据封装过程1数据准备应用层数据准备发送,如用户输入、文件内容等2添加协议头部每层添加对应头部信息(源/目的地址、端口号、校验和等)3封装成帧数据链路层封装成帧(帧头+有效载荷+帧尾)4发送通过物理层发送,如以太网、Wi-Fi等数据解封装过程1接收帧数据链路层接收从物理媒介传来的帧2验证和去除帧尾检查CRC等校验字段,失败则丢弃帧3去除协议头部逐层向上传递,每层去除对应头部信息4数据处理应用层接收原始数据,进行进一步处理数据完整性校验和等机制确保数据完整协议层次体现网络协议分层结构数据隔离每层只处理对应层次信息挑战与权衡:封装和解封装需要额外计算,可能影响性能;不同协议有不同封装要求,增加实现复杂性;需确保跨环境兼容性。5.2.2封装和解封装数据EncapsulationandDecapsulation数据封装过程1数据准备应用层数据准备发送,如用户输入、文件内容等2添加协议头部每层添加对应头部信息(源/目的地址、端口号、校验和等)3封装成帧数据链路层封装成帧(帧头+有效载荷+帧尾)4发送通过物理层发送,如以太网、Wi-Fi等5.2.2封装和解封装数据EncapsulationandDecapsulation数据解封装过程1接收帧数据链路层接收从物理媒介传来的帧2验证和去除帧尾检查CRC等校验字段,失败则丢弃帧3去除协议头部逐层向上传递,每层去除对应头部信息4数据处理应用层接收原始数据,进行进一步处理数据完整性校验和等机制确保数据完整协议层次体现网络协议分层结构数据隔离每层只处理对应层次信息挑战与权衡:封装和解封装需要额外计算,可能影响性能;不同协议有不同封装要求,增加实现复杂性;需确保跨环境兼容性。5.2.3帧同步和错误检测FrameSynchronizationandErrorDetection帧同步在数据流中识别帧边界的过程,每个帧的开始和结束都有特定的标识符(特殊比特模式)。帧定界符用于标识帧开始和结束的特殊序列,如以太网帧的前导序列和帧结束序列比特填充防止数据中出现与帧定界符相同的比特模式,发送方插入额外比特,接收方移除错误检测用于发现数据在传输过程中是否出现错误的机制。常见方法包括:奇偶校验添加额外比特使数据中1的数量为奇数或偶数,检测单比特错误循环冗余校验CRC使用特定多项式函数计算CRC值并添加到帧尾,重新计算并与接收到的CRC比较校验和计算数据总和作为校验和,接收方计算校验和验证数据完整性错误纠正机制前向纠错FEC允许接收方不仅检测错误,还能在一定程度上纠正错误,无需重新传输数据提高网络可靠性即使在不完美的传输媒介上也能有效工作性能优化减少需要重传的数据量,提高整体性能实现考虑:选择错误检测方法时需权衡效率与性能(CRC比奇偶校验更可靠但计算更复杂);应考虑网络特定条件(错误率、传输速率);遵循行业标准确保兼容性。03序列化格式SerializationFormatsJSON、XML、Protobuf的应用与对比5.3.1JSON的使用和特点JSONUsageandCharacteristicsJSON核心特点文本格式基于文本,可被任何编程语言读取和处理简洁性语法简洁,使用键值对表示数据,易于理解灵活性可表示数组、对象和基本数据类型(字符串、数字、布尔值)可扩展性对象可以嵌套,允许表示复杂的数据结构跨平台作为文本格式,可在不同系统和网络环境无缝传输Python中使用JSON导入模块importjson序列化:Python对象→JSON字符串data={'name':'Zhangsan','age':30}json_str=json.dumps(data)反序列化:JSON字符串→Python对象data_parsed=json.loads(json_str)网络通信中的应用常用于WebAPI和网络服务,特别是RESTful服务作为HTTP请求和响应的主体,用于客户端和服务器数据交换注意事项只支持文本和基本数据类型,不支持二进制数据数字表示有限制,无法精确表示很大或很小的数字,也无法表示特定格式(日期、时间)大型或复杂数据结构不如二进制序列化格式高效5.3.2XML的使用和特点XMLUsageandCharacteristicsXML核心特点自描述性数据携带描述结构的标签,数据含义更清晰可扩展性用户可自定义标签和数据结构,适应不同需求灵活性擅长表示层次化和嵌套数据结构跨平台文本格式,可在不同系统和网络环境无缝传输国际化支持Unicode,可表示任何语言的字符Python中使用XML导入模块importxml.etree.ElementTreeasET创建XML数据data=ET.Element('data')item=ET.SubElement(data,'item')item.set('name','Zhangsan')item.text='Thisisatest'xml_str=ET.tostring(data)解析XML字符串tree=ET.ElementTree(ET.fromstring(xml_str))root=tree.getroot()网络通信中的应用常用于Web服务和配置文件,尤其是SOAP协议作为HTTP请求和响应的主体,用于客户端和服务器数据交换与JSON的对比格式更冗长,数据大小更大解析通常比JSON更耗时,特别是大型或复杂文档灵活性和复杂性可能导致解析和处理困难,需要更多开发工作5.3.3Protobuf的使用和特点ProtobufUsageandCharacteristicsProtobuf核心特点高效性二进制格式,比XML和JSON更小更快简洁的定义语言使用.proto文件定义数据结构,语法类似C语言跨平台和语言支持支持C++、Java、Python等多种编程语言向后兼容性新旧版本数据定义可以兼容可扩展性可在不破坏已部署程序的情况下添加新字段Protobuf使用流程1定义数据结构syntax="proto3";messagePerson{stringname=1;int32id=2;stringemail=3;}2编译生成代码protoc--python_out=.to3序列化/反序列化frommessage_pb2importPersonperson=Person(name="Zhangsan",id=1234)data=person.SerializeToString()person2.ParseFromString(data)网络通信中的应用非常适合传输结构化数据,二进制格式更紧凑,减少网络带宽使用许多分布式系统和RPC框架(如gRPC)使用Protobuf作为数据交换格式提供高效的数据传输方式,适用于性能敏感的应用注意事项二进制格式,不像JSON和XML那样可读需要使用Protobuf编译器生成数据访问类,增加构建复杂性.proto定义文件需要被所有通信方共享,确保数据结构一致性三种序列化格式对比ComparisonofThreeSerializationFormats特性JSONXMLProtobuf数据大小较小较大(冗长)最小解析速度快较慢最快可读性很好很好不可读(二进制)数据类型支持基本类型文本为主丰富跨语言支持优秀优秀优秀模式定义无DTD/XSD.proto文件向后兼容性有限有限优秀JSON适用场景WebAPI、RESTful服务、轻量级通信、配置文件、数据交换格式XML适用场景严格数据结构、配置文件、SOAP协议、文档存储、复杂数据关系Protobuf适用场景高性能通信、微服务架构、分布式系统、gRPC、性能敏感应用04数据压缩技术DataCompressionTechniques提升网络传输效率的关键技术5.4.1压缩算法概述CompressionAlgorithmOverview无损压缩LosslessCompression压缩和解压缩过程中保留所有原始数据,确保数据完整性适用场景文本文件、源代码、可执行文件数据库、配置文件常用算法DEFLATEZIP,压缩率20-70%LZMA7-Zip,压缩率50-90%BrotliGoogle,压缩率60-95%有损压缩LossyCompression压缩过程中丢弃一些数据,通常是人类感知不到或不太重要的信息适用场景图像、音频、视频等媒体数据一定程度的数据丢失对用户体验影响较小常用算法JPEG图像压缩MP3音频压缩H.264/AVC视频压缩压缩算法的选择因素数据类型不同数据适合不同算法压缩比高压缩比意味着更小文件速度压缩/解压缩速度重要资源消耗CPU和内存资源需求兼容性目标平台正确解压5.4.2Python中的压缩库CompressionLibrariesinPythonzlib提供对DEFLATE压缩算法的支持,是gzip和zip文件中使用的压缩算法importzlibcompressed=press(data,6)decompressed=zlib.decompress(compressed)gzip提供读写.gz文件的功能,广泛用于Unix-like系统importgzipwithgzip.open('file.txt.gz','wb')asf:f.write(data)bz2提供对bzip2压缩算法的支持,使用Burrows-Wheeler变换和哈夫曼编码,压缩率高importbz2compressed_data=press(original_data)decompressed_data=bz2.decompress(compressed_data)lzma实现LZMA压缩算法,压缩率极高但速度较慢,适合压缩大型静态文件importlzmacompressed_data=press(original_data)decompressed_data=lzma.decompress(compressed_data)tarfile提供读写tar归档文件的功能,可与gzip、bzip2或lzma结合使用importtarfilewithtarfile.open('archive.tar.gz','w:gz')astar:tar.add('file.txt')zipfile提供读写zip文件的功能,支持多文件和压缩的归档格式importzipfilewithzipfile.ZipFile('archive.zip','w')aszipf:zipf.write('file.txt')选择合适的压缩库压缩比不同算法提供不同压缩比性能压缩/解压缩速度影响应用兼容性格式与接收方兼容资源消耗CPU和内存资源需求5.4.3压缩数据的网络传输CompressedDataTransmissionoverNetwork压缩前的考虑因素数据类型已压缩的数据(如视频或图片)可能不会从再次压缩中受益CPU开销压缩和解压缩需要额外CPU资源,可能影响服务器性能延迟压缩数据会增加处理时间,可能引入额外延迟带宽与CPU的权衡在带宽受限且CPU资源充足时,压缩更有意义实现网络传输压缩1选择压缩算法根据数据类型和应用需求选择gzip、brotli或lzma2压缩数据在发送前使用选定算法压缩数据3设置HTTP头部使用HTTP时,设置Content-Encoding头部指示数据已被压缩4发送压缩数据将压缩后的数据发送到网络5客户端解压缩接收端根据长度接收数据并进行解压缩安全和最佳实践安全性确保压缩过程不会引入CRIME和BREACH攻击缓存考虑压缩数据的缓存策略,避免重复压缩相同数据内容协商使用内容协商机制,仅在客户端支持时发送压缩数据监控性能监控压缩对性能的影响,确保符合应用性能目标05错误处理和异常ErrorHandlingandExceptions构建健壮的网络应用5.5.1网络异常分类和错误处理策略NetworkExceptionClassificationandErrorHandlingStrategies网络异常分类连接异常•连接失败:无法建立连接,目标服务器不可达•连接重置:对方崩溃或重启•连接超时:网络延迟或服务器响应慢数据传输异常•读取/写入超时、数据损坏协议异常•协议错误、协议不支持资源异常•资源耗尽、资源限制安全异常•认证失败、授权失败错误处理策略异常捕获使用try...except块捕获异常,根据类型进行处理日志记录记录详细错误信息和堆栈跟踪,便于调试用户反馈提供清晰的错误消息和解决方案或重试选项资源清理确保异常发生时释放所有资源(套接字、文件)重试逻辑对临时性错误实现重试,限制次数和间隔故障转移尝试备用服务器或服务维持程序运行重要性:正确处理网络异常对构建健壮和用户友好的网络应用至关重要。开发者需了解不同类型的网络异常,并根据应用需求制定合适的错误处理策略。5.5.2异常捕获和处理最佳实践ExceptionHandlingBestPracticesPython异常捕获基本语法importloggingtry:#网络操作代码passexceptConnectionErrorase:logging.error(f"Connectionerror:{e}")conn.close()exceptExceptionase:logging.error(f"Unexpectederror:{e}")最佳实践具体异常类型捕获,避免空异常处理避免过度捕获(如exceptException)必要时将异常传播给调用者网络请求异常处理示例使用requests库importrequestsdeffetch_data(url):try:response=requests.get(url,timeout=5)response.raise_for_status()returnresponse.textexceptrequests.exceptions.HTTPErrorase:print(f"HTTPerror:{e}")exceptrequests.exceptions.ConnectionErrorase:print(f"Connectionerror:{e}")exceptrequests.exceptions.Timeoutase:print(f"Timeouterror:{e}")returnNone核心原则:正确的异常捕获和处理对构建健壮网络应用至关重要。它不仅防止程序崩溃,还提供有用的调试信息,允许程序在遇到问题时优雅恢复。开发者应根据应用需求和上下文设计合适的异常处理策略。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026年)医学基础知识医学基础知识试题及答案(所有知识点)
- 薪税师安全知识宣贯水平考核试卷含答案
- 白酒发酵工操作能力竞赛考核试卷含答案
- 工程机械装配调试工安全意识强化能力考核试卷含答案
- 瓦斯检查工岗前新工艺考核试卷含答案
- 家用电冰箱维修工岗中质量考核试卷含答案
- 灌溉机械操作工安全生产能力考核试卷含答案
- 儿童发育指导师操作管理评优考核试卷含答案
- 应急通信管理员岗中深度考核试卷含答案
- 渭南市韩城市2025年数学四年级第二学期期中质量检测试题(含答案解析)
- 2024年浙江省中考英语试题(附答案)
- GB/T 5709-2025纺织品非织造布术语
- 鞘内药物输注镇痛治疗和管理-多学科专家共识
- 部编版七年级下册历史期末复习知识点提纲
- 苏教版四年级科学教学案例展示
- (高清版)AQ 1074-2009 煤矿瓦斯输送管道干式阻火器通 用技术条件
- PiCCO-监测技术操作管理
- TCEA 0050-2023 电梯导轨型钢
- 突发性耳聋教学查房
- 居民自建桩安装告知书回执
- 空调维保投标方案
评论
0/150
提交评论