五层协议
从下往上依次是:
- 物理层
- 数据链路层
- 网络层
IP、ARP、ICMP等协议 - 传输层
TCP、UDP协议 - 应用层
HTTP、FTP、SMTP、DNS协议
网络层
主要是IP协议
传输层
TCP与UDP区别
TCP:面向连接、可靠传输、面向字节流、流量控制、拥塞控制、一对一
UDP:无连接、最大努力交付、面向报文、一(多)对一(多)
TCP报文
TCP报文的首部包含:
- 源端口、目的端口
- 序号seq
- 确认号ack
- 确认ACK
- 同步SYN
- 终止FIN
TCP连接建立
三次握手
为什么三次?
双方确认两方都能收发,建立可靠传输通道(本质)
假设A向B请求建立TCP连接,
第一次握手的结果:A不能下结论;B确定A发送正常
第二次握手的结果:A确定自己发送和接收正常,且B的发送、接收都正常;B确定A发送正常,且自己接收正常
第三次握手的结果:A确定自己发送和接收正常,且B的发送、接收都正常;B确定A的发送、接收正常,且自己的发送和接收都正常
TCP连接释放
四次挥手
为什么四次挥手?
前两次是客户端告诉服务端自己不会再发送数据,只会接收数据,客户端收到确认后,TCP连接处于半关闭状态。此时接收端仍可以向客户端发送数据。
后两次是服务端告诉客户端自己不会再发送数据了,服务端收到确认后,服务端正式关闭TCP连接;客户端在发送完最后一个确认报文之后还要等待2MSL时间,称为TIME_WAIT
为什么TIME_WAIT?
- 确保最后一个报文被对方收到,如果对方没有收到,对方会超时重传,客户端趁此时间响应
- 保证此TCP连接内的所有报文在网络里消失,不会影响下一个连接
TCP可靠传输的实现
- 字节编号
- 流量控制
- 拥塞控制
- 停止等待协议+超时重传
流量控制
TCp报文里有一个字段是窗口值wnd,在确认报文里设置这个窗口值,告诉发送方自己还能接收多少数据,控制发送方发送速率
拥塞控制
避免过多的数据注入到网络里
TCP进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复
慢开始
cwnd=1,每经过一个传输轮次,将cwnd加倍,因此cwnd会呈指数增长,由于增长速度太快,会设置一个慢开始门限ssthresh,当cwnd==ssthresh时,进入拥塞避免阶段
拥塞避免
此阶段cwnd的增长是线性的,每经过一个传输轮次cwnd+1
在慢开始和拥塞避免阶段都可能会遇到网络拥堵,因此会出现超时现象,此时的处理方法是将慢开始门限ssthresh设置为当前cwnd的一半,并重新回到慢开始阶段。
快重传
快重传机制是针对报文丢失的情况,快重传机制要求对接收到的数据立即发出确认,而不是等到自己要发送数据才捎带确认。
因此有了快重传机制,如果出现了报文丢失的情况,接收方会反复发出对缺失报文的前一个报文的确认,当发送方接收到3个重复确认时,意识到报文丢失了,进入快恢复阶段
快恢复
快恢复是针对快重传机制的,是处理报文丢失的情况,而报文丢失并不是网络拥塞引起的,因此快恢复阶段不会像超时那样回到慢开始阶段,而是设置ssthresh=cwnd/2,cwnd=ssthresh,也就是开始了拥塞避免阶段
应用层
HTTP协议
请求、响应报文
HTTP报文分为三部分:开始行、首部行、实体
请求报文的开始行包括请求方法、请求url等信息,响应报文的开始行包括状态码等信息
首部行包括了用户代理、接收的语言/编码方式、缓存、连接保持、cookie等信息
实体就是HTTP报文数据段
GET、POST报文
HTTP1.0/1.1/2.0
HTTPS
HTTPS=HTTP+数据加密+证书认证+完整性保护
HTTPS是披着SSL或者TLS外衣的HTTP协议,由SSL或者TLS提供安全机制,SSL/TLS工作在传输层。
HTTP协议将数据交友SSL/TLS加密,然后再交给TCP进行传输
url到显示页面过程
简短:
- DNS解析?
- TCP连接
- HTTP请求
- HTTP响应
- 浏览器解析、渲染页面
- 连接结束
常见错误码
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务端错误