计算机网络知识整理
计算机网络知识整理
写在前面
一些八股性质的东西,作记录用,但是也会补充一些实验。基础部分就不再赘述,记录一些容易遗忘、经常被忽视的点。
目录
应用层
HTTP
再度赘述,常见的部分在这里不会去涉及。
状态码
状态码的作用是快速反应请求的解决,以准确通用的形式传递访问状态及结果。
常见状态码:
- 1xx系列:保留系列,协议处理中间状态,一般不会使用到
- 2xx系列: 成功系列
- 200 OK,请求成功
- 201 Created,请求成功并创建了新资源
- 202 Accepted,请求已接受,但处理尚未完成
- 203 Non-Authoritative Information,返回的元信息来自缓存副本
- 204 No Content,请求成功,但无响应body
- 205 Reset Content,请求成功,要求客户端重置文档视图
- 206 Partial Content,请求部分成功,还有后续报文,常用于分块下载、断点续传
- 207 Multi-Status,多状态响应,用于WebDAV
- 3xx系列:重定向系列
- 300 Multiple Choices,多种选择,客户端需要选择其中一个
- 301 Moved Permanently,永久重定向,资源已永久移动到新位置
- 302 Found,临时重定向,资源临时移动到新位置
- 303 See Other,查看其他位置,建议客户端使用GET方法访问新位置
- 304 Not Modified,未修改,资源未发生变化,可使用缓存
- 305 Use Proxy,使用代理,必须通过代理访问资源
- 306 Switch Proxy,切换代理,已废弃
- 307 Temporary Redirect,临时重定向,保持原有请求方法
- 308 Permanent Redirect,永久重定向,保持原有请求方法
- 4xx系列:客户端错误系列
- 400 Bad Request,请求语法错误或参数错误
- 401 Unauthorized,未授权,需要身份认证
- 402 Payment Required,需要付费,保留状态码
- 403 Forbidden,禁止访问,服务器拒绝请求
- 404 Not Found,资源不存在
- 405 Method Not Allowed,请求方法不被允许
- 406 Not Acceptable,请求的资源不满足Accept头的要求
- 407 Proxy Authentication Required,需要代理认证
- 408 Request Timeout,请求超时
- 409 Conflict,请求冲突,如重复创建资源
- 418 I’m a teapot,我是茶壶,愚人节玩笑
- 5xx系列:服务器错误系列
- 500 Internal Server Error,服务器内部错误
- 501 Not Implemented,服务器不支持请求的功能
- 502 Bad Gateway,网关错误
- 503 Service Unavailable,服务不可用
- 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缺点
- 无状态
- 明文传输
- 流水线传输,也就是常说的管道传输,解决了请求的队头阻塞问题,但是并未解决响应的队头阻塞问题
SSL/TLS协议
总共分为四个步骤
ClientHello: 客户端发送加密通信请求,附带一个TLS版本、随机数、可供选择密码套件
SeverHello: 服务端确认TLS版本号,若不支持则关闭加密通信。
若支持则返回响应报文,附带随机数、密码套件、自己的CA证书
ClientResp: 首先使用CA机构的公钥解密CA证书,获取服务端公钥。
生成随机数,用服务端公钥加密它,与摘要之前的数据一同返回
用三个随机数拼接出会话密钥,此后只使用会话密钥加密
ServerResp:
解密客户端随机数,三个随机数拼接出会话密钥,告知客户端握手结束
扫码登陆
如何实现一个扫码登陆呢?用户手机扫了客户端的码,服务端如果告知客户端呢?有两种方法。
客户端不断轮训服务端用户是否扫码
长轮询:客户端请求服务端,超时时间设置为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消息 本文将持续更新,欢迎补充和指正。