个人笔记纪录, 待完善
OSI
七层模型:
应用层: 应用层协议,HTTP
,FTP
,SMTP
,DNS
等处于这一层;
表示层: 数据表示,格式有ASCII
,JPEG
, 加密格式等; (五层协议中合并到应用层)
会话层:建立管理终止回话; (五层协议中合并到应用层)
传输层: 传输层协议,TCP/UDP
处于这一层, 数据包一旦离开网卡就到了这一层;
网络层: 进行逻辑地址的寻址;IPV4/IPV6
在这一层;
数据链路层:硬件地址寻址;
物理层: 建立物理链接TCP/IP
四层模型:
应用层:HTTP
,FTP
,SMTP
,DNS
;
传输层:TCP
,UDP
;
IP
层:IP
;
网络接口层: 硬件接口;
1.一些基础概念
3. DNS
:
我们访问一个网站通常都是使用域名或者主机名来访问, 但是TCP/IP
协议是通过IP
来访问的, 所以必须有个机制来转换域名和IP
, 而DNS
就是用来解决此问题, 它提供了域名到IP
之间的解析服务;
DNS
解析请求采用UDP
明文数据报;常见的查询方式有递归查询和迭代查询;
DNS劫持
问题:由于采用UDP
明文数据报, 这样就容易被钓鱼DNS
劫持
返回错误的IP
地址; 注意:DNS劫持
和HTTP
是没有关系的, 因为劫持是发生在HTTP
建立之前的;
可以通过HTTPDNS
和长连接
方案解决DNS
劫持问题;
4. TCP/UDP
TCP
:传输控制协议, 提供面向链接可靠的字流服务, 提供超时重发, 丢弃重复数据, 检测数据控制流量等功能, 正式收发数据之前需要建立三次握手;
UDP
:用户数据报协议, 面向非链接, 不保证可靠性的数据传输服务, 没有超时重发等一系列等机制, 故而传输速度很快;
不与对方建立链接, 而是直接把数据包发送过去, UDP适用于一次只传送少量数据对可靠性要求不高的应用环境;
5. Session&Cookies
Cookies
是保存在客户端用来记录区分用户状态的数据;
Session
是保存在服务器端用来记录区分用户状态的数据;
Session
依赖于Cookies
的机制;
6. URL 和 URI
URL
是URI
的一种, 是其子集;
URL
URI
中出现了特殊字符例如中文,空格等需要进行编码;
7. 常见 HTTP 请求头/响应头字段以及含义
请求报文和响应报文格式
请求行: GET /URI/ HTTP1.1
请求头:
- Host: 主机的域名 端口
Host: localhost:80
- Accept-Encoding : 能够接收的编码方式,
Accept-Encoding: zip/deflate 等
- Accept-Language: 能够接收的语言列表,
- Accept-Charset: 接收的字符集, UTF-8之类;
- Range: 断点下载时声明需要数据的区间;
- Date: 时间;
- User-Agent: 浏览器信息;
- Connection: 优先使用的链接类型,
Connection: Keep-alive
是否保持长连接, 服务器看到此入参或者是 HTTP1.1时响应头中有个Content-Lenght说明返回的数据长度; - Keep-alive:多次时间内保持链接
- Referer; 表示浏览器浏览的前一个界面, 正是前一个界面的某一个链接将浏览器带到了当前的换这个界面;
- Content-Type: 请求体的类型;
Content-Type: multipart/form-data
- Content-Length: 请求体的长度, 字节为单位;
- Origin: 发起一个针对跨域的资源共享的请求;
- Cookie: 之前由服务器通过
Set-Cookie
发送到 cookie; - Cache-Control: 用来指定在这次的请求-响应链中所有缓存机制需要遵守的指令;
Cache-Control: no-cache
;
请求体: 自定义的入参
响应行: HTTP/1.1 200 OK
响应头:
- Content-Type:响应数据格式.例如 application/json;
- Content-Encoding: 服务器声明自己的压缩格式, 例如 gzip 等;
- Content-Language: 服务器声明使用的语言;
- Content-Range: 断点续传时返回的数据段区间;
- Content-Lenght:响应数据的长度;
- Date:时间;
- Location: 用来进行重定向或者创建了某个新资源时使用;
location: www.baidu.com
- Set-Cookie: 返回一个 Cookie 让客户端存储;
响应体: 数据
8. 常见 HTTPS 的加密方式
-
对称加密: 就是加密和解密过程使用相同密钥的算法; 要求服务器和客户端在建立链接之前就商定好一个密钥, 对称算法的安全性完全依赖于密钥, 一旦密钥泄露则任何人就可以对其发送或者接受的消息进行解密, 密钥的保管至关重要;
优点:
算法公开的, 计算量小, 加密速度快, 效率高;缺点:
服务器/客户端使用相同的密钥, 安全性得不到保证;
每对用户(服务器/客户端)都要一套密钥, 导致维护密钥工作量巨大;
能保证数据传输加密, 但是并不能提供验证; 换句话说任何人只要知道密钥算法, 就能进行相应的发送/接收解密数据;
常见对称加密算法:DES, 3DES, AES
;
- 非对称加密: 非对称加密都是成对的, 由公钥+私钥组成; 例如:甲生成一对公钥和私钥并把公钥公开, 私钥自己保留, 则乙给发送消息时通过公钥进行加密, 则只有乙通过保存的私钥才能将信息解密;
优点:
更加安全;
缺点:
大量耗费CPU资源, 一次完整TSL握手, 非对称解密的计算量占整个过程的90%以上, 而对称加密占非对称加密的1%都不到;
加密长度有限制, 不能超过公钥的长度, 例如公钥长度是2048位, 则加密的数据长度不能超过256字节;
常见非对称加密算法:RSA, DSA, ECC
;
补充
1. GET和POST的区别有哪些?
GET |
POST |
---|---|
GET 请求参数以? 分隔拼接到URL 后面; |
POST 放在Body 中; |
GET 参数长度限制2048字节(不同浏览器不一样); |
POST 无限制; |
GET 是获取资源; |
POST 是处理资源; |
安全性, 幂等, 可缓存; | 非安全性, 非幂等, 不可缓存; |
安全性: 不引起服务端的任何状态变化;
幂等性: 同一个请求执行多次效果是否一样;
缓存性: 一个请求是否可以被缓存;
下列的表述不准确查看
网络基础-传输层, 网络层数据链路层这篇文章的描述;
######2. TCP建立链接三次握手:
- 1.客户端发送`syn`包,并进入`syn_send`(请求链接)状态, 并等待服务器确认;
- 2.服务器收到客户端的`syn`(序列编号)包后,也发送一个`syn`(`syn=k`, 即`syn+ack`)包,并进入`syn_reveive`状态;
- 3.客户端收到服务器的`syn+ack`包,向服务器发送确认包`ack(ack = k+1)`,此包发送完毕则和服务器进入建立链接(`ESTABLISHED`)状态,完成三次握手;
>为什么要三次握手?
简单来说, 第一次握手服务器端确认了: 客户端的发送能力正常以及自己的接受能力正常, 然后第二次握手后客户端可以确认:自己和服务器的发送能力和接收能力正常;然后第三次握手, 服务器端可以确认自己的发送能力正常; 至此, 双方都可以确认彼此的发送/接收能力正常, 然后开始通讯;
######3. TCP断开连接的四次挥手:
- 1.客户端发送`fin`包到服务器, 请求是否可以断开;
- 2.服务器发送`ack`包,确认断开连接;
- 2.服务器发送`fin`包,确认自己可以断开链接;
- 4.客户端收到服务器的包并断开链接,同时发送`ack`包确认断开;
概述: 第一次, 客户端发送`fin`包给服务器申请断开连接; 第二次, 服务器收到`fin`包发送`ack`给客户端确认可以断开连接, 同时处于`closewait`状态, 同时发送剩余数据; 第三次,剩余数据发送完毕后, 服务器端再次响应客户端发送`fin+ack`, 告知自己可以关闭; 第四次, 客户端收收到包后再次发送`ack`后处于`close`状态, 服务器端收到后处于`close`状态;
######4. 名词解释及链接
位码就是`TCP`标志位,有6种标示:
建立联机(SYN)
确认(ACK)
传送(PSH)
结束(FIN)
重置(RST)
USG(紧急)
[ack](https://baike.baidu.com/item/ACK/3692629) 即确认字符, 在TCP/IP协议中如果接收方成功收到数据那么会回复一个ack数据(通常ack有自己固定的格式和长度大小, 由接收方回复给发送方);
[syn](https://baike.baidu.com/item/SYN/8880122?fr=aladdin)即同步序列编号, TCP/IP建立链接使用的握手信号,TCP链接的第一个包; (syn攻击, 大量发送此类的包, 服务器);
[fin](https://zhidao.baidu.com/question/495480267.html)带有标志位的数据包用来结束一个TCP回话,但对应的端口仍处于开放状态, 准备接收后续的数据;
参考文章
OSI七层模型