网络分层
目录
TCP/IP五层协议
- 物理层
- 数据链路层
- 网络层
- 传输层
- 应用层
层次 | 传递对象 | 关键设备 | 核心知识点 | |
---|---|---|---|---|
物理层Physical | 比特流 | 集线器(Hub) | CSMA/CD(载波监听多路访问)Mac地址 | |
数据链路层Data Link | 帧 | 交换机 | 以太网协议 | |
网络层Network | IP数据报 | 路由器 | IP协议、子网划分/掩码、默认网关、ARP(地址解析:IP->Mac)、NAT(本地IP地址->全球IP) | |
传输层Transport | 网关 | TCP协议(三次握手,四次挥手、流量控制、拥塞控制)、UDP协议、端口(面向程序) | ||
应用层Application | 报文 | HTTP、HTTPS、SMTP |
知识点拆解
应用层协议
http 协议
-
URI URL URN
URI = 统一资源标识符
URL = 统一资源定位符
https://google.com
URN = 统一资源名称
urn:isbn:190129
-
HTTP 协议中的方法有哪些?
-
GET
【幂等】 获取资源
-
HEAD
【幂等】 获取报文部首,与
GET
方法类似,但是不返回报文主体部分 -
POST
【非幂等】发送请求,传输数据
-
PUT
【幂等】更新整条记录,若数据已存在就替换,不存在就新增,
-
PATCH
修改某些字段,即局部更新
-
DELETE
删除某些资源
-
OPTIONS
返回该 url 所有支持的方法
-
CONNECT
要求在与代理服务器通信时建立隧道
-
TRACE
回显服务器收到的请求,主要用于测试或诊断
备注:
-
关于PUT和DELETE是否安全?
Nginx
之前存在安全漏洞,这两个方法可能是不安全的但对于后端代码来说,是否安全只取决于代码逻辑是否合理
FROM:CSDN
-
-
HTTP code 有哪些?
-
1XX
:正常,可继续发送请求或忽略 -
2XX
:成功 -
3XX
:重定向
301
永久重定向302
暂时重定向 -
4XX
:客户端错误400
Bad Request;401
Unauthorized;403
Forbidden;404
Not Found; -
5XX
:服务器错误500
服务器内部错误;501
服务不可用
-
-
HTTP
session
和cookie
有何区别?Session
是服务器端保持状态的方案,Cookie
是客户端保持状态的方案。- session 可以采用 cookie 作为实现方案,但是不是唯一的,可以通过重写url或者隐藏表单字段实现
- session会在一定时间内保存在服务器上,当访问增多时,会占用服务器的性能。
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
https 协议
-
HTTP
和HTTPS
的区别?- 端口不同:
http
为 80,https
为 443 - http 为超文本协议,明文传输;https 运行在
SSL
上,添加了加密和认证机制,更安全 - https 的加密解密会带来更大的内存开销
- 端口不同:
-
https
的连接过程- 客户端向服务器发送请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法);
- 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥(用于非对称加密),以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密);
- 客户端验证服务器的合法性,包括:证书是否过期,CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配;
- 如果证书受信任,或者用户接收了不受信任的证书,浏览器会生成一个随机密钥(用于对称算法),并用服务器提供的公钥加密(采用非对称算法对密钥加密);使用Hash算法对握手消息进行摘要计算,并对摘要使用之前产生的密钥加密(对称算法);将加密后的随机密钥和摘要一起发送给服务器;
- 服务器使用自己的私钥解密,得到对称加密的密钥,用这个密钥解密出Hash摘要值,并验证握手消息是否一致;如果一致,服务器使用对称加密的密钥加密握手消息发给浏览器;
- 浏览器解密并验证摘要,若一致,则握手结束。之后的数据传送都使用对称加密的密钥进行加密
总结:非对称加密算法用于在握手过程中加密生成的密码;对称加密算法用于对真正传输的数据进行加密;HASH算法用于验证数据的完整性。
-
输入
baidu.com
,为什么变成了https://www.baidu.com
,这个过程是怎样的?因为有
HSTS
,即 HTTP Strict Transport Security。即访问
http
站点的时候,服务端向客户端回复的响应头上加上Strict-Transport-Security "max-age=63072000; include Subdomains;"
这样浏览器就会自动在
max-age
指定的时间字段内,包括子域名都强制用HTTPS访问 -
打开
bilibili.com
的全过程- DNS解析
- 浏览器请求向服务端发送建立TCP连接的请求,三次握手
- 如果用了 https 请求,会事先建立 SSL 安全连接
- 建立起
TCP
连接后,向服务端发 HTTP 请求 - 服务端接到请求,根据 url 给指定的处理器处理,将处理结果返回给浏览器
- 浏览器接收后,解析并渲染视图,遇到对静态资源的应用,则要根据在此重复上述步骤请求
- 浏览器根据请求到的资源渲染页面,向用户返回一个完整视图。
连接层协议
DNS 是干嘛的,过程是怎么样的?
TCP 和 UDP 的区别
为什么说 TCP 是可靠的?
TCP 的三次握手是咋样的?
TCP 的四次挥手是怎么的?
TCP 流量控制/滑动窗口 是怎样的?
TCP 拥塞控制是怎么样的?
更新中,未完待续…