HTTP协议——HTTP连接管理

本文深入探讨了HTTP协议中的TCP连接管理,包括TCP连接的建立、性能问题、HTTP连接处理、并行连接、持久连接及其优化策略,以及连接的关闭。重点介绍了TCP的可靠性、连接时延、慢启动、Nagle算法对性能的影响,以及Keep-Alive和HTTP/1.1持久连接的使用。此外,还讨论了连接的关闭容限、幂等性和错误处理,以及管道化连接的概念。
摘要由CSDN通过智能技术生成

1、TCP连接

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

1.1、TCP的可靠数据管控

        HTTP连接实际上就是TCP连接和一些使用连接的规则。TCP连接是因特网上的可靠连接。要想正确、快速地发送数据,就需要了解TCP的一些基本知识。
        TCP为HTTP提供了一条可靠的比特传输管道。从TCP连接一端填入的字节会从另一端以原有的顺序、正确地传达出来。
        Web浏览器通过TCP连接与Web服务器进行交互:


1.2、TCP流是分段的、由IP分组传送

        TCP的数据是通过名为IP分组的小数据块来发送。这样的话,HTTP就是“HTTP over TCP over IP”这个“协议栈”中的最顶层了。其安全版本HTTPS就是在HTTP和TCP之间插入了一个密码加密层(TLS或SSL)。
        HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输。TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在IP分组中,通过因特网进行传输。所有这些工作都是由TCP/IP软件来处理的,HTTP程序员什么都看不到。
        每个TCP段都是由IP分组承载,从一个IP地址发送到另一个IP地址的。每个IP分组都包含:

  • 一个IP分组首部(通常为20字节)
  • 一个TCP段首部(通常为20字节)
  • 一个TCP数据块(0个或多个字节)

        IP首部包含了源和目的IP地址、长度和其他一些标记。TCP段的首部包含了TCP的端口号、TCP控制标记,以及用于数据排序和完整性检查的一些数字值。

1.3、保持TCP连接的正确运行

        在任意时刻计算机都可以有几条TCP连接处于打开状态。TCP是通过端口号来保持所有这些连接的正确运行的。
        IP地址可以将你连接到正确的计算机,而端口号则可以将你连接到正确的应用程序上。TCP连接时通过4个值来识别的:
        <源IP地址、源端口号、目的IP地址、目的端口号>
        这4个值一起唯一地定义了一条连接。两条不同的TCP连接不能拥有4个完全相同的地址组件值。

1.4、用TCP套接字编程

        操作系统提供了一些操纵其TCP连接的工具。下表显示了套接字API提供的一些主要接口:

套接字API调用

描述

s = socket(<parameters>)

创建一个新的、未命名、未关联的套接字

bind(s,<local IP:port>)

向套接字赋一个本地端口号和接口

connect(s,<remote IP:port>)

创建一条连接本地套接字与远程主机及端口的链接

listen(s,…)

标识一个本地套接字,使其可以合法接收连接。

s2 = accept(s)

等待某人建立一条到本地端口的连接

n = read(s, buffer, n)

尝试从套接字向缓冲区读取n个字节

n = writer(s, buffer, n)

尝试从缓冲区中向套接字写入n个字节

close(s)

完全关闭TCP连接

shutdown(s, <side>)

只关闭TCP链接的输入或输出端

getsockopt(s, …)

读取某个内部套接字配置选项的值

setsockopt( s, …)

修改某个内部套接字配置选项的值



         这个套接字API向HTTP程序员隐藏了TCP和IP的所有细节。套接字API最初是为Unix操作系统开发的,但现在几乎所有的操作系统和语言中都有其变体存在。套接字API允许用户常见了TCP的端点数据结构,将这些端点与远程服务器的TCP端点进行连接,并对数据流进行读写。TCP API隐藏了所有底层网络协议的握手细节,以及TCP数据流与IP分组之间的分段和重装细节。
        通过套接字API来凸显客户端和服务器在实现HTTP事务时所应执行的步骤如下:

       

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

2、TCP性能问题

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

2.1、HTTP事务的时延

        下图显示了HTTP事务主要的链接、传输以及处理演示。与建立TCP链接,以及传输请求和响应报文的时间相比,事务处理时间可能是很短的。除非客户端或服务器超载,或者正在处理复杂的动态资源,否则HTTP时延就是由TCP网络时延构成的。


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

2.2、常见的影响性能的原因

1、立握TCP连接建手
2、TCP慢启动拥塞控制
3、数据聚集的Nagle算法
4、用于捎带确认的TCP延迟确认算法
5、TIME_WAIT时延和端口耗尽。

2.3、立握TCP连接建手

        建立一条新的TCP连接时,甚至是在发送任意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值