ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实战中学习TCPIP模型——互联网层

2020-12-19 17:33:33  阅读:169  来源: 互联网

标签:实战 via 16 0.0 route 0.200 互联网 172.16 TCPIP


文章目录

实战中学习TCP/IP模型——互联网层

学习一个复杂的概念,我有一些经验与大家分享。了解技术出现要解决的问题,知道解决这问题实施的步骤,列出技术的特点。也就是对自己的经典三问:Why? How ? Feature?

Why?

​ 互联网层最重要的协议是IP协议(Internet Protocol)。那么IP协议解决什么问题呢?我们知道,数据的传播分为单播,广播和组播。单播指向目标主机的MAC地址,广播则是对自身数据包进行标记,让所有主机都来处理。当前我国互联网用户超过8亿,如果每人1天发送1条广播,那么平均每人每分钟处理的广播数量为800,000,000/(3600*24),接近1万个广播。这无疑是对网络资源的巨大浪费,同时也无法防止滥发小广告式式的恶意骚扰。

​ 因此,既要保证单播正常运行,又要控制广播影响范围是互联网层要解决的基本问题,一代又一代的大佬们,都选择了IP协议。

HOW?

隔离广播——划分子网

​ 为了隔离广播,IP协议使用IP地址将整个互联网层划分成了多个子网,主机发送的广播只能在子网内。

范围寻址——路由表

​ 获取目标IP的mac地址的ARP服务是依赖广播的,广播被子网隔断后,如何获取其它子网的IP地址对应的mac地址就成了新问题。

​ 每个子网都有一个网关,承载它的网络设备一般是路由器。当ARP服务所需的IP不在子网内时,广播会被发送到网关路由器。路由器通过路由表,寻找目标IP对应子网段的路由器。这样广播就只在路由器间传递,同时又解决了实现单播所必须的ARP寻址问题。

#路由表查看
route -n

#路由表增加

#增加直连路由
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0

#增加默认路由
route add -net 0.0.0.0/0 gw 172.16.0.1
route add default gw 172.16.0.1			#推荐

#路由表删除
route del -net 192.168.122.0/24
route del default

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6wIr5j6-1608369479755)(https://i.loli.net/2020/10/28/U8Dbcjao1MSgZ7h.png)]

一个路由表通常是这样的,图中代表10.0.0.0/24,192.168.122.0/24这两个网段,网关为0.0.0.0,即可以直接发送广播;其它网段需要将数据包发送给10.0.0.2这台主机。

实战:使用三台Linux主机作为路由器,使得两台Linux主机,IP分别为172.16.0.100/16,172.22.0.100/16能够相互通信。

环境搭建

配置网段

克隆三台虚拟机,每台虚拟机增加额外1张网卡。VMware配置子网,vmnet3,vmnet4,vmnet5,vmnet6

网络名称网段
vmnet3172.16.0.0/16
vmnet4172.18.0.0/16
vmnet5172.20.0.0/16
vmnet6172.22.0.0/16
配置网卡

对五台主机配置双网卡,网络详情见下表。

主机名eth0eth1
CentOS610.0.0.6/24172.16.0.100/16
CentOS710.0.0.7/24172.22.0.100/16
R1172.16.0.200/16172.18.0.200/16
R2172.18.0.201/16172.20.0.200/16
R3172.20.20.201/16172.22.0.200/16

网络拓扑见图1-1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c05kbUWK-1608369479758)(https://i.loli.net/2020/12/14/9HOAcoQgtkdXWC2.png)]

​ 图1-1

通过修改配置文件/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1两份配置文件完成

配置完成后,应该验证同一网段的网络是否能够连通,以验证配置的正确性。

#CentOS6与R1的网络验证
#-c 执行一次
#-W 时间窗口为1s,指超过1秒后没有响应则认为响应超时。
ping 172.16.0.200 -c1 -W1

#R1与R2的网络验证
ping 172.18.0.201 -c1 -W1

#R2与R3的的网络验证
ping 172.20.0.201 -c1 -W1

#R3与CentOS7的的网络验证
ping 172.22.0.100 -c1 -W1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WVJcKh7O-1608369479759)(https://i.loli.net/2020/12/14/TVkFN8uR4yEvDQH.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DE81qhDN-1608369479760)(https://i.loli.net/2020/12/14/ze4HFTvLoOrdBiV.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvpaVQFr-1608369479761)(https://i.loli.net/2020/12/14/k9No8jyJ6lXCia7.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JE4hYdn5-1608369479763)(https://i.loli.net/2020/12/14/Fio7JgbjNaP1X5e.png)]

路由配置思路

主机172.16.0.100,主机名Centos6想要与主机172.22.0.100,主机名为Centos7通信,需要跨过的路由器R1,R2,R3,共172.16.0.0,172.18.0.0,172.20.0.0,172.22.0.0四个网段,配置路由表时要考虑这四个网段互通。

主机CentOS6

CentOS6应该要能与外网通信,与内网通信。

与外网通信,使用网关10.0.0.1/24,即宿主机作为NAT网关。

与内网的四个网段通信,172.16.0.0/16在与主机在同一网段,应该使用广播,即gw为0.0.0.0,与其它三个内网网段通信需要通过R1转发,与eth1直连的网卡为R1主机的eth0网卡,IP地址为172.16.0.200。

所以Centos6的路由表应该是

目标网关接口
default(与互联网通信)10.0.0.1eth0
172.16.0.0/160.0.0.0eth1
172.18.0.0/16172.16.0.200eth1
172.20.0.0/16172.16.0.200eth1
172.22.0.0/16172.16.0.200eth1
路由器R1

路由器应该能与外网通信,与内网通信。

与外网通信,可以通过CentOS6主机转发,所以使用网关172.16.0.100

与内网通信,也需要配置四个网段的路由表。

因为有两块网卡分别配置为172.16.0.0/16和172.18.0.0/16。所以这两个网段的通信是使用广播,无需配置,路由表会自动生成。所以仅需配置172.20.0.0/16和172.22.0.0/16。

后两个网段连接都是通过R2的网卡eth0,所以网关地址为172.18.0.201

目标网关接口
default(与互联网通信)172.16.0.100eth0
172.16.0.0/160.0.0.0eth1
172.18.0.0/160.0.0.0eth1
172.20.0.0/16172.18.0.201eth1
172.22.0.0/16172.18.0.201eth1
路由器R2

与外网通信统一走CentOS6,通过R1传输,所以网关为R1的eth1。

18网段和20网段为同一子网,不需要配置。

16网段需通过R1的eth1,22网段需通过R3的eth0,所以获取相应的IP地址即可

目标网关接口
default(与互联网通信)172.18.0.200eth0
172.16.0.0/16172.18.0.200eth0
172.18.0.0/160.0.0.0eth1
172.20.0.0/160.0.0.0eth1
172.22.0.0/16172.20.0.201eth1
路由器R3

R3的配置与R1对称,访问其余网段均通过R2的eth1网口172.20.0.200。

目标网关接口
default(与互联网通信)172.20.0.200eth0
172.16.0.0/16172.20.0.200eth0
172.18.0.0/16172.20.0.200eth0
172.20.0.0/160.0.0.0eth0
172.22.0.0/160.0.0.0eth1
CentOS7主机

与CentOS7主机对称,使用宿主机网关访问互联网,使用R3的eth1网卡与内网通信。

目标网关接口
default(与互联网通信)10.0.0.1eth0
172.16.0.0/16172.22.0.200eth1
172.18.0.0/16172.22.0.200eth1
172.20.0.0/16172.22.0.200eth1
172.22.0.0/160.0.0.0eth1

路由配置命令

route命令配置路由表(临时)
#route命令常见用法
#增
#增加默认路由
route add default gw 172.22.0.100
#增加网段
route -net 172.22.0.0/16 gw 172.22
#删
#删除默认路由
route del default
#删除网段
route del 172.22.0.0/16 gw 172.22.0.100
#改
#没有修改选项,只能删除后新增

#查
route -n

#route修改的路由表只在内存中,不能永久生效。
配置文件配置路由表(永久)
#配置文件/etc/sysconfig/network
#格式与ip命令配置路由表一致

#通往172.22.0.0/16网段,使用网关为172.18.0.201,后面的网卡可以省略
172.22.0.0/16 via 172.18.0.201 [dev interface]

#通往默认路由,使用网关为172.16.0.0
default via 172.16.0.0

配置过程

#CentOS6配置文件/etc/sysconfig/network-scripts/route-eth0
default via 10.0.0.1
#CentOS6配置文件/etc/sysconfig/network-scripts/route-eth1
172.18.0.0/16 via 172.16.0.200
172.20.0.0/16 via 172.16.0.200
172.22.0.0/16 via 172.16.0.200

#R1配置文件/etc/sysconfig/network-scripts/route-eth0
default via 172.16.0.100

#R1配置文件/etc/sysconfig/network-scripts/route-eth1
172.20.0.0/16 via 172.18.0.201
172.22.0.0/16 via 172.18.0.201

#R2配置文件/etc/sysconfig/network-scripts/route-eth0
default via 172.18.0.200
172.16.0.0/16 via 172.18.0.200

#R2配置文件/etc/sysconfig/network-scripts/route-eth1
172.22.0.0/16 via 172.20.0.201

#R3配置文件/etc/sysconfig/network-scripts/route-eth0
default via 172.20.0.200
172.16.0.0/16 via 172.20.0.200
172.18.0.0/16 via 172.20.0.200

#CentOS7配置文件/etc/sysconfig/network-scripts/route-eth0
default via 10.0.0.1

#CentOS7配置文件/etc/sysconfig/network-scripts/route-eth1
172.16.0.0/16 via 172.22.0.200
172.18.0.0/16 via 172.22.0.200
172.20.0.0/16 via 172.22.0.200

代码段
#CentOS6
cat <<EOF >>/etc/sysconfig/network-scripts/route-eth0
default via 10.0.0.1
EOF

cat <<EOF >>/etc/sysconfig/network-scripts/route-eth1
172.18.0.0/16 via 172.16.0.200
172.20.0.0/16 via 172.16.0.200
172.22.0.0/16 via 172.16.0.200
EOF

#R1
cat <<EOF >>/etc/sysconfig/network-scripts/route-eth0
default via 172.16.0.100
EOF

cat <<EOF >>/etc/sysconfig/network-scripts/route-eth1
172.20.0.0/16 via 172.18.0.201
172.22.0.0/16 via 172.18.0.201
EOF


#R2
cat <<EOF >>/etc/sysconfig/network-scripts/route-eth0
default via 172.18.0.200
172.16.0.0/16 via 172.18.0.200
EOF

cat <<EOF >>/etc/sysconfig/network-scripts/route-eth1
172.22.0.0/16 via 172.20.0.201
EOF

#R3
cat <<EOF >>/etc/sysconfig/network-scripts/route-eth0
default via 172.20.0.200
172.16.0.0/16 via 172.20.0.200
172.18.0.0/16 via 172.20.0.200
EOF

#CentOS7
cat <<EOF >>/etc/sysconfig/network-scripts/route-eth1
172.16.0.0/16 via 172.22.0.200
172.18.0.0/16 via 172.22.0.200
172.20.0.0/16 via 172.22.0.200
EOF

配置路由转发

路由表配置完毕后,重启主机

尝试在CentOS6与CentOS7通信

#CentOS7
ping 172.16.0.100 

image-20201219071846725

未能成功,在R1,R2,R3上抓包,确认包是否成功发送。

#R1 R2 R3
tcpdump -i eth1 -nn icmp

在R3上发现包已经发送,R1和R2没有接收到。这是因为使用操作系统并不是真正的路由器,在处理单波时,会自动丢弃不是发给本机的数据包。解决方式是修改内核参数net.ipv4.ip_forward

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNJxkhRG-1608369479764)(https://i.loli.net/2020/12/19/9bT5JsSFgjEW61N.png)]

临时修改net.ipv4.ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward

可以看到修改完后,R2立刻收到了数据包。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gs43WRLG-1608369479764)(https://i.loli.net/2020/12/19/BQV6RP3yOHuJiGL.png)]

当R1重新配置完后,再次从CentOS7尝试与CentOS6通信,发现已经成功。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgWH6aA6-1608369479765)(https://i.loli.net/2020/12/19/9tyjQdcBNvwGOC4.png)]

配置永久生效
#内核参数修改
#查看
sysctl -a | grep ip_forwad
#修改配置文件
#自定义配置文件为/etc/sysctl.d/xxx.conf,使用这种配置文件的好处是想要恢复为默认状态,直接将该文件删除即可
#默认的配置文件为/etc/sysctl.conf,不建议修改它。
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/env.conf

标签:实战,via,16,0.0,route,0.200,互联网,172.16,TCPIP
来源: https://blog.csdn.net/weixin_47588392/article/details/111407699

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有