服务器的情况

一.基于TCP套接字

 1. 服务器主机崩溃

  首先在不同的主机上运行客户端和服务器端,先启动服务器,在启动客户端。当连接建立后,从网络上断开服务器主机,这样同样模拟了客户发送数据时,服务器主机不可达的情况。

  当客户端输入数据,由客户端TCP当做一个数据分节发出,接下来客户端就阻塞于recv调用等待接收数据,当服务器主机崩溃,已有的网络连接上发不出任何东西,所以客户TCP使用重传机制继续重传该数据分节,试图从服务器接受一个ACK。源于Berkeley的重传数据分节的次数为12次,放弃前等待的时间约为9分钟,当客户TCP最后终于放弃重传时(设这段时间服务器没有重启,或者服务器主机没有崩溃而是网络不可答),会返回客户端进程一个错误,因为客户端阻塞于recv的调用,他返回一个错误,假设是由于服务器主机崩溃,对客户数据的分节根本没有相应,则错误为ETIMEDOUT,但是如果是某些中间路由器判定服务器主机不可达,而以一个目的不可达ICMP消息相应。

  尽管最终客户还是会发现对方已中断或不可达,但是要等待9分钟,然而有时想检测出这种崩溃状态,这就需要设置recv调用来设置超时时间来实现。

  而套接字选项SO_KEEPALVE,他可以在客户端不主动向服务器数据时也可检测出服务器主机是否崩溃。

 2.服务器主机崩溃后重启

  如果客户在服务器主机崩溃时不主动发送发送数据给服务器,客户是不会知道服务器已经崩溃,如果主机服务器崩溃后重启,它的TCP将丢失崩溃前的所有连接消息,所以服务器的TCP接受所有客户端的数据均相应RST。在客户端,当RST到达时,客户端正阻塞于recv导致ECONNRESET错误。

3.服务器主机关闭

  当系统关闭,一般由init进程给所有进程发信号SIGTERM(可以捕获此信号),等待一般固定时间(5-20s),然后给还在运行的进程发送sigkill(此信号不可捕获),这就给所有进程一小段时间来清除和终止。如果不捕获,则直接由SIGKILL终止

   当进程终止,所有打开的套接字都终止,讲给client发送一个FIN,客户响应ACK,但是当前客户正阻塞于fgets,等待从终端获取输入,获得数据后,客户端将数据发送给server,这时send会返回正确,因为send只是将数据发送给缓冲区,当server收到来自客户端的数据后,由于先前打开的套接字已经终止,所以服务器会以RST相应。client接收到RST不会直接传给应用层,客户进程在调用send后立即调用send,这时会收到服务器端先前发送的FIN,recv立刻返回0.(因为连接已经处于RST状态,则不再有数据发出,而是SIGPIPE一个信号给应用层)

二.基于UDP套接字

 1.服务器进程未运行

  当客户发送UDP数据报给一个未运行的服务器时,服务器主机会以“端口不可答”的ICMP消息相应,但是此ICMP错误并不会返回给客户端进程,所以客户端阻塞于recvfrom

时间: 2024-11-07 00:00:22

服务器的情况的相关文章

关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法

在网上找了半天解决办法,也没有找到,在此共享我自己的一个问题,不具有普遍性,仅作参考! 问题描述:MATLAB调用xlsread函数出现问题,第一次运行的时候,出现服务器异常,再次运行能够正常读取数据: 在调用xlswrite函数时,一直出现服务器异常状况,不能将数据写入excel表格中. 问题关键:不是MATLAB的原因,问题出在excel软件上! 问题解决:xlswrite函数在调用时会占用excel的com端口,所以要保证在调用时这个端口是开放的,也就是没有被其他程序占用.打开excel(

Jmeter 监控tomcat 服务器资源情况

在  /home/star/apache-tomcat-7.0.62/conf/tomcat-users.xml 添加  角色    <role rolename="manager-gui"/>   设置 tomcat 为管理员   <user username="tomcat" password="tomcat" roles="manager-gui"/> 检验是否生效 成功进入 即生效 ,可以看到

脚本监控当前服务器负载情况

#!/bin/bash #触发阈值发邮件还没有写. export PATH export LANG=zh_CN.UTF-8 #先配置好mailx邮箱账号密码: #cat>/etc/mail.rc<<"EOF" #set sendcharsets=iso-8859-1,utf-8 #set [email protected] #set smtp=smtp.163.com #set [email protected] #set smtp-auth-password=xxx

定时检查服务器情况脚本

写了个脚本,每天上班前运行,将检查结果报告E-mail给自己,转发到短信通知的外网邮箱,上班前就可知道有没有故障和服务器的情况了. 检查的内容不断完善,现在可知道考勤机.打印机.监控.UPS.路由器.交换机等全部有IP设备是否连通.文件共享服务器.网站等是否可正常访问.Windows服务器的启动时间.内存使用.硬盘可用空间等情况. 看邮件就对全部设备和服务器情况一目了然,不需逐个检查,在用户上班前就知道情况先. 检查是否连通用Ping返回结果,文件访问用FileExists,网站类检查InetR

服务器非正常退出情况

正常情况是啥?一方发送FIN,另一方相应,四次挥手,断开连接.但是就像生活一样,服务器也总有意外,以下是<Unix网络编程>中提到的服务器的四种常见的意外情况.客户端在服务器端出现意外情况下是什么状况,又该该如何处理呢? 首先给出整个网络的基本流程图.客户端从标准输入读入数据,发往服务器端,服务器接收到数据在发往客户端,正常情况下客户端将数据写标准输出,如此循环.其实就是个简单的echo服务器模型,<Unix网络编程>整本书都以此模型作为基础,下面将讨论服务器出错情况下,客户端的情

阿里云服务器,数据库热备、暖备、冷备实战-镜像篇(域环境下配置)

阿里云服务器 值得信赖 概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜像服务器角色”,这两种角色不是绝对的. 优点 l 增强了数据保护功能 l 提高了数据库的可用性 l 提高了生产数据库在升级期间的可用性 工作方式 在

MySQL数据库服务器搭建及基本管理

1.安装MySQL数据库 从官网下载RPM包:http://dev.mysql.com/downloads/mysql/ 选择适用于当前系统的bundle集合包 [[email protected] 桌面]# tar -vxf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar -C /opt/mysql/ MySQL-shared-5.6.15-1.el6.x86_64.rpm   //共享库 MySQL-devel-5.6.15-1.el6.x86_64.rpm

ntp服务器被反射放大攻击的处理方法

前言: 首先说明下什么是反射放到攻击? NTP是用UDP传输的,所以可以伪造源地址.NTP协议中有一类查询指令,用短小的指令即可令服务器返回很长的信息.放大攻击就是基于这类指令的.比如,小明以吴一帆的名义问李雷"我们班有哪些人?" 李雷就回答吴一帆说"有谁谁谁和谁谁谁--"(几百字)那么小明就以8个字的成本,令吴一帆收到了几百字的信息,所以叫做放大攻击.网络上一般NTP服务器都有很大的带宽,攻击者可能只需要1Mbps的上传带宽欺骗NTP服务器,即可给目标服务器带来几

Redis未授权访问缺陷让服务器沦为肉鸡

阿里云的安全告警邮件内容: 在没有查到异常进程之前我是先把操作系统的带宽&端口用iptables 做了限制这样能保证我能远程操作服务器才能查找原因. 在各种netstat –ntlp  的查看下没有任何异常.在top 下查到了有异常进程还有些异常的这里就截图一个: 结果果断把进程给kill-9  了  没想到再去ps的时候又来了意思就是会自动启动它.这就让我想到了crond 这个自动任务果不其然/var/sprool/cron/root 这个文件被人做了手脚而且是二进制的,果断又给删除了,以为这