HTTP协议----->连接管理
1. TCP连接
1.1 TCP为HTTP提供了一条可靠的比特传输管道。
TCP(Transmission Control Protocol)----传输控制协议,是主机对主机层的传输控制协议,提供可靠的连接服务。 TCP的数据是通过名为IP分组(或IP数据报)的小数据块来发送的。HTTP/HTTPS网络协议栈如下所示:

- HTTP收到一条报文时,报文数据内容转化为流的形式;
- 数据流通过一条打开的TCP连接按顺序传输;
- TCP收到数据流,将数据流砍成为被称作为段的小数据块;
- 将小数据块封装的IP之中;
- 通过英特网完成传输;
TCP段都是由IP分组承载(下图表示为TCP某段的参数),从一个IP地址发到另外一个IP地址。每一个IP分组中都包括:
- 一个IP分组首部(通常20字节)--->包含源和目的的IP地址、长度、其他的标记;
- 一个TCP段首部(通常20字节)--->包含TCP端口号、TCP控制标记、数据排序和完整性检查的数字值;
- 一个TCP数据块(0个或者多个字节)--->要传送的报文数据流;
TCP段#x

TCP的连接通过四个值来识别:
<源IP地址 、 源端口号 、 目的IP地址 、 目的端口号>
TCP分段传输示意如下:

1.2 TCP套接字编程
伪代码说明通过套接字API,客户端和服务器实现HTTP事务时执行的步骤:

1.3 TCP三次握手四次挥手(划重点!!!)
要知道!!! 什么是三次握手,为什么不是两次?什么是四次挥手?第二三次挥手为什么不合并呢?
先说说TCP的标志位,有6种标示:
- SYN(synchronous建立联机)
- ACK(acknowledgement 确认)
- PSH(push传送)
- FIN(finish结束)
- RST(reset重置)
- URG(urgent紧急)
三次握手,数据传输,四次挥手图:

那为什么需要三次握手呢?基于上图所示,如下的过程:
- 客户端C向服务器S发起建立连接请求:C——>S;
- 客户端C收到服务器S的发送信号,并且向客户端C发送确认信息:S——>C;
- 客户端C收到服务器S的确认信号,并向S发送确认信号:C——>S。
三次握手大概就是这么个过程:
- 通过第一次握手,服务器S知道客户端C能发送数据。
- 通过第二次握手,客户端C知道服务器S能收、能发送数据。
- 结合第三次握手,服务器S知道客户端C能够接收数据。
至此,完成了握手过程,客户端C知道能服务器S能收能发,服务器S知道客户端C能收能发,通信连接至此建立。
两个要点:(要知道!!!)
- 三次握手的完成,只是一个客户端C和服务器S是否能够相互建立连接的确认过程,还没有进行真正数据块儿的传输,数据块的传输是在三次握手完成之后的事情;
- 采用两次握手可能会出现失效情况,客户端发出的连接请求没有收到服务器的确认(没有第二次握手),于是经过一段时间后,客户端又重新向服务器发送新的连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,客户端第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到服务器,服务器以为是客户端又发起的新连接,于是服务器同意连接,并向客户端发回确认,但是此时客户端根本不会理会,服务器就一直在等待客户端发送数据,导致服务器的资源浪费。三次握手是保证可靠的最小握手次数,再多次握手也不能提高通信成功的概率,反而浪费资源。
四次挥手,结合上图,请看如下过程:
- 客户端C向服务器S发起请求,表示客户端C没有数据要发送了:C——>S;
- 服务器S向客户端C发送信号,确认客户端C的断开请求请求:S——>C;
- 服务器S向客户端C发送信号,请求断开连接,表示服务器S没有数据要发送了:S——>C;
- 客户端C向服务器S发送确认信号,同意断开:C——>S。
服务器S收到确认信号,断开连接,而客户端在一段时间内没收到服务器的信号,表明服务器S已经断开了,于是客户端C也断开了连接。至此,完成挥手过程。
为什么需要四次挥手,第二第三次挥手能合并哇???
当然不可以!挥手和握手相似,确认断开过程,但是,挥手要多一个确认数据的断开,不仅仅是确认连接的断开,所以要比握手多一次。握手---->连接的建立;挥手---->连接的断开+数据的断开(多一次)。
HTTP协议----->连接管理的更多相关文章
- 转-HttpClient4.3 连接管理
转 http://www.yeetrack.com/?p=782 2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大 ...
- SOFA 源码分析 — 连接管理器
前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...
- Netty中的连接管理
连接管理是我们首先需要关注的,检测空闲连接以及超时对于及时释放资源来说是至关重要的.由于这是一项常见的任务,Netty特地为它提供了几个ChannelHandler实现. 用于空闲连接以及超时的Cha ...
- 和我一起学《HTTP权威指南》——连接管理
连接管理 1.TCP连接 几乎所有的HTTP通信都是由TCP/IP承载的. 浏览网页时客户端执行的操作: 如浏览http://www.joes-hardware.com:80/power-tools. ...
- httpclient 连接管理器
连接操作器 连接操作是客户端的底层套接字或可以通过外部实体,通常称为连接操作的被操作的状态的连接. OperatedClientConnection接口扩展了HttpClientConnection接 ...
- Netty(六):Netty中的连接管理(心跳机制和定时断线重连)
何为心跳 顾名思义, 所谓心跳, 即在TCP长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不可靠性, 有可 ...
- 5G RRC——为NAS层提供连接管理,消息传递等服务; 对接入网的底层协议实体提供参数配置的功能; 负责UE移动性管理相关的测量、控制等功能
from:http://www.cnblogs.com/kkdd-2013/p/3868676.html 1 RRC协议功能 为NAS层提供连接管理,消息传递等服务: 对接入网的底层协议实体提供参数配 ...
- TCP系列07—连接管理—6、TCP连接管理的状态机
经过前面对TCP连接管理的介绍,我们本小节通过TCP连接管理的状态机来总结一下看看TCP连接的状态变化 一.TCP状态机整体状态转换图(截取自第二版TCPIP详解) 二.TCP连接建立 ...
- TCP系列02—连接管理—1、三次握手与四次挥手
一.TCP连接管理概述 正如我们在之前所说TCP是一个面向连接的通信协议,因此在进行数据传输前一般需要先建立连接(TFO除外),因此我们首先来介绍TCP的连接管理. 通常一次完整的TCP数据传输一般包 ...
随机推荐
- Nginx (一) 认识Nginx并进行安装
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
- Maven的下载、安装与环境配置
在创建一个项目时,搭建环境往往是编写具体代码的先决条件,而获取到所有需要的jar包是其中的重中之重.起初,人们在需要jar包的时候总会在网上四处查找,而且如果不知道某jar包版本的更迭,写出的代码或许 ...
- Sql Server 里的向上取整、向下取整、四舍五入取整的实例!
http://blog.csdn.net/dxnn520/article/details/8454132 =============================================== ...
- 关于linux命令ssh的总结
因为项目计算量比较大,需要将任务分布到多台电脑上面运行,因为对于分布式概念不熟,就想到了linux最简单的ssh协议,远程控制其他电脑,然后写shell脚本统一在所有电脑上运行程序.(我的操作系统为U ...
- egrep及扩展正则表达式 与正则表达式不同处
egrep及扩展正则表达式与正则表达式不同处 正则表达式有两类,分为基本正则表达式和扩展正则表达式,是使用命令egrep来使用扩展正则表达式,它与grep很多功能相同,仅在元字符上实现了些扩展扩展,在 ...
- JS中金额转换以及格式化
abs = function(val){ //金额转换 分->元 保留2位小数 并每隔3位用逗号分开 1,234.56 var str = (val/100).toFixed(2) + ''; ...
- Python爬虫——城市公交、地铁站点和线路数据采集
本篇博文为博主原创,转载请注明. 城市公交.地铁数据反映了城市的公共交通,研究该数据可以挖掘城市的交通结构.路网规划.公交选址等.但是,这类数据往往掌握在特定部门中,很难获取.互联网地图上有大量的信息 ...
- mysql目录迁移 更改mysql的存储目录
元旦节刚过完回来,忙了一天,现在的时间剩余不是很充足,所以更新简短的文章一篇! 正文: 正常情况下mysql的存储目录都是在/var/lib/mysql/下的,那么怎么将存储位置改到/data_mys ...
- 一种基于http协议的敏感数据传输方案
最近公司需要通过公网与其它平台完成接口对接,但是基于开发时间和其它因素的考虑,本次对接无法采用https协议实现.既然不能用https协议,那就退而求其次采用http协议吧! 那么问题来了!在对接的过 ...
- JS文本框每隔4个数字加一个空格,银行卡号文本框
<input type="text" onkeypress="return (function(key,that){return (key>47&&a ...