参考文章
网络协议
1. 七层网络协议
- 应用层:DNS、HTTP、HTTPS、DHCP、RTMP、P2P、GTP、RPC 等。
- 表示层:
- 会话层:
- 传输层:UDP、TCP 等。
- 网络层:IP、ICMP、OSPF、BGP、IPSec、GRE 等。
- 链路层:也叫MAC层,有ARP、VLAN、STP 等协议。
- 物理层:网络跳线。
一般为5层,依次为上面序号的1、4、5、6、7。
2. HTTP和HTTPS
2.1 介绍
HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),是计算机世界里两点之间,传输文字,图片,音频,视频等超文本数据的约定和规范。
HTTPS 全称 Hypertext Transfer Protocol Secure,比HTTP多了一个secure (安全性)的概念,实际上,HTTPS并非新协议,而是 HTTP + TLS/SSL 协议组合而成。
2.2 二者的区别
- HTTP未经安全加密,传输数据易被监听,窃取和伪造;而HTTPS是安全协议,通过 密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法 等解决。
- HTTP默认端口80;HTTPS默认443。
2.3 HTTP GET 和 POST 区别
- GET 用于请求服务器资源;POST 提交信息给服务器,等服务器响应。
- GET 方法不安全,请求参数URL可见;POST参数在请求体body,用户不可见。
- GET 请求URL会有长度限制问题,POST没有。
- GET 请求会被cache,而POST不会(可手动设置)。
- GET 的前进/回退操作无害,而POST会再次提交表单请求。
- GET 请求产生一个TCP数据包,POST两个。
- GET 请求会把header和data一起发出,服务器响应200;而POST是先发header,服务器响应100 continue,再发data,服务器响应200;
2.4 无状态协议
即浏览器对于事务的处理没有记忆能力。(用户请求网页后关了浏览器再开再访问该网站,服务器不知道客户关了一次)
HTTP就是一种无状态协议。
登录一个网站记住密码是Cookie完成的。
Cookie的生命周期:
- 客户端请求
- 服务端返回认证信息,开辟Session空间,并生成sessionid,通过响应头 Set-Cookie:JSESSIONID=XXX命令
- 客户端收到,在本机设置JSESSIONID=XXX的Cookie信息,Cookie 过期时间为浏览器会话结束。
- 客户端请求同一个网站时,请求头都会带上该Cookie信息(包含sessionid),服务器获得Cookie,取得JSESSIONID,得到sessionid。
JWT机制和Cookie的区别
- JWT 的Cookie存在客户端,本地验证后会生成token在session中发给服务器。
JWT 支持跨域认证,Cookie只能在同域名或其二级域名下有效。
3. TCP和UDP
3.1 介绍
TCP 全称 Transmission Control Protocol,传输控制协议。它能帮助你确定计算机连接到Internet以及它们之间的传输,通过三次握手建立TCP连接。
TCP 主要特点确保连接的建立和数据包的发送
- 支持错误重传
- 支持拥塞控制,网络拥堵下延迟发送
- 提供错误校验和甄别有害数据包
UDP 全称 User Datagram Protocol,用户数据报协议。不需要握手,通信速度更快。
UDP 主要特点
- TCP 面向连接,UDP 无连接的。
- TCP 对系统要求多,UDP 少。
- TCP 面向字节流,发送的是一个流;UDP 基于数据报,一个一个发包。
- TCP 有状态,网络不好会调整延迟发送;UDP 无状态,不管情况,闷头发送。
- UDP 数据结构相对简单。
- TCP 头部20字节,UDP 头部8字节。
- TCP 会特定顺序重排序数据包,UDP 不会。
- TCP 可靠交付,UDP 不能保证数据一定到。
3.3 应用场景
TCP
- 文件传输
- 接收邮件
- 远程登录
UDP
- QQ聊天
- 直播
- 网络语音电话
- 广播通信
3.4 TCP 三次握手
| 消息类型 | 描述 | | —- | —- | | SYN | 全称Synchronize Sequence Numbers,同步序列编号,用来初始化和建立连接的消息 | | ACK | Acknowledge character, 确认字符,帮助对方确认收到的SYN消息 | | SYN-ACK | 本地的SYN消息和较早的ACK数据包 | | FIN | 释放发送报文(希望断开连接) |