TCP

HTTP 报文 是指在HTTP应用程序之间发送的数据块
TCP 为HTTP提供了一条 可靠的比特传输管道,从TCP连接一段填入的字节会从另一端以原有的顺序、正确的传送处理

TCP流是分段的,由IP分组传送

  • tcp 的数据是通过名为 IP分组(或IP数据报)的小数据块来发送的
    HTTP 要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的 TCP 连
    接按序传输。TCP 收到数据流之后,会将数据流砍成被称作段的小数据块,并将段
    封装在 IP 分组中,通过因特网进行传输。所有这些工作都是由 TCP/
    IP 软件来处理的,HTTP 程序员什么都看不到。

    每个 TCP 段都是由 IP 分组承载,从一个 IP 地址发送到另一个 IP 地址的。每个 IP
    分组中都包括:
    • 一个 IP 分组首部(通常为 20 字节);
    • 一个 TCP 段首部(通常为 20 字节);
    • 一个 TCP 数据块(0 个或多个字节)。
    IP 首部包含了源和目的 IP 地址、长度和其他一些标记。TCP 段的首部包含了 TCP
    端口号、TCP 控制标记,以及用于数据排序和完整性检查的一些数字值。

  • 安全版本https 就说在http和tcp 之间掺入一个(称为TLS或SSL)的密码加密层

http和https网络协议栈.png

保持TCP连接的正确运行

  • tcp是通过 端口号 来保持所有这些连接的正确运行的
    通过4个值来识别: <源IP地址、源端口号、目的IP地址、目的端口号>

用TCP套接字socket编程

  • 举例说明:
    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

  • 连接过程
    (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
    (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
    (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

  • 套接字 API 允许用户创建 TCP 的端点数据结构,将这些端点与远程服务器的 TCP
    端点进行连接,并对数据流进行读写。TCP API 隐藏了所有底层网络协议的握手细
    节,以及 TCP 数据流与 IP 分组之间的分段和重装细节

api.png
  • 流程
    我们从 Web 服务器等待连接(参见图 4-6,S4)开始。客户端根据 URL 判定出 IP地址和端口号,并建立一条到服务器的 TCP 连接(参见图 4-6,C3)。建立连接可能要花费一些时间,时间长短取决于服务器距离的远近、服务器的负载情况,以及因特网的拥挤程度。
    一旦建立了连接,客户端就会发送 HTTP 请求(参见图 4-6,C5),服务器则会读取请求(参见图 4-6,S6)。一旦服务器获取了整条请求报文,就会对请求进行处理,执行所请求的动作(参见图 4-6,S7),并将数据写回客户端。客户端读取数据(参见图 4-6,C6),并对响应数据进行处理(参见图 4-6,C7
用TCP套接字编程.png

对TCP性能的考虑

  • tcp事务的时延
    描绘了 HTTP 事务主要的连接、传输以及处理时延


    串行 HTTP 事务的时间线.png

    注意: 与建立TCP连接,以及传输请求和响应报文的时间相比,事务处理时间可能很短;除非客户端或服务端超载,或正在处理复杂的动态资源,否则HTTP时延是由TCP网络时延造成的

    HTTP 事务的时延有以下几种主要原因。
    (1) 客户端首先需要根据 URI 确定 Web 服务器的 IP 地址和端口号。如果最近没有对
    URI 中的主机名进行访问,通过 DNS 解析系统将 URI 中的主机名转换成一个 IP
    地址可能要花费数十秒的时间 3。
    (2) 接下来,客户端会向服务器发送一条 TCP 连接请求,并等待服务器回送一个请
    求接受应答。每条新的 TCP 连接都会有连接建立时延。这个值通常最多只有一
    两秒钟,但如果有数百个 HTTP 事务的话,这个值会快速地叠加上去。
    (3) 一旦连接建立起来了,客户端就会通过新建立的 TCP 管道来发送 HTTP 请求。
    数据到达时,Web 服务器会从 TCP 连接中读取请求报文,并对请求进行处理。因特网传输请求报文,以及服务器处理请求报文都需要时间。
    (4) 然后,Web 服务器会回送 HTTP 响应,这也需要花费时间。
    这些 TCP 网络时延的大小取决于硬件速度、网络和服务器的负载,请求和响应报文
    的尺寸,以及客户端和服务器之间的距离。TCP 协议的技术复杂性也会对时延产生
    巨大的影响。

  • 性能聚焦区域

  • TCP连接的握手时延


    在发送数据之前,TCP 要传送两个分组来建立连接.png

TCP 连接握手需要经过以下几个步骤三次握手
(1) 请求新的 TCP 连接时,客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~60 个字节)。这个分组中设置了一个特殊的 SYN 标记,说明这是一个连接请求。【对应a】
(2) 如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个TCP 分组,这个分组中的 SYN 和 ACK 标记都被置位,说明连接请求已被接受【对应b】
(3)最后,客户端向服务器回送一条确认信息,通知它连接已成功建立
现代的 TCP 栈都允许客户端在这个确认分组中发送数据。【对应c】

通常 HTTP 事务都不会交换太多数据,此时,SYN/SYN+ACK 握手(参见图 a
和图 b)会产生一个可测量的时延。TCP 连接的 ACK 分组(参见8c)通常
都足够大,可以承载整个 HTTP 请求报文 ,而且很多 HTTP 服务器响应报文都可
以放入一个 IP 分组中去(比如,响应是包含了装饰性图片的小型 HTML 文件,或
者是对浏览器高速缓存请求产生的 304 Not Modified 响应)。

最后的结果是,小的 HTTP 事务可能会在 TCP 建立上花费 50%,或更多的时间

  • 延迟确认
    由于因特网自身无法确保可靠的分组传输(因特网路由器超负荷的话,可以随意丢
    弃分组),所以 TCP 实现了自己的确认机制来确保数据的成功传输。
    每个 TCP 段都有一个序列号和数据完整性校验和。每个段的接收者收到完好的段时,都会向发送者回送小的确认分组。如果发送者没有在指定的窗口时间内收到确认信息,发送者就认为分组已被破坏或损毁,并重发数据。
    由于确认报文很小,所以 TCP 允许在发往相同方向的输出数据分组中对其进行“捎带”。TCP 将返回的确认信息与输出的数据分组结合在一起,可以更有效地利用网络。

TCP慢启动

  • TCP 数据传输的性能还取决于 TCP 连接的使用期(age)。TCP 连接会随着时间进行
    自我“调谐”,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移
    提高传输的速度。这种调谐被称为 TCP 慢启动(slow start),用于防止因特网的突
    然过载和拥塞
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 当 app 和服务器进行通信的时候,大多数情况下,都是采用 HTTP 协议。HTTP 最初是为 web 浏览器而定...
    Flysss1219阅读 1,252评论 0 4
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,342评论 0 13
  • 24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代...
    张芳涛阅读 1,469评论 0 3
  • TCP协议 第17章 TCP传输控制协议 17.1 TCP协议格式 TCP将用户数据打包构成报文段,它发送数据后启...
    有何不可12317阅读 1,951评论 0 0