设为首页 - 加入收藏 武汉站长网 (http://www.027zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2019 javascript 2018 为什么
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

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

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

你知道 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 是可靠的mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注管道

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

TCP 会按序、无差错地承载 HTTP mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注,TCP 为 HTTP 提供了一条可靠的比特传输管道。从 TCP 连接一端填入的字节会从另一端 以原有的顺序、正确地传送出来。

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

TCP 的mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注是通过名为 IP 分组(或 IP mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注报)的小mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注块来发送的。

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

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

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

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

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

而每个 IP 分组中都包括:

  1. 一个 IP 分组首部(通常为 20 字节);
  2. 一个 TCP 段首部(通常为 20 字节);
  3. 一个 TCP mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注块(0 个或多个字节)。

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

保持 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 的端点mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注结构,将这些端点与远程服务器的 TCP 端点进 行连接,并对mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注流进行读写。TCP API 隐藏了所有底层网络协议的握手细节,以及 TCP mobile365体育在线投注_365bet体育投注吧_beta365体育在线投注流与 IP 分组之间的分段和重装细节。

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

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

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

2、TCP 连接的握手

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

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

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

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

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

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

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章