HTTP解析(3)------连接管理(1)

TCP连接

        TCP/IP是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集。客户端应用程序可以打开一条TCP / IP 连接,连接到可能运行在世界任何地方的服务器应用程序。一旦连接建立起来,在客户端和服务器的的计算机之间交互的报文就永远不会丢失、受损和失序。

        一、TCP的可靠数据管道
                 TCP为HTTP提供了一条可靠的比特传输管道。从TCP连接一端填入的字节会从另一端以原有的顺序、正确的传送过来。

Web浏览器通过TCP连接与Web服务器进行交互

        二、TCP流是分段的,由IP分组传送     
                TCP的数据是通过名为IP分组的小数据块来发送的      

HTTP和HTTPS网络协议栈

                HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输。TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在IP分组中,通过因特网进行传输。每个IP分组包括(1、IP分组首部【包含了源和目的IP地址、长度和其他标记】。2、TCP段首部【包含了TCP端口号、TCP控制标记、以及用于数据排序和完整性检查的数字值】。3、TCP数据块)。

        三、保持TCP连接的正确运行
                TCP是通过端口号来保持所有这些连接的正确运行。TCP连接是通过4个值来识别的: <源IP地址、源端口号、目的IP地址、目的端口号>这四个值一起唯一地定义了一条连接,两条不同的TCP连接不能拥有4个完全相同的地址组件值

承载TCP段的IP分组,它承载了TCP数据流中的小块数据

        四、用TCP套接字编程

对TCP连接进行编程所需的常见套接字接口函数

                套接字API允许用户创建端点的数据结构将这些端点与远程服务器的TCP端点进行连接并对数据流进行读写。

TCP客户端与服务器是如何通过TCP套接字接口进行通讯的

TCP性能的考虑

        HTTP紧挨着TCP,位于TCP的上层,所以HTTP事务的性能在很大程度上取决于底层TCP通道的性能。

        一、HTTP事务的时延

HTTP事务主要的连接、传输以及处理时延

        HTTP的时延有一下几种原因:(1)、客户端首先需要根据URI确定Web服务器的IP地址和端口号。(2)、接下来,客户端会向服务器发送一条TCP连接请求,并等待服务器回送一个请求接受应答。(3)、一旦连接建立起来了,客户端就会通过新建立的TCP管道来发送HTTP请求。数据到达时,Web服务器会从TCP连接中读取请求报文,并对请求进行处理。(4)、然后,Web服务器会回应HTTP响应。        
        【这些TCP网络延时取决于硬件速度,网络或者服务器的负载,请求响应报文的尺寸,客户端与服务器距离,TCP技术的复杂性】

        二、性能聚焦区域
                最长见的TCP时延:(1)TCP连接建立握手;(2)TCP慢启动拥塞控制;(3)数据聚集的Nagle算法;(4)用于捎带确认的TCP延迟确认算法;(5)TIME_WAIT时延和端口耗尽。

        三、TCP连接的握手的时延

一条新的TCP连接在发送数据前,TCP要传送两个IP分组来建立连接

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

        四、延迟确认
                每个TCP段都有一个序列号和数据完整性校验和。每个段的接受者收到完好的段时,都会向发送者回送小的确认分组。如果发送者没有在指定的窗口时间内收到确认信息,发送者就认为分组已经被破坏或损毁,并重发数据。由于确认报文很小,所以允许TCP相同方向输出数据分组中对其进行“捎带”,TCP返回的确认信息与输出的数据分组结合在一起,更有效利用网络,为增加确认报文找到同向传输数据分组的可能性,TCP栈实现一种延时确认算法。
        延时确认算法会在一个特定的窗口内将输出确认放在缓冲区,以寻找能够捎带它的输出数据分组。如果在哪个时间段内没有输出数据分组,就将确认信息放在单独的分组中传送。

        五、TCP慢启动
                TCP数据传输的性能还取决于TCP连接的试用期。TCP连接会随着时间进行自我“调谐”,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐被称为TCP慢启动,用于防止因特网的突然过载和拥塞。
                TCP慢启动限制了一个TCP端点在任意时刻可以传输的分组数。如果每个HTTP事务由大量数据发送,要先发送一个分组,确认后在发送两个分组,并且每个分组都要进行确认,这种方式称为“打开拥塞窗口”。

        六、Nagle算法与TCP_NODELAY
                Nagle算法试图在发送一个分组之前,将大量TCP数据绑定在一起,以提高网络效率。Nagle算法鼓励发送全尺寸的段。只有当所有其他分组都被确认之后,Nagle算法才允许发送非全尺寸的分组。如果其他分组仍然在传输过程中,就将那部分数据缓存起来。只有当挂起分组被确认,或者缓存中基类了足够发送一个全尺寸分组的数据时,才会将缓存的数据发送出去。
                HTTP应用程序常常会在自己的栈中设置参数TCP_NODELAY,禁用Nagle算法,提高性能。

        七、TIME_WAIT累积与端口耗尽
                当某个TCP端点关闭TCP连接时,会在内存中维护一个小的控制块,用来记录最近所关闭连接的IP地址和端口号。                
                 在只有一个客户端和一台Web服务器的异常情况下,构建一条TCP连接的4个值
                        <source-IP-address, source-port, destination-IP-address, destination-port>
                其中的三个都是固定的----只有源端口号可以随意改变
                        <client-IP, source-port, server-IP, 80>  
                   客户端每次连接到服务器上去时,都会获得一个新的源端口,以实现连接的唯一性。即使没有遇到端口耗尽问题,也要特别小心有大量连接处于打开状态的情况,或为处于等待状态的连接分配了大量控制块的情况。再有大量打开连接或控制块的情况下,有些操作系统的速度会严重减缓。

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

推荐阅读更多精彩内容

  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,390评论 0 13
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,077评论 6 174
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,410评论 0 2
  • 1.OkHttp源码解析(一):OKHttp初阶2 OkHttp源码解析(二):OkHttp连接的"前戏"——HT...
    隔壁老李头阅读 20,874评论 24 176
  • 001匮乏陷阱:如果把我们的总精力和总时间比作一个大盒子,如何分配合理是非常值得思考的。好比如何将时间和精力最大价...
    米十七阅读 388评论 0 1