《网络是怎样连接的》2.3节图表(自用)

图4.1:TCP拆分数据与ACK号

图4.2:连接阶段与通信阶段ACK号与序号的交互过程

首先,客户端在连接时需要计算出与从客户端到服务器方向通信相关的序号初始值,并将这个值发送给服务器(①)。

接下来,服务器会通过这个初始值计算出ACK号并返回给客户端(②)。这是因为初始值有可能在通信过程中丢失,因此当服务器收到初始值后需要返回ACK号作为确认

同时,服务器也需要计算出与从服务器到客户端方向通信相关的序号初始值,并将这个值发送给客户端(②)。

一样的,客户端也需要根据服务器发来的初始值计算出ACK号并返回给服务器(③)。

到这里,序号和ACK号都已经准备完成了,接下来就可以进入数据收发阶段了。数据收发操作本身是可以双向同时进行的。在Web中是先由客户端向服务器发送请求,序号也会跟随数据一起发送(④)。然后,服务器收到数据后再返回ACK号(⑤)。从服务器向客户端发送数据的过程则正好相反(⑥⑦)。

图4.3:滑动窗口发送方式

所谓滑动窗口,就是在发送一个包之后,不等待ACK号返回,直接发送后续的一系列包。这样等待ACK号的时间就被有效利用起来了。

图4.4:接收缓冲区与窗口

图中 接收方 发送给 发送方 的虚线剩余空间大小就是窗口,写在接收方发给发送方的TCP头部窗口字段中。

当然,因为数据收发是双向的,上述的过程也是双向的。

相关推荐
疾风铸境12 分钟前
项目研发实录:电子称SDK封装dll给到QT和C#调用
linux·服务器·网络
wanhengidc34 分钟前
使用云手机能否给企业降本增效
运维·网络·科技·游戏·智能手机
D11_42 分钟前
【服务器】将本地项目部署到服务器
运维·服务器
敲上瘾1 小时前
Docker 存储卷(Volume)核心概念、类型与操作指南
linux·服务器·数据库·docker·容器·架构
华强笔记1 小时前
KGDB(Kernel GNU Debugger)工具使用方法详解
网络·安全·gnu
自强的小白1 小时前
vlan(局部虚拟网)
网络·学习
一只乔哇噻2 小时前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
徐子元竟然被占了!!2 小时前
RIP协议
网络·网络协议
Yuki’2 小时前
网络编程---TCP
服务器·网络·tcp/ip
知识分享小能手2 小时前
React学习教程,从入门到精通,React 使用属性(Props)创建组件语法知识点与案例详解(15)
前端·javascript·vue.js·学习·react.js·前端框架·vue