为解决服务器TimeWait多的问题,了解了一下TCP/IP协议的连接过程。
以访问一静态页面为例,从建立连接到访问拿到数据,然后关闭的整个过程。使用EtherPeek截图如下:

 
图首为一次交互过程的总览,图中用圈圈+颜色标注了连接过程中数据的变化过程。非常清晰……
建立连接:
1. 发起请求的一方,从发送syn(递交名片)包开始第一次握手。
2. 收到请求的一方立马回应ack包,发现这是新建连接,然后也给出自己的syn包(递交名片)。(严重来讲,任何一方收到对方数据之后都会回应一个ack表示自己已收到)
3. 发起方收到响应后回应一个ack包。(整个过程注意sequence number的变化)
4. OK。建立互信,可以开始交往!
开始通讯:
1. 客户端(发起方)向服务端(应答方)发起Http请求,如图中Packet 4 :C=GET URI=/higkoo。
2. 服务端收到请求后立马回应了ack,并告诉客户保持连接等待传输数据。
3. 紧接着服务端就向客户端返回了Http响应数据。
4. OK,通讯完成!
关闭连接:
1. 此时,到了图中的Packet 7。客户端收到响应数据返回了ack包并发起了关闭连接的请求。(fin包代表我要关闭)
2. 服务端也真够快,立马就回应ack包:“好,我收到你要关闭的请求了”。
3. 服务端认为可以关闭了,然后也向客户端发起了关闭请求。(fin包)
4. 客户端立马也回应ack包:“嗯,我们关闭吧”。
5. OK,游戏结束!

 

HTTP协议建立连接、通讯与关闭连接全过程的更多相关文章

  1. Mybatis 打开连接池和关闭连接池性能对比

    1  创建数据库表 -- phpMyAdmin SQL Dump -- version 4.2.11 -- http://www.phpmyadmin.net -- -- Host: localhos ...

  2. 未释放资源的教训,开发MongoDB连接一定要关闭连接

    废不少工夫将数据存储,全部迁移至mongodb,未作大量改动则是主因. 但遇到奇怪的现象. 程序跑起不久后,mongodb即假死,另起客户端想登陆mongodb都不成. 要重启mongodb服务器才好 ...

  3. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  4. TCP/IP协议的建立连接与关闭连接过程

    一.建立连接(三次握手) 第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认.SYN:同步序列编号(Synchronize Sequence ...

  5. 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

    看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章 ...

  6. TCP采用四次挥手关闭连接如图所示为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

    tcp四次挥手,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭. 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个 ...

  7. TCP的三次握手(建立连接)和四次挥手(关闭连接)

    参照: http://course.ccniit.com/CSTD/Linux/reference/files/018.PDF http://hi.baidu.com/raycomer/item/94 ...

  8. TCP的三次握手(建立连接)和四次挥手(关闭连接)(转)

    转自:(http://www.cnblogs.com/Jessy/p/3535612.html) 参照: http://course.ccniit.com/CSTD/Linux/reference/f ...

  9. 【转载】TCP的三次握手(建立连接)和四次挥手(关闭连接)

    建立连接: 理解:窗口和滑动窗口TCP的流量控制 TCP使用窗口机制进行流量控制 什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包 ...

随机推荐

  1. 有关于OpenGL、OpenGL ES、WebGL的小结

    转自原文 有关于OpenGL.OpenGL ES.WebGL的小结 一.   OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的编程接口 ...

  2. TortoiseSvn安装的时候,将svn的命令行工具单独隔离出来

    https://stackoverflow.com/questions/2967176/where-is-svn-exe-in-my-machine The subversion program co ...

  3. Centos7 zabbix3.4.6的安装部署 (一)

    部署zabbix主要为了监控日常主机.服务器.Web服务器.数据库.路由器.交换机等日常设备,功能强大,稳定性好 现在通过使用虚拟机VM搭建的Centos7部署zabbix服务 实现简单监控功能 本章 ...

  4. 2015北京网络赛 Couple Trees 倍增算法

    2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 q ...

  5. customErrors 元素(ASP.NET 设置架构)

    1.适用版本:.NET Framework 4 2.元素定义:为 ASP.NET 应用程序提供有关自定义错误消息的信息. 可以在应用程序文件层次结构中的任意级别上定义 customErrors 元素. ...

  6. Network Stack‎ : Disk Cache

    Disk Cache 目录 1 Overview 2 External Interface 3 Disk Structure 3.1 Cache Address 3.2 Index File Stru ...

  7. Conventions and patterns for multi-platform development

    For Developers‎ > ‎Design Documents‎ > ‎ Conventions and patterns for multi-platform developme ...

  8. 做raid1 经验总结

    背景: MHP 3楼一台ThinkServer  TS200 老服务器做RAID1,硬盘为: 2块3T RAID 设定里显示: 制作RAID1  只有700G多点可做. 系统安装: 可以正常在700G ...

  9. angularjs input使用ng-model双向绑定无效bug解决

    一.问题描述 当我们给input双向绑定变量的时候,使用ng-model有时候会出现无效的情况 二.解决办法 将绑定的变量写成对象的形式 控制器定义变量: $scope.inputText = {va ...

  10. TCP简单说|(上)

    本文在Creative Commons许可证下发布 TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人 ...