Skip to content
2012 edited this page Jul 20, 2020 · 3 revisions

特点: 丢失数据重传、按序发送、拥塞控制和避免、数据完整性。

Three-Way Handshake(三次握手)

所有的 TCP 连接都是以三次握手开始,在客户端或服务器交换任何应用程序数据之前,他们必须同意从两端开始数据包序列号以及许多其他连接特定变量。为了安全考虑,双方随机生成序列号。 three-way handshake

SYN

客户端选择随机序列号 x 并发送 SYN 数据包,其中还可能包含其他 TCP 标记和选项。

SYN ACK

服务器将 x 递增 1,选择自己的随机序列号 y,附加自己的一组标志和选项,并调度响应。

ACK

客户端将 x 和 y 递增 1,并通过在握手中调度最后一个 ACK 数据包来完成握手。

一旦三次握手完成后,应用程序数据可以开始在客户端和服务器之间流动。客户端可以在收到 ACK 数据包之后立即发送数据包,服务器必须等待 ACK 响应才能发送任何数据。此启动过程适用于每个 TCP 连接,并对使用 TCP 的所有网络应用程序的性能具有重要意义:在传输任何应用程序数据之前,每个新连接都将具有完整的延迟往返。

例如,如果我们的客户端在纽约,服务器在伦敦,我们通过光纤链路启动新的 TCP 连接,那么三次握手将至少花费 56 毫秒:在一个方向上传播数据包需要 28 毫秒,之后必须返回纽约。请注意,连接的带宽在此处不起作用。相反,延迟由客户端和服务器之间的延迟控制,而延迟又由纽约和伦敦之间的传播时间决定。

三次握手所造成的延迟使得创建新的 TCP 连接成本高昂,这也是重用连接对于通过 TCP 运行的任何应用程序的关键优化的重要原因之一。

Four-way Handshake (四次挥手)

four-way handshake

flow control

防止发送方数据过多导致接收方无法及时接收

slow start

控制两端网络传输速率

head of line blocking

数据丢失重传会导致阻塞

Question

JS

  1. 作用域
  2. 闭包
  3. 原型(链)
  4. 模块
  5. 位操作符
  6. 事件循环
  7. eval

CSS

  1. float
  2. BFC
  3. position
  4. flex
  5. grid

DOM

  1. DOM
  2. how browser works

Node.js

  1. Stream
  2. Timers
  3. Child Processes
  4. HTTP
  5. File System

react

  1. 生命周期
  2. setState
  3. hook

git

  1. git 基础命令
  2. git rebase 理解
  3. git bisect
  4. git commit
  5. git hook

设计模式

  1. 策略模式
  2. ...

TCP/IP 协议

  1. HTTP/1.x
  2. HTTP/2
  3. SSL/TLS
  4. TCP
  5. DNS
  6. HTTP Cache
  7. CORS
  8. http status code

linux(shell)知识点

  1. bashrc vs profile
  2. vim
  3. shell基本语法
  4. shell 知识误区
  5. shell命令
  6. 鸟哥的Linux私房菜:基础学习篇
  7. sudo vs su
Clone this wiki locally