网络略知一二

Posted by 甘家城 on 2000-09-27 Viewed times

前言

本文主要为网络的基础知识

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上
  • 多路复用:一个连接有多个请求