网络模型
七层模型:应用层、表示层、会话层、网络层、传输层、数据链路层、物理层
应用层: 网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层 :数据的表示、安全、压缩。 格式有:JPEG、ASCll、EBCDIC、加密格式等
会话层 :建立、管理、终止会话。
传输层:定义传输数据的协议端口号,以及流控和差错校验。 协议有:TCP UDP。
网络层 :进行逻辑地址寻址,实现不同网络之间的路径选择。 协议有:ICMP IGMP IP
数据链路层: 建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议) 将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层 :建立、维护、断开物理连接。
TCP/IP 层级模型结构,之间的协议通过逐级调用[传输层]网络层 和物理[数据链路层]
可以实现应用层的应用程序通信互联。 应用层需要关心应用程序的逻辑细节,而不是数据在网络中的传输活动。应用层其下三层则处理真正的通信细节。
http 有哪些部分?
http协议报文:请求报文(请求行/请求头/请求数据/空行)
1.请求行:请求方式,URL字段和HTTP协议版本 例如:GET /index.html HTTP/1.1
请求方法: GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
1.1 :get方法将数据拼接在url后面,传递参数受限
1.2: post方法中,会把数据以key value形式发送请求
2. 请求头(key value形式)
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:主机地址
3. 响应报文(状态行、消息报头、响应正文) 状态行 消息报头 响应正文
get和post的区别?
1. get一般用于从服务器上获取数据,post一般用于向服务器传输数据
2. get采用的地址传参,传输的数据量小,一般2K;post采用报文传参, 可传输的数据量很大,一般默认无限传输,但实际有上限(4G)
3. get安全性非常低,post安全性较高
4. get不能上传文件,post可以上传文件
TCP、IP头部多长?
IP: 头部范围为20B(不含options)~60B
UDP: 头部长度是固定的,为12B(假头部)+8B(真头部) = 20B
TCP: 跟IP头长度一样,20B~60B,取决于有没有options.
TCP是如何保证可靠的?
1:确认和重传:接收方收到报文就会确认回执,发送方发送一段时间后没有收到确认就重传。
2:数据校验
3:数据合理分片和排序:
UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组。由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报。UDP会判断报文是否完整,不完整就不做处理,丢弃整个UDP数据报。
TCP: 会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
4:流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。(通过滑动窗口大小的调整来进行流量控制,根据宽带大小,链路是否拥塞,接收方能处理的数据量来进行动态调整。)
5:拥塞控制:当网络拥塞时,减少数据的发送。
MTU的理解?
最大输出单元,如果在IP层要传输一个数据报比链路层的MTU还大,那么IP层就会对这个数据报进行分片。一个数据报会被分为若干片,每个分片的大小都小于或者等于链路层的MTU值。当同一网络上的主机互相进行通信时,该网络的MTU对通信双方非常重要。
HTTP和HTTPS区别?
① https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用;http一般是免费的。
② http是超文本传输协议,信息是明文传输;https则是具有安全性的ssl加密传输协议。
③ http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
④ http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
TTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密。
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS 中的 SSL 握手建立过程
1:首先,客户端 A 访问服务器 B。客户端 A 会生成一个随机数1,把随机数1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。
2:服务器 B 知道这些信息后,确认一下双方的加密算法,然后服务端也生成一个随机数 B ,并将随机数 B 和 CA 颁发给自己的证书一同返回给客户端 A 。
3:客户端 A 得到 CA 证书后,校验该 CA 证书的有效性。校验通过后,客户端生成一个随机数3 ,然后用证书中的公钥加密随机数3 并传输给服务端 B 。服务端 B 得到加密后的随机数3,然后利用私钥进行解密,得到真正的随机数3。
4:最后,客户端 A 和服务端 B 都有随机数1、随机数2、随机数3,然后双方利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。
5:客户端 A 通知服务端 B ,指明后面的通讯用对话密钥来完成,同时通知服务器 B 客户端 A 的握手过程结束。
6:服务端 B 通知客户端 A,指明后面的通讯用对话密钥来完成,同时通知客户端 A 服务器 B 的握手过程结束。SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。
简单地来讲:
客户端和服务端建立 SSL 握手:客户端通过 CA 证书来确认服务端的身份;互相传递三个随机数,之后通过这随机数来生成一个密钥;互相确认密钥,然后握手结束;数据通讯开始,都使用同一个对话密钥来加解密;
在 HTTPS 加密原理的过程中把对称加密和非对称加密都利用了起来。即利用了非对称加密安全性高的特点,又利用了对称加密速度快,效率高的好处。
中间人攻击
中间人攻击(英语:Man-in-the-middle attack,缩写:MITM),指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
中间人攻击过程
1、截获客户端与服务器通信的通道
2、然后在 SSL 建立连接的时候,进行中间人攻击
3、将自己伪装成客户端,获取到服务器真实有效的 CA 证书(非对称加密的公钥)
4、将自己伪装成服务器,获取到客服端的之后通信的密钥(对称加密的密钥)
5、有了证书和密钥就可以监听之后通信的内容了
charles抓包原理
抓取https包的时候,青花瓷会要求使用设备对抓包的设备, 安装一个证书,安装这个证书的时候,其实是安装了一个根证书(允许颁发CA的一个证书机构的根证书), 安装了该根证书之后,该证书机构颁发的其他证书, 默认都会被你的系统所信任,这个就是青花瓷完成https抓包的一个重要前提!!

1:当客户端对服务器Server发送请求(带着随机数和加密算法), 青花瓷做了代理,请求被青花瓷拦截处理。
注意:青花瓷收到客户端的随机数和加密算法, 自己生成一个随机数和选择一个客户端的加密算法。
2:青花瓷伪装成客户端去请求Server。Server会和青花瓷完成证书校验, 并且读取青花瓷带来的具体请求, 返回正常的数据结果。
3:青花瓷得到服务器数据的返回结果后, 伪装成服务器的身份去和客户端通信
青花瓷生成的公钥和真实的server不一样, 但是域名是一样的, 除了域名是一致的,其他的都不是一致的。这个签发机构是青花瓷之前让安装的根证书签发的。所以当返回这个证书的时候,客户端设备的验证是通过的。
青花瓷会返回一个伪造的CA证书。Client用这个伪造的证书,和青花瓷通信。然后青花瓷再和Server通信。成了一个中间人的角色,这样,整个过程的数据传输,都被青花瓷给监听到了
参考:
Https原理及流程 - 简书 客户端&服务器建立SSL连接的效验过程
TCP/IP协议简单总结_等待化茧成蝶的专栏-CSDN博客 7层网络协议每一层特点
网友评论