1. 应用层
1.1 http超文本传输协议
如何避免服务器没有反应:保证服务器的稳定性,如果服务器没反应就认为服务器挂了,可以新建起一个服务器运行这部分服务的代码
1.1.1 http版本
http/0.9
只有GET
命令,只支持纯文本内容http/1.0
任何形式的内容都可以发送,不只是文字,包括了图像、视频、二进制文件等;引入了POST
和HEAD
命令;http
请求和回答的格式改变,除了数据部分,没次通信都必须包含头信息,用来描述一些元数据http/1.1
主流http
,引入了持久链接,TCP
链接默认不关闭,可以被多个请求复用;引入了管道机制,在同一个TCP
连接里,客户端可以同时发送多个请求,进一步改进了http
协议的效率;新增了PUT
、PATCH
、OPTIONS
、DELETE
方法;http
协议不带有所有状态,每次请求都需要附上所有信息,请求的很多字段都是重复的,浪费带宽,影响速度。
http/1.x
问题
- 在数据传输时,所有传输都是明文传输,无法保证数据的安全性;
1.1
版本允许复用TCP链接,但是同一个TCP
链接里,所有的数据通信是按次序进行的,服务器只有处理完一个回应才会处理下一个回应;http/1.x
支持了keepalive
,来弥补多次创建链接产生的延迟,但是keepalive
使用多了同样会给服务端带来大量的性能压力。
http/2.0
二进制协议,头信息和数据体都是二进制;复用TCP
链接,在一个连接里客户端和浏览器都可以同时发送多个请求或回应,且不需要按照顺序一一对应,避免了对头堵塞(多工);允许服务器未经请求主动向客户端发送资源(服务推送);引入头部信息压缩机制
1.1.2 http与https
HTTP
超文本传输协议,但是HTTP
是以明文方式发送内容,不提供任何方式的数据加密。端口号80
HTTPS
为了改进HTTP
的不安全的明文传输,在HTTP
基础上加入了SSL
协议,SSL
依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS
协议的主要作用分为两种:一种建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTPS
与Web
服务器通信时步骤:
-
https
发送链接请求,要求与Web
服务器建立SSL
链接 -
Web
服务器收到客户端请求后,会将网站的证书信息(证书中的信息包含公钥)传送一份给客户端 -
客户端与
Web
服务器商量SSL
链接的安全等级,也就是信息加密的等级 -
根据双方的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
-
Web
服务器解析出密钥,并利用密钥与客户端通信[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvbR0w0T-1616860497961)(C:\Users\23585\Desktop\TyporaWorkSpace\2012071410212142.gif)]
HTTP
和HTTPS
的区别
https
协议需要ca
申请证书,一般免费证书比较少,需要收费http
是超文本传输协议,信息是明文传输,https
则是具有安全性的SSL
加密传输协议http
和https
使用的是完全不同的链接方式,默认端口也不一样,前者是80
,后者是443
http
的连接很简单,是无状态的;https
是由SSL
+HTTP
协议构建的可进行加密传输、身份认证的网络协议,比http
安全
1.1.3 输入网址回车后发生了什么
DNS
解析- 建立
TCP
连接 - 浏览器发送
http
请求 - 服务器发送
http
响应 - 浏览器解析渲染页面
- 浏览器显示
HTML
- 浏览器想服务器发送求情获取嵌入在
HTML
中的对象 - 浏览器发送异步
AJAX
请求
- 浏览器显示
- 关闭
TCP
连接
1.1.4 get方法与post方法
- 一般来说get是获取数据的,post是提交数据的
- get传输数据的时候是在url中进行传输的,对所有人可见,是不安全的、有浏览器缓存记录的;post传输的时候是放在请求体之中的,并且经过urlencode编码的,所以相对安全
- get只能传输ASCII,不能进行编码;post没有数据类型限制,二进制数据也可以
- 实际上HTTP并没有对get和post方法的长度进行限制,但是get受浏览器对url长度的限制,post受服务器配置或者内存大小限制
- get比post快,post执行过程是,三次握手、收到服务器100continue相应、发送数据、收到200成功;get过程是,三次握手、收到200成功。所以get比post少了一次数据传输
- get是获取数据的所以get请求安全,不会对数据造成影响,无论多少次得到的资源都是一样的;post是想服务器传输数据,数据会被重新提交,会对原有数据造成伤害
1.1.5 http状态码
1xx:请求正在处理
2xx:请求正常处理完毕
3xx:需要进一步操作
4xx:客户端请求出错
5xx:服务器出错
常见状态码
100:部分请求已接收,客户端应该继续发送请求的剩余部分
200:表示成功接受请求,并返回请求的结果
202:表示服务器已经接受请求,但是还没有处理,而且这个请求最终会不会处理还不确定
204:表示服务器成功处理了请求,但没有反回任何实体内容,可能会返回新的头部元素
301:客户端请求的页面已经永久移动到新的位置,并告诉客户端新的连接
404:请求失败,客户端请求的资源没有找到或者不存在
500:服务器产生未知错误
503:由于服务器在维护或是过载,无法解决当前请求
1.2 DNS域名解析协议
本机想本地域名服务器查询通常采用递归查询;本地域名服务器向更高级的域名服务器查询时采用迭代查询
为什么不采用TCP,减轻网络压力,并且TCP传输需要建立连接释放连接,建立和释放连接的过程显然没有没要,UDP端口号53,用来将域名转化为IP地址
1.3 FTP文件传输协议
1.4 TELNET远程终端协议
1.5 DHCP动态主机配置协议
2. 运输层
2.1 TCP
2.1.1 TCP粘包问题
tcp
粘包:就是指发送方发送的若干数据到接收方时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包的数据的尾
本质产生原因:tcp
协议是面向字节流的,应用层协议没有定义消息的边界导致数据的接收方无法拼接数据
产生情况:
tcp
连接复用造成的粘包问题Nagle
算法导致的粘包问题- 数据包过大导致的粘包问题
- 流量控制、拥塞控制也可能导致粘包
- 接收方不及时接收缓冲区的包,造成多个包接收
解决方法:
- 发送方解决,关闭
Nagle
算法 - 应用层解决,尾部添加结束标记;发送数据定长
2.2 UDP与TCP的关系
-
tcp
面向连接的,udp
面向无连接的 -
tcp
面向字节流的,udp
面向报文的 -
tcp
提供可靠的传输服务,保证数据按序、无差错、不丢失、无重复到达;udp
尽最大努力交付。tcp
的可靠传输靠检验和,确认与重传机制,序号标识,流量控制,拥塞控制 -
tcp
链接是端到端的服务,udp
支持一对一、一对多、多对一、多对多的通信 -
tcp
对系统资源要求多,udp
对系统资源要求少
2.3 UDP的可靠传输
udp
协议在运输层无法实现可靠传输,可以在应用层来实现,具体可以参考tcp
在运输层的流量控制,拥塞避免,窗口和确认重传等机制
2.4 运输层攻击
-
TCP攻击
-
SYN Flood
攻击发送大量
SYN
报文,服务器收到并发送SYN
+ACK
报文,但是此时不发送ACK
报文,服务器一直处于半连接状态,直到超时。 -
SYN-ACK Flood
攻击假冒服务器发送大量
SYN-ACK
报文到目标攻击网络,如果网络有依靠会话转发网络,降低该网络设备处理性能 -
ACK Flood
攻击链路拥塞、消耗依赖于会话转发设备性能、造成服务器处理性能耗尽,拒绝正常服务
-
FIN/RET Flood
攻击原理跟
ACK
一样 -
TCP
连接耗尽攻击不断建立连接、释放连接,占用服务器的
TCP
连接资源 -
TCP
分片攻击网络设备或服务器收到大量的
TCP
分片报文,会进行重组,导致网络设备或服务器的性能降低 -
TCP
异常报文攻击随即组合
TCP
标志位,发送非法TCP
,对主机造成危害
-
-
UDP
攻击-
UDP Flood
攻击发送大量伪造
UDP
报文来拥塞链路,消耗设备和服务器性能 -
UDP
分片攻击攻击者向攻击目标发送大量的
UDP
分片报文,与TCP
分片一样
-
网络层
数据链路层
MTU
最大传输单元,也就是IP
数据报的长度,结点只转发小于等于MTU
长度的ip
数据报,否则就要进行分片,如果不允许分片,那么报文就被丢弃,一般设置为1500