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

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

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

收录于:156天前

计算机通信原理

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 作为内存的字符存储格式的一个很重要的原因。

字节、字符和编码

. . .

相关推荐

额外说明

打BOSS倒计时小程序之操作xml文件

最近两个月事儿比较多,也比较懒,不太想写东西。现在呢事儿还是很多,但是想写了——再不写就全忘啦,所以。。。 从这几天做的一个小程序开始写吧。 这个小程序主要是用来提醒人某个游戏还有多少时间BOSS就要出来了赶紧去打(类似是这种倒计时的东西啦,具体是个什么

额外说明

推荐系统[八]算法实践总结V4:混排算法在淘宝信息流第四代混排调控框架实战,提升推荐实时性捕捉实时兴趣。

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、

额外说明

缓存技术使用

一. http请求缓存技术 从用户请求数据到数据返回,数据经过了浏览器,CDN,代理服务器,应用服务器,以及数据库各个环节。每个环节都可以运用缓存技术。 从浏览器/客户端开始请求数据,通过 HTTP 配合 CDN 获取数据的变更情况,到达代理服务器(Ng

额外说明

编织人工智能:机器学习发展历史与关键技术全解析

文章目录 1. 引言 1.1 机器学习的定义 1.2 重要性和应用场景 重要性 应用场景 2. 机器学习的早期历史 2.1 初期理论与算法 感知机 决策树 2.2 早期突破 支持向量机 神经网络初探 3. 21世纪初期的发展 3.1 集成学习方法 随机森

额外说明

【C++数据结构】智能指针的构建

文章目录 一、构建智能指针的原因 二、智能指针分析 三、实现智能指针 数据结构使用的编译器 创建Qt控制台项目 智能指针的构建 新文件结构 创建指针成员 实现析构函数 构造函数 操作符重载 成员函数的实现 拷贝构造函数和"="重载操作符 四、代码一览 总

额外说明

ActiveMQ消息队列学习(三)

ActiveMQ消息队列学习(三) ActiveMQ的介绍之前已经介绍过了,而且网上介绍性的东西比较多,在这里就不再去赘述了,本节将结合之前搭建的activeMQ集群完成消息队列的学习。整个思路是先搞定一个实用的demo,然后根据demo进行分析。 由于

额外说明

【Python 随练】分解质因数

题目: 将一个正整数分解质因数。例如:输入 90,打印出90=233*5。 简介: 在本篇博客中,我们将解决一个数学问题:如何将一个正整数分解成质因数的乘积。我们将给出问题的解析,并提供一个完整的代码示例来实现分解质因数的功能。 问题分析: 我们需要将给

额外说明

计算机英语讲课笔记02

文章目录 I. The Result of Sign-in II. Arithmetic Operations 1. Addition 2. Subtraction 3. Multiplication 4. Division III. Big Data

额外说明

利用R、Octave和NumPy求解线性方程组

利用R、Octave和NumPy求解线性方程组 一、求解二元一次方程组 求解线性方程组可以利用克莱姆法则来计算,还可以利用矩阵来计算: 1、采用R来求解 (1)利用行列式来计算

额外说明

java 线程的状态

介绍:Java中线程的状态分为6种。Thread类里面定义了枚举类State,里面详细的介绍了6种状态。如下(直接copy的 小小的用百度翻译了一下,(●'◡'●)): NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING

ads via 小工具