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数据传输一般包 ...
随机推荐
- bzoj 3207: 花神的嘲讽计划Ⅰ
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: "哎你傻不傻的![hqz:大笨J]" "这道题又被J屎过了!!" "J这程序 ...
- iOS学习——iOS常用的存储方式
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.根据要存储的的数据的大小.存储性质以及存储类型,在iOS和An ...
- URL加载页面的过程
总体过程: 1.DNS解析 2.TCP连接 3.发送HTTP请求 4.服务器处理请求并返回HTTP报文 5.浏览器解析渲染页面 6.连接结束 一.DNS解析 在互联网中,每一台机计算机的唯一 标识是他 ...
- DCL的失效:现实与初衷的背离
最近看了Brian Goetz写的一篇有关DCL的文章:Double-checked locking: Clever, but broken.( 2001年发表于JavaWorld上) 这篇文章讲述了 ...
- Mac下持久化路由配置
缘由 mac 下有个小命令,networksetup,之前电脑装了IKEv2 的VPN,每天能正常FQ,由于所有流量都走了VPN隧道,导致了公司内部的其它网络无法访问得到,必须每次的来回拨VPN,断V ...
- python Is 与== 的坑
以前看过一篇python技术贴,说用is替代==,这样更加pythonic?然后我就能把用'=='的地方用'Is'替代,结果程序运行结果的偏差很大,甚至完全不同.后来发现,Is与==使用上是有区别的. ...
- Solr 管理界面删除所有数据
https://my.oschina.net/lcdmusic/blog/326698
- Python中将函数作为另一个函数的参数传入并调用
在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用 在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除, ...
- 微信跳一跳Python
微信最新的小程序里面出了个叫“跳一跳”的小游戏,大神们也通过Python实现了自动玩游戏具体代码 如下: Github地址: https://github.com/wangshub/wechat_ju ...
- [Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台
随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一.在未来MQTT会进 ...