4.1 TCP 连接
来源:互联网 发布:java graphics 方法 编辑:程序博客网 时间:2024/06/03 07:31
- 基本概念见1.5 连接
- 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,TCP/IP 是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集。
- 一旦连接建立起来了,在客户端和服务器的计算机之间交换的报文就永远不会丢失、受损或失序。尽管报文不会丢失或受损,但如果计算机或网络崩溃了,客户端和服务器之间的通信仍然会被断开。在这种情况下,会通知客户端和服务器通信中断了。
- 建立连接步骤:
1. TCP 的可靠数据管道
- HTTP 连接实际上就是 TCP 连接及其使用规则。
- TCP 为 HTTP 提供了一条可靠的比特传输管道。从 TCP 连接一端填入的字节会从另一端以原有的顺序、正确地传送出来。TCP 会按序、无差错地承载 HTTP 数据。
2. TCP 流是分段的、由IP分组传送
- TCP 的数据是通过名为 IP 分组(或 IP 数据报)的小数据块来发送的。
- HTTP 就是“HTTP over TCP over IP”这个“协议栈”中的最顶层了。其安全版本 HTTPS 就是在 HTTP 和 TCP 之间插入了一个(称为 TSL 或 SSL 的)密码加密层。
- HTTP 和 HTTPS 网络协议栈:
- HTTP 要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的 TCP 连接按序传输。TCP 收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在 IP 分组中,通过因特网进行传输(见下图)。所有这些工作都是由 TCP/ IP 软件来处理的,HTTP 程序员什么都看不到。
- 每个 TCP 段都是由 IP 分组承载,从一个 IP 地址发送到另一个 IP 地址的。每个 IP 分组中都包括:
- 一个 IP 分组首部(通常为20字节),包含了源和目的 IP 地址、长度和其他一些标记;
- 一个 TCP 段首部(通常为 20 字节),包含了 TCP 端口号、TCP 控制标记,以及用于数据排序和完整性检查的一些数字值;
- 一个 TCP 数据块(0 个或多个字节)。
3. 保持 TCP 连接持续不断运行
- 在任意时刻计算机都可以有几条 TCP 连接处于打开状态。TCP 是通过端口号来保持所有这些连接持续不断地运行。
- IP 地址可以将你连接到正确的计算机,而端口号则可以将你连接到这台计算机上的正确的应用程序上去。
- TCP 连接是通过 4 个值来识别的:< 源 IP 地址、源端口号、目的 IP 地址、目的端口号 >。这一组值称为套接字。这 4 个值一起唯一地定义了一条连接。两条不同的 TCP 连接不能拥有 4 个完全相同的地址组件值(但不同连接的部分组件可以拥有相同的值)。
- 举例:
有 4 条连接:A、B、C 和 D。注意,有些连接共享了相同的目的端口号(C 和 D 都使用目的端口号 80)。有些连接使用了相同的源 IP 地址(B 和 C)。有些使用了相同的目的 IP 地址(A 和 B,C 和 D)。但没有两个不同连接所有的 4 个值都一样。
4. TCP 套接字程序
- 操作系统提供了一些操纵其 TCP 连接的工具。为了更具体地说明问题,我们来看一个 TCP 编程接口:套接字程序。
- 套接字(socket):源IP地址和目的IP地址以及源端口号和目的端口号的组合。
- 下表显示了套接字 API 提供的一些主要接口。这个套接字 API 向 HTTP 程序员隐藏了 TCP 和 IP 的所有细节。套接字 API 最初是为 Unix 操作系统开发的,但现在几乎所有的操作系统和语言中都有其变体存在。
- 套接字 API 允许用户创建 TCP 的端点数据结构,将这些端点与远程服务器的 TCP 端点进行连接,并对数据流进行读写。TCP API 隐藏了所有底层网络协议的握手细节,以及 TCP 数据流与 IP 分组之间的分段和重装细节。
- 通过套接字 API 来凸显客户端和服务器在实现 HTTP 事务时所应执行的步骤:
阅读全文
0 0
- 4.1 TCP 连接
- TCP连接
- TCP连接
- TCP连接
- TCP连接
- TCP连接
- TCP连接
- TCP连接
- TCP连接
- tcp连接
- TCP连接
- tcp长连接tcp短连接
- TCP长连接短连接
- TCP长连接短连接
- TCP长连接、短连接
- tcp连接与断开连接
- TCP长连接,短连接
- tcp连接和http连接
- 例题6-14 Abbott's Revenge Uva816
- 线程相关问题
- java代码实现身份证第18位的计算和验证身份证号码是否是真实有效.
- Java知识点总结(二)面向对象
- 排序详解:统计排序
- 4.1 TCP 连接
- android studio的build.gradle文件分析
- JAVA设计模式之工厂模式(静态工厂模式)
- Hadoop(三)
- FragmentTabHost中tab项的单击事件
- 每天一个linux命令(1):ls命令
- MySQL临时表的简单用法 在大数据量时有时会加快查询速度
- js 文件上传插件(支持上传进度信息)
- tp中订单详情中ajax更换收货地址。