小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

报文、报文段、数据包、帧、比特、字符、字节,与编码

数据通信与计算机网络,网络协议,网络,udp,http,tcp/ip 额外说明

收录于:17天前

计算机通信原理

TCP/IP协议簇

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
在这里插入图片描述
最具代表性的TCP/IP协议簇:
在这里插入图片描述
各层传输数据单元:
在这里插入图片描述

物理层:主要是处理机械的、电气的和过程的接口,以及物理传输介质等,是面向硬件的,传输的基本单元是比特。
数据链路层:对来自网络层的数据进行封装形成数据帧,是传输数据的物理媒。数据帧是数据链路层的传输的基本单元。
网络层:网络层的传输数据的单元式数据包或分组。来自传输层的TCP或UDP报文段到达网络层时也要经过网络层协议的再次封装,网络层为ip协议,该层也定义了IP规范。
传输层:传输层数据传输的单元是报文段,来自应用层的报文到达传输层是由传输层协议再次封装,形成TCP或UDP报文。
应用层:应用层都是以原始的数据传输的,应用层使用不同的协议对数据封装形成报文。如HTTP报文,DNS报文,FTP报文。

在这里插入图片描述

数据封装和解封装

TCP/IP 协议族定义了计算机通信的规范。根据这个规范,每台私人计算机都可以通过网线或无线网络连接起来,实现数据共享。数据共享重要的是封装和解封装的过程。然而,TCP/IP协议族已经制定了规范。面对不同的层次,它们被封装成不同的传输单元。

整个数据传输过程中,数据在发送端自上而下逐层传输。每层必须封装一次。解封装来自上层的数据加上本层通信协议的参数信息。该参数信息用于识别正确的数据并解析所需的协议。

在这里插入图片描述
如上图所示,只有经过层层封装最终转化为比特流后才能通过电脑在网线上“传输”。

这里的传送并不是真正的传送,不像传送带。网线上真正传输的是电信号,因为比特流的0和1只是标识符,不存在于显示器中,不能作为传输单元。电信号(电频率)在现实中存在。接收端的计算机接收的不是比特流,而是电信号。这些电信号是有规律的,接收端的计算机通过规则将电信号转换成比特率。例如,传输数据的时间为2秒,传输时间间隔为1秒。那么在2秒的传输时间内,一个正电平和一个负电平都是1,先负后正为0。那么根据这个规则,就可以构造比特流了。比特流经过TCP/IP协议族中的物理层解封装,然后逐层解封装得到原始数据。按照TCP/IP协议族封装的数据可以正常解封装。因此,TCP/IP协议族是数据传输的基础。

数据传输的单元

报文:应用层传输单元。面向应用,将应用产生的数据封装为报文。主要协议由HTTP(超文本传输协议),FTP(文件传输协议),SMTP(电子邮件传输协议),DNS(域名管理系统)。如Java中,提供了Servlet容器将Java的对象,集合以及基本数据类型的数据封装为报文。
报文段网络层传输单元。对应用层的报文再次封装,定义IP,端口等信息,定义数据发送的目的地。
数据包将网络层的报文段封装,添加IP头部等信息,定义传输的具体细节。
:数据包再次封装的结果,面向计算机硬件。
比特流:对帧的进一步封装,成为最终的类型,计算机将比特流转化为规律信号再网线等传输介质上传递。

封装和解封装是这四种类型数据的直接转换。同一类型的数据必须面向同一层才能正常解析。物理层、数据链路层、甚至网络层都是由计算机自动完成的。传输层和应用层都是由程序完成的。例如,Java的Socket可以将Java数据封装成TCP或UDP消息段,然后计算机可以将其封装并接收传输指令,然后再进行传输。 Java的Servlet容器可以将Java数据封装成HTTP消息并发送。包括电子邮件SMTP、文件FTP消息等。

字节,字符,编码

网络传输的基本单位是比特流。比特流对于计算机来说很容易识别,但是对于用户来说却很难理解。需要将比特流转换成人们可以识别的文本(字符)。

比特流并不是直接转化为字符,而是经过了字节的转化,在编码为字符。
在这里插入图片描述
字节(Byte):一个字节占8位(bit),在计算机和网络中是通过二进制字节传递信息的。也就是一个字节由由八位二进制组成。计算机中64位系统就代表了64位的二进制代表一个字,换算成字节就是64/8=8,即是说由8字节构成一个字,32位系统就是32/8=4,4个字节代表一个字。

字符(character):字符是人所能读写的最小单位,例如汉字“我”、字母“A”、符合“+”等,计算机所能支持的字符组成的集合,就叫做字符集。

编码(encode):在计算机和网络中无法直接传递字符,但是可以解析字节,所以需要将字符转化为字节,个解析操作就叫做编码(encode),而相应的,将编码的字节还原成字符的操作就叫做解码(decode)。编码和解码都需要按照一定的规则,这种把字符集中的字符编码为特定的字节的规则就是字符编码(Character encoding)。

字符集

ASCII码
在计算机发展的早期,字符集和字符编码一般使用相同的命名,例如最早的字符集ASCII(American Standard Code for Information Interchange),它既代表了计算机所支持显示的所有字符(字符集),又代表了这个字符集的字符编码。

ASCII字符集是一个二维表,支持128个字符。 128 个代码点由 7 位二进制数表示。由于计算机的1个字节是8位二进制数,因此最高位为0,即00000000-01111111或0x00-0x7F。

慢慢地,只支持128个码点的ASCII已经不能满足我们的需求了。在原来的ASCII的基础上,扩展为256个字符,成为EASCII(扩展ASCII)。 EASCII有256个代码点,用8位二进制数表示,即00000000-11111111或0x00-0xFF。

ISO-8859
当计算机传到了欧洲,EASCII也开始不能满足需求了,但是改改还能凑合。于是国际标准化组织在ASCII的基础上进行了扩展,形成了ISO-8859标准,跟EASCII类似,兼容ASCII,在高128个码位上有所区别。但是由于欧洲的语言环境十分复杂,所以根据各地区的语言又形成了很多子标准,如ISO-8859-1、ISO-8859-2、ISO-8859-3、……、ISO-8859-16。

因此,ISO-8859不是一个标准,而是一系列标准。它们的子标准都使用相同的代码点来对应不同的字符集。

GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。

Unicode字符编码
后来计算机传入亚洲,由于亚洲语种和文字都十分丰富,256个码位就显得十分鸡肋了。于是继续扩大二维表,单字节改双字节,16位二进制数,65536个码位。在不同国家和地区又出现了很多编码,大陆的GB2312、港台的BIG5、日本的Shift JIS等等。

为了解决传统字符编码方案的局限性,引入了Unicode和通用字符集(UCS)来取代原来基于语言的系统。通用字符集的目的是覆盖世界上所有的字符。 Unicode是计算机科学领域的行业标准,包括字符集、编码方案等。

Unicode编码方式:Unicode采用16位编码空间,即每个字符占用2个字节。这样,理论上最多可以表示2的16次方(即65536)个字符。

Unicode 是如何实现的: Unicode 的实现与编码不同。字符的 Unicode 编码是确定的。但在实际传输过程中,由于不同系统平台的设计不一定一致,并且出于节省空间的目的,Unicode编码的实现方式也有所不同。 Unicode 的实现也称为 Unicode Transformation Format(简称 UTF)。目前主流的实现方式是UTF-16和UTF-8。

UTF-8
UTF-8是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换。
UTF-8每个字符使用1-3个字节编码,并利用首位为0或1进行识别。

1、如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。
2、如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
3、如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

UTF-16
UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。

字节、字符和编码

. . .

相关推荐

额外说明

java.lang.IllegalStateException:无法加载ApplicationContext

问题描述 mvn clean install的时候报的如下异常: 紧接着又往下翻了一下日志还有一个这个错误 按正常来说通过@@可以取pom当中的properties标签的值呀。但是可以发现编译过后的application当中的值并没有被替换。 解决过程

额外说明

面试简历的最后一道坎,实战项目经验详解(附web实战项目)

日常猫猫缓解气氛 说起面试,实战项目经验一定是面试官问的重中之重,原因无外乎以下几点 一、面试官问项目经验的目的 通过你做的项目来判断你的专业技能、资历段位、成绩表现与简历或自我介绍中描述的是否一致; 通过你对项目细节的描述,看看你是否能够独当一面,是否

额外说明

零基础学Python之数据类型的转换(手把手带你做牛客网python代码练习题)

文章目录 一、前言 二、转换数据类型的作用 三、转换数据类型的函数 四、代码举例 五、牛客网练习题 1、小数化整数 2、为整数增加小数点 -作者简介:在校大学生一枚,Java领域新星创作者,Java、Python正在学习中。 -日常学习网站:牛客网,可以

额外说明

机器学习 第三节 第十六课

[toc] Numpy 中的 nan 和 inf nan ( NAN, Nan ): not a number 表示不是一个数字 inf ( -inf, inf ): infinity, inf 表示正无穷, -inf 表示浮无穷 什么时候 numpy

额外说明

linux下批量上传本地jar到nexus私服上

1,将本地repository资源上传到linux服务下, 可以用sftp命令在windows下链接linux服务器 用put命令将windows下的资源上传到linux下 2,解压linux下的repository.zip文件 unzip reposi

额外说明

[Ext JS 7]ClassRequire错误解决

Ext JS 使用sencha app watch进行实时开发、编译。 使用如下方式导入其他需要的类: requires: [ 'Ext.chart.CartesianChart', 'Ext.chart.axis

额外说明

详细解决redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

文章目录 1. 复现错误 2. 分析错误 3. 解决错误 4. 解决此错误的其他办法 1. 复现错误 今天从gitlab上下载本公司的项目,但在启动时报出如下错误: org.springframework.beans.factory.BeanCreati

额外说明

从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇

http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/ASPNET-MVC-1.html

额外说明

momentago项目

1.认识momentago 项目地址:https://github.com/Tim3Triver/memontago momentago是go语言time包的部分功能的封装和扩展,主要是作为一个外部依赖来辅助使用。 主要实现了四个功能: 1.解析时间--

额外说明

springboot+redis+mysql+vue入门项目(含调用阿里云SDK短信服务)

一、描述 此项目为个人和朋友合作的电脑波数据分析项目。分为以下几大部分: 硬件:CYTON板等进行脑电波的数据采集 边缘设备:IPAD以及IOS APP 边缘通信方式:蓝牙或WIFI 网站:采用Vue框架搭建,含Bootstrap、elementUI组件

ads via 小工具