套接字 API 允许用户创建 TCP 的端点数据结构 , 将这些端点与远程服务器的 TCP 端点进 行连接 , 并对数据流进行读写 。TCP API 隐藏了所有底层网络协议的握手细节 , 以及 TCP 数据流与 IP 分组之间的分段和重装细节 。
TCP 客户端和服务器是如何通过 TCP 套接字接口进行通信的
文章插图
上图中说明了可以怎样通过套接字 API 来凸显客户端和服务器在实现 HTTP 事务时所应执行的步骤 。
2、TCP 连接的握手TCP 连接握手需要经过以下几个步骤 。如图所示:
文章插图
请求新的 TCP 连接时 , 客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~ 60 个字节) 。这个分组中设置了一个特殊的 SYN 标记 , 说明这是一个连接请求 。
- 如果服务器接受了连接 , 就会对一些连接参数进行计算 , 并向客户端回送一个 TCP 分组 , 这个分组中的 SYN 和 ACK 标记都被置位 , 说明连接请求已被接受 。
- 最后 , 客户端向服务器回送一条确认信息 , 通知它连接已成功建立
在这里我们需要注意的就是 TCP 连接的握手时延 , 通常 HTTP 事务都不会交换太多数据 , 此时 , SYN/SYN+ACK 握手(参见图中的 a 段 和图中的 b 段)会产生一个可测量的时延 。TCP 连接的 ACK 分组(参见图中的 c 段)通常都足够大 , 可以承载整个 HTTP 请求报文 , 而且很多 HTTP 服务器响应报文都可 以放入一个 IP 分组 中去(比如 , 响应是包含了装饰性图片的小型 html 文件 , 或者是对浏览器高速缓存请求产生的 304 Not Modified 响应) 。
TCP 慢启动
TCP 数据传输的性能还取决于 TCP 连接的使用期(age) 。TCP 连接会随着时间进行自 我“调谐” , 起初会限制连接的最大速度 , 如果数据成功传输 , 会随着时间的推移提高传输 的速度 。这种调谐被称为 TCP 慢启动(slow start) , 用于防止因特网的突然过载和拥 塞 。
TCP 慢启动限制了一个 TCP 端点在任意时刻可以传输的分组数 。简单来说 , 每成功接收 一个分组 , 发送端就有了发送另外两个分组的权限 。如果某个 HTTP 事务有大量数据要发 送 , 是不能一次将所有分组都发送出去的 。必须发送一个分组 , 等待确认;然后可以发送 两个分组 , 每个分组都必须被确认 , 这样就可以发送四个分组了 , 以此类推 。这种方式被 称为“打开拥塞窗口” 。
由于存在这种拥塞控制特性 , 所以新连接的传输速度会比已经交换过一定量数据的、“已 调谐”连接慢一些 。由于已调谐连接要更快一些 , 所以 HTTP 中有一些可以重用现存连接 的工具 。
3、HTTP 连接的处理前面我们说了 TCP 连接 , 我们重新来分析一下 HTTP , 之前我也说过在 HTTP 1.0的时候和1.1之后 , 有 Keep-Alive , 关于 Keep-Alive 不懂的请翻看前面的公众号的文章内容 , 接下来我分几个内容给大家讲述 HTTP 对连接上的处理 。
- 并行连接:通过多条 TCP 连接发起并发的 HTTP 请求 。
- 持久连接:重用 TCP 连接 , 以消除连接及关闭时延 。
- 管道化连接:通过共享的 TCP 连接发起并发的 HTTP 请求 。
文章插图
每个事务都需要(串行地建立)一条 新的连接 , 那么连接时延和慢启动时延就会叠加起来
并行连接就是说 HTTP 允许客户端打开多条连接 , 并行的去执行多个 HTTP 的事务 , 就会出现多条线路平行的情况 。
文章插图
其实并行连接并没有说是页面的传输速度 , 是因为多个对象同时在进展 , 所以 , 他的速度要比叠加起来 , 让你在感觉上快不少 。
推荐阅读
- 让你的Mac运行流畅的5个实用技巧
- C/C++开发环境搭建详解!10分钟带你搭建高效的开发环境
- 计算机储存数字和字符的方法你了解多少?
- 4个色彩知识,让你PS设计配色更高级
- 开淘宝店注册流程 怎样注册淘宝开店流程
- |近七成求职者向往互联网,六成因没有成长空间跳槽,你怎么看?
- 现在怎么开淘宝店 淘宝怎么开淘宝店
- 揭秘你不知道的洗发水真相
- 为什么跑高速方向盘会抖动,看完你就知道了
- 你听过最浪漫的一句话 让人觉得浪漫的话