zoukankan      html  css  js  c++  java
  • WireShark

    http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

    选择网卡  在菜单栏中的Capture-->Interfaces中也可以选择

    设置时间的格式

    对某一个tcp端口进行数据抓包,点击绿色的开始按钮后,需要再点击右侧的apply

    1. ip.src==192.168.0.2 and ip.dst==192.168.0.233 and tcp.port==965  

    风暴英雄的数据抓包

     ip.dst ==24.105.29.30 or ip.dst==24.105.29.76 or ip.dst==223.252.234.20

    搜索info列

     https://serverfault.com/questions/192720/how-can-i-search-the-info-column-in-wireshark

    抓包结果说明

    http://www.xianren.org/net/wireshark-q.html

     tcp segment of a reassembled PDU

    https://ask.wireshark.org/questions/58186/tcp-segment-of-a-reassembled-pdu

    It means that

    • Wireshark/TShark thinks it knows what protocol is running atop TCP in that TCP segment;
    • that TCP segment doesn't contain all of a "protocol data unit" (PDU) for that higher-level protocol, i.e. a packet or protocol message for that higher-level protocol, and doesn't contain the last part of that PDU, so it's trying to reassemble the multiple TCP segments containing that higher-level PDU.

    For example, an HTTP response with a lot of data in it won't fit in a single TCP segment on most networks, so it'll be split over multiple TCP segments; all but the last TCP segment will be marked as "TCP segment of a reassembled PDU".

    6. Sequence number: 2186017225 显示为该包序列号的空际值

    • Sequence number: 1 (relative sequence number),显示为该包序列号的相对值,这个数字用来表示一个TCP片段。这个域用来保证数据流中的部分没有流失(随机生成)

    7. Next sequence number: 2186017427

    • Next sequence number: 203 (relative sequence number) 
      分析同上,下一个序列号(在实际传输中并未有此数据,是Wireshark 提供的,= Sequence number + TCP Segment Len)

    8. Acknowledgment number: 1090536281

      • Acknowledgment number: 1 (relative ack number)
      • 确认号为1: 这个数字式通信中希望从另外一个设备得到的下一个数据包的序号

    TCP参数描述

    http://blog.csdn.net/u011414200/article/details/47948401

    在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG

    1. SYN(synchronous建立联机) 表示建立连接

    2. ACK(acknowledgement 确认) 表示响应

    3. PSH(push传送) 表示有 DATA数据传输

    4. FIN(finish结束) 表示关闭连接

    5. RST(reset重置) 表示连接重置

    6. URG(urgent紧急)

    7. Sequence number(顺序号码) Acknowledge number(确认号码)

    其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接

    • TCP的几次握手就是通过这样的ACK表现出来的, 但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接
    • RST一般是在FIN之后才会出现为1的情况,表示的是连接重置

    • 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接

    • PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递

    • TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的

    Sequence Number是针对自身的,所在数据段(数据包)的。表示所在数据段的第一个数据字节的序列号, syn(这一步是初始化发送端的ISN( Initial Sequence Number )。理论上,它的数据字段没有任何值,消耗的是一个虚字节)

    Seq和Ack的关系(重点)

    1. Seq即Sequence Number,为源端(source)的发送序列号;Ack即Acknowledgment Number,为目的端(destination)的接收确认序列号

    2. 在Wireshark Display Filter中,可使用tcp.seq或tcp.ack过滤

    3.

    在Packet1中,C:5672向S:80发送SYN握手包,Seq=0(relative sequence number);

    在Packet2中,S:80向C:5672发送ACK握手回应包,Ack=1(relative sequence number),同时发送SYN握手包,Seq=0(relative sequence number);

    在Packet3中,C:5672向S:80发送ACK握手回应包,Seq=1,Ack=1。(C:Client S : Server)

    4.

    至此,

    Seq=1为C的ISN(Initial Sequence Number),后期某一时刻的Seq=ISN+累计发送量(cumulative sent);

    Ack=1为C的IAN(Initial Acknowledge Number),后期某一时刻的Ack=IAN+累计接收量(cumulative received)。

    对于S而言,Seq和Ack情同此理

    例:Next sequence number: 733 (relative sequence number) , 
    假如我现在的sequence number =1 , 那么这个 733 = 1 + 732 , 732 正好是我应用的报文大小。

    后面的发送报文,假如我的sequence number不是733 ,wireshark就会提示 out of order . 
    A–>B Sequenace number =1, Next Sequence Number = 733, Acknowledgement number=1 
    B–>A ….. 
    A–>B Sequence number =733 这里,sequence number必须为733 ,否则wireshark 报out of order, Next Sequence number= 926 Acknowledge number = 23

    SLE和SRE

    http://blog.csdn.net/season_hangzhou/article/details/48318599

    SLE: Sequence Left Edge of already acknowledged data when Selective Acknowledgments are used. 即已收到tcp数据的左边界。
    SRE: Sequence Right Edge of already acknowledged data when Selective Acknowledgments are used. 即已收到tcp数据的右边界。

    SACK在数据丢包需要重传时起作用。

    比如,服务器已发送的数据为1~34454个包,

    但是,客户端只收到了“1~22774,28614~34454”这些序列的包,也就是说“22775~28613”这些包已经丢了。

    这个时候,客户端会向服务器请求发送回馈包,说我收到了seq为22774的包,同时也乱序收到了"SLE为28614,SRE为34454"的包。

    那么,服务器就知道,接着从seq=22775的包开始发送,发送到seq=28613的包的时候,就不用在发送seq=28614的包了,因为客户端已经收到了。
    如果ACK中不带SLE和SRE会怎样呢?那服务器就会重发从"22775"开始之后的所有的包,包括其实客户端已经收到的"28614~34454"序号的包,那就浪费网络带宽了,不是么。

    TCP Window

    http://blog.sina.com.cn/s/blog_987e00020102wq60.html

    [TCP zerowindow]  发送方没法暂时没办法发送数据

    TCP包中的“win=”代表接收窗口的大小,即表示这个包的发送方当前还有多少缓存区可以接收数据。

    当Wireshark在一个包中发现“win=0”时,就会给它打上“TCP zerowindow”的标志,表示缓存区已满,不能再接受数据了。

    比如图8就是服务器的缓存区已满,所以通知客户端不要再发数据了。我们甚至可以在3258~3263这几个包中看出它的窗口逐渐减少的过程,即从win=15872减小到win=1472。

    [TCP window Full]  发送方暂时没办法接收数据

    当Wireshark在一个包中打上[TCP window Full]标志时,就表示这个包的发送方已经把对方所声明的接收窗口耗尽了。

    以图9为例,Britain一直声明它的接收窗口只有65535,意味着Middle East最多能给它发送65535字节的数据而无需确认,即“在途字节数”最多为65535字节。

    当Wireshark在包中计算出Middle East已经有65535字节未被确认时,就会发出此提示。至于Wireshark是怎么计算的,请参考本书的《计算“在途字节数”》一文。

    [TCP window Full]很容易跟[TCP zerowindow]混淆,实际上它们也有相似之处。

    前者表示这个包的发送方暂时没办法再发送数据了,

    后者表示这个包的发送方暂时没办法再接收数据了,

    也就是说两者都意味着传输暂停,都必须引起重视。

  • 相关阅读:
    误删除pycharm项目中的文件,如何恢复?
    Python/PHP 远程文件/图片 下载
    Python 字节与字符串的转换
    Python中的Json模块dumps、loads、dump、load函数介绍
    Python 连接数据库失败
    Python 模块搜索路径
    Python 操作 PostgreSQL 数据库
    从shell(终端)中退出python
    URL 传参中需要处理的特殊字符
    PHP 命名空间和自动加载
  • 原文地址:https://www.cnblogs.com/chucklu/p/4900627.html
Copyright © 2011-2022 走看看