【T10】记住,TCP__IP不是轮询的
1、TCP/IP协议栈无法将连接的丢失立即通知应用程序.
TCP为什么不提供这种通知机制,不这么做的优点和缺点,应用程序怎么检测链接的丢失。
2、TCP为什么不提供连接丢失即时通知的功能?
a、其他通信协议,比如SNA和X.25,在连接丢失的时候会通知应用程序。他们是如何做到的?
他们的策略是轮询发送显示报文"有东西要发给我吗?" 或者采用后台静态帧的形式,不断地监视虚电路的状况,
这意味着要消耗一定的网络带宽。这是原因之一。
b、还有哲学方面的考虑,上层协议不应该对下层协议做任何假设,TCP只是负责发送数据报.
应用程序根据需求,来决定是否检测连接的丢失。
c、还有一个重要的原因,和TCP/IP的主要设计目标有关:出现网络故障时维护通信的能力。
TCP/IP的起源是美国国防部要求,出现战争或者自然灾害等严重网络故障,也能维护可靠通信的网络协议。
也就是说,网络故障往往是暂时的,路由器会重新找到一条路径,可以认为具备自动修复的功能.
这种暂时的连接丢失,再应用程序还没有意识到的时候就已经恢复好了。如果连接丢失立即通知应用程序,反而不是所期望的。
3、如何检测连接的丢失呢?
4、TCP的保活机制,是为了检测长时间没有交互的死连接,并且丢弃这些连接。
TCP/IP协议栈运行在系统内核,独立于应用程序。如果对等应用程序终止或者崩溃,内核中的TCP/IP协议栈会发送fin包,
表明我不再向对端发送数据了。
如果对等应用程序所在的主机崩溃,运行在内核中的TCP/IP协议栈也立即退出了,来不及发送fin包。
如果到达对等主机,但是应用程序没有运行,内核中的TCP/IP协议栈发送rst包。
5、TCP的保活机制涉及到时间间隔,要求是至少2个小时的默认空闲时间,然后发送9次探测信号,每次间隔75秒。
这就意味着TCP的保活机制要2个多小时以后才能检测到连接丢失。
这两个时间间隔可以修改,但是这种修改是全局的,会影响到所有的TCP连接。
如何时间间隔设置太短,就违背了它清除长时间死连接的最初目标。
另外,TCP保活机制不仅检测死连接,还丢弃这些连接,这往往不是应用程序所期望的。
6、那么问题来了,应用程序如何检测连接的丢失呢?
在应用程序添加心跳,设置心跳的频率,已经多久收不到心跳信号,认为连接丢失了。
7、还有另外一种办法,思路是使用一条新的连接来发送心跳信号,也就是一条连接来检测另一条连接,看起来很奇怪,但是非常合理。 因为,对于网络故障或者系统崩溃,这两条连接要么都受到影响,要么都不会。具体实现往往是:启动一个新的线程用于心跳控制。
8、TCP没有提供连接丢失即时通知应用程序的功能,但是在应用程序可以很方便地构建这种机制。
【T10】记住,TCP__IP不是轮询的的更多相关文章
- 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...
- HTTP的长短连接、长短轮询的区别(转载)
引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...
- WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】
一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的ke ...
- 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制
Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...
- HTTP协议中的短轮询、长轮询、长连接和短连接
HTTP协议中的短轮询.长轮询.长连接和短连接 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接 ...
- 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
作者:伯乐在线专栏作者 - 左潇龙 http://web.jobbole.com/85541/ 如有好文章投稿,请点击 → 这里了解详情 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此 ...
- 谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...
- websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发
https://code.google.com/archive/p/phpwebsocket/source/default/source The WebSocket API (WebSockets) ...
- js轮询及踩过的坑
背景 下午四点,天气晴朗,阳光明媚,等着下班产品:我希望页面上的这个数据实时变化开发:···,可以,用那个叫着WebSocket的东西,再找一个封装好框架,如:mqtt(感觉自己好机智)产品:要开发好 ...
随机推荐
- python 全栈开发,Day56(jQuery的ajax)
昨日内容回顾 事件流: 1.事件捕获 从最外层到最内层 2.事件目标阶段 3.事件冒泡 从最内层到最外层 每个事件都会事件对象 event 属性和方法 属性: event.target 目标节点(冒泡 ...
- 自己实现一个和PYTHON的库一模一样的sha_256算法
同时在看一本书<从零开始-自己动手写区块链>, 这书讲得易懂,我也动手实践一下. 这个算法和python3本身的实现相同, 所以,同样的字串,摘要是相同的. import struct i ...
- Codeforces 1041F Ray in the tube (看题解)
Ray in the tube 感觉是套路题.. 如果确定一个差值x我们如何取确定答案呢, 我们把a[ i ] -> a[ i ] % (2 * x), 把b[ i ] -> (b[ i ...
- Matrix PKU 2155
问题描述 给定N * N矩阵A,其元素为0或1.A [i,j]表示第i行和第j列中的数字.最初我们有A [i,j] = 0(1 <= i,j <= N). 我们可以通过以下方式更改矩阵.给 ...
- [OpenCV-Python] OpenCV 核心操作 部分 III
部分 III核心操作 OpenCV-Python 中文教程(搬运)目录 9 图像的基础操作 目标 • 获取像素值并修改 • 获取图像的属性(信息) • 图像的 ROI() • 图像通道的拆分及合并几乎 ...
- Python库资源大全
转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...
- Mongodb - 二进制安装
0.概述 mongodb版本:4.0.2 linux版本:redhat 6.5 安装方式:二进制安装 1.关闭防火墙 /etc/init.d/iptables status/etc/init.d/ip ...
- 学机器学习,不会数据处理怎么行?—— 二、Pandas详解
在上篇文章学机器学习,不会数据处理怎么行?—— 一.NumPy详解中,介绍了NumPy的一些基本内容,以及使用方法,在这篇文章中,将接着介绍另一模块——Pandas.(本文所用代码在这里) Panda ...
- 利用Solr服务建立的站内搜索雏形
最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...
- luoguP4709 信息传递 置换 + 多项式exp
感觉我的做法并不是最优做法... 考虑一个置换\(g\)中的一个置换环\(S\) 在\(g^n\)的形态中,它变为了\(gcd(n, |S|)\)个长度相同的置换环 那么,我们考虑对\(f\)的所有置 ...