网络 知识点

计算机网络

参考书籍 《图解HTTP》、《图解TCP/IP》、《计算机网络自顶向下》

OSI (网络模型)
五层模型作用主要协议传输内容
应用层(表示层,会话层)HTTP ,FTP ,DNS Telnet,SSH报文
传输层TCP,UDP报文段
网络层ARP,IP,ICMP
数据链路层PPP,PPTP
物理层比特流

应用层

  • url 从点击到出现发生了什么

dns解析,寻找域名对应的ip地址
生成http请求(http请求的格式,GET方法,参数保存在url上)
tcp 会建立连接,然后进行传输
tcp 将http请求报文分割成多个报文段,把每个报文段可靠的传输给对方
ip 协议会搜索对方地址,进行中转和传输
tcp 接收到报文段,重组达为请求报文
服务器接收到 完整的http请求然后进行解析,找到对应文件(一般都是server服务器加载对应语言的cgi对动态代码进行解析,解析完成,生成完整页面后)
服务端生成http响应(响应的格式协议,版本,状态码,信息)
再通过网络的逐层封装和逐层解析到达浏览器,浏览器拿到页面进行渲染

连接

  • 利用 tcp/IP 协议族通信时会发生什么
    从发送端到接收端HTTP逐层封装增加首部
    应用层HTTP
    数据,传输侧增加TCP首部,网络层增加IP首部,链路层增加以太网首部,然后在另一端逐层解析

  • ARP,地址解析协议:通过ip解析出MAC地址
    在达到通信目标的过程中,会发生多次路由中转

  • DNS,通过域名查找ip地址,通过ip地址解析域名

  • uri(统一资源标识符) 和 url(统一资源定位符)
    uri 用字符串标识某一互联网资源。url标识资源的地点,所以平时点击的网址指的是url

HTTP
  • HTTP 有请求和响应组成
HTTP 报文
  • 报文结构:
    报文首部:包含 请求行(包含请求的方法,请求的URI 和 HTTP版本)/状态行(响应叫状态行,响应结果的状态码和HTTP 版本) 和 多个首部字段(包含属性和条件)),
    空行,
    报文主体(实体):包含实体头部()和实体主体(原始数据)

  • http 请求报文
    http 请求报文的组成 方法 URI 协议版本 请求首部字段 和内容实体
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRFiNv0b-1591670613784)(en-resource://database/644:1)]

  • http 响应报文
    http 响应报文的组成 协议版本,状态码,状态码的原因短语,响应首部字段 和 主体2
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ludw5ZgD-1591670613788)(en-resource://database/646:1)]

  • http 方法

  1. GET 方法:用于使用给定的URI从服务器中检索信息,从指定资源获取数据。格式:略
    GET请求是不安全的,因为资源在URI中,可以被看到,而且URI有长度限制,GET请求可以被缓存
  2. POST 方法:将数据放到服务器以创建或更新资源,
  3. PUT: 传输文件。pyt 本身不具备验证机制,所以需要web网站来进行验证
  4. HEAD:获取报文首部,却URI的有效性
  5. DELETE:删除文件,删除指定资源
  6. OPTIONS:询问请求URI制定资源支持的方法
  7. TRACE: 追踪路径。
  8. CONNECT:使用隧道协议链接代理。此方法要求代理服务器建立隧道进行TCP通信,隧道传输主要是用SSL和TLS将通信内容加密传输
  • 编码传输
    在实际中,通过编码来提升传输的速率。有两种编码方式:压缩传输的内容和分块传输。

  • http的短连接和长连接
    短连接:每进行一次http请求/响应,就要建立和断开 连接(tcp)
    长连接:进行一次tcp连接,可以完成多个http请求/响应。同时,管线化可以同时发送多个请求,而不需要得到响应

  • http1.0 1.1 2.0 区别

HTTPS

http 缺点,使用明文,不验证通信方身份,无法证明报文完整性

SSL或 TLS 将整个通信线路加密 处理
https 的工作流程

HTTP 首部
  • 首部分为四种类型 通用,请求,响应,实体首部字段
  • 常见首部
  • 通用首部字段:
    Cache-Control 控制缓存的行为
    Connection 逐跳首部、连接的管理
    Date 创建报文的日期时间
  • 实体首部字段:
    Content-Type : 表示报文主体的对象类型。(text/html,application/json,application/octet-stream)后面还有编码 charset = “”
    Content-Length:实体主体部分的大小
    Keep-Alive: timeout=15, max=100
  • 请求首部字段
    User-Agent:请求首部字段,描述HTTP客户端程序的信息
    From 用户的电子邮箱地址
    Host 请求资源所在服务器
    If-Match 比较实体标记(ETag) If-Modified-Since 比较资源的更新时间
  • 响应首部字段
    Server HTTP服务器的安装信息(web服务器信息,阿帕奇。。)
    Location 令客户端重定向至指定URI
HTTP 状态码

php的header头操作,重定向代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUh7oM9Y-1591670613792)(en-resource://database/650:1)]

  • 2XX 200 OK 成功返回 204 Not Content 请求处理成功,但没有需要返回的资源
  • 3XX 301 永久重定向 302 临时重定向 304 自愿找到,但请求条件不符合
    重定向就是指访问A网站,但是跳转到B。可以从 Location首部中获取 新的地址。重定向的实现可以在业务层面拼接需要的地址,和想要的状态码(301或302)
    当 301、302、303 响应状态码返回时,浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
  • 4XX 响应结果表明客户端发生生错误。
    400 客户端请求报文中存在语法错误。 401 表示请求需要有HTTP认证信息。403 请求资源被拒绝。 404 请求资源未找到
  • 5XX 表明服务器端发生错误
    500 服务器执行错误 502 网关错误 503 服务器忙
cookie

因为http协议的设计时无状态的,即它本身不保存状态,所以引入了cookie技术。
cookie 保存在请求和响应报文段的 首部字段中 Set-Cookie
cookie生成原理,客户端发送请求;服务端响应时 响应头中 set-cookie字段含有 sid;客户端

HTTP 和WebSCOKET
  • webscoket
    浏览器和服务器只需要要做一个握手的动作(即简历啊连接,依然是TCP的握手阶段),在建立连接之后,双方可以在任意时刻,相互推送信息。同时,服务器与客户端之间交换的头信息很小
    1,多路复用,全双工(服务端和客户端任意时刻互相推送消息),服务器可以主动向客户端推送消息
    2,header头部较小,传输信息更快更多
    3,没有同源限制
  • 各使用场景
    (当用户量很大时,长连接比较消耗资源;长连接可以维持用户在线状态)
    Socket适用场景:网络游戏,银行交互,支付。
    http适用场景:公司OA服务,互联网服务。

传输层

TCP
  • tcp的结构
TCP 三次握手和状态机
TCP 如何实现可靠传输

超时重传和回复确认

TCP 四次挥手和状态机,为什么四次
  • 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
    这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

  • TCP

UDP

+udp 的结构

TCP 和 UDP的区别

有无状态
是否可靠(建立连接的)

  • 使用场景

网络层

IP 协议

浏览器

浏览器
  • 如何实现跨域请求
    原因:浏览器存在同源策略(同源指,同一个域名,协议,端口),包括DOM同源和XMLHttpRequest同源策略。不同源的客户端脚本不能读写对方的资源。
    不受同源限制的内容:页面的连接,重定向和表单的提交,跨域资源的引入(<script src="…>)
    实现跨域请求:1,jsonp。主要就是通过jsonp callback 回调函数

    <script>
      $("#b1").click(function () {
        $.ajax({
          url: "http://127.0.0.1:8002/abc/",
          dataType: "jsonp",
          jsonp: "callback",
          jsonpCallback: "rion2"
        })
      });
      </script>
    
    <?php 
    $data = array( 'name' => 'zdx', 'sex' => 'man', 'age' => 18 ); 
    $callback = $_GET['callback'];//获取回调函数名
    echo $callback . '(' . json_encode($data) . ')'; ?>//拼接函数名和后台传递的变量名作为参数
    
    

    2,CORF。后端返回时,在响应头加上 response[‘Access-Control-Allow-Origin’] = ’ * ’

    <?php 
    header('Access-Control-Allow-Origin:http://127.0.0.1'); //设置header头
    echo "我是CORS跨域过来的!"; 
    ?>
    
  • 浏览器强缓存

  • webscoket 重连失败怎么办,webscoket 和 http 区别,优劣

安全
加密
  • 对称加密非对称加密
攻击
  • xss(跨站脚本攻击)
    嵌入uri中的js标签想目标网站发送此页面信息,窃取cookie或页面内容
    表单中填入html或js标签
  • sql注入
    url 上禅悦权限的查询
    表单提交中 损害数据库的sql
    header头注入,伪造cookie
  • dos
开发
  • 多服务器 session 共享

  • 编码区别
    ASC编码 使用 0- 127的二进制形式表示 英文字母、数字、特殊字符,长度都是一个字节(8 bit)
    UTF-8 中字符是可变长度的,字符编码通常由 1-4 个字节来表示,英文字母为1个字节,汉字为3个字节(BOM全名是字节顺序标记(Byte-Order-Mark),它存储在文件的开头,用来表示文件的字节顺序是大端还是小端,BOM通常是一个 U+FEFF 字符)
    GBK 中国编码,固定每个字符长度为 两个字节,英文字母与汉字以最高位区分。
    引申的问题有,4kb可以传输(表示)多少个子母,多少个汉字。这当然和编码有关了,使用不同的编码决定了能传递多少信息

web服务器

代理 网关 隧道
  • 代理 分为缓存代理(预先将资源副本保存在代理服务器)和透明代理,将用户请求的信息送至目标服务器
  • 网关 可以将HTTP请求转换为其他协议通信
  • 隧道 建立与服务器的远程安全通信
缓存
  • 浏览器缓存(强制缓存和协商缓存
    强缓存 浏览器会对缓存进行查找,并根据一定的规则确定是否使用缓存
    HTTP/1.1 的cache-Control 属性决定

协商缓存:
浏览器的强制缓存失效后(时间过期),浏览器携带缓存标识请求服务器,由服务器决定是否使用缓存
控制协商缓存的字段有Last-Modified / If-Modified-Since 和 Etag / If-None-Match。
①Last-Modified是服务器返回给浏览器的本资源的最后修改时间。
当下次再次请求的时候,浏览器会在请求头中带If-Modified-Since,即上次请求下来的Last-Modified的值,然后服务器会用这个值和该资源最后修改的时间比较,如果最后修改时间大于这个值,则会重新请求该资源,返回状态码200。如果这个值和最后修改时间相等,则会返回304,告诉浏览器继续使用缓存。
②Etag是服务器返回的一个hash值。当下次再次请求的时候,浏览器会在请求头中带If-None-Match,即上次请求下来的Etag值,然后服务器会用这个值和该资源在服务器的Etag值比较,如果一致则会返回304,继续使用缓存;如果不一致,则会重新请求,返回200

  • 服务器缓存
    所以,web服务器(n,a)可以设置是否缓存
    通过配置
location ~.*\.(js|css|html|png|jpg)$ {  
expires 3d;     //设置缓存过期时间 (h 时 d 天 -1表示永久)
add_header Cache-Control no-store;      // 为响应头添加header头,且参数设置为不缓存
add_header Pragma no-cache;
}
CGI

cgi 是指Web服务器在接收到客户端发过来的请求时转发给程序的机制

nginx
apache
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值