进制转换
1、进制定义
二进制:是指在数学和数字电路中以2为基数的记数系统,二进制只有0和1两个数字符号,其运算规律是逢2进1,例如101101。
八进制:一种以8为基数的计数法,采用0,1,2,3,4,5,6,7这八个数字符号,其运算规律是逢8进1,例如77。
十进制:一种以10为基数的计数法,采用0,1,2,3,4,5,6,7,8,9这十个数字符号,其运算规律是逢10进1,例如88。
十六进制:一种以16为基数的计数法,采用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这十六个数字和字母符号,其运算规律是逢16进1,例如9527。
2、各进制间的转换方法
2.1 二进制转其他进制
二进制转十进制: 采用位置计数法,其位权是以2为底的幂,顺序从右到左,从0开始计数。
例如二进制数1011(二进制) = 1 * 23 + 0 * 22 + 1 * 21 + 1 * 20 = 11(十进制)。
二进制转八进制: 采用三合一法,即从二进制的小数点为分界点,向左(或向右)每三位取成一位来计算,不足三位的前面补0
例如:10110011B = (0)10 110 011 = 263(八进制)。
二进制转十六进制: 采用四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位来计算,不足四位的前面补0
例如:10110011B = 1011 0011 = B3(十六进制)。
2.2 十进制转其他进制
- 十进制转二进制
整数采用“除2倒取余”,小数采用“乘2取整”。
例如十进制数135转换成二进制时,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取,结果为10000111(二进制)。
- 十进制转八进制
和转二进制的方法类似,整数采用“除8倒取余”,小数采用“乘8取整”。
例如十进制数10转换成二进制时,将10除以8,得余数,直到不能整除,然后再将余数从下至上倒取,结果为12(八进制)。
- 十进制转十六进制
思路和转二进制、八进制一样,十进制数25转换成十六进制时,结果为19(十六进制)。
2.3 八进制转其他进制
- 八进制转二进制:和二进制转八进制的方法相反,采用三合一法,例如:263(八进制) = 010 110 011(二进制)。
- 八进制转十进制:和二进制转十进制的方法一样,采用位置计数法,其位权是以8为底的幂,顺序从右到左,从0开始计数。例如八进制数26(八进制) = 2 * 81 + 6 * 80 = 22(十进制)。
八进制转十六进制:不能直接转换,需要先转成二进制,再将二进制转成十六进制。
2.4 十六进制转其他进制
- 十六进制转二进制:和二进制转十六进制的方法相反,采用四合一法,例如:B3(十六进制) = 1011 0011 = 10110011(二进制)。
- 十六进制转八进制:不能直接转换,需要先转成二进制,再将二进制转成八进制。
- 十六进制转十进制:和二进制转十进制的方法一样,采用位置计数法,其位权是以16为底的幂,顺序从右到左,从0开始计数。例如十六进制数26(十六进制) = 2 * 161 + 6 * 160 = 38(十进制)。
信息单位
在计算机内部,信息都是釆用二进制的形式存储、运算、处理和传输的。信息的存储和传输是以位(bit)、字节(Byte)、千字节(Kilo Byte)、兆字节(Mega Byte)等计量标准为单位的。
1、单位定义
存储单位: 存储在计算机硬盘或内存中的信息容量标准,最小计量单位是“位”(bit,比特),一个比特位表示一个二进制的0或1在计算机中所占用的存储空间
传输单位: 在计算机网络中称为带宽,宽带传输速率的单位为bps,bps是bit per second的缩写,表示每秒钟传输多少比特位信息(很多人都会把这里的bit误以为是Byte,也就是错把位当成字节),例如:带宽的单位是10Mb/s,这里其实指的是每秒传输10兆位,而不是10兆字节数据,因此将位数需要除以8换算成字节数,也就是每秒传输1.25兆字节,即10Mbit/s = 1.25MByte/s
2、换算公式
- 1字节(Byte)= 8位(bit)
- 1KB(Kilo Byte,千字节)= 1024B(Byte)
- 1MB(Mega Byte,兆字节)= 1024KB
- 1GB(Giga Byte,吉字节)= 1024MB
- 1TB(Tera Byte,太字节)= 1024GB
- 1PB(Peta Byte,拍字节)= 1024TB
- 1EB(Exa Byte,艾字节)= 1024PB
- 1ZB(Zeta Byte,泽字节)= 1024EB
- 1YB(Yotta Byte,尧字节)= 1024ZB
- 1BB(Bronto Byte,珀字节)= 1024YB
- 1NB(Nona Byte,诺字节)= 1024BB
- 1DB(Dogga Byte,刀字节)= 1024NB
数据校验
数据在传输的过程中,会受到各种干扰的影响,如脉冲干扰,随机噪声干扰和人为干扰等,这会使数据产生差错。为了能够控制、减少甚至消除传输过程中的差错,就必须采用有效的措施来控制差错的产生。
1、奇偶校验
根据传输的二进制数据和奇偶校验位中“1”的个数进行校验。
如果连同校验位中“1”的个数是奇数,就是奇校验;反之,就是偶校验
技术特点: 简单,可以检测出错误,但无法确切地知道哪里有错,也无法修改,只能要求重传
适用场景: 应用广泛,但不适宜在信号噪声较多的环境中传输
多媒体基础参数
所谓多媒体(Multimedia)指的是多种媒体的综合,一般包括图像、声音和视频等形式或者它们的组合。可以通过基础参数来衡量多媒体文件质量的好坏。
1、参数定义
比特率: 音视频、图像都可以采用这个指标,它指的是规定时间内传输的比特数,单位是bps(bit per second),比特率越高,数据传输的速度就越快,流媒体的播放质量就越好(音视频越清晰),所需带宽也越大,比特率有时候也和码率混为一谈,但码率的单位一般是kbps(千位每秒)。
采样率: 专用于音频多媒体,也称为采样速度或者采样频率,它定义了每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(Hz) 。采样率的意义在于将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少个点,常用的采样率为44.1KHz。
采样位深: 也被称为采样精度,单位为Bit,常见的位深有16Bit和24Bit,它其实就是每个采样样本中信息的比特数。
2、计算公式
视频码率计算公式(kbps,千位每秒) = 文件大小(KB,千字节)* 8 / 秒数
音频码率计算公式(kbps,千位每秒) = 采样率 × 采样位深 × 通道数
HTTP
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可以给服务器发送什么样的消息以及能够得到什么样的响应。这个简单
的模型是早期Web应用得以普及的重要保障,可以说没有HTTP协议,就没有今天丰富多彩、繁荣兴旺的互联网。
HTTP特性
- HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80
- HTTP 是无连接无状态的
请求报文
HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:
<method> <request-URL> <version> <headers> <entity-body>
HTTP 定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而 HTTP 中的GET,POST,PUT,DELETE就对应着对这个资源的 查,增,改,删 4个操作。
1.GET 用于信息获取,而且应该是安全的 和 幂等的。
所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
幂等的意味着对同一 URL 的多个请求应该返回同样的结果。
GET 请求报文示例:
GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive
2.POST 表示可能修改变服务器上的资源的请求。
POST / HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive sex=man&name=Professional
3.注意:
- GET 可提交的数据量受到URL长度的限制,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制
- 理论上讲,POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制,出于安全考虑,服务器软件在实现时会做一定限制
- 参考上面的报文示例,可以发现 GET 和 POST 数据内容是一模一样的,只是位置不同,一个在 URL 里,一个在 HTTP 包的包体里
POST 提交
HTTP 协议中规定 POST 提交的数据必须在 body 部分中,但是协议中没有规定数据使用哪种编码方式或者数据格式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 PHP、Python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。下面就正式开始介绍它们:
- application/x-www-form-urlencoded
这是最常见的 POST 数据提交方式。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。上个小节当中的例子便是使用了这种提交方式。可以看到 body 当中的内容和 GET 请求是完全相同的。
- multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data 。直接来看一个请求示例:
POST http://www.example.com HTTP/1.1 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
这个例子稍微复杂点。首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 multipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。
这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。
上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 <form> 表单也只支持这两种方式(通过 <form> 元素的 enctype 属性指定,默认为 application/x-www-form-urlencoded 。其实 enctype 还支持 text/plain,不过用得非常少)。
随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,例如 application/json,text/xml ,乃至 application/x-protobuf 这种二进制格式,只要服务器可以根据 Content-Type 和 Content-Encoding 正确地解析出请求,都是没有问题的。
响应报文
HTTP 响应与 HTTP 请求相似,HTTP响应也由3个部分构成,分别是:
- 状态行
- 响应头(Response Header)
- 响应正文
状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。
常见的状态码有如下几种:
- 200 OK 客户端请求成功
- 301 Moved Permanently 请求永久重定向
- 302 Moved Temporarily 请求临时重定向
- 304 Not Modified 文件未修改,可以直接使用缓存的文件。
- 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
- 404 Not Found 请求的资源不存在,例如,输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
- 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
下面是一个HTTP响应的例子:
HTTP/1.1 200 OK Server:Apache Tomcat/5.0.12 Date:Mon,6Oct2003 13:23:42 GMT Content-Length:112 <html>...
Cookie 和 Session的区别
1、存取方式的不同
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
2、隐私策略的不同
Cookie存储在客户端阅读器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。
3、有效期上的不同
使用过Google的人都晓得,假如登录过Google,则Google的登录信息长期有效。用户不用每次访问都重新登录,Google会持久地记载该用户的登录信息。要到达这种效果,运用Cookie会是比较好的选择。只需要设置Cookie的过期时间属性为一个很大很大的数字。由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了阅读器该Session就会失效,因而Session不能完成信息永世有效的效果。运用URL地址重写也不能完成。而且假如设置Session的超时时间过长,服务器累计的Session就会越多,越容易招致内存溢出。
4、服务器压力的不同
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。关于Google、Baidu、Sina来说,Cookie或许是唯一的选择。
5、浏览器支持的不同
Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。关于WAP上的应用,常规的Cookie就派不上用场了。假如客户端浏览器不支持Cookie,需要运用Session以及URL地址重写。需要注意的是一切的用到Session程序的URL都要进行URL地址重写,否则Session会话跟踪还会失效。关于WAP应用来说,Session+URL地址重写或许是它唯一的选择。假如客户端支持Cookie,则Cookie既能够设为本浏览器窗口以及子窗口内有效(把过期时间设为–1),也能够设为一切阅读器窗口内有效(把过期时间设为某个大于0的整数)。但Session只能在本阅读器窗口以及其子窗口内有效。假如两个浏览器窗口互不相干,它们将运用两个不同的Session。(IE8下不同窗口Session相干)
6、跨域支持上的不同
Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。仅运用Cookie或者仅运用Session可能完成不了理想的效果。这时应该尝试一下同时运用Cookie与Session。Cookie与Session的搭配运用在实践项目中会完成很多意想不到的效果。
总结
Session 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
HTTPS
HTTPS(全称是Hyper Text Transfer Protocol over SecureSocket Layer)是身披SSL/TLS外壳的HTTP。它在HTTP之上利用SSL/TLS建立安全的信道,加密数据传输。
1、加密算法
对称加密: 加密与解密用同一套密钥,如DES、3DES和AES等
非对称加密: 加密和解密所使用的密钥不同,如RSA、DSA等
不可逆加密: 明文加密后无法通过解密来复原,如MD5、SHA等
2、SSL
全称Secure Sockets Layer,安全套接字协议,因为HTTP是用明文来传输数据的,传输内容可能会被偷窥(嗅探)和篡改,SSL的出现就是用来解决信息安全问题的,当前版本为3.0。
它位于TCP/IP协议与各种应用层协议之间,自身又分为两层: SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)。
3、TLS
全称Transport Layer Security,传输层协议,它是在SSL3.0基础上设计的,相当于SSL的后续版本,它的目标是让SSL更安全。
4、证书与证书链
大学读完之后有毕业证书,并且这个证书可以在学信网查询
专业上有注会、CCIE、律师证等,可以在国家职业认证机构或委托机构的网站上查到
公司注册之后,营业执照信息也可以在天眼查或企查查上找到
证书的作用
- 过往经历的证明
- 第三方信用担保
- 唯一合法性检验
OSI七层模型链接
OSI的全称是Open System Interconnection(开放系统互联),是一个定义得较为完备的协议规范。它最大的意义在于解决了不同网络之间的互联互通问题,并且清晰地定义了不同网络层次之间的边界和职责。
应用层(Application Layer)
是OSI参考模型的最高层,它是用户、应用程序和网络之间的接口,它直接向用户提供服务,替用户在网络上完成各种工作。
表示层(Presentation Layer)
是OSI参考模型的第六层,它对来自应用层的指令和数据进行解释,对各种语法赋予相应的含义,它主要功能是处理用户信息的表示问题,例如数据编码、数据格式转换和加解密等。
会话层(Session Layer)
是OSI参考模型的第五层,它的主要任务是为两个实体的表示层提供建立和使用连接的方法(不同实体之间表示层的连接称为会话),组织和协调两个会话进程之间的通信,并对数据交换进行管理。
传输层(Transport Layer)
是OSI参考模型的第四层。该层的主要任务是向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节。
网络层(Network Layer)
是OSI参考模型的第三层,它是最复杂的一层,也是通信子网的最高一层。它在下两层的基础上向上层提供服务。它的主要任务是通过路由选择算法,为报文或分组选择最合适的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。
数据链路层(Data Link Layer)
是OSI参考模型的第二层,它负责建立和管理节点间的链路。同时通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
物理层(Physical Layer)
是OSI参考模型的第一层,也是最底层。它的主要功能是利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。它使数据链路层不必考虑网络的具体传输介质是什么。“比特流的透明传输”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
发送电子邮件示意图
接收电子邮件示意图
各层级常用协议
IP基础
IP是Internet Protocol(网际协议)的缩写,是整个TCP/IP协议族的核心,也是构成互联网的基础,可以说,只要计算机在网络中存在,就一定会有能够找得到它的IP地址。IP主要包含三方面的内容:IP编址方案、分组封装格式及分组转发规则。本任务所涉及的仅仅是IP编址方案。
1、IP地址
IP位于网络层,作用是主机间的通信,负责在没有直连的两个网络之间传输通信数据,而MAC位于数据链路层,作用是实现两个设备之间的直连通信
IP和MAC的区别
IP地址(IPv4)由32位二进制数表示,在计算机中是以二进制的方式处理的,人类为了方便记忆而采用了点分十进制的标记方式:也就是将32位二进制的IP地址以每8位为一组,共分为4组,组之间用“.”隔开,再将每组转换成十进制数表示。
也就是说,IP地址的最大值就是2^32 = 4294967296
IPv4的表示方法
2、IP地址分类
互联网诞生之初,IP地址显得很充裕,因此计算机科学家们设计了分类地址。他们把IP地址分为五种类型:A、B、C、D、E。
A、B、C、D、E五类IP地址
为什么要有网络号? 因为除了需要定位某台具体的计算机,还需要定位某个网络。网络号和主机号的关系,就好比楼栋和住户的关系,也就是**「网络号:主机号 == 楼栋号:住户」**。
最大主机数 = 2^主机号的位数 - 2, 例如C类IP地址的主机号位数为8,那么C类IP地址的最大主机数 = 28 - 2 = 254。之所以要减2,是因为有两个IP是特殊的,分别是主机号全为1和主机号全为0。
最大主机数要排除全0和全1的主机号
3、无分类地址CIDR
不再有A、B、C、D、E等分类的概念,而是仅仅将32位的IP地址划分成两部分:网络号 + 主机号,形式为:a.b.c.d/x,其中/x表示前x位属于网络号,范围是0~32。例如10.100.122.2/24,通过CIDR也可以得到子网掩码。
CIDR无分类地址
4、小知识
在A、B、C三类地址中,分别都有一个保留地址。
A类: 10.0.0.0 ~ 10.255.255.255
B类: 172.16.0.0 ~ 172.31.255.255
C类: 192.168.0.0 ~ 192.168.255.255
也就是说,这三组地址是私有网络地址,在互联网上是用不了的
本机IP、127.0.0.1和localhost 他们之间的区别
本机IP: 确切地说是本机物理网卡的IP地址,它发送和接收数据会受到防火墙和网卡的限制
127.0.0.1: 这是一个环回地址,也是一个特殊的网络接口,从它发出的任何数据包都不会出现在网络中,它发送和接收数据也会受到防火墙和网卡的限制
localhost: 它是一个域名,过去它指向127.0.0.1这个IP地址,现在它同时还指向IPv6地址:[::1] ,它发送和接收数据不会受防火墙和网卡的限制
IPv6
在IPv4诞生的时代,是无法预见今日互联网的繁荣程度的,因此很多设计问题在发展的过程中也逐渐暴露出来,例如分类不合理,可用的公网IP地址总数量太少等等。在此情况下,出现了IPv6。IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF) 设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址。
冒分十六进制表示法: 格式为X:X:X:X:X:X:X:X,每个X表示地址中的16个二进制位(或者十六进制数)
例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,这种表示法中,X中的前导0是可以省略的。
0位压缩表示法: 如果一个IPv6地址中间包含很长的一段0,就可以把连续的一段0压缩为“::”。但这种形式“::”只能出现一次。
内嵌IPv4表示法: 为了和IPv4兼容,IPv4地址可以嵌入IPv6地址中,此时地址格式为:X:X:X:X:X:X:d.d.d.d ,前96位采用冒分十六进制表示,而最后32位则使用IPv4的点分十进制表示,例如:::192.168.0.1。