1、HTTP 是如何使用 TCP 连接的;世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的 , TCP/IP 是全球计算机及网络设备都 在使用的一种常用的分组交换网络分层协议集 。客户端应用程序可以打开一条 TCP/IP 连 接 , 连接到可能运行在世界任何地方的服务器应用程序 。一旦连接建立起来了 , 在客户端 和服务器的计算机之间交换的报文就永远不会丢失、受损或失序 。
尽管报文不会丢失或受损 , 但如果计算机或网络崩溃了 , 客户端和服务器之间的通信仍然会被断开 。在这种情况下 , 会通知客户端和服务器通信中断了 。
当浏览器收到一个 URL 的时候 , 会执行几个相对应的步骤 , 如下
- 浏览器解析出主机名;
- 浏览器查询主机名的 IP 地址;
- 浏览器获得端口号;
- 浏览器发起对该 IP 地址对应端口号的链接;
- 浏览器向服务器发送一条 HTTP GET报文;
- 浏览器从服务器读取 HTTP 相应报文;
- 浏览器关闭连接;
文章插图
1.1、TCP 连接的基本知识
TCP 是可靠的数据管道
文章插图
TCP 会按序、无差错地承载 HTTP 数据 , TCP 为 HTTP 提供了一条可靠的比特传输管道 。从 TCP 连接一端填入的字节会从另一端 以原有的顺序、正确地传送出来 。
TCP 流是分段的、由 IP 分组传送
TCP 的数据是通过名为 IP 分组(或 IP 数据报)的小数据块来发送的 。
文章插图
这样的话 , 如图 HTTP 就是 “HTTP over TCP over IP” 这个“协议栈”中的最顶层了 。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TLS 或 SSL 的)密码加密层(安全层) , 就是在图中的右半部分 。
HTTP 要传送一条报文时 , 会以流的形式将报文数据的内容通过一条打开的 TCP 连接按 序传输 。TCP 收到数据流之后 , 会将数据流砍成被称作段的小数据块 , 并将段封装在 IP 分组中 , 通过因特网进行传输 , 如下图中大家看到的内容:
文章插图
每个 TCP 段都是由 IP 分组承载 , 从一个 IP 地址发送到另一个 IP 地址的 。
而每个 IP 分组中都包括:
- 一个 IP 分组首部(通常为 20 字节);
- 一个 TCP 段首部(通常为 20 字节);
- 一个 TCP 数据块(0 个或多个字节) 。
保持 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)等待某人建立一条到本地端口的连接
推荐阅读
- 让你的Mac运行流畅的5个实用技巧
- C/C++开发环境搭建详解!10分钟带你搭建高效的开发环境
- 计算机储存数字和字符的方法你了解多少?
- 4个色彩知识,让你PS设计配色更高级
- 开淘宝店注册流程 怎样注册淘宝开店流程
- |近七成求职者向往互联网,六成因没有成长空间跳槽,你怎么看?
- 现在怎么开淘宝店 淘宝怎么开淘宝店
- 揭秘你不知道的洗发水真相
- 为什么跑高速方向盘会抖动,看完你就知道了
- 你听过最浪漫的一句话 让人觉得浪漫的话