关于TCP/IP的状态

  作为一个网络程序员,我们经常会接触到ICP/IP协议,我们也知道其TCP/IP协议的重要性,不管是网路安全还是程序连接我们也经常会碰到些问题,于是自己梳理下,做个记录。
   抓包工具推荐IRIS可以抓TCP/IP/UDP/HTTP等数据包,个人觉得很强大。
   查看机器TCP/IP连接表  netstat -n  能看到当前TCP/IP连接情况,以及状态。
netstat -an 可以查看非激活和激活的TCP/IP状态
关于TCP/IP三次握手和状态可以观看本图片    

我们在使用netstat -n时就能看到当前端口的状态
状态转换图中状态的描述:
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据,也就是ESTABLISHED状态,我们每次netstat -a 时看到最多的状态。
在上述过程中,还有一些重要的概念: 未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
其中SYN,ASK是服务器客服端唯一标识使通信不被串掉
当然我们三次握手时可能会timeout也就是会产生如此状态,这对我们查问题比较有用SYN_SENT发送信号----FIN ---ITMED_WAIT --重试---close
到这里我们来理解下DOS攻击用TCP/IP语言我们可以称做SYN浑水,黑客一直去给服务器发SYN_SENT去握手,最后一直不去建立连接导致服务器一直在FIN ---ITMED_WAIT等待握手,并尝试N次连接如果期间不断发送就会造成很多连接导致服务器瘫痪。所以配置防火墙时要注意这些状况。注意:windows防火墙我们开放端口是要选择TCP还是UDP开放,如果选择错了连接也是无法进行的。

猜你喜欢

转载自whzhaha.iteye.com/blog/705098