单臂路由实现三层路由数据包转发及数据包格式分析

2024-02-12 04:18

本文主要是介绍单臂路由实现三层路由数据包转发及数据包格式分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


在7242+8328的板子上面,WAN口:port3,LAN口:port2,port4。其端口连接可参见我以前的文章。
eth0上面的ip地址动态获取,用作外部WAN上网的接口,与此通信的数据包不加VLAN头。
eth0.2 :用作内部LAN接口.IP地址固定,数据包经过LAN口时自动添加或者去掉VLAN头。
WAN和LAN之间是不通的。
说明:192.168.100.244为WAN口所接PC IP,192.168.1.20为LAN口所接PC IP。
---------------------------R8327 switch-配置命令如下-----------------------------------------------------
ifconfig eth0 up
ssdk_sh  vlan entry create 2 
ssdk_sh portVlan ingress set 0 fallback
ssdk_sh portVlan ingress set 2 fallback
ssdk_sh portVlan ingress set 4 fallback
ssdk_sh vlan entry append 2 2 0,2,4 0,2,4 default default default default
ssdk_sh portvlan defaultCVid set 2 2
ssdk_sh portvlan defaultCVid set 4 2
ssdk_sh portvlan egress set 0 untagged
ssdk_sh portvlan egress set 2 untagged
ssdk_sh portvlan egress set 4 untagged
上面的命令是对AR8327 switch进行的有关VLAN方面的配置。即port0,port2,port4由于同一个VLAN,其VLAN
ID=2。数据包出端口时不带VLAN ID。

---------------------------主CPU AR7242-配置命令如下-----------------------------------------------------
vconfig add eth0 2
ifconfig eth0.2 hw ether 00:03:7F:FF:FF:F2 up

ifconfig eth0.2 192.168.1.2
udhcpc -i eth0 -p /var/run/udhcpc_wan.pid -s /etc/udhcpc.script 
iptables -t nat -A POSTROUTING  -o eth0 -j MASQUERADE 
echo 1 > /proc/sys/net/ipv4/ip_forward 

主要是通过vconfig添加VLAN及配置dhcpc及三层数据包经过时的NAT规则。

------------------------------------测试1: dhcp上网-------------------------------------------
/ # ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:03:7F:FF:FF:FF  
          inet addr:192.168.100.3  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::203:7fff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2382 (2.3 KiB)  TX bytes:2012 (1.9 KiB)


eth0.2    Link encap:Ethernet  HWaddr 00:03:7F:FF:FF:F2  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::203:7fff:feff:fff2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:734 (734.0 B)  TX bytes:492 (492.0 B)


lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
WAN接PC1,PC1的ip地址为:192.168.100.244,在PC1上面ping 192.168.100.3 ,在7242+8328的板子eth0上面抓包如下:
00:02:25.389238 IP (tos 0x0, ttl 128, id 61845, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.100.244 > 192.168.100.3: ICMP echo request, id 1280, seq 256, length 40
        0x0000:  0003 7fff ffff e839 3538 9e4a 0800 4500
        0x0010:  003c f195 0000 8001 fee2 c0a8 64f4 c0a8
        0x0020:  6403 0800 475c 0500 0100 6162 6364 6566
        0x0030:  6768 696a 6b6c 6d6e 6f70 7172 7374 7576
        0x0040:  7761 6263
00:02:25.389421 IP (tos 0x0, ttl 64, id 15814, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.100.3 > 192.168.100.244: ICMP echo reply, id 1280, seq 256, length 40
        0x0000:  e839 3538 9e4a 0003 7fff ffff 0800 4500
        0x0010:  003c 3dc6 0000 4001 f2b2 c0a8 6403 c0a8
        0x0020:  64f4 0000 4f5c 0500 0100 6162 6364 6566
        0x0030:  6768 696a 6b6c 6d6e 6f70 7172 7374 7576
        0x0040:  7761 6263
有上面的数据可知,与pc1(主机或者服务器)通信时没有VLAN头。
---------------------------------------------------------------------------------------------
LAN口接PC2,PC2的ip地址为:192.168.1.20,在PC2上面ping 192.168.1.2 ,在7242+8328的板子eth0上面抓包如下:
00:08:03.487572 IP (tos 0x0, ttl 128, id 253, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.1.20 > 192.168.1.2: ICMP echo request, id 512, seq 9728, length 40
        0x0000:  0003 7fff fff2 001a 4b8d 0305 8100 0002
        0x0010:  0800 4500 003c 00fd 0000 8001 b65d c0a8
        0x0020:  0114 c0a8 0102 0800 255c 0200 2600 6162
        0x0030:  6364 6566 6768 696a 6b6c 6d6e 6f70 7172
        0x0040:  7374 7576
00:08:03.487725 IP (tos 0x0, ttl 64, id 50979, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.1.2 > 192.168.1.20: ICMP echo reply, id 512, seq 9728, length 40
        0x0000:  001a 4b8d 0305 0003 7fff fff2 8100 0002
        0x0010:  0800 4500 003c c723 0000 4001 3037 c0a8
        0x0020:  0102 c0a8 0114 0000 2d5c 0200 2600 6162
        0x0030:  6364 6566 6768 696a 6b6c 6d6e 6f70 7172
        0x0040:  7374 7576
有上面的数据可知,与pc1(主机或者服务器)通信时有VLAN头其VLAN ID=2。        
---------------------------------------------------------------------------------------------        
同时在PC2上面ping 192.168.100.244,在eth0抓包如下:

00:15:34.482979 IP (tos 0x0, ttl 128, id 951, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.1.20 > 192.168.100.244: ICMP echo request, id 512, seq 42497, length 40
        0x0000:  0003 7fff fff2 001a 4b8d 0305 8100 0002
        0x0010:  0800 4500 003c 03b7 0000 8001 4fb1 c0a8
        0x0020:  0114 c0a8 64f4 0800 a55a 0200 a601 6162
        0x0030:  6364 6566 6768 696a 6b6c 6d6e 6f70 7172
        0x0040:  7374 7576
00:15:34.483077 IP (tos 0x0, ttl 127, id 951, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.100.3 > 192.168.100.244: ICMP echo request, id 512, seq 42497, length 40
        0x0000:  e839 3538 9e4a 0003 7fff ffff 0800 4500
        0x0010:  003c 03b7 0000 7f01 edc1 c0a8 6403 c0a8
        0x0020:  64f4 0800 a55a 0200 a601 6162 6364 6566
        0x0030:  6768 696a 6b6c 6d6e 6f70 7172 7374 7576
        0x0040:  7761 6263
00:15:34.483393 IP (tos 0x0, ttl 128, id 64339, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.100.244 > 192.168.100.3: ICMP echo reply, id 512, seq 42497, length 40
        0x0000:  0003 7fff ffff e839 3538 9e4a 0800 4500
        0x0010:  003c fb53 0000 8001 f524 c0a8 64f4 c0a8
        0x0020:  6403 0000 ad5a 0200 a601 6162 6364 6566
        0x0030:  6768 696a 6b6c 6d6e 6f70 7172 7374 7576
        0x0040:  7761 6263
00:15:34.483458 IP (tos 0x0, ttl 127, id 64339, offset 0, flags [none], proto ICMP (1), length 60)
    192.168.100.244 > 192.168.1.20: ICMP echo reply,id 512, seq 42497, length 40
        0x0000:  001a 4b8d 0305 0003 7fff fff2 8100 0002
        0x0010:  0800 4500 003c fb53 0000 7f01 5914 c0a8
        0x0020:  64f4 c0a8 0114 0000 ad5a 0200 a601 6162
        0x0030:  6364 6566 6768 696a 6b6c 6d6e 6f70 7172
        0x0040:  7374 7576

上面的数据包可以知道,一个内网的数据包经过NAT之后,一个ping包有“俩个去和俩个回”数据包。

这篇关于单臂路由实现三层路由数据包转发及数据包格式分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("