剖析两台电脑间通过互连网是如何具体通信的
2011-11-02 11:10
232 查看
剖析两台电脑间通过互连网是如何具体通信的
(设想PC1正向PC2发送包,并且路由器之间都运行了路由协议,比如OSPF,BGP)
为了使路由的一些细节问题更加明显,我们可以将路由看成3步的过程:
1.从源计算机上将数据发送给到某个邻近的路由器;
2.从邻近源计算机的路由器发送给邻近目的计算机的路由器;
3.从邻近目的计算机的路由器发送给目的计算机;
具体实施过程
A.PC1 需要知道它的邻近路由器。PC1首先通过自己配置好的缺省路由器或缺省网关获悉R1的IP地址。(缺省的路由器就是指那些主机要向不直接相连的子网中发送预定包的那个路由器)当然该主机还可以通过DHCP动态主机配置协议来了解R1的IP地址,现在我们可以假设路由器10.10.2.6是PC1配置的缺省路由器也就是R1以太网接口的IP地址;
B.PC1要获得其缺省路由器的MAC地址来封装自己的数据帧,然后将数据帧发给R1路由器。通过自己配置的缺省路由器R1的IP地址去ARP请求 R1的MAC地址(ARP的时候是将自己的源IP,源MAC,及请求路由器R1的IP地址去获悉请求路由器R1的MAC地址来作为自己数据帧的目的MAC地址),获得后用R1的MAC地址作为目的MAC地址来完成发送的数据帧的以太网头部,并将该要发出去的数据帧通过某种算法(FCS),将结果镶嵌在数据帧的尾部,将数据帧封好头尾后交由下一层物理层转换成比特流这种信号发给R1路由器;
C.R1的物理层收到这串比特流信号后,交由R1自己的数据链路层处理,发现
1.该收到的数据帧的目的MAC地址是R1自己本身;
2.这时检查数据帧的尾部FCS,发现数据帧在传的过程中完好,没有被破坏;
这时当这两个条件都满足后,将检测相应的协议类型字段,以便R1知道数据帧中数据部分是哪类包,是IP包,还是IPX等等;R1的数据链路层将该收到的数据帧的头尾都剥夺掉,将剩下来的数据包交由本身的上一层网络层处理,查看发现(目的IP是172.168.10.1,源IP是10.10.2.1,源MAC是PC1的MAC,)
发现数据包的目的IP不是自己,于是去匹配自己的路由表,发现去172.168.10.0这个网段是走自己的 E0/0/1 出去的,于是封上HDLC的帧头和尾,并生成FCS结果放至数据帧的尾部,然后发送给R2,在这个过程中因为HDLC的数据链路每次都是使用形同的地址字段,所以无需向前面那样去ARP请求R2的MAC来封装数据帧;
D.R2同样重复R1的动作,发现目的IP也不是自己,查本路由器的路由表,发现是从自己的E0/0/2出去,这时也是将数据包封上R2与R3这之间的internet链路上与R2相邻的路由器上所要封的协议类型(比如帧中继等),然后这样一直通过internet传到邻近目的计算机的路由器R3上
E.R3 收到数据帧后检查
1.该收到的数据帧的目的MAC地址是R3自己本身;
2.这时检查数据帧的尾部FCS,发现数据帧在传的过程中完好,没有被破坏;
这时当这两个条件都满足后,将检测相应的协议类型字段,以便R3知道数据帧中数据部分是哪类包,是IP包,还是IPX等等;R3的数据链路层将该收到的数据帧的头尾都剥夺掉,将剩下来的数据包交由本身的上一层网络层处理,查看发现(目的IP是172.168.10.1,源IP是10.10.2.1,源MAC是PC1的MAC,)
发现数据包的目的IP是自己管辖的网段内,于是去匹配自己的路由表,发现去172.168.10.1这个网段是走自己的E0/0/1,于是向自己的这个网段内的所有计算机ARP请求目的IP地址是172.168.10.1的MAC地址,收到后直接用收到的PC2的MAC地址封装数据帧然后交给目的主机PC2,PC2然后交由自己的应用层去处理,完后同样PC2回应PC1主机的过程也差不多和前面一样,到此整个通信就完成了!
注:
一.这里的A步骤里谈到了由自己配置的默认路由器去寻找其路由器的MAC地址来封帧时,我们可以看到在PC1这头会通过交换机相连多台路由器,故PC1就必须在这多台路由器上选一个作为自己的默认网关或则叫默认路由器吧来帮自己转发数据包!
二.我们做这个试验的时候是说路由器逐跳收到数据包后发现数据包不是给自己的,于是查看路由表,看是否有这个网段,从我的这台路由器的哪个接口才能正确的转发数据包,但有时在interner上的路由器不一定会通过路由协议在自己的路由表里找到这个网段,也就是说在它的路由表里找不到这么条路由网段,这时就需要默认路由了,它将数据包直接往自己的默认路由扔,交由其相邻的其他路由器去处理!自己不管了!而其他路由器在被逼无奈之下也会这么去做,所以说每台路由器上基本上都会配置这么条默认路由帮自己扔自己不认识的网段!
三.默认路由与静态路由是有区别的!(其共同点在于一旦你配好后路由到了这里的时候就确定下来了,我的下一跳应该是哪台路由器去继续转发数据包,除非你人为的去修改!)
1.默认路由的格式是:ip route-static 0.0.0.0 0.0.0.0 下一跳地址
2.静态路由的格式是:ip route-static 目标地址 目标地址的掩码 下一跳地址
3.默认路由因为其掩码是最小的(0),所以在路由器匹配路由时是最后才会去考虑的!
四.在PC1发给PC2的过程中不管经历了多少台路由器、交换机,其数据帧的源IP、源MAC、目的IP都不会变,唯一变得就是目的MAC地址,也就是在传数据包的过程中各台传替该数据包的路由器的MAC地址,(因为PC1不可能知道PC2的这个目标MAC地址的,否则也不用这么费劲了!就可以直接通信了!所以这里的目标MAC地址是实时在变得!而且是中间的传替路由器的MAC地址!)而PC2回应PC1的数据帧中是将源IP (也就是PC1的地址)换成了自己PC2的IP,源MAC换成自己PC2的MAC(也就是PC1的MAC地址),目的IP换成了PC1的IP地址!在传的过程中这前三个也都不会变,除非遭到破坏!变的也只有一个,那就是沿途的目标MAC地址!
转自菊花论坛 作者 雪山银貂
(设想PC1正向PC2发送包,并且路由器之间都运行了路由协议,比如OSPF,BGP)
为了使路由的一些细节问题更加明显,我们可以将路由看成3步的过程:
1.从源计算机上将数据发送给到某个邻近的路由器;
2.从邻近源计算机的路由器发送给邻近目的计算机的路由器;
3.从邻近目的计算机的路由器发送给目的计算机;
具体实施过程
A.PC1 需要知道它的邻近路由器。PC1首先通过自己配置好的缺省路由器或缺省网关获悉R1的IP地址。(缺省的路由器就是指那些主机要向不直接相连的子网中发送预定包的那个路由器)当然该主机还可以通过DHCP动态主机配置协议来了解R1的IP地址,现在我们可以假设路由器10.10.2.6是PC1配置的缺省路由器也就是R1以太网接口的IP地址;
B.PC1要获得其缺省路由器的MAC地址来封装自己的数据帧,然后将数据帧发给R1路由器。通过自己配置的缺省路由器R1的IP地址去ARP请求 R1的MAC地址(ARP的时候是将自己的源IP,源MAC,及请求路由器R1的IP地址去获悉请求路由器R1的MAC地址来作为自己数据帧的目的MAC地址),获得后用R1的MAC地址作为目的MAC地址来完成发送的数据帧的以太网头部,并将该要发出去的数据帧通过某种算法(FCS),将结果镶嵌在数据帧的尾部,将数据帧封好头尾后交由下一层物理层转换成比特流这种信号发给R1路由器;
C.R1的物理层收到这串比特流信号后,交由R1自己的数据链路层处理,发现
1.该收到的数据帧的目的MAC地址是R1自己本身;
2.这时检查数据帧的尾部FCS,发现数据帧在传的过程中完好,没有被破坏;
这时当这两个条件都满足后,将检测相应的协议类型字段,以便R1知道数据帧中数据部分是哪类包,是IP包,还是IPX等等;R1的数据链路层将该收到的数据帧的头尾都剥夺掉,将剩下来的数据包交由本身的上一层网络层处理,查看发现(目的IP是172.168.10.1,源IP是10.10.2.1,源MAC是PC1的MAC,)
发现数据包的目的IP不是自己,于是去匹配自己的路由表,发现去172.168.10.0这个网段是走自己的 E0/0/1 出去的,于是封上HDLC的帧头和尾,并生成FCS结果放至数据帧的尾部,然后发送给R2,在这个过程中因为HDLC的数据链路每次都是使用形同的地址字段,所以无需向前面那样去ARP请求R2的MAC来封装数据帧;
D.R2同样重复R1的动作,发现目的IP也不是自己,查本路由器的路由表,发现是从自己的E0/0/2出去,这时也是将数据包封上R2与R3这之间的internet链路上与R2相邻的路由器上所要封的协议类型(比如帧中继等),然后这样一直通过internet传到邻近目的计算机的路由器R3上
E.R3 收到数据帧后检查
1.该收到的数据帧的目的MAC地址是R3自己本身;
2.这时检查数据帧的尾部FCS,发现数据帧在传的过程中完好,没有被破坏;
这时当这两个条件都满足后,将检测相应的协议类型字段,以便R3知道数据帧中数据部分是哪类包,是IP包,还是IPX等等;R3的数据链路层将该收到的数据帧的头尾都剥夺掉,将剩下来的数据包交由本身的上一层网络层处理,查看发现(目的IP是172.168.10.1,源IP是10.10.2.1,源MAC是PC1的MAC,)
发现数据包的目的IP是自己管辖的网段内,于是去匹配自己的路由表,发现去172.168.10.1这个网段是走自己的E0/0/1,于是向自己的这个网段内的所有计算机ARP请求目的IP地址是172.168.10.1的MAC地址,收到后直接用收到的PC2的MAC地址封装数据帧然后交给目的主机PC2,PC2然后交由自己的应用层去处理,完后同样PC2回应PC1主机的过程也差不多和前面一样,到此整个通信就完成了!
注:
一.这里的A步骤里谈到了由自己配置的默认路由器去寻找其路由器的MAC地址来封帧时,我们可以看到在PC1这头会通过交换机相连多台路由器,故PC1就必须在这多台路由器上选一个作为自己的默认网关或则叫默认路由器吧来帮自己转发数据包!
二.我们做这个试验的时候是说路由器逐跳收到数据包后发现数据包不是给自己的,于是查看路由表,看是否有这个网段,从我的这台路由器的哪个接口才能正确的转发数据包,但有时在interner上的路由器不一定会通过路由协议在自己的路由表里找到这个网段,也就是说在它的路由表里找不到这么条路由网段,这时就需要默认路由了,它将数据包直接往自己的默认路由扔,交由其相邻的其他路由器去处理!自己不管了!而其他路由器在被逼无奈之下也会这么去做,所以说每台路由器上基本上都会配置这么条默认路由帮自己扔自己不认识的网段!
三.默认路由与静态路由是有区别的!(其共同点在于一旦你配好后路由到了这里的时候就确定下来了,我的下一跳应该是哪台路由器去继续转发数据包,除非你人为的去修改!)
1.默认路由的格式是:ip route-static 0.0.0.0 0.0.0.0 下一跳地址
2.静态路由的格式是:ip route-static 目标地址 目标地址的掩码 下一跳地址
3.默认路由因为其掩码是最小的(0),所以在路由器匹配路由时是最后才会去考虑的!
四.在PC1发给PC2的过程中不管经历了多少台路由器、交换机,其数据帧的源IP、源MAC、目的IP都不会变,唯一变得就是目的MAC地址,也就是在传数据包的过程中各台传替该数据包的路由器的MAC地址,(因为PC1不可能知道PC2的这个目标MAC地址的,否则也不用这么费劲了!就可以直接通信了!所以这里的目标MAC地址是实时在变得!而且是中间的传替路由器的MAC地址!)而PC2回应PC1的数据帧中是将源IP (也就是PC1的地址)换成了自己PC2的IP,源MAC换成自己PC2的MAC(也就是PC1的MAC地址),目的IP换成了PC1的IP地址!在传的过程中这前三个也都不会变,除非遭到破坏!变的也只有一个,那就是沿途的目标MAC地址!
转自菊花论坛 作者 雪山银貂
相关文章推荐
- 如何让两台笔记本电脑通过无线网卡连接起来
- linux下如何通过rabbitmq进行简单的电脑间通信
- 【翻译】如何通过使用两台电脑变得更加有效率
- C语言通过串口实现两台电脑通信
- 如何通过直接网线接法连接两台电脑
- 有两台电脑,一台电脑有线上网,另一台不能上网,如何通过飞秋或者其他软件,使得两台电脑间能互传文件
- 如何通过使用两台电脑变得更加有效率
- C++如何调用DLL呢,有两种,一种是静态,另外一种是动态,即通过调用windowsAPI 来加载和卸载DLL,具体思路:
- 如何通过maven官网查询相关依赖的具体代码和版本?
- 如何使两台机器不通过密码连接起来(linux)
- 如何通过Web方式把服务器端的数据库备份到本地的电脑硬盘中?
- 如何实现局域网内两台电脑资源共享?
- 思科模拟器:通过对路由器的RIP设置network命令将连在两台路由器上的电脑连通
- 两台电脑间通过网线建立局域网实现文件的共享
- 如何用网线实现两台电脑之间的文件共享
- 局域网内两台SQL Server电脑如何实时同步数据
- android端和pc端使用usb进行socket通信,其中android是服务器端,pc是客户端。如何实现安卓端输入的数据通过按钮发送到pc端?
- 关于如何在同一台电脑上的两个安卓模拟器之间的socket通信(图片传输)
- WCF后续之旅(1): WCF是如何通过Binding进行通信的
- 双绞线直连法如何才能使两台电脑实现共享