gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_wireshark分析(传输层,网络层,链路层)...

本文主要是介绍gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_wireshark分析(传输层,网络层,链路层)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ed363464a54688392de6571ea9e073a3.png

wireshark抓包软件总是友善地帮包分层...

56351d8989a5693437b805ab25ba11a3.png

1.链路层。

Ethernet II协议即以太网协议。以太网帧的格式如下:

37716b6c0034ad9cb0d5eeb4e68722bc.png

这里的地址指的是MAC地址,每一个网卡对应唯一的MAC。 类型指的是IP、ARP...... 。CRC效验数据是否异常。

在wireshark 中,数据包的第二行指的是链路层协议。在Ethernet II中,SRC表示的是源地址。DST代表目的地址。Type(类型)为0x0800指IPv4协议,0x86dd IPv6协议数据,0x809B AppleTalk协议数据,0x8138 Novell类型协议数据等。0x0806ARP,0x0600 XNS (Xerox),0x6003 DECNET 。

帧结构,Ethernet II型帧前12字节分别标识出发送数据帧的源节点MAC地址和接收数据帧的目标节点MAC地址。接下来的2个字节标识出以太网帧所携带的上层数据类型。(两位16进制等于一字节)。最后是4字节CRC效验数据,采用32位CRC循环冗余校验对从"目标MAC地址"字段到"数据"字段的数据进行校验 。

2.网络层

IPv4协议。其报文的格式如下:

7f456da7ac6561d22aca5c0ee05c91a2.png

IPv4报文有首部和数据两部分组成。首部是固定长度,20字节,且所有IPv4报文所共有。数据部分字段可选,长度可变。

wireshark中帧字段的含义:

  • Version(版本):分为IPv4,IPv6。
  • Header Length:IPv4的首部长度。
  • Differentiated Services Field(区分服务):用来获得更好的服务, 用来指定特殊的数据包处理方式。
  • Total Length:指首部和数据的总长度。
  • Identification:IPv4在存储器中维持一个计数器,每产生一个数据包,计数器加一,把值赋给该字段。
  • Flags:目前只有两位有意义。最低位为1表示后面“还有分片”的数据报,为0表示这已经是最后一个数据片;中间一位为1表示“不能分片”,为0才允许分片。
  • 片偏移:13位,较长的分组在经过通信链路中因为分组过大进行分片,分片后在原分组中的相对位置。片偏移以8字节为偏移单位
  • Time to Live(生存时间):表示数据包在网络中的寿命,英文缩写是TTL(Time To Live),功能是“跳数限制”。
  • Protocol:指出此数据包携带数度的协议。
  • Header checksum(首部效验和):数据包每经过一个路由器,路由器都要重新计算一下首部检验和,若首部未发生变化,则此结果必为0,于是就保留这个数据报。这个字段只检验数据报的首部,但不包括数据部分。
  • Source:发送数据包方IPv4地址。
  • Destinatio:接受方IPv4地址。
  • 选项字段:1字节到40字节不等。长度可变,支持排错,测量,安全等措施

ARP协议

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

22bf4f095aaad149a7b1f45cfbcb481b.png

假设主机A和B在同一个网段,主机A要向主机B发送信息,主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全为0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

ARP详解​blog.csdn.net


arp在wireshark上的分析:

be0b1864df228ffa47930a596ae42d49.png

Hardware type(网卡类型):以太网(Ethernet)是1。我们常见的网络都是以太网

Protocol type:查询中提供的网络地址的类型,IPv4是0x0800。

Harware size:网卡地址长度,以太网网卡是6字节。

Protocol size:查询中提供的网络地址的的长度,IPv4是4字节。

Opcode:查询包值为1,响应包值为2。

Sender MAC address:发送者的Mac地址。

Sender IP address:发送者的IP地址。

Target MAC address:接收者的Mac地址,指向性查询包是MAC地址表中记录的mac,广播性查询包是00:00:00:00:00:00。(注意区分ARP头和Eth头,指向性查询包Eth头的dst mac是MAC地址表中记录的mac,而广播性查询包是ff:ff:ff:ff:ff:ff)。

Target protocol address:要查询目标的mac地址的ip。

3.传输层

TCP协议

TCP是一种面向连接的协议,很多应用层协议都使用TCP来确保文件在传输过程中不会出现丢包情况。TCP就像双向通信过程,不只发送方会参与通信,接受方也会主动参与到连接建立当中。TCP通信过程中,会执行一个三次握手的进程,以便在参与通信的两台主机之间创建出一条独立的通道。

TCP报文:
TCP报文头部

949e9008a4a8829bcbac8097eaf765fa.png

TCP报文分为头部和数据两部分。头部通常是20字节,但有时会因为选项增加。

下面我们来结合wireshark分析:

Source Port(源端口):指通信发送方使用的端口号

Destination Port(目的端口):通信接收方使用的端口号

Sequence number(序列号):确保数据可靠传输的一个唯一值。TCP使用序列号追踪每个数据段的传输情况

Acknowledgment number(确认号):接收端发送,提示发送端下一次该发的数据在整个文件中的序号。接收端收到后,会把这个序号之前的数据从缓存中删掉。

Header Length:头部长度也叫数据偏移

Flags(标记):

  • SYN(同步):发起连接的数据包,连接即握手进程
  • ACK(确认):确认接受到数据的数据包,也会用来发起和断开链接
  • RST(重置):数据包表示之前尝试建立的连接已被关闭或通信应用不接受连接
  • FIN(结束):终止连接的数据包,发送方和接收方都要通过FIN数据包终止连接
  • PSH(推送):数据包表示入住那数据包应该直接发送给应用,而不应该缓冲
  • URG(紧急):表示数据包中承载的数据应立即由TCP协议栈处理
  • CWR(拥赛窗口减小):数据包表示传输导致缓冲区已满或拥赛,通信各方应该降低传输速率,以免丢包

Window Size Value(窗口大小):这个字段表示的是发送方可以发送的数据总量。这个总量是在握手过程中决定的。在握手过程中,通信双方的主机匹配缓冲区大小。

Checksum(效验和):判断接受数据的完整性。可以让通信方确认TCP数据段中的内容是否发生变化了。

Urgent pointer(紧急指针):只有当 URG 标志置 1 时紧急指针才有效。TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

Options(可选项):包含三部分,1---标识可选项字段长度 2---标识数据包中的可选项 3---包含数据包中可选项。最常见的可选项字段是MSS(Maximum segment size)最长报文大小,每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。

TCP三次握手分析:

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:

fc2d431ee7febed71518aaccde63ff35.png

三次握手建立连接后才会传输数据(HTTP等)

然后我们通过wireshake分析(借鉴)

f4c867fa0cf377ddf1f154a0974464b4.png

红色方框为本机192.168.1.101和服务器47.95.165.112之间的三次握手协议。三次握手协议的过程为:

  1. 客户端通过TCP首部发送一个SYN包(seq=0)作为建立连接的请求等待确认应答。
  2. 服务器发送SYN/ACK包(seq=0,ack=1)确认应答
  3. 客户端发送ACK包(seq=1,ack=1)确认应答。

以下为链接:

wireshark分析TCP三次握手建立连接​blog.csdn.net

在所有数据传输完成后,客户端或服务器端会发送FIN/ACK数据包以终结这条连接。服务器也会对此作出反应。这个过程叫四次握手断开连接。

f2c2af17d05187ffb1e2d4c3d86ec807.png
  1. 服务器端向客户端发送FIN/ACK包
  2. 客户端接收后发送ACK包
  3. 服务器接收后发送FIN/ACK包
  4. 客户端接收后发送ACK包

异常TCP流量:

在某些环境下会出现RST(重置)数据包,其基本作用是为了标识用户尝试发起的链接意外中断了。服务器没有运行服务器后台程序,客户端则在尝试进行通信。导致客户端发送的每个SYN请求都收到了RST数据包。

恶意用户尝试在网络中执行端口扫描,防火墙用RST包对用户进行相应避免攻击。或者恶意用户寻找的端口已关闭

效验和的作用:当发送方准备传输数据包时,会计算出数据包所含数据的效验和,并且将效验和和数据一同发送。接受方收到后,用与发送方相同算法计算效验和。如果效验和一致,接收方接受,效验和不匹配则会丢弃数据包。但对效验和进行效验不能保证数据没有变化。携带无效效验和数据的数据包,会以黑色作为背景色,红色为前景色。在wireshark中禁止Validate checksum(在接口上关闭效验和卸载的特性)是为了防止网络混乱 。

PS:wireshark中追踪SYN包,tcp .flags=0×002

这篇关于gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_wireshark分析(传输层,网络层,链路层)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820483

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使