Skip to content

计算机与网络 ​

互联网协议群 ​

  1. 类似于OSI模型,一种网络协议的概念模型
  • 应用层:提供应用间通信能力(http协议)
  • 传输层:提供主机到主机(host-to-host)的通信能力(TCP/UDP协议),端口号代表的是应用
  • 网络层:提供地址到地址的通信能力(IP协议)
  • 链接层:提供设备到设备的通信能力(多种底层网络协议Ethernet,Wi-Fi)
  • 物理层
  1. TCP/IP协议
  • 三次握手
    • 流程图
    • 为什么需要三次握手:计算机对话和人对话的区别
  • 处理数据接收发送顺序问题
    • 消息的绝对顺序用(SEQ,ACK)这一对元组描述
      • SEQ(Sequence):这个消息发送前一共发送了多少字节
      • ACK(AcKnowledge):这个消息发送前一共收到了多少字节
  • 中断连接也需要四次挥手,服务端反馈,这样才能保持可靠性,以免客户端还有发送到服务端但没有收到/服务端发送回客户端,客户端没有收到的消息。

DNS和CDN ​

  1. 统一资源定位符(URL) 也被称作网址,用于定位互联网上的资源

  2. DNS(Domain Name System)域名系统

  • DNS资源记录(Resource Record)

    • A记录(最常见):定义主机的IP地址
    • AAAA记录:定义主机的IPv6地址
    • CNAME记录(Canonical Name Record):定义域名的别名
    • MX记录:定义邮件服务器
    • NS记录:定义提供dns信息的服务器
    • TXT记录:定义文本信息
    • SOA记录:定义在多个ns服务器中哪个是主服务器
  • DNS查询工具(实操)

    • dig(DNS lookup utility):用来查询dns的小工具
    • nslookup:交互式查询域名服务工具
    • host(DNS lookup utility)
  • 本地host修改(实操)

    • Window/Linux/Mac等host文件修改
    • Switchhost工具
  1. 内容分发网络(Content Delivery Network)
  • 基于地理位置的分布式代理服务器/数据中心
    • 提高可用性
    • 提升性能
    • 提升体验

HTTP协议 ​

  1. HTTP协议
  • 超文本传输协议(Hyper Text Transfer Protocol)
  • 处理客户端和服务端之间的通信
  • http请求/http返回
  • 网页/json/xml/提交表单……
  • 纯文本+无状态(Stateless)
    • 应用层协议(下面可以是TCP/IP)信息纯文本传输
    • 无状态
      • 每次请求独立
      • 请求间互不影响
    • 浏览器提供了手段维护状态(Cookie, Session, * Storage等)
  1. HTTP设计考虑因素
  2. 基础因素 + 带宽
    • 基础网络(线路、设备等)
+ 延迟
  - 浏览器
  - DNS查询
  - 建立连接(TCP三次握手)
  1. 缓存与带宽优化 + 缓存
    • (http1.0)提供缓存机制如IF-Modified-Since等基础缓存控制策略
    • (http1.1)提供E-Tag等高级缓存策略
+ 带宽优化
  - (http1.1)利用range头获取文件的某个部分
  - (http1.1)利用长连接让多个请求在一个TCP连接上排队
  - (http2.0)利用多路复用技术同时传输多个请求
  1. 压缩/安全性 + 压缩
    • 主流web服务器如nginx/express等都提供gzip压缩功能
    • (htto2.0)采用二进制传输,头部使用HPACK算法压缩
+ HTTPS
  - 在HTTP和TCP/IP之间增加TSL/SSL层
  - 数据传输加密(非对称+对称加密)
  1. HTTPS
  • 安全超文本传输协议(Hyper Text Transfer Protocol Secure)
  • 数据加密传输
    • 防止各种攻击手段(信息泄露、篡改等)
  • SSL/TSL(Secure Socket Layer/Transport Layer Secure)
    • SSL-安全套接层
    • TSL-传输层安全性协议
    • 需要再客户端安装证书
  1. cURL
  • curl -I url :获取header
  1. 常见请求头
  • Method
    • GET:从服务器获取资源
    • POST:在服务器创建资源
    • PUT:在服务器修改资源(幂等性:多次请求对服务器影响一样)
    • DELETE:在服务器删除资源
    • OPTIONS:获取支持的请求方法
    • TRACE:用于调试信息(多数网站不支持)
    • CONNECT:建立代理连接
  • 状态码
    • 1xx:信息
      • 100 continue
      • 101切换协议(switch protocol)
    • 2xx:成功
      • 200 - oK
      • 201 - Created已创建
      • 202 - Accepted已接收(客户端应该轮询)
      • 203 - Non-Authoritative lnformation非权威内容
      • 204 - No Content没有内容
      • 205 - Reset Content重置内容(客户端应该清空表单)
      • 206 - Partial Content服务器下发了部分内容(range header)
    • 3xx:重定向
      • 300 - Multiple Choices用户请求了多个选项的资源(返回选项列表)
      • 301 - Moved Permanently永久转移
      • 302 - Found资源被找到(以前是临时转移)
      • 303 - See Other可以使用GET方法在另一个URL找到资源
      • 304 - Not Modified没有修改(缓存部分特别说明)
      • 305 - Use Proxy需要代理
      • 307- Temporary Redirect 临时重定向
      • 308 - Permanent Redirect永久重定向
      • 面试解惑:301 VS 308
        • 共同点
          • 资源被永久移动到新的地址
        • 差异
          • 客户端收到308请求后,之前是什么method,那么之后也会延用这个method(POST/GET/PUT)到新地址
          • 客户端收到301请求后,通常用户会向新地址发起GET请求
      • 面试解惑:302/303/307
        • 共同点
          • 资源临时放到新地址(请不要缓存)
        • 差异
          • 302是http1.0提出的,最早叫做Moved Temporarily;很多浏览器实现的时候没有遵照标准,把所有请求都重定向为GET
          • 1999年标准委员会增加了303和307,并将302重新定义为Found。
          • 303告诉客户端使用GET方法重定向资源
          • 307告诉客户端使用原请求的method重定向资源
    • 4xx:客户端错误
      • 400 - Bad Request请求格式错误
      • 401 - Unauthorized未授权
      • 402 - Payment Required请先付费
      • 403 - Forbidden禁止访问
      • 404 - Not Found未找到
      • 405 - Method Not Allowed请求方法不允许
      • 406 - Not Acceptable服务端可以提供的内容和客户端期待的不一样
    • 5xx:服务器错误
      • 500 - Internal Server Error服务器内部错误
      • 501 - Not lmplemented(没有实现)
      • 502 - Bad Gateway网关错误
      • 503 - Service Unavailable服务器不可用
      • 504 - Gateway Timeout网关超时
      • 505 - HTTP Version Not Supported不支持的HTTP版本
  • Content-Length
    • 发送给接收者的Body内容长度(字节)
      • 一个byte是8bit
      • Utf-8编码的字符1-4个字节
  • User-Agent
    • 帮助区分客户端特性的字符串: 操作系统/浏览器/制造商(手机类型等)/内核类型/版本号……
  • Content-Type
    • 帮助区分资源的媒体类型(Media Type/MIME Type)
      • text/html, application/json, text/css, image/jpeg...
  • Origin
    • 描述请求来源地址
      • scheme://host:port.
      • 不含路径
      • 可以是null
  • Accept(建议类/与服务器协商)
    • 建议服务端返回何种媒体类型(MIME Type)。
      • */*代表所有类型(默认)
      • 多个类型用逗号隔开例如:text/html, application/json
    • Accept-Encoding: 建议服务端发送哪种编码(压缩算法)
  • Referer
    • 告诉服务端打开当前页面的上一张页面的URL;如果是ajax请求那么就告诉服务端发送请求的URL的什么
      • 非浏览器环境有时候不发送Referer(或者虚拟Referer,通常是爬虫)。
      • 常常用户用户行为分析
  • Connection
    • 决定连接是否在当前事务完成后关闭
      • Http1.0默认是close
      • Http1.1后默认是keep-alive
  1. 常见返回头
  • 协议版本状态码
  • X-Powered-By
  • 日期
  • Connection
  • Content-Length