您当前的位置:首页 > 电脑百科 > 站长技术 > 网站

HTTP是如何使用TCP连接

时间:2020-01-28 21:26:02  来源:  作者:

之前我写了篇关于 HTTP 的文章,文章中讲述了 HTTP的特点,HTTP 的报文,HTTP 的请求方式等知识,接下来,深入了,我们就关于 HTTP 引发的面试题来进行入手,一起来看一下吧!

1. HTTP 是如何使用 TCP 连接的;

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

尽管报文不会丢失或受损,但如果计算机或网络崩溃了,客户端和服务器之间的通信仍然会被断开。在这种情况下, 会通知客户端和服务器通信中断了。

当浏览器收到一个 URL 的时候,会执行几个相对应的步骤,如下

  1. 浏览器解析出主机名;
  2. 浏览器查询主机名的 IP 地址;
  3. 浏览器获得端口号;
  4. 浏览器发起对该 IP 地址对应端口号的链接;
  5. 浏览器向服务器发送一条 HTTP GET报文;
  6. 浏览器从服务器读取 HTTP 相应报文;
  7. 浏览器关闭连接;

 

HTTP是如何使用TCP连接

 

 

1.1 TCP 连接的基本知识

TCP 是可靠的数据管道

HTTP是如何使用TCP连接

 

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

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

TCP 的数据是通过名为 IP 分组(或 IP 数据报)的小数据块来发送的。

HTTP是如何使用TCP连接

 

这样的话,如图HTTP 就是“HTTP over TCP over IP”这个“协议栈”中的最顶层了。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL 的)密码加密层(安全层),就是在图中的右半部分。

HTTP 要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的 TCP 连接按 序传输。TCP 收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在 IP 分组中,通过因特网进行传输,如下图中大家看到的内容:

 

HTTP是如何使用TCP连接

 

 

每个 TCP 段都是由 IP 分组承载,从一个 IP 地址发送到另一个 IP 地址的。

而每个 IP 分组中都包括:

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

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

保持 TCP 连接的持续不间断地运行

在任意时刻计算机都可以有几条 TCP 连接处于打开状态。TCP 是通过端口号来保持所有 这些连接的正确运行的。 端口号和雇员使用的电话分机号很类似。

这就和我之前举得例子是一样的,公司的总机和你自己的座机一样,公司的总机号码能将你接到前台,而分机号 可以将你接到正确的雇员位置一样,IP 地址可以将你连接到正确的计算机,而端口号则 可以将你连接到正确的应用程序上去。TCP 连接是通过 4 个值来识别的:

源IP 地址、源端口号、目的IP 地址、目的端口号

这 4 个值一起唯一地定义了一条连接。两条不同的 TCP 连接不能拥有 4 个完全相同的地 址组件值(但不同连接的部分组件可以拥有相同的值)。

这里需要我们注意的是,有些连接共享了相同的目的端口号,有些连接使用了相同的源 IP 地址,有些使用了相同的目的 IP 地址,但没有两个不同连接所有的 4 个值都一样。

TCP 套接字

操作系统提供了一些操纵其 TCP 连接的工具。为了更具体地说明问题,我们来看一个 TCP 编程接口,这些套接字我就不一一介绍了,我给大家一个表格,大家可以理解一下

套接字API调用描 述s = socket()创建一个新的、未命名、未关联的套接字bind(s,)向套接字赋一个本地端口号和接口connect(s, )创建一条连接本地套接字与远程主机及端口的连接listen(s,…)标识一个本地套接字,使其可以合法接受连接s2 = accept(s)等待某人建立一条到本地端口的连接

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

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

 

HTTP是如何使用TCP连接

 

 

上图中说明了可以怎样通过套接字 API 来凸显客户端和服务器在实现 HTTP 事务时所应执行的步骤。

2. TCP 连接的握手

TCP 连接握手需要经过以下几个步骤。 如图所示:

HTTP是如何使用TCP连接

 

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

我们永远不会看到这些分组——这些分组都由 TCP/IP 软件管理,对其是不可见 的。HTTP 程序员看到的只是创建 TCP 连接时存在的时延。

在这里我们需要注意的就是 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 对连接上的处理。

  • 并行连接1 通过多条 TCP 连接发起并发的 HTTP 请求。
  • 持久连接1 重用 TCP 连接,以消除连接及关闭时延。
  • 管道化连接1 通过共享的 TCP 连接发起并发的 HTTP 请求。

我们来看一下串行:

HTTP是如何使用TCP连接

 

每个事务都需要(串行地建立)一条 新的连接,那么连接时延和慢启动时延就会叠加起来

并行连接就是说 HTTP 允许客户端打开多条连接,并行的去执行多个 HTTP 的事务,就会出现多条线路平行的情况。

 

HTTP是如何使用TCP连接

 

 

其实并行连接并没有说是页面的传输速度,是因为多个对象同时在进展,所以,他的速度要比叠加起来,让你在感觉上快不少。

持久连接

HTTP 1.1 允许 HTTP 设备在事务处理结束之后 将 TCP 连接保持在打开状态,以便为未来的 HTTP 请求重用现存的连接。在事务处理结束之后仍然保持在打开状态的 TCP 连接被称为持久连接。非持久连接会在每个事务结束之后关闭。持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。

关于持久连接上一篇文章已经描述的很清楚了,文章链接封上【http://www.justdoJAVA.com/2019/10/13/java-Http2/】

管道化连接(也有人称之为管线化)

HTTP/1.1 允许在持久连接上可选地使用请求管道。这是相对于 keep-alive 连接的又一性能优化。在响应到达之前,可以将多条请求放入队列。当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条请求也可以开始发送了。在高时延网络条件下,这样做可以降低网络的环回时间,提高性能。

其实管道化说白了就是 传送过程中不需先等待服务端的回应,然后又发了几条,浏览器将 HTTP 要求大批提交可大幅缩短页面的加载时间,特别是在传输延迟(lag/latency)较高的情况下(如卫星连接)。此技术之关键在于多个 HTTP 的要求消息可以同时塞入一个 TCP 分组中,所以只提交一个分组即可同时发出多个要求,借此可减少网络上多余的分组并降低线路负载。

关于 HTTP 的连接我们就先介绍到这里吧,下一篇文章我们将继续讲述 关于代理的那点事!



Tags:HTTP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
以京训钉开发平台接口文档为例,使用HttpClient类请求调用其接口,对数据进行增删改查等操作。 文档地址: https://www.yuque.com/bjjnts/jxd/bo1oszusing System;using System.C...【详细内容】
2021-12-28  Tags: HTTP  点击:(1)  评论:(0)  加入收藏
HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应...【详细内容】
2021-12-27  Tags: HTTP  点击:(5)  评论:(0)  加入收藏
在SEO优化中,最重要的评估之一就是确定网站上存在哪些HTTP状态代码。这些代码可能会变得很复杂,成为一个难题,必须先解决这些难题,然后才能完成其他任务。例如,如果你放置的页面...【详细内容】
2021-12-24  Tags: HTTP  点击:(5)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  Tags: HTTP  点击:(9)  评论:(0)  加入收藏
简介在之前的文章中,我们提到了在netty的客户端通过使用Http2FrameCodec和Http2MultiplexHandler可以支持多路复用,也就是说在一个连接的channel基础上创建多个子channel,通过...【详细内容】
2021-12-14  Tags: HTTP  点击:(8)  评论:(0)  加入收藏
1. 前言本文主要讲解如何在Linux上使用tinyproxy搭建HTTP/HTTPS代理器。tinyproxy是一个HTTP/HTTPS代理。它是轻量级的、快速的、非常容易配置的,而且是一个开源的代理服务。...【详细内容】
2021-12-08  Tags: HTTP  点击:(18)  评论:(0)  加入收藏
由于https 使用了 TLS/SSL 加密条件,我们无法直接在wireshark的中读取到数据内容,我们先看一下正常的http包的内容。可以直接读取到http的header 和body。 但如果是https 则不...【详细内容】
2021-12-01  Tags: HTTP  点击:(31)  评论:(0)  加入收藏
这段时间毕竟也是 “金九银十” 的面试的黄金季节,阿粉当然也想去面试,但是因为自身受限,所以只能采访一下出去面试的同学们都问了什么内容,其中有一个,阿粉觉得有必要给大家分享...【详细内容】
2021-11-05  Tags: HTTP  点击:(45)  评论:(0)  加入收藏
在这篇文章中,大家将了解MQTT协议,以及为什么在许多物联网应用中使用它。 MQTT协议最初由IBM开发,并且是专有的。它的开发是为了解决石油和天然气行业的传感器通过卫星与远程服...【详细内容】
2021-10-21  Tags: HTTP  点击:(32)  评论:(0)  加入收藏
自互联网出现以来,超文本传输协议http协议被广泛用于在Web浏览器和网站服务器之间传递信息,但随着互联网的发展,另一种协议——https出现,并与http一同服务于这个互联...【详细内容】
2021-10-20  Tags: HTTP  点击:(44)  评论:(0)  加入收藏
▌简易百科推荐
今天我们来聊一下北京地区的《ICP经营许可证》有多好办,现在的互联网上提供的商机越来越多,增值电信业务十分火爆,企业通过互联网突破地域的限制,把公司产品卖到更远的地方,同时...【详细内容】
2021-12-17  梦想理应飞翔Yy    Tags:《ICP经营许可证》   点击:(12)  评论:(0)  加入收藏
转自: https://blog.kermsite.com/p/blog-intro/由于格式问题,部分链接、表格可能会失效,若失效请访问原文此专题将详细介绍如何从零开始搭建一个个人博客。Dec 01, 2021阅读时...【详细内容】
2021-12-17  LaLiLi    Tags:个人博客   点击:(7)  评论:(0)  加入收藏
SP证是第二类增值电信业务经营许可证的简称。分为全网SP证和地网SP证。申请经营许可证是在工信部申请,全网SP经营许可证的有效期是5年,全网SP许可证在工信部办理全网SP续期,地...【详细内容】
2021-11-01  s陳述    Tags:sp证书   点击:(39)  评论:(0)  加入收藏
现在还有许多人不知道EDI许可证是什么东西今天我就来给大家讲解一下.EDI许可证就是一种增值电信业务经营许可证。是针对在线数据处理和交易处理业务需求的专业资格证书。 《...【详细内容】
2021-10-28  soberXx    Tags:edi许可证   点击:(75)  评论:(0)  加入收藏
元素的化学概念,如周期表中的化学元素,一切物质都是由元素构成的。对程序员而言,网站建设制作就是代码构成网站。企业网站设计者也收集了各种各样的元素,但并非所有元素都需要运...【详细内容】
2021-10-26  南宁云尚网络    Tags:企业网站   点击:(40)  评论:(0)  加入收藏
在运营网站的过程中,有一件不可忽略的事情。那就是网站上线之前需要完成 ICP 备案。说到这里,很多朋友就提出疑问了~· 什么是 ICP 备案呢?· ICP 备案需要哪些材...【详细内容】
2021-10-22  启测云    Tags:ICP备案   点击:(46)  评论:(0)  加入收藏
最近有朋友问我,我公司有外资就不能申请ICP许可证了么?外资的定义是什么?其实是可以的,但有一个特定条件必须满足,外资公司是指公司有外资股东,比如香港、加拿大、美国、韩国等等,...【详细内容】
2021-10-21  小白速看Z    Tags:ICP   点击:(51)  评论:(0)  加入收藏
自互联网出现以来,超文本传输协议http协议被广泛用于在Web浏览器和网站服务器之间传递信息,但随着互联网的发展,另一种协议——https出现,并与http一同服务于这个互联...【详细内容】
2021-10-20  我是FEIYA    Tags:https   点击:(44)  评论:(0)  加入收藏
Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。图片来自 包图网先看看结果有多轻量吧: Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索...【详细内容】
2021-09-14    51CTO  Tags:Loki日志   点击:(97)  评论:(0)  加入收藏
背景最近做微信小程序开发比较多,大家知道线上微信小程序为了安全起见,要求后端通信协议必须是HTTPS,这就要求需要安装证书。为了测试预发布线上环境,特地买了个最便宜的域名,为...【详细内容】
2021-09-14  小李子说程序    Tags:HTTPS证书   点击:(125)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条