简单的跨路由通信分析和理解

linux route 通信

简单的拓扑模型:
A —–1 R1 2—–3 R2 4——5 R3 6——-B

问题:

如果A 通过浏览器访问B机器上网站的页面
 firefox http://B

1、
判断A和B是否在同一网段
判断方法:
a、A先和自己的子网掩码进行与运算,算出自己的网络ID,
b、然后把B机器上的IP与自己的子网掩码进行与运算,算出B机器所在的网络ID
c、两个网络ID比较,如果一样就在同一网段,如果不一样,就不在同一网段。
如果A,B不在同网段,A就没有办法通过ARP协议把B机器的mac地址解析出来,

2、
因此A机器尝试把数据包发往R1路由器的网关

在A的机器上事先肯定配置了网关(默认网关)(gateway : R1 IP1)
A机器虽然知道R1的gateway的地址,但是不知道IP1的mac1地址
ARP IP1—> mac
A机器和R1路由器IP1在同一网段,可以使用ARP广播获取到IP1的mac1地址

A ARP cache:(IP1 MAC1)
得到 R1 IP1的mac1地址,A机器会把IP1和mac1的对应关系保存到ARP表中,下一通信直接查询ARP就可以了,不需要再次发送ARP请求了

3、
我们现在已经得到目标地址和源地址,可以填写数据包信息

数据链路层
frame:DEST MAC1, SOUCRE MACA,

internet层
IP:dest IP:IPB , source IP:IPA

传输层
TCP: dest port:80 , source port: xxx(random随机)

4、
数据包的信息填写完整后,就可以根据数据的DEST MAC1把数据包发送到R1上了

5、
R1收数据包,会根据包中的目标地址,查询自己的路由表
数据包要到达 netB网段
netB R1IP2 R2IP3
要到达netB 网络,数据包要从R1的IP2接口出去,要到达R2的IP3接口
因此R1要尝试把数据包发送到R2

ARP R2IP3 — MAC3

数据包头信息重新封装
frame:DEST MAC3, SOUCRE MAC2,
ip/TCP包头不变

6、
R2收到数据包会根据包中的目标地址,查询自己的路由表
数据包要到达 netB网段
netB R2IP4 R3IP5

ARP R2IP5 — MAC5

数据包头信息重新封装
frame:DEST MAC5, SOUCRE MAC4,
ip/TCP包头不变

7、
数据包到达R3
R3收到数据包会根据包中的目标地址,查询自己的路由表
发现R3和目标地址是直连
netB R3IP6 xxx
ARP IPB —> MACB

frame :dest macB ,source mac6
ip: dest IPB, source IPA
tcp: dest port22, source port xxxx

8、
数据包到达(一次通信完成)

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97604

(0)
linux_testlinux_test
上一篇 2018-05-06 14:20
下一篇 2018-05-06 15:25

相关推荐

  • 第一周作业

    本周作业 1、描述计算机的组成及其功能。 2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、rebo…

    Linux笔记 2018-05-12
  • xDroid——一款能够让Android应用程序运行在Linux中的软件

    Linux的生态环境,长久以来一直困扰着广大Linux爱好者。
    虽然Linux具有显著的稳定性、安全性和健壮性优势,但它对使用者计算机水平的高门槛要求,以及应用开发回报慢的问题,始终限制了应用开发者在Linux上的积极投入,由此带来了Linux环境下应用程序少、开发工具少、使用不方便等诸多问题。
    怎么能让Linux向Android一样,拥有数量众多的应用呢?

    Linux笔记 2018-07-02
  • 第5周

    整理

    Linux笔记 2018-04-30
  • 进程和计划任务

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 进程的状态:运行态running,就绪态ready,睡眠态(可中断,不可中断),停止态,僵死态。 进程管理工具 ps命令 ps aux #显示详细的当前运行的所有进程 ps axo pid, cmd,%cpu,tty,%mem k…

    Linux笔记 2018-05-05
  • ansible进阶小技巧

    用ansible写playbook的朋友可能会发现,当配置工作很多时,如果在中间过程出错了,修改后想重新执行,前面的一大堆步骤让人感觉很烦躁。虽然提供了“retry”文件,但是却只是根据host来判断重新执行,仍然不够方便;又或者,中间的某些步骤特别耗时,比如下载一个很大的数据包,每次执行特别浪费时间,想要特别的跳过。怎么办?我猜你就是把不需要的部分给注释掉…

    Linux笔记 2018-06-03
  • 相信过程-马哥教育

    IT工程师工作和学习都是比较枯燥的,过于目标化忽略了过程本身并不适合我,如果我来这里能使我全心全意投入到一段学习当中,我觉得来这里目标就达到了。其他的事情自然会水到渠成。 大家共勉!

    2018-07-21