针对TCP连接异常断开的分析

        我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接;通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接;然后,两者就可以基于这个socket连接通信了。连接结束后,客户端(进程)会退出;在不需要继续处理客户请求的情况下,服务器(进程)也将退出。而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套接字,这里将触发TCP的四次挥手进而关闭一个socket连接。但是,在一些异常的情况下,譬如:服务器进程终止、服务器主机奔溃/奔溃后重启、服务器关机的情况下,客户端向服务器发起请求的时候,将会发生什么呢?下边,我们来看看这几种情况。

        注意:一下描述的各种情况所使用的示例程序在文章的最后贴出

   ], recvline[, , , fp) !=) == , , )) < , &stat, WNOHANG)) > , )) > && errno ==)) < ) < ); } close(c); } }

更多相关文章
  • 关键字:linux 服务器 无法建立TCP连接 时间戳 net.ipv4.tcp_timestamps一.情况表现为    1.在公司内网对站点的http访问:        linux主机出现故障:curl以及抓包分析,发现服务端不响应linux客户端的请求,无法建立TCP连接,浏览器返回“无法连 ...
  • 服务器tcp连接timewait过多优化及详细分析
    [背景说明]在7层负载均衡上,查询网络状态发现timewait太多,于是开始准备优化事宜整体的拓扑结构,前面是lvs做dr模式的4层负载均衡,后端使用(nginx.or haproxy)做7层负载均衡[优化效果]修改前,建立连接的有29个,timewait的就达到了900个,如下图所示修改后,建立连 ...
  • TCP连接三次握手和四次断开分析
    该变量控制每个监听端口接收的客户端发送的SYN队列的长度,输入的SYN报文段连接请求需要排队,直到本地服务端接收,如果连接数多于默认值,则新来的 连接请求会被丢弃,在服务端会维护一个未连接队列,该队列为每个客户端发送的SYN包开设一个条目,说明已经收到SYN包,并且向客户端发出 SYN+ACK包,等 ...
  •  1.修改TCP默认 TCP 连接痴呆保持是 120 小时,也就是 5 天,可以通过tcp连接超时来断开sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600 2.用Iptablesiptables -I INPUT ...
  • 用tcpdump和wireshark分析tcp连接过程
    虽然很早就学习过TCP/IP协议,但是由于工作这两年都是在做算法方面的事情,没有实战过网络编程,对于TCP/IP仍然有些雾里看花的感觉.这两天复习了一下这方面的知识,算是给即将到来的新工作热热身.这篇文章就通过一个简单例子介绍如何使用tcpdump和wireshark分析tcp数据包. 一 tcpd ...
  • 原文地址:http://www.cnblogs.com/coser/archive/2010/12/05/1968812.html 一.实验目的 实验1_1: 使用Freebsd/Linux操作系统下的C编译器和网络程序的调试方法,掌握TCP连接建立和终止以及调整缓冲区大小的方法. 实验1_2: 使 ...
  • 文章转自:http://network.51cto.com/art/201408/449186_all.htm,如需转载请标明出处.我们通过了解 TCP各个状态 ,可以排除和定位网络或系统故障时大有帮助.一.TCP状态LISTENING :侦听来自远方的TCP端口的连接请求 .首先服务端需要打开一个 ...
  • 背景:前些天团队在进行终端设备和服务器端长连接业务的测试时,发现了这么一个情况:在拔掉设备端的网线后,再插上网线,有时可以继续正常的进行长接连请求,而且用的还是拔掉网线之前的那个长连接.但是有时却不能继续正常的长连接请求,需要重新建立一个新的长连接.让我尤感诧异的是第一种网线断开再插上后长连接可以恢 ...
一周排行