加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

你知道 HTTP 是如何使用 TCP 连接的吗?今天我就来告诉你

发布时间:2019-11-13 04:24:04 所属栏目:教程 来源:Java架构学习交流
导读:副标题#e# 1、HTTP 是如何使用 TCP 连接的; 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,TCP/IP 是全球计算机及网络设备都 在使用的一种常用的分组交换网络分层协议集。客户端应用程序可以打开一条 TCP/IP 连 接,连接到可能运行在世界任何地方的服务
副标题[/!--empirenews.page--]

你知道 HTTP 是如何使用 TCP 连接的吗?今天我就来告诉你

 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 分组中都包括:

  1. 一个 IP 分组首部(通常为 20 字节);
  2. 一个 TCP 段首部(通常为 20 字节);
  3. 一个 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 连接的吗?今天我就来告诉你

请求新的 TCP 连接时,客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~ 60 个字节)。这个分组中设置了一个特殊的 SYN 标记,说明这是一个连接请求。

如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个 TCP 分组,这个分组中的 SYN 和 ACK 标记都被置位,说明连接请求已被接受。

最后,客户端向服务器回送一条确认信息,通知它连接已成功建立

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

(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读