美文网首页初见TCP/IP专题
TCP/IP - 以太网协议帧分析

TCP/IP - 以太网协议帧分析

作者: 帅气的程序员工作的时候 | 来源:发表于2020-05-31 21:46 被阅读0次

    一、简介

    我们平时在工作中,经常会遇到网络不通的情况,通常都通过ping命令来查看结果。比如下图:


    图1.1 - ping命令

    那么 ping www.baidu.com 发生了什么?这里就不得不学习一下以太网协议帧。
    建议阅读者先准备好wireshark抓包工具以及阅读TCP/IP详解 卷1:协议P - 链路层。准备好一定知识后,我们再来一步一步分析,深入浅出。

    二、抓包分析

    我们先从实战入手,慢慢过渡到理论。通过wireshark抓包。图1.1中我们ping baidu,得到的IP地址是 183.232.231.172。下面我们根据这个IP地址来分析。


    图2.1 - 以太帧格式

    如图2.1所示,我们通过wireshark抓包后,通过命令

    ip.addr == 183.232.231.172
    

    过滤出来一些报文,这些报文协议都是ICMP协议。

    那么什么是ICMP协议?

    ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

    ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。

    ping , traceroute 都是基于ICMP协议来实现的。

    那么ICMP和以太帧有什么关系呢?

    图2.2 - 以太帧层次关系

    从上图我们get到:

    • 前同步码:第一个字段是7个字节的前同步码,1和0交替,作用是用来使接收端的适配器在接收MAC帧时能够迅速调整时钟频率,使它和发送端的频率相同。
      帧开始定界符:第二个字段是1个字节的帧开始定界符,前六位1和0交替,最后的两个连续1表示告诉接收端适配器:“帧信息要来了,你准备接收把。

    • MAC 目的地址:第三个字段是6字节(如:FF,FF,FF,FF,FF),发送方的网卡(MAC)地址,用处是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同则会进一步处理,不同则直接丢弃。

    • 源MAC地址:发送端的MAC地址同样占6个字节。
      类型:该字段在网络协议栈分解中及其重要,考虑当PDU(协议数据单元)来到某一层时,它需要将PDU交付给上层,而上层协议众多,所以在处理数据的时候,必须要一个字段标识我这个交付给谁。

    • 数据:数据也叫有效载荷,除过当前层协议需要使用的字段外,即需要交付给上层的数据,以太网帧数据长度规定最小为46字节,最大为1500字节,如果有不到46字节时,会用填充字节填充到最小长度。

    • 帧检验序列FCS(使用CRC校验法):检测该帧是否出现差错。

    可见IP协议帧是包含在MAC以太帧中的,而ICMP协议帧是包含在IP协议帧中的。下面我们具体一层一层抽丝剥茧的分析。

    • MAC协议帧头


      图2.3 - MAC头
    BeijingX_8c:9c:bc (8c:53:c3:8c:9c:bc)
        Destination: BeijingX_8c:9c:bc (8c:53:c3:8c:9c:bc)  # 6字节目标地址
        Source: Apple_10:8c:d9 (f0:18:98:10:8c:d9)          # 6字节源地址
        Type: IPv4 (0x0800)                                 # 上一层协议类型
    
    • IP报文帧头


      图2.4 - IP报文
    Internet Protocol Version 4, Src: 192.168.31.206, Dst: 183.232.231.172
        0100 .... = Version: 4 # IPv4
        .... 0101 = Header Length: 20 bytes (5) # IP报文头部长度,20个字节。
        Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) # Service Type
            0000 00.. = Differentiated Services Codepoint: Default (0)
            .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
        Total Length: 84 # 整个IP报文长度
        Identification: 0xbc83 (48259) # 该报文ID
        Flags: 0x0000
            0... .... .... .... = Reserved bit: Not set
            .0.. .... .... .... = Don't fragment: Not set
            ..0. .... .... .... = More fragments: Not set
        Fragment offset: 0
        Time to live: 64
        Protocol: ICMP (1) # 协议类型
        Header checksum: 0x3e1a [validation disabled]
        [Header checksum status: Unverified]
        Source: 192.168.31.206 # 源IP
        Destination: 183.232.231.172 # 目标IP
    
    • ICMP协议帧


      图2.5 - ICMP协议帧
    Internet Control Message Protocol
        Type: 0 (Echo (ping) reply) # 类型 1字节
        Code: 0  # 1字节
        Checksum: 0xb290 [correct] # 校验和2字节
        [Checksum Status: Good]
        Identifier (BE): 17160 (0x4308) # 当前帧ID 2字节
        Identifier (LE): 2115 (0x0843)
        Sequence number (BE): 1 (0x0001)  # 当前帧序号 2字节
        Sequence number (LE): 256 (0x0100)
        [Request frame: 124]
        [Response time: 10.763 ms]
        Timestamp from icmp data: May 30, 2020 16:41:01.959589000 CST
        [Timestamp from icmp data (relative): 0.010859000 seconds]
        Data (48 bytes) # 内容,48字节
            Data: 08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f…
            [Length: 48]
    
    

    通过上述分析,我们抽象ICMP类型的IP报文如下:


    图2.6 - ICMP类型的IP报文

    学习总结、知识点

    1.以太帧报文 最小 64字节 = 14字节+46字节+4字节。
    2.以太帧报文 最大1518字节 = 14字节+1500字节+4字节。
    3.延伸阅读ICMP协议。

    三、遗留问题

    1. 目标的Mac地址如何查询到的,目标的IP地址是如何查询到的?
    2. 内网IP(192.168.31.206)如何与外网IP(183.232.231.172)通讯?

    我们带着上述问题,继续往后阅读;看是否能够找到答案。

    四、 结束语

    QQ群:383044387 ; 欢迎大家积极讨论,相互学些,共同进步。

    五、参考

    1.https://baike.baidu.com/item/ICMP

    相关文章

      网友评论

        本文标题:TCP/IP - 以太网协议帧分析

        本文链接:https://www.haomeiwen.com/subject/fslhzhtx.html