tcpdump命令和三次握手四次挥手

tcpdump常用参数

! or not  #非
&& or and  #且
|| or or   #或
-i <网络接口>     
port <端口号> 
srcdst 目的 
<协议> #协议
-q     #精简输出
-nn  #主机名,服务名切换为IP,port
-w -r -c  #write read count
-v -vv   #详细输出,更详细输出
-X -XX   #16进制和ASCII码两种方式输出, 更详细输出

sample

tcpdump -i eth0 tcp port 22 dst host 10.11.1.1 and src host 10.11.1.2 #抓取网卡eth0,22端口,从10.11.1.1到10.11.1.2的tcp协议的数据包

TCP报文结构


URG Urgent,置1,紧急封包
ACK Acknowledge,置1,响应封包
PSH Push function,置1,立即传送缓冲区内对应封包
RST Reset,置1,链接马上结束
SYN Synchronous,置1,发送端请求建立链接
FIN Finish,置1,询问是否同意断开链接
窗口大小 描述接收端可提供的TCP数据包缓冲器大小

TCP三次握手与四次挥手

TCP是全双工的,即client向server发送信息的同时,server也可以向client发送信息。

在同主机的两个session中分别执行以下命令

tcpdump -i lo -w - | tee ./hello.cap | tcpdump -r -  
telnet localhost

三次握手


字段含义:时间戳;从本地临时端口38644向telnet;发起连接标志S;client初始包序号3961004360;窗口大小43690字节;选项[最大报文段长度65495;允许TCP单独确认非连续的片段,用于告知真正丢失的包,只重传丢失的片段;时间戳选项;无操作字段;窗口扩大选项];数据段长度
第一行(第一次握手):client端主动发起第一次握手,同步位syn=1,同时初始化序列号seq num=J;
第二行(第二次握手):server端SYN=1,ACK=1,确认号ack num=J + 1,同时自己初始化序列号seq=K;
第三行(第三次握手):client收到确认报文,SYN不再置1,ACK=1,确认号ack num = K + 1;
server端收到第三次握手的数据报文时,进入established状态,TCP连接建立。

四次挥手


第一行(第一次挥手):client发送结束报文字段,FIN = 1,seq num = M
第二行(第二次和第三次挥手):第二次--ACK = 1,seq num = M + 1;第三次--FIN = 1,seq num = N
第三行(第四次挥手):ACK=1,seq num = N + 1
为什么四次挥手只有三个包呢?因为TCP总是尽可能的捎带需要回复给对方的数据,所以第二个ACK就被第三个FIN捎带过来了。但是当主动方发起断开连接,被动方还有数据需要发送的时候,就会变成先ACK再发送完数据,再FIN。

参考链接

tcpdump参数解析及使用详解
tcpdump详解
vbird-封包撷取功能
理解TCP和UDP
聊聊tcpdump与Wireshark抓包分析

猜你喜欢

转载自www.cnblogs.com/yexuesong/p/9165392.html