网络基础-概念


个人笔记纪录, 待完善

  • 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适用于一次只传送少量数据对可靠性要求不高的应用环境;

对比.png

5. Session&Cookies

Cookies是保存在客户端用来记录区分用户状态的数据;
Session是保存在服务器端用来记录区分用户状态的数据;
Session依赖于Cookies的机制;

6. URL 和 URI

URLURI的一种, 是其子集;
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七层模型

你可能感兴趣的:(网络基础-概念)