计算机网络知识整理

7 min

计算机网络知识整理

写在前面

一些八股性质的东西,作记录用,但是也会补充一些实验。基础部分就不再赘述,记录一些容易遗忘、经常被忽视的点。


目录


应用层

HTTP

再度赘述,常见的部分在这里不会去涉及。

状态码

状态码的作用是快速反应请求的解决,以准确通用的形式传递访问状态及结果。

常见状态码:

  1. 1xx系列:保留系列,协议处理中间状态,一般不会使用到
  2. 2xx系列: 成功系列
    1. 200 OK,请求成功
    2. 201 Created,请求成功并创建了新资源
    3. 202 Accepted,请求已接受,但处理尚未完成
    4. 203 Non-Authoritative Information,返回的元信息来自缓存副本
    5. 204 No Content,请求成功,但无响应body
    6. 205 Reset Content,请求成功,要求客户端重置文档视图
    7. 206 Partial Content,请求部分成功,还有后续报文,常用于分块下载、断点续传
    8. 207 Multi-Status,多状态响应,用于WebDAV
  3. 3xx系列:重定向系列
    1. 300 Multiple Choices,多种选择,客户端需要选择其中一个
    2. 301 Moved Permanently,永久重定向,资源已永久移动到新位置
    3. 302 Found,临时重定向,资源临时移动到新位置
    4. 303 See Other,查看其他位置,建议客户端使用GET方法访问新位置
    5. 304 Not Modified,未修改,资源未发生变化,可使用缓存
    6. 305 Use Proxy,使用代理,必须通过代理访问资源
    7. 306 Switch Proxy,切换代理,已废弃
    8. 307 Temporary Redirect,临时重定向,保持原有请求方法
    9. 308 Permanent Redirect,永久重定向,保持原有请求方法
  4. 4xx系列:客户端错误系列
    1. 400 Bad Request,请求语法错误或参数错误
    2. 401 Unauthorized,未授权,需要身份认证
    3. 402 Payment Required,需要付费,保留状态码
    4. 403 Forbidden,禁止访问,服务器拒绝请求
    5. 404 Not Found,资源不存在
    6. 405 Method Not Allowed,请求方法不被允许
    7. 406 Not Acceptable,请求的资源不满足Accept头的要求
    8. 407 Proxy Authentication Required,需要代理认证
    9. 408 Request Timeout,请求超时
    10. 409 Conflict,请求冲突,如重复创建资源
    11. 418 I’m a teapot,我是茶壶,愚人节玩笑
  5. 5xx系列:服务器错误系列
    1. 500 Internal Server Error,服务器内部错误
    2. 501 Not Implemented,服务器不支持请求的功能
    3. 502 Bad Gateway,网关错误
    4. 503 Service Unavailable,服务不可用
    5. 504 Gateway Timeout,网关超时

字段

Host、Content—Length、Accapt、Connect、Content-Type、Content-Encoding

缓存

值的一聊的话题,HTTP缓存分为两类,一类是强制缓存,一类是协商缓存。

强制缓存

强制缓存是不与服务端交互的,只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。

这主要通过两个头部来实现:

Cache-Control,相对时间,通过当前时间和相对时间计算出是否过期,优先级高于Expires;

Expires,是一个绝对时间;

协商缓存

与服务器交互,服务器告知如果没有过期则使用缓存。304报文的作用。

也是通过两个头部实现:

If-None-Match,带上浏览器之前返回的Etag,由浏览器判断资源是否过期,优先级高于下者。

If-Modified-Scene,带上本地缓存时间,由浏览器判断资源是否过期

Http1.1缺点

  1. 无状态
  2. 明文传输
  3. 流水线传输,也就是常说的管道传输,解决了请求的队头阻塞问题,但是并未解决响应的队头阻塞问题

SSL/TLS协议

总共分为四个步骤

  1. ClientHello: 客户端发送加密通信请求,附带一个TLS版本、随机数、可供选择密码套件

  2. SeverHello: 服务端确认TLS版本号,若不支持则关闭加密通信。

    若支持则返回响应报文,附带随机数、密码套件、自己的CA证书

  3. ClientResp: 首先使用CA机构的公钥解密CA证书,获取服务端公钥。

    生成随机数,用服务端公钥加密它,与摘要之前的数据一同返回

    用三个随机数拼接出会话密钥,此后只使用会话密钥加密

  4. ServerResp:

    解密客户端随机数,三个随机数拼接出会话密钥,告知客户端握手结束

扫码登陆

如何实现一个扫码登陆呢?用户手机扫了客户端的码,服务端如果告知客户端呢?有两种方法。

  1. 客户端不断轮训服务端用户是否扫码

  2. 长轮询:客户端请求服务端,超时时间设置为30s,如果在这个期间,服务端感知到用户扫码了,立刻返回。

WS,WebSocket

一款面向连接的协议,客户端和服务端建立起双向的WebSocket协议。

可以通过Http协议升级得到:

Connection: Upgrade
Upgrade: WebSocket
Sec-WebSocket-Key: T2a6wZlAwhgQNqruZ2YUyg==\r\n

这时候如果切换成功,服务端会返回报文:

HTTP/1.1 101 Switching Protocols\r\n
Sec-WebSocket-Accept: iBJKv/ALIW2DobfoA4dmr3JHBCY=\r\n
Upgrade: WebSocket\r\n
Connection: Upgrade\r\n

之后就可以互相以ws形式发送ws消息 本文将持续更新,欢迎补充和指正。