【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没有提供连接丢失即时通知应用程序的功能,但是在应用程序可以很方便地构建这种机制。
时间: 2024-08-07 00:22:32

【T10】记住,TCP__IP不是轮询的的相关文章

HTTP协议中的短轮询、长轮询、长连接和短连接

HTTP协议中的短轮询.长轮询.长连接和短连接 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协

误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默

HTTP的长短连接、长短轮询的区别(转载)

引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默

Cacti的设置以及Spine轮询器

Cacti的设置 接着上一篇的cacti系列讲解,在配置选项中有两个子项目,Settings和Plugin Management.我们点击Settings后,出现以下界面. 我们看到上图中,箭头指向的地方,我们可以针对这些项目进行设置. 首先我们看一下"General",通用配置,配置的内容主要有以下几项 日志 SNMP相关的设置 其他配置 其实这里基本上不需要进行修改,保持默认的配置即可.如果需要修改,也就是"Required Tool Versions"和&qu

apache日志轮询cronolog安装配置

centos安装很简单 yum install epel-release yum install cronolog 然后配置虚拟主机 [[email protected] ~]# vim /opt/app/apache/conf/extra/httpd-vhosts.conf (虚拟主机配置文件) # # <VirtualHost *:80> ServerAdmin sadoc.blog.51cto.com DocumentRoot "/var/www" ServerNam

springBoot(18):多账号轮询发送邮件

一.添加依赖 <!-- mail --> <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-mail</artifactId> </dependency> 二.配置application.properties文件 #############################mail配置#

利用ajax短轮询+php与服务器交互制作简易即时聊天网站

主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 本文主要介绍ajax短轮询的简易实现方式. 看懂此文需要:ajax基础,php基础,sql基础,html/jquery基础 ---------------------------- 本人也是web新手,今天听说女票在学websocket,还做了个简易的网站利用广播和我通信.但是刷新一下数据就没了.. 我觉得这个还是挺有意思的,,就想着能不能做一个刷新

框架基础:ajax设计方案(二)---集成轮询技术

上一篇文章介绍了ajax技术核心方法,和跨域的问题(只要后台支持跨域默认post就可以),这篇文章讲解一下使用ajax实现的轮询技术,至于iframe,SSE服务器单向推送,以及webSocket双工通道暂时不涉及. 一些概念: 短轮询:浏览器通过循环或者setTimeout方法,每隔一段时间往后台发送一次请求,无线循环 长轮询:不停的向后台请求数据,但是后台如果检测不到数据变动,就会将这个请求挂掉.如果检测到数据变动,就会响应这个请求变动数据 区别概念: 长连接:在进行http数据传输的时候,

php+ajax长轮询实现web即时聊天

web im的实现方式有很多种: 1.普通轮询,原理通过js定时重复发送ajax请求服务端,获取数据后显示. 2.长轮询,ajax请求服务端,服务端有数据会立即返回,服务端无数据时,会一直等待,直到有数据了才立即范围. 3.socket长连接. 特征分析: 方法1:实现起来最容易,定时重复请求服务端会产生无意义的http连接,消耗服务端资源,实时性较差. 方法2:实现起来较容易,会减少无效的ajax请求产生的http连接,能即时返回数据,但服务端会一直挂着,会消耗一定的资源,处理并发能力不强,比