为数据端设备 提供传输数据的通路、传输介质
,如光纤、无线信道、终端等
为网络层提供数据传送服务的,可以粗略地理解为 数据通道
(物理层是长期的,而数据链路层是 生存期内
的)
1. 链路连接的建立,拆除,分离
2. 链路层的数据传输单元是帧
当终端增多时,解决任意终端连接问题。称 路由或者叫寻径
1. 激活, 终止网络连接
2. 在一条数据链路上复用多条网络连接, 多采取 ` 分时复用 ` 技术
3. 排序, 流量控制
它是源 端到目的端
对数据传送进行控制从低到高的最后一层
1. 传输层也称为运输层. 传输层只存在于端开放系统中
2. 传输层是两台计算机经过网络进行数据通信时, 第一个端到端的层次,具有缓冲作用
3. 传输层面对的数据对象已不是网络地址和主机地址, 而是和会话层的界面端口
4. 采用分流 / 合流,复用 / 解复用技术来调节通信子网 (如电话交换网, 分组交换网, 公用数据交换网, 局域网等) 的差异
上述功能的最终目的是为会话层提供可靠的, 无误的数据传输
使应用建立和维持会话
,并能使会话获得同步
主要功能流程
1. 将会话地址映射为运输地址
2. 选择需要的运输服务质量参数(QOS)
3. 对会话参数进行协商
4. 识别各个会话连接
5. 传送有限的透明用户数据
6. 传输数据,释放连接
异种机通信提供一种公共语言,以便能进行互操作,前面几层 完成了数据传输
,之后要 实现数据的使用
应用层向应用程序提供服务
浏览器输入 url 后发生的事情://
浏览器向 DNS 服务器查找输入 URL 对应的 IP 地址。DNS 服务器返回网站的 IP 地址。浏览器根据 IP 地址与目标 web 服务器在 80 端口上建立 TCP 连接。浏览器获取请求页面的 HTML 代码。浏览器在显示窗口内渲染 HTML。窗口关闭时,浏览器终止与服务器的连接。
1XX:指示信息–表示请求已接收,继续处理
2XX:成功–表示请求已被成功接收、理解、接受。3XX:重定向–要完成请求必须进行更进一步的操作。4XX:客户端错误–请求有语法错误或请求无法实现。5XX:服务端错误 - 服务器未能实现合法的请求
GET /sample.Jsp HTTP/1.1 请求行
Host: www.uuid.online/ 请求的目标域名和端口号
Origin: http://localhost:8081/ 请求的来源域名和端口号(跨域请求时,浏览器会自动带上这个头信息)Referer: https:/localhost:8081/link?query=xxxxx 请求资源的完整 URI
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 浏览器信息
Cookie: BAIDUID=FA89F036:FG=1; BD_HOME=1; sugstore=0 当前域名下的 Cookie
Accept: text/html,image/apng 代表客户端希望接受的数据类型是 html 或者是 png 图片类型
Accept-Encoding: gzip, deflate 代表客户端能支持 gzip 和 deflate 格式的压缩
Accept-Language: zh-CN,zh;q=0.9 代表客户端可以支持语言 zh-CN 或者 zh (值得一提的是 q(0~1)是优先级权重的意思,不写默认为 1,这里 zh-CN 是 1,zh 是 0.9)
Connection: keep-alive 告诉服务器,客户端需要的 tcp 连接是一个长连接
|HTTP/1.1 200 OK| 响应状态行 |
|Date: Mon, 30 Jul 2018 02:50:55 GMT| 服务端发送资源时的服务器时间 |
|Expires: Wed, 31 Dec 1969 23:59:59 GMT| 较过时的一种验证缓存的方式,与浏览器(客户端)的时间比较,超过这个时间就不用缓存(不和服务器进行验证),适合版本比较稳定的网页 |
|Cache-Control: no-cache| 现在最多使用的控制缓存的方式,会和服务器进行缓存验 | 证,具体见博文“Cache-Control”|etag: "fb8ba2f80b1d324bb997cbe188f28187-ssl-df"| 一般是 Nginx 静态服务器发来的静态文件签名,浏览在没有“Disabled cache”情况下,接收到 etag 后,同一个 url 第二次请求就会自动带上“If-None-Match”|
|Last-Modified: Fri, 27 Jul 2018 11:04:55 GMT| 服务器发来的当前资源最后一次修改的时间,下次请求时,如果服务器上当前资源的修改时间大于这个时间,就返回新的资源内容 |
|Content-Type: text/html; charset=utf-8| 如果返回是流式的数据,我们就必须告诉浏览器这个头,不然浏览器会下载这个页面,同时告诉浏览器是 utf8 编码,否则可能出现乱码 |
|Content-Encoding: gzip| 告诉客户端,应该采用 gzip 对资源进行解码 |
|Connection: keep-alive| 告诉客户端服务器的 tcp 连接也是一个长连接 |
1 GET 请求指定的页面信息,并返回实体主体。2 HEAD 类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和 / 或已有资源的修改。4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。5 DELETE 请求服务器删除指定的页面。6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。7 OPTIONS 允许客户端查看服务器的性能。8 TRACE 回显服务器收到的请求,主要用于测试或诊断。9 PATCH 实体中包含一个表,表中说明与该 URI 所表示的原内容的区别。10 MOVE 请求服务器将指定的页面移至另一个网络地址。11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。12 LINK 请求服务器建立链接关系。13 UNLINK 断开链接关系。14 WRAPPED 允许客户端发送经过封装的请求。15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。
get post
点击返回 / 刷新按钮 没有影响 会重新发送数据包
(浏览器会重新提示 "数据被重新提交")
添加书签 可以 不可以
缓存 可以 不可以
编码类型 application/x-www-form-rulencoded application/x-www-form-rulencoded
or multipart/form-data
请为二进制数据使用 multipart 编码
历史记录 有 没有
长度限制 有 没有
数据类型限制 只允许 ascii 类型 没有限制,允许二进制数据
安全性 查询字符串会直接在 url 显示 数据没有缓存或保持在历史记录中
但传输敏感数据,还需加密
三分钟搞定
因为 Http 协议无状态,在需要识别状态的时候,需要借助外力来辨别,而这个外力就是 Cookie 与 Session
Cookie
存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过 HTTP 协议,将他们本地的 Cookie 内容也发到咱们服务器上,从而完成验证
Cookie 是存储在浏览器客户的一小片数据;Cookie 可以同时被前台与后台操作;Cookie 可以跨页面存取;Cookie 是不可以跨服务器访问的;Cookie 有限制;每个浏览器存储的个数不能超过 300 个,每个服务器不能超过 20 个,数据量不能超过 4K;Cookie 是有生命周期的,默认与浏览器相同,如果进程退出,cookie 会被销毁
session
当用户访问我们的网站时,我们的服务器会成一个 Session ID,然后把 Session ID 存储起来,再把这个 Session ID 发给我们的用户,用户再次访问我们的服务器的时候,拿着这个 Session ID 就 能验证了,当这个 ID 能与我们服务器上存储的 ID 对应起来时,我们就可以认为是自己人
seesion 数据存储在服务器端;每一个会话分配一个单独的 session_id;
该 session_id 通过 cookie 传送到前台,默认的 session_id 名称是 PHPSESSIONID;
前台只能看到 Session 的 ID,而不能修改 Session 值;
使用 Session 之前需要先开启会话;
Session 存储在 Session 数组 $_SESSION ;
Session 存储方式比较安全,但是如果 Session 数量过多,会导致服务器性能下降;
请求报文由 请求行、请求头部、请求正文
组成
1. 请求行
格式:请求方法 + 空格 + URL + 空格 + 协议版本 + 回车符 + 换行符
例如:GET www.baidu.com HTTP/1.1
2. 请求头部 - 请求头部为请求报文添加了一些附加信息,由 "key:value" 值对组成
格式:头部字段名 + 冒号(:)+ 值 + 回车符 + 换行符
例如:Host:接受请求的服务器地址,可以是 IP: 端口号,也可以是域名
User-Agent:发送请求的应用程序名称
Connection:指定与连接相关的属性,如 Connection:Keep-Alive
Accept-Charset:通知服务端可以发送的编码格式
Accept-Encoding:通知服务端可以发送的数据压缩格式
Accept-Language:通知服务端可以发送的语言
3. 请求正文 - 一般用于 post 请求中
描述:POST 方法适用于需要客户填写表单的场合
与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length
响应报文由 状态行、响应头部、响应正文
组成
1. 状态行
格式:协议版本 + 空格 + 状态码 + 空格 + 状态码描述 + 回车符 + 换行符
2. 响应头部 - 与请求头部格式一致,由 "key:value" 值对组成
格式:头部字段名 + 冒号(:)+ 值 + 回车符 + 换行符
例如:Server:服务器应用程序软件的名称和版本
Content-Type:响应正文的类型(是图片还是二进制字符串)Content-Length:响应正文长度
Content-Charset:响应正文使用的编码
Content-Encoding:响应正文使用的数据压缩格式
Content-Language:响应正文使用的语言
3. 响应正文
响应正文就是 html 代码了
TTPS = HTTP+TLS/SSL
通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数、对称加密和非对称加密
,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性
1. 对称加密 - 同一密钥实现加解密
2. 非对称加密 - 需要一对公钥 and 私钥(公钥对数据进行加密,只有用对应的私钥才能解密)
3. 散列函数(Hash)- 任意长度的输入通过散列算法变换成固定长度的输出(不同的输入可能会散列成相同的输出)
对于 Hash 中不同输入散列成相同的输出,叫碰撞。即 key1≠key2,f(key1)=f(key2),key1 和 key2 称同义词
典型的散列函数有无线的定义域,有限的值域
Hash 算法应用于信息安全
1. 文件校验
MD5 Hash 算法的 "数字指纹" 特性,使它成为应用最广泛的一种文件完整性校验和 (Checksum) 算法
不少 Unix 系统有提供计算 md5 checksum 的命令
2. 数字签名
由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称 "数字摘要" 进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。3. 鉴权协议
在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法
其在 http 上加了一层处理加密信息的模块,所以传输的数据都是 加密后的数据
1. 客户端发起 HTTPS 请求
浏览器里面输入一个 HTTPS 网址,然后连接到服务端的 443 端口上。注意这个过程中客户端会发送一个密文族给服务端,密文族是 浏览器所支持的加密算法
的清单。
2. 服务端配置
采用 HTTPS 协议的服务器必须要有一套数字证书
,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套 证书其实就是一对公钥和私钥
,可以这么理解,公钥就是一把锁头,私钥就是这把锁的钥匙,锁头可以给别人对某个东西进行加锁,但是加锁完毕之后,只有持有这把锁的钥匙才可以解锁看到加锁的内容。
3. 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、过期时间等等。
4. 客户端解析证书
这部分工作是由客户端的 TLS 来完成的,首先会 验证公钥是否有效
,如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就 生成一个随机值,然后用证书 (公钥) 对该随机值进行加密
。
注意一下上面提到的 ” 发现异常 ”。证书中会包含数字签名,该数字签名是加密过的,是用颁发机构的 私钥
对本证书的公钥、名称及其他信息做 hash 散列 加密
而生成的。客户端浏览器会首先找到该证书的根证书颁发机构,如果有,则用该根证书的 公钥解密
服务器下发的证书,如果不能正常解密,则就是 ” 发现异常 ”,说明该证书是伪造的。
补充:一对公钥、私钥既可公钥加密,对应的私钥解密也可私钥加密,对应的公钥解密。这样,就可以使通信的一方拥有私钥 (保守方),一方(公众) 拥有公钥
5. 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,然后客户端和服务端的通信就可以通过这个随机值来进行加密和解密了。
6. 服务端解密信息
服务端 用私钥解密
后,得到了客户端传过来的 随机值,至此一个非对称加密的过程结束,看到 TLS 利用非对称加密实现了身份认证和密钥协商。然后把内容通过该值进行对称加密。
7. 传输加密后的信息
这部分是服务端用 随机值 加密后的信息,可以在客户端被还原。
8. 客户端解密信息
客户端用 之前生成的随机值 解密服务端传送过来的信息,于是获取了解密后的内容,至此一个对称加密的过程结束,看到对称加密是用于对服务器待传送给客户端的数据进行加密用的。整个过程即使第三方监听了数据,也束手无策
整个过程总结:
1. 先发送 https 请求确认加密算法
2. 而后服务端返回一个公钥,客户端确认公钥是否有效
3. 客户端产生随机值,通过公钥加密
4. 服务端通过对应的私钥解密随机值,并将该随机值用来加密传输的正文(相当于该随机值为公钥 - 对称加密)
5. 客户端用之前自己生成的随机值解密正文
整个过程可理解为先利用非对称加密传输对称加密的公钥
1.https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。2.http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。3.http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。4.http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
参考连接