读书人

数据包的整个路由进程有人能说清吗

发布时间: 2013-02-20 12:23:22 作者: rapoo

数据包的整个路由过程,有人能说清吗
假设收发双方都在 子网中的 子网中的 子网。而且地理距离相距很远(假设一个在新疆一个在广东,这样途中就需要经过更多的路由器)

以上是背景。下面开始研究过程。

A方向B方 send 一个 char buffer[100],A方需要用 SOCKADDR_IN 提供接收端的IP和端口,但却没有提供子网掩码。
我猜测,98%的步骤都是使用IP中地址的网络号部分,等数据包到达对方网关路由器的时候(也就是第99%步),路由器用IP和子网掩码计算出哪台电脑接收数据包,发到正确的电脑以后,电脑从TCP中得到端口号,最后一步(100%)用端口来确定哪个进程接收数据包。

上面是我的猜测,不知道猜中多少,而且还有一些步骤不清楚。
1、起初没有提供子网掩码,那前98%步如何发往正确的网络,到达网络后又如何发往正确的主机。
2、在前98%步中,从始发主机开始路由器如何计算应该把数据包发往下一个路由器。或者换个问法,路由器中的程序是如何设计的,怎么计算的。不需要知道详细代码只要知道思路就行。我估计是根据路由器中的路由表和IP中的目标IP计算的,但是看了半天也没明白路由表中有什么信息。
3、B方向A方发送数据的时候也是一样的问题,关于网络号和主机号的问题。A方也没有向B方提供自己的子网掩码。难道A方在起初发送的时候被网关添加了A方的子网掩码,然后给B放使用? 但是IP的结构中没看见有子网掩码的字段啊!!
[解决办法]
还是自己研究一下TCP/IP协议详解吧
[解决办法]
如果是路由器后面局域网的机器,那么实际你通信的时候是路由器的IP和端口号,所以前99%都是通过路由器IP在转发包,到目的路由器后,路由器根据端口查找对应的网内机器
[解决办法]
A要往B发数据
A先根据A的掩码判断与B是否在一个子网,如果是,ARP查找B的MAC,查找成功,组包(IP:A→B,MAC:A→B)发出去
A判断与B不在一个子网,如果A没有设置网关,发送失败。如果设置了同一子网的网关,ARP查找网关的MAC,查找成功,组包(IP:A→B,MAC:A→网关)发出去,后面由网关负责转发
[解决办法]
子网主机A 发给 B---(这里假设B是具有公网地址的)
1. A 把报文 发给 配置的默认网关 Ra ,Ra 查询自己的路由表,发现达到地址B的下一跳为 Rnext1,于是将报文转发给 Rnext1, 同样Rnext1 查询自己的路由表,然后到达Rnext2.。。。
(实际上 不单经过n个路由(处理3层报文),中间可能存在大量的3层交换机(只处理2层报文))
经过若干跳后,把来自A的报文转发到 B,B再 经过nat 达到B内部的子网地址
2.B发给A 同上面的描述
[解决办法]
B 和 A 如果是 各自位于不同的子网段 ,子网掩码 对 对方 没有意义
1.不同子网的数据传输 一般由 网关 负责,网关就是用来使 外部的报文进入内部,内部的报文出去外部,相当于一个总出口
2. 如果不是由 网关负责的,可由ARP 代理负责

读书人网 >VC/MFC

热点推荐