-
Notifications
You must be signed in to change notification settings - Fork 0
2012 edited this page Jul 20, 2020
·
3 revisions
特点: 丢失数据重传、按序发送、拥塞控制和避免、数据完整性。
所有的 TCP 连接都是以三次握手开始,在客户端或服务器交换任何应用程序数据之前,他们必须同意从两端开始数据包序列号以及许多其他连接特定变量。为了安全考虑,双方随机生成序列号。
SYN
客户端选择随机序列号 x 并发送 SYN 数据包,其中还可能包含其他 TCP 标记和选项。
SYN ACK
服务器将 x 递增 1,选择自己的随机序列号 y,附加自己的一组标志和选项,并调度响应。
ACK
客户端将 x 和 y 递增 1,并通过在握手中调度最后一个 ACK 数据包来完成握手。
一旦三次握手完成后,应用程序数据可以开始在客户端和服务器之间流动。客户端可以在收到 ACK 数据包之后立即发送数据包,服务器必须等待 ACK 响应才能发送任何数据。此启动过程适用于每个 TCP 连接,并对使用 TCP 的所有网络应用程序的性能具有重要意义:在传输任何应用程序数据之前,每个新连接都将具有完整的延迟往返。
例如,如果我们的客户端在纽约,服务器在伦敦,我们通过光纤链路启动新的 TCP 连接,那么三次握手将至少花费 56 毫秒:在一个方向上传播数据包需要 28 毫秒,之后必须返回纽约。请注意,连接的带宽在此处不起作用。相反,延迟由客户端和服务器之间的延迟控制,而延迟又由纽约和伦敦之间的传播时间决定。
三次握手所造成的延迟使得创建新的 TCP 连接成本高昂,这也是重用连接对于通过 TCP 运行的任何应用程序的关键优化的重要原因之一。
防止发送方数据过多导致接收方无法及时接收
控制两端网络传输速率
数据丢失重传会导致阻塞
Question
JS
CSS
- float
- BFC
- position
- flex
- grid
DOM
- DOM
- how browser works
Node.js
react
- 生命周期
- setState
- hook
git
- git 基础命令
- git rebase 理解
- git bisect
- git commit
- git hook
设计模式
- 策略模式
- ...
TCP/IP 协议
- HTTP/1.x
- HTTP/2
- SSL/TLS
- TCP
- DNS
- HTTP Cache
- CORS
- http status code
linux(shell)知识点