基本用法
|
|
分析
Flags[P.]:tcp包header部分的第14个字节的P位。
seq 1:54: tcp包的seq号,1是起始值,54是结束值。tcp之所以被认为是流,是因为tcp包锁携带的每一个字节都有标号(seq号)。1:54表明总共有54个字节被接受,其中一个字节是三次握手阶段所使用,所以一共发送的长度是53字节
ack 10: tcp包的ack号,ack101表明seq号为100的字节已被确认收到,下一个期望接收的seq号从101开始
win 255: win表示的是tcp包发送方,作为接受方还可以接手的字节数,这里win255表明ip为17.143.164.37的主机还可以接受255个字节
Options[nop,nop,…]: optins[…]表明的是该tcp包的options区域,nop是no operation的缩写,没什么实际用途,主要用来做padding,以为options区域按协议规定必须是4字节倍数
Options[… TS val 2381386761]: ts val这个值是tcp包的时间戳,不过这个时间戳和设备的系统时间没啥关系,刚开始是随机值,后面随着系统时钟自增长。这个时间戳主要用处是seq序列号越界从0重新开始后,可以确认包的顺序。
Options[… ecr 427050796] ts ecr这个值主要用来计算RTT。比如A发送一个tcp包给B,A会在包里带上TS val,B收到之后再ack包里再把这个值原样返回,A收到B的ack之后再根据本地时钟就可以计算出RTT了。这个值只在ack包里有效,非ack包ecr的值就为0
length 53: 这个length是应用层传来的数据大小,不包括tcp的header。这个值和上面seq 1:54中分析的是一致的。
TCP Flags:
CWR,ECE两个flag是用来配合做congestion control的,一般情况与应用层关系不大。发送方的ECE(ECN-Echo)为0的时候表示出现congestion,接收方回的包里CWR(congestion window reduced)为1表明收到congestion信息并做了处理。我们一般重点看其他6个flag
URG: URG代表Urgent,表明包的优先级高,需要优先传送给对方并处理。像我们平时用的terminal的时候常用ctrl+c来结束某个人物,这种命令产生的网络数据包就需要urgent
ACK: 也就是我们所熟悉的ack包,用来告诉对方上一个数据包已经成功收到。不过一般不会为了ack单独发一个包,都是在下一个要发送的pacet里设置ack位,这属于tcp的优化机制,详见delayed ack
PSH: 接收方接收到P位的flag包后需要马上将包交给应用层处理,一般我们在http request的最后一个包里都能看到P位被设置。
RST: Reset位,表明packet的发送方马上就要断开当前连接了。在http请求结束的时候一般可以看到一个数据包设置了RST位
FIN: Finish位设置了就表示发送方没有更多的数据要发送了,之后就要单向关闭连接了,接收方一般会回一个ack包。接收方再同理发送一个FIN就可以双向关闭连接了。
这8个flag首字母分别是CEUAPRSF,我们常见
[S][P][R][F][.]
,其中[.]是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack
示例
抓取本地
终端1
|
|
终端2
|
|
FAQ
1.tcpdump: ‘udp’ modifier applied to host
|
|