TCPHTTP的关系

首先简单地看看tcp,TCP连接是通过4个值来识别的:

  <源IP地址 源端口号 目的IP地址 目的端口号>

这四个值定义了一个TCP连接,两条不同的TCP连接中这四个值是不可能完全都相同的。

在第一篇中有一个简单的HTTP介绍,下面是一个比较完整的HTTP连接过程:

由此看出,http实际上是在tcp协议(建立连接通信)的基础上传输的,但是tcp有一些本身的机制阻止了http的性能:

   ①客户端发送一个请求到服务器,建立一个tcp连接是需要消耗一定的时间的,如果我们发送了上百个连接,那么这个时间就会大大增加。

  ②tcp是慢启动的,也就是说,在tcp连接刚刚建立起来的时候,传输的速度会被限制,假如传输成功,随着连接建立的时间推移,传输速度才会被提升。而在http是无状态的,每次客户端提出一个请求,都要重新建立一个连接。

  ③TCP中有一个Nagle算法,它鼓励把数据攒到了一定数量了再发包,而一般而言,http中一些小的报文,根本无法积累到那个数量,这样就造成了等待哪些永远都无法到来的额外数据造成的损失。

④tcp有一个运行机制,就是一个连接被关闭的时候,内存中会维护一个信息,在一定的时间范围内,不会创建一个具有相同地址和端口号的新连接。如果http请求被发送,那么端口有可能很快就会被耗尽,毕竟可以用的端口是有限的。

http的连接管理方式

在http中最简单的事务处理,就是串行事务处理了。假设一个页面有两张图片,客户端请求这个页面,一共要发起3个事务(串行地建立)。这种方式效率非常低,要经历三次慢启动和连接延时。

比起串行事务处理,并行连接处理事务的效率就要稍微好一些了,它将先发起一个连接,然后同时发起两个连接加载图片,但是这种方式,依然存在一个问题,就是发起了很多的连接,这样很快就会耗尽端口资源,并且带宽如果不是很宽,所有的连接都去竞争带宽,网页的加载速度就会很慢了。其实,并行连接,只是让人感觉快一点,因为它发起了和串行一样多的TCP连接,多次延迟和慢启动问题依然没有解决。

所以,一种持久连接被人制定出来。即一次,只打开一条tcp连接,在一个期待的时间范围内,这个连接不会被关闭,在此期间,所有的http事务都会在这条tcp连接中传输。这样就可以节约,由于tcp连接建立,带来的延迟和慢启动的问题了。但是由于,http是无状态的,期待时间并不是一个被承诺的值,这条连接随时都可能被关闭。一个客户端对任何服务器和代理最多只能维护两条持久连接,这样也是为了防止服务器过载。

在持久连接的基础上,http/1.1又进行了一个优化——允许建立一个请求管道。当第一条请求发出去后,可以放入多条请求,然后被连续的发送(不必等待响应报文到达就就发送下一条请求报文),这样大大优化了性能。这里应该注意如果我们不确定我们连接是持久的,就不该使用管道。客户端也要做好连接被随时关闭的准备,这意味着一些信息要被重新发送,这些信息不应该是像post这样的重要传输信息,假如我们在网上购物,提交了一份订单,但是因为管道被关闭的问题,post被再次发送,那么会造成一定的混乱。

什么时候连接会被关上?

第一种自然是tcp的正常关闭了。当一个事务被完成,两端会先关闭输出信道,客户端和服务器都告诉对方,没有更多的数据了之后,两端把输入信道也关闭了。这样连接就被关闭了。

而其他的连接关闭方式,就显得不是很美好了。比如:当一个客户端在写一个比较大的请求报文的时候,连接是空闲的,服务器认为连接已经没有用了,就会关闭连接了。有时候,客户端的网络出现了问题,连接被意外关闭了,但数据还在传输,服务器就要应对这种情况,尽量保证数据的完整性。

这里只是简单地描述了下tcp和http的关系,实际上它们在工作的过程中会遇到诸如网关,代理等因素影响,导致更麻烦的问题。不过一旦了解了这些概念,我们可以就可以更好地优化自己的站点了。

TCP和HTTP的关系的更多相关文章

  1. Http TCP/IP 协议的关系

    转自:http://www.cnblogs.com/ymy124/archive/2012/03/18/2404958.html 项目要求Web服务是高安全级别,在选择.net remoting,we ...

  2. tcp/ip协议栈调用关系图

    最近阅读了tcp/ip详解卷2,总结一下整个发送过程和接收过程 sendmsg \/ sendit \/ sosend(这一步将数据从用户空间拷贝到内核空间,并且会在这一步判断发送缓存空间是否充足,是 ...

  3. TCP UDP HTTP 的关系和区别

    TCP UDP HTTP 三者的关系: TCP/IP是个协议组,可分为四个层次:网络接口层.网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传 ...

  4. 门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结

    门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的 ...

  5. OSI七层和TCP/IP四层的关系、TCP与UDP、HTTP、Socket

    HTTP(应用层协议):超文本传输协议,HTTP协议是建立在TCP协议之上的一种应用. HTTP协议详细解释 2Http详解 TCP(面向连接的传输层协议):transmission control ...

  6. socket连接和TCP连接的关系

    我们在数据传输时,能够仅仅使用(传输层)TCP/IP协议,可是那样的话,假设没有应用层.便无法识别数据内容,假设想要使传输的数据有意义.则必须使用到应用层协议,应用层协议有非常多,比方HTTP.FTP ...

  7. TCP/IP, WebSocket 和 MQTT

    按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.M ...

  8. TCP/IP中最高大上的链路层简介(二)

    引言 对于程序猿来讲,似乎越接近底层,就越显得高大上.这也算是程序猿们的共同认知吧,虽然不是所有人.今天LZ就和各位一起探讨一下TCP/IP中最高大上的一层,也就是最底层的链路层. 这一层LZ了解的还 ...

  9. 【转】IP分片和TCP分段

    ZC: 由于 TCP中 MSS 的关系,TCP 不会造成 IP分片和TCP分段 ! 1.http://zhidao.baidu.com/link?url=YCnR8B-1EN4-cgauRtwa-iV ...

随机推荐

  1. sql 操作,

    SELECT * FROM dbo.tbl_Web_Photos AS pt LEFT JOIN dbo.tbl_Web_Friends AS fd ON pt.user_email=fd.AddEm ...

  2. Windows2008 Patching(打补丁)

    我们都知道Windows的服务器都需要打补丁的,要不然漏洞那个叫多啊.Windows的系列服务器打补丁无非就是两种方法: 1. 通过Internet打补丁: Go to control Panel-& ...

  3. 战胜忧虑<3>——学会接受不可避免的事实。

    学会接受不可避免的事实. 对必然的事情愉快地承受,就像杨柳承受风雨,水接受一切容器,我们也要承受一切事实. 故事: 在美国庆祝陆军在北非获胜的那一天,我接到国防部送来的一封电报,我的侄儿——我最爱的一 ...

  4. window下部署php_redis扩展

    关于redis的一些特性就不多说了,可以到这里去了解,or click me. 另外,给出一个redis中文API,点我. 首先要下载一个redis软件,可以到官网下载. 注意:官网提供的版本比较高级 ...

  5. 在指定路径下查找并打印mdb类型文件

    1 #encoding:utf8 import os fpath = 'D:\Download\LP传奇-麒麟传说\Date' rfile = '' files = [] mdbFiles = [] ...

  6. Zookeeper + Hadoop2.6 集群HA + spark1.6完整搭建与所有参数解析

    废话就不多说了,直接开始啦~ 安装环境变量: 使用linx下的解压软件,解压找到里面的install 或者 ls 运行这个进行安装 yum install gcc yum install gcc-c+ ...

  7. ADF_Database Develop系列2_通过UML数据库开发之将Logical UML转为Physical Models

    2013-05-01 Created By BaoXinjian

  8. DBA_Oralce Enterprise Manager OEM管理应用介绍(案例)

    2014-08-16 BaoXinjian

  9. C#实现局域网文件传输

    网络通信一般都是通过Socket进行的,称为进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄. 先学习一下socket基本原理: socket原理: ...

  10. java版的YUI3 combine服务-Combo Handler

    YUI3中,为了避免js文件过大,各个功能模块是拆分的.它有一个“种子”的概念:先下载一个小的核心的js文件到浏览器端,再通过这个小的js文件去加载其它所需的模块. 这种按需加载虽然解决了单个js过大 ...