网络状态转换

Netstat状态分类
netstat -an命令查看!再stat下面有一些英文,简单说一下这些英文具体都代表什么:
LISTEN(Listening for a connection.)侦听来自远方的TCP端口的连接请求
SYN-SENT(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.)再发送连接请求后等待匹配的连接请求
SYN-RECEIVED(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.)再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED(Connection established.)代表一个打开的连接
FIN-WAIT-1(Closed; sent FIN.)等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2(Closed; FIN is acknowledged; awaiting FIN.)从远程TCP等待连接中断请求
CLOSE-WAIT(Received FIN; waiting to receive CLOSE.)等待从本地用户发来的连接中断请求
CLOSING(Closed; exchanged FIN; waiting for FIN.)等待远程TCP对连接中断的确认
LAST-ACK(Received FIN and CLOSE; waiting for FIN ACK.)等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT(In 2 MSL (twice the maximum segment length) quiet wait after close. )等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED(Connection is closed.)没有任何连接状态
TCP连接建立
首先要说明的是要明确TCP连接建立的过程需要3次握手,下面举例说明各种状态存在的时刻:
1. 首先在服务器A上开启FTP服务,开始侦听来自远端TCP端口的连接请求,这个时候查看服务器A状态为:LISTENING
2. 在客户端B上向A发送FTP连接请求,这个时候数据包同步位置1,这是TCP三次握手的第一步。在发送后没收到确认时,在客户端B上其状态为:SYN-SENT。此时客户端B启动连接定时器。如果在75秒内没有收到应答,则放弃连接建立。
3. 在服务器A上收到从B上发送的SYN同步包后,确认,然后再向B发送SYN的同步包,此数据包同时将TCP标记中的同步位和确认位置1,它既对第一步中的客户端同步数据包进行确认,表示愿意与客户端同步,同时再对客户端主机进行同步请求,这是TCP连接的第一步。这个时候在服务器A上,状态为:SYN-RECEIVED。此时服务器A启动连接定时器。如果在75秒内没有收到应答,则放弃连接建立。
4. 在客户端B上接收到从A上发过来的确认同步包后进行确认,此数据包中将TCP标记中的确认位置1,表示这是一个确认数据包,此时在客户端B状态转换为:ESTABLISHED
5. 服务器A接收到从B发过来的确认包后,状态转换为:ESTABLISHED
此时TCP连接正式建立。
TCP
连接关闭
6. 应用程序在在连接不需要的时候,通过客户端B向服务器A发送的终止信息的FIN包后,客户端B处于FIN-WAIT-1状态。
7. 从服务器A接收到客户端B发送的终止数据包,它告诉客户端B已成功接收客户端的上数据包,此时等待应用程序来关闭连接,此时服务器A进入CLOSE_WAIT状态。
8. 客户端B接收到带有确认位的数据包后,对此进行确认,同意关闭TCP连接此时客户端B转移到FIN-WAIT-2状态。当连接从FIN-WAIT-1状态转移到FIN-WAIT-2状态时,将一个FIN-WAIT-2定时器设置为10分钟。
9. 服务器A在应用程序同意终止连接后,向客户端B发送终止FIN包,此时服务器状态转为LAST-ACT
10. 客户端B在接收到从服务器A发送的终止包后,同意终止连接,然后再向服务器端发送确认信息,此时客户端B转向TIME-WAIT状态。当连接进入TIME-WAIT状态时,该定时器被激活。
11. 服务端A在收到客户端B的确认后,关闭连接,服务器A状态转向CLOSED
12. 客户端BTIME-WAIT定时器超时时,与该连接相关的内核数据块被删除,连接终止,转向CLOSED状态。
此时TCP连接正式关闭。备注
1. 一个由客户端发起的关闭TCP连接的示意图:
2. 连接终止请求对与建立连接的双方是可以同时发出的,在发出终止请求后,双方都进入FIN-WAIT-1状态,随着定时器的超时,双方都进入CLOSING状态,在这个定时器再次超时后,均转入TIME-WAIT状态,在TIME-WAIT的定时器超时后,双方均放弃这次连接,连接转为CLOSE状态。如图示:
服务器socket状态转换
更多相关文章
  • TCP连接建立和终止及TCP状态转换
    转载自:http://blog.csdn.net/delphiwcdj/article/details/8194354用户数据报协议(UDP)UDP是一个简单的传输层协议(RFC 768).进程往一个UDP套接字写入一个消息,该消息随后被封装(encapsulating)到一个UDP数据报,该UDP ...
  • TCP状态转换--值得学习--方便记忆
    转载:http://blog168.chinaunix.net/space.phpuid=20196318&do=blog&id=168206挺好的,方便记忆!!!实线:表示客户的正常状态转换 虚线:表示服务器的正常状态装换应用:表示状态转换在应用进程发起操作时发生接受:表示状态转换 ...
  • 网络状态都正常,ping网关能ping通,但不正常,出现,并且不能进行域名解析
    网络状态都正常,ping 网关能ping通,但不正常,出现"?",并且不能进行域名解析C:\Documents and Settings\Administrator>ping 192.168.1.1Pinging ? with 32 bytes of data:Reply ...
  • 收集网络状态(Ping),并用邮件通知管理员
    在没有第三方工具对网络进行监控的话,要检查网络中某台主机,或是某个IP地址通讯是否正常,我们通常用手动PING来进行测试. 有了PowerShell,我们可以用他定时Ping网络上的几个IP地址,然后把ping的个延时时间用邮件通知给指定的一个或多个管理员.如果达到设定的警报值,则用不同的颜色来警示 ...
  •    1,通过定时收发email检测网络连通性#/bin/bash echo "Daily test mail" > state.txt mail -s Server_State abc@md1.21.co.jp < state.txt rm -df ./state. ...
  • 完成项目的过程中,需要考虑用户是否有网络连接以及及时的检测网络状态,把用到的判断网络封装的方法分享给大家. (1)Reachability检测网络状态 .h文件中定义方法... #import <Foundation/Foundation.h>      #import "Re ...
  • #pragma mark 网络状态监测 -(void)checkNetworkStatus{     //创建一个用于测试的url     NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];     AFHTTPRe ...
  • 本博文为老男孩linu培训机构早期的培训教案,特分享以供大家学习参考.全部系列分为五篇文章,本博文为第五篇:5.1高并发linux生产服务器内核参数优化案例高并发linux生产服务器内核参数优化案例说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整.所 ...
一周排行
  • RHEL5服务篇—部署Postfix邮件系统四设置SMTP发信认证及别名机制
          SMTP发信认证的常见形式如下:当用户通过SMTP协议向外部邮件域发送邮件时, ...
  • shell的作用及常见的种类介于操作系统内核与用户之间,负责接收用户输入的命令指令并进行解释,即命令解释器Bsh 实现了最基本的命令解释功能,同时作为脚本程序语言Csh 因使用C语言风格而得名Ksh 由AT& ...
  • 今晨技痒,特赋七言绝句一首赠与中国IT博客大赛和51CTO,供诸位赏析.<赠2011中国IT博客大赛>群英争辉竞风流,博客围脖斥方遒.IT儿女多奇志,信息时代弄潮头!参赛感言:“雄关漫道真如铁,而今迈步从 ...
  • samba的安装步骤:1.查看是否已经安装了samba     [rpm -q samba]2.如果已经安装了samba,将其卸载  [rpm -e samba]3.把samba安装文件挂载到Linux下4.把sam ...
  • 最近在学习loopback,期间在strongloop的官网翻译了部分文章. 见:https://docs.strongloop.com/pages/viewpage.action?pageId=6095120
  • SVN搭建简单教程
    一.引言       笔者曾经试图在网上搜索一篇关于SVN源代码服务器搭建方面的中文技术文 ...
  • 自己写的,认为还不错!
  •    为了方便表示或是指定一个组件的名称,我们通常会使用id或者itemId进行标识命名.(推荐尽量使用itemId,这样可以减少页面唯一标识而产生的冲突) id:       id是作为整个页面的Component ...
  •  1.SHIFT+鼠标左键    先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样) 2.Shift+F8          调试时弹出CPU窗口. 3.Shift+F10         等于鼠标右键( ...
  • ## mysql 截取函数 left(),right(),substring(),substring_index()SELECT LEFT('www.baidu.com',3); # wwwSELECT RIGHT( ...