tcp的连接状态及tcpdump

本文介绍了TCP连接的各种状态及其含义,包括LISTENING、SYN-SENT、SYN-RECEIVED等,并提供了如何使用netstat、lsof、tcpdump等工具检查TCP连接状态的方法。此外还讲解了ping、traceroute、nslookup等网络测试命令的用途。
摘要由CSDN通过智能技术生成
###命令-查看tcp状态
netstat -nat  查看TCP各个状态的数量
lsof  -i:port  可以检测到打开套接字的状况
sar -n SOCK 查看tcp创建的连接数
tcpdump -iany tcp port 9000 对tcp端口为9000的进行抓包


##关于tcpdump的用法
host,net,port,
例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.


src , dst ,dst or src, dst and src 
这些关键字指明了传输的方向。src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。


fddi,ip,arp,rarp,tcp,udp   协议类型
Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。


gateway, broadcast,less,greater,
还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&;或运算 是'or' ,'||';
-i指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,
-c指定要监听的数据包数量,
-w指定将监听到的数据包写入文件中保存
-n 不对地址解析
-v/-vv/-vvv 不同程度的详细信息输出


想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 


如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2


如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
tcpdump tcp port 23 host 210.27.48.1


###网络测试用的命令
ping:检测网络连接的正常与否,主要是测试延时、抖动、丢包率。
         对方的IP地址和TTL;
traceroute:raceroute 跟踪数据包到达网络主机所经过的路由工具
nslookup:用于解析域名,一般用来检测本机的DNS设置是否配置正确。


###tcp状态




LISTENING:侦听来自远方的TCP端口的连接请求. 
最主要的是看本机开了哪些端口,这些端口都是哪个程序开的,关闭不必要的端口是保证安全的一个非常重要的方面,服务端口都对应一个服务(应用程序),停止该服务就关闭了该端口;


SYN-SENT:客户端SYN_SENT状态
正常情况下SYN_SENT状态非常短暂,连接成功了ESTABLISHED;
有很多SYN_SENT出现,一般几种情况,一是你要访问的网站不存在或线路不好,二是用扫描软件扫描一个网段的机器,也会出出现很多SYN_SENT,三可能中了病毒了,例如中了"冲击波",病毒发作时会扫描其它机器,这样会有很多SYN_SENT出现。
 
SYN-RECEIVED:服务器端状态SYN_RCVD
当标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂,很多SYN_RCVD状态,机器有可能被SYN Flood的DoS(拒绝服务攻击)攻击了


ESTABLISHED:代表一个打开的连接。
netstat -nat |grep 端口或者使用lsof  -i:端口可以检测到。


FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认


FIN-WAIT-2:从远程TCP等待连接中断请求
半关闭的状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态


CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
2MSL状态  TIME_WAIT2发送了最后一个ACK数据报以后,要进入TIME_WAIT状态,这个状态是防止最后一次握手的数据报没有传送到对方那里而准备的(注意这不是四次握手,这是第四次握手的保险状态)。这个状态在很大程度上保证了双方都可以正常结束,服务器给出了一个平静时间的概念,这是说在2MSL时间内,虽然可以重新启动服务器,但是这个服务器还是要平静的等待2MSL时间的过去才能进行下一次连接。


CLOSED:没有任何连接状态


客户端的状态可以用如下的流程来表示:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED


服务器的状态可以用如下的流程来表示:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED


如果一方已经关闭或异常终止连接,而另一方却不知道,我们将这样的TCP连接称为半打开的
解决意外中断办法都是利用保活机制。而保活机制分又可以让底层实现也可自己实现;
keepalive的原理就是TCP内嵌的一个心跳包,
以服务器端为例,如果当前server端检测到超过一定时间(默认是 7,200,000 milliseconds,也就是2个小时)没有数据传输,那么会向client端发送一个keep-alive packet(该keep-alive packet就是ACK和当前TCP序列号减一的组合)


对于应用程序来说,2小时的空闲时间太长。因此,我们需要手工开启Keepalive功能并设置合理的Keepalive参数。
全局设置可更改/etc/sysctl.conf,加上:
net.ipv4.tcp_keepalive_intvl = 20
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值