前言
本文主要为网络的基础知识
tcp 三次握手建立连接
- 连接端发起一个 SYN 消息,SEQ=x
- 被连端收到后返回 SYN+ACK 消息,SEQ=y, ACK=x+1
- 连接端收到消息返回 ACK 消息,ACK=y+1
两端都进入 Established 状态
tcp 四次挥手断开连接
- 发起端发起一个 FIN 的消息,SEQ=x
- 接收端收到后返回 ACK 消息,表示准备断开连接,SEQ=y, ACK=x+1
- 接收端准备完毕,发送 FIN 消息,SEQ=y+1, ACK=x+1
- 发起端收到后返回 ACK 消息,SEQ=x+1, ACK=y+2
tcp 建立连接后的数据传输
- 发送端发起一个数据包,SEQ=x,数据为 100B
- 接受端收到数据消息返回 ACK = x + 100 + 1
- 发送端收到后继续发送,SEQ=x+100+1,数据为 100B
- 接受端收到后返回 ACK = x + 200 + 2
tcp 连接的可靠性
- tcp 会将数据截成最合适发送的数据块
- 当发送端发出一段数据后,会启动定时器等待回应,如果没有回应,会重新发送
- tcp 会保持首部和数据的检验和
- tcp 会将乱序的数据进行重新排序,返回应用层原来顺序
- tcp 能控制流量,每一方都有固定大小的缓冲空间
tcp 如何进行拥塞控制
在拥塞控制中,发送方维持一个叫做拥塞窗口 cwnd 的状态变量,根据拥塞程度动态变化。
慢启动算法:一开始不发送大量数据,先试探网络拥塞程度,由小到大增加窗口,每个传输轮次后 cwnd 加倍
拥塞避免算法:采用线性逐渐增加拥塞窗口 cwnd
慢启动阀门(ssthresh):
- cwnd < ssthresh 慢启动算法
- cwnd > ssthresh 拥塞避免算法
只要发现拥塞,将 ssthresh 设为一半,cwnd 设为 1
tcp 流量控制
接收端在确认应答发送 ACK 报文的时候,将自己的即时窗口大小 rwnd 写入 TCP 头部 16 位字段的窗口大小,
发送端根据 ACK 报文里的窗口大小改变自己的发送速度。越大表示接收端缓冲区剩余空间越大,网络吞吐量越大。
网络层级,http和https区别
网络五层结构为 应用层(http) - 传输层(tcp) - 网络层(ip) - 数据链路层 - 物理层
https是在应用层和传输层中间添加一个ssl层
http2.0特性
- 头部压缩:使用HPACK算法进行压缩
- 二进制格式:使用更加靠近TCP/IP的二进制格式,提升解析效率
- 强化安全:跑在https上
- 多路复用:一个连接有多个请求
版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守
CC BY-NC-SA 4.0协议。
赞赏一下