路由请求过程
『壹』 请求路由详解
家用路由器不过才100多而已!
路由的作用基本上就是一个虚拟的主机,他带防火墙功能,可以对网络进行各种控制及共享上网,基本上就是一个网络管理器,好处是方便管理网络并提升网络的安全性和速度!同时可以设定几个不同的网段并进行管理!
软和硬的区别就是一个是实物,一个是软件,软件占系统资源,而且目前也没发现有什么好的软件,若是功能要求不高,家用的就可以,要是专业的,少5000都买不到好的!
『贰』 路由信息处理过程是怎样的
要解释路由器的概念,首先要介绍什么是路由。所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router。 路由器的基本功能如下:
第一,网络互连:路由器支持各种局域网和广域网接口,主要用于互连局域网和广域网,实现不同网络互相通信;
第二,数据处理:提供包括分组过滤、分组转发、优先级、复用、加密、压缩和防火墙等功能;
第三,网络管理:路由器提供包括路由器配置管理、性能管理、容错管理和流量控制等功能。
简单的讲,路由器主要有以下几种功能:
第一,网络互连,路由器支持各种局域网和广域网接口,主要用于互连局域网和广域网,实现不同网络互相通信;
第二,数据处理,提供包括分组过滤、分组转发、优先级、复用、加密、压缩和防火墙等功能;
第三,网络管理,路由器提供包括配置管理、性能管理、容错管理和流量控制等功能。
为了完成“路由”的工作,在路由器中保存着各种传输路径的相关数据--路由表(Routing Table),供路由选择时使用。路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路由表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。在路由器中涉及到两个有关地址的名字概念,那就是:静态路由表和动态路由表。由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。动态(Dynamic)路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。
为了简单地说明路由器的工作原理,现在我们假设有这样一个简单的网络。如图所示,A、B、C、D四个网络通过路由器连接在一起。
现在我们来看一下在如图所示网络环境下路由器又是如何发挥其路由、数据转发作用的。现假设网络A中一个用户A1要向C网络中的C3用户发送一个请求信号时,信号传递的步骤如下:
第1步:用户A1将目的用户C3的地址C3,连同数据信息以数据帧的形式通过集线器或交换机以广播的形式发送给同一网络中的所有节点,当路由器A5端口侦听到这个地址后,分析得知所发目的节点不是本网段的,需要路由转发,就把数据帧接收下来。
第2步:路由器A5端口接收到用户A1的数据帧后,先从报头中取出目的用户C3的IP地址,并根据路由表计算出发往用户C3的最佳路径。因为从分析得知到C3的网络ID号与路由器的C5网络ID号相同,所以由路由器的A5端口直接发向路由器的C5端口应是信号传递的最佳途经。
第3步:路由器的C5端口再次取出目的用户C3的IP地址,找出C3的IP地址中的主机ID号,如果在网络中有交换机则可先发给交换机,由交换机根据MAC地址表找出具体的网络节点位置;如果没有交换机设备则根据其IP地址中的主机ID直接把数据帧发送给用户C3,这样一个完整的数据通信转发过程也完成了。
从上面可以看出,不管网络有多么复杂,路由器其实所作的工作就是这么几步,所以整个路由器的工作原理基本都差不多。当然在实际的网络中还远比上图所示的要复杂许多,实际的步骤也不会像上述那么简单,但总的过程是这样的。
增加路由器涉及的基本协议
路由器英文名称为Router,是一种用于连接多个网络或网段的网络设备。这些网络可以是几个使用不同协议和体系结构的网络(比如互联网与局域网),可以是几个不同网段的网络(比如大型互联网中不同部门的网络),当数据信息从一个部门网络传输到另外一个部门网络时,可以用路由器完成。现在,家庭局域网也越来越多地采用路由器宽带共享的方式上网。
路由器在连接不同网络或网段时,可以对这些网络之间的数据信息进行“翻译”,然后“翻译”成双方都能“读”懂的数据,这样就可以实现不同网络或网段间的互联互通。同时,它还具有判断网络地址和选择路径的功能以及过滤和分隔网络信息流的功能。目前,路由器已成为各种骨干网络内部之间、骨干网之间以及骨干网和互联网之间连接的枢纽。
NAT:全称Network Address Translation(网络地址转换),路由器通过NAT功能可以将局域网内部的IP地址转换为合法的IP地址并进行Internet的访问。比如,局域网内部有个IP地址为192.168.0.1的计算机,当然通过该IP地址可以和内网其他的计算机通信;但是如果该计算机要访问外部Internet网络,那么就需要通过NAT功能将192.168.0.1转换为合法的广域网IP地址,比如210.113.25.100。
DHCP:全称Dynamic Host Configuration Protocol(动态主机配置协议),通过DHCP功能,路由器可以为网络内的主机动态指定IP地址,而不需要每个用户去设置静态IP地址,并将TCP/IP配置参数分发给局域网内合法的网络客户端。
DDNS:全称Dynamic Domain Name Server(动态域名解析系统),通常称为“动态DNS”,因为对于普通的宽带上网使用的都是ISP(网络服务商)提供的动态IP地址。如果在局域网内建立了某个服务器需要Internet用户进行访问,那么,可以通过路由器的DDNS功能将动态IP地址解析为一个固定的域名,比如www.cpcw.com,这样Internet用户就可以通过该固定域名对内网服务器进行访问。
PPPoE:全称PPP over Ethernet(以太网上的点对点协议),通过PPPoE技术,可以让宽带调制解调器(比如ADSL Modem)用户获得宽带网的个人身份验证访问,能为每个用户创建虚拟拨号连接,这样就可以高速连接到Internet。路由器具备该功能,可以实现PPPoE的自动拨号连接,这样与路由器连接的用户可以自动连接到Internet。
ICMP:全称Internet Control Message Protocol(Internet控制消息协议),该协议是TCP/IP协议集中的一个子协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
总的来说,路由器与交换机的主要区别体现在以下几个方面:
(1)工作层次不同
最初的的交换机是工作在OSI/RM开放体系结构的数据链路层,也就是第二层,而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。
(2)数据转发所依据的对象不同
交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
(3)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。
(4)路由器提供了防火墙的服务
路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。
交换机一般用于LAN-WAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。 路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广泛应用。
目前个人比较多宽带接入方式就是ADSL,因此笔者就ADSL的接入来简单的说明一下。现在购买的ADSL猫大多具有路由功能(很多的时候厂家在出厂时将路由功能屏蔽了,因为电信安装时大多是不启用路由功能的,启用DHCP。打开ADSL的路由功能),如果个人上网或少数几台通过ADSL本身就可以了,如果电脑比较多你只需要再购买一个或多个集线器或者交换机。考虑到如今集线器与交换机的 价格相差十分小,不是特殊的原因,请购买一个交换机。不必去追求高价,因为如今产品同质化十分严重,我最便宜的交换机现在没有任 何问题。给你一个参考报价,建议你购买一个8口的,以满足扩充需求,一般的价格100元左右。接上交换机,所有电脑再接到交换机上就行了。余下所要做的事情就只有把各个机器的网线插入交换机的接口,将猫的网线插入uplink接口。然后设置路由功能,DHCP等, 就可以共享上网了。
看完以上的解说读者应该对交换机、集线器、路由器有了一些了解,目前的使用主要还是以交换机、路由器的组合使用为主,具体的组合方式可根据具体的网络情况和需求来确定。
路由器是互联网络中必不可少的网络设备之一,路由器是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读”懂对方的数据,从而构成一个更大的网络。 路由器有两大典型功能,即数据通道功能和控制功能。数据通道功能包括转发决定、背板转发以及输出链路调度等,一般由特定的硬件来完成;控制功能一般用软件来实现,包括与相邻路由器之间的信息交换、系统配置、系统管理等。
路由发现:学习路由的过程,动态路由通常由路由器自己完成,静态路由需要手工配置
路由转发:路由学习之后会照学习更新的路由表进行数据转发
路由维护:路由器通过定期与网络中其他路由器进行通信来了解网络拓扑变化以便更新路由表
路由器记录了接口所直连的网络 ID,称为直连路由,路由器可以自动学习到直连路由而不需要配置
路由器所识别的逻辑地址的协议必须被路由器所支持
『叁』 请说一下http请求的基本过程
首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。
1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。
DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够
找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结
果。现在已经拥有了目标ip和端口号,这样我们就可以打开socket连接了。
2.请求 连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0
文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。现在可以发送GET命令:
GET /mydir/index.html HTTP/1.0,
3.应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。
为了告知浏览器,,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:
① HTTP 1.0 200 OK 这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。
② MIME_Version:1.0它指示MIME类型的版本。
③ content_type:类型这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。
④ content_length:长度值它指示HTTP体信息的长度(字节)。
4.关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
下面我们具体分析其中的数据包在网络中漫游的经历
在网络分层结构中,各层之间是严格单向依赖的。“服务”是描述各层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务提供者,
上层是请求服务的用户。服务的表现形式是原语(primitive),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原
语。网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。
传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服
务方式。通常传输层的服务通过系统调用的方式提供,以socket的方式。对于客户端,要想建立一个socket连接,需要调用这样一些函数socket
() bind() connect(),然后就可以通过send()进行数据发送。
现在看数据包在网络中的穿行过程:
应用层
首先我们可以看到在应用层,根据当前的需求和动作,结合应用层的协议,有我们确定发送的数据内容,我们把这些数据放到一个缓冲区内,然后形成了应用层的报文data。
传输层
这些数据通过传输层发送,比如tcp协议。所以它们会被送到传输层处理,在这里报文打上了传输头的包头,主要包含端口号,以及tcp的各种制信息,这些信息是直接得到的,因为接口中需要指定端口。这样就组成了tcp的数据传送单位segment。tcp
是一种端到端的协议,利用这些信息,比如tcp首部中的序号确认序号,根据这些数字,发送的一方不断的进行发送等待确认,发送一个数据段后,会开启一个计
数器,只有当收到确认后才会发送下一个,如果超过计数时间仍未收到确认则进行重发,在接受端如果收到错误数据,则将其丢弃,这将导致发送端超时重发。通过
tcp协议,控制了数据包的发送序列的产生,不断的调整发送序列,实现流控和数据完整。
网络层
然后待发送的数据段送到网络层,在网络层被打包,这样封装上了网络层的包头,包头内部含有源及目的的ip地址,该层数据发送单位被称为packet。网络层开始负责将这样的数据包在网络上传输,如何穿过路由器,最终到达目的地址。在这里,根据目的ip地址,就需要查找下一跳路由的地址。首先在本机,要查找本机的路由表,在windows上运行route print就可以看到当前路由表内容,有如下几项:
Active Routes Default Route Persistent Route.
整个查找过程是这样的:
(1)根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送。
(2)如果不是,则查询路由表,找到一个路由。
(3)如果找不到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
(4)
路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。而数据包中包含一个最大路由跳数,如果超
过这个跳数,就会丢弃数据包,这样可以防止无限传递。路由器收到数据包后,只会查看网络层的包裹数据,目的ip。所以说它是工作在网络层,传输层的数据对
它来说则是透明的。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或 “网络不可达”的错误。
以windows下主机的路由表为例,看路由的查找过程
======================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.101 192.168.1.101 10
192.168.1.101 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.1.255 255.255.255.255 192.168.1.101 192.168.1.101 10
224.0.0.0 240.0.0.0 192.168.1.101 192.168.1.101 10
255.255.255.255 255.255.255.255 192.168.1.101 192.168.1.101 1
Default Gateway: 192.168.1.2
Network Destination 目的网段
Netmask 子网掩码
Gateway 下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的。
Interface 到达该目的地的本路由器的出口ip(对于我们的个人pc来说,通常由机算机A的网卡,用该网卡的IP地址标识,当然一个pc也可以有多个网卡)。
网关这个概念,主要用于不同子网间的交互,当两个子网内主机A,B要进行通讯时,首先A要将数据发送到它的本地网关,然后网关再将数据发送给B所在的网关,然后网关再发送给B。
默认网关,当一个数据包的目的网段不在你的路由记录中,那么,你的路由器该把那个数据包发送到哪里!缺省路由的网关是由你的连接上的default gateway决定的,也就是我们通常在网络连接里配置的那个值。
通常interface和gateway处在一个子网内,对于路由器来说,因为可能具有不同的interface,当数据包到达时,根据
Network
Destination寻找匹配的条目,如果找到,interface则指明了应当从该路由器的那个接口出去,gateway则代表了那个子网的网关地
址。
第一条 0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10
0.0.0.0
代表了缺省路由。该路由记录的意思是:当我接收到一个数据包的目的网段不在我的路由记录中,我会将该数据包通过192.168.1.101这个接口发送到
192.168.1.2这个地址,这个地址是下一个路由器的一个接口,这样这个数据包就可以交付给下一个路由器处理,与我无关。该路由记录的线路质量
10。当有多个条目匹配时,会选择具有较小Metric值的那个。
第三条 192.168.1.0 255.255.255.0 192.168.1.101 192.168.1.101 10
直
联网段的路由记录:当路由器收到发往直联网段的数据包时该如何处理,这种情况,路由记录的interface和gateway是同一个。当我接收到一个数
据包的目的网段是192.168.1.0时,我会将该数据包通过192.168.1.101这个接口直接发送出去,因为这个端口直接连接着
192.168.1.0这个网段,该路由记录的线路质量
10 (因interface和gateway是同一个,表示数据包直接传送给目的地址,不需要再转给路由器)。
一般就分这两种情况,目的地址与当前路由器接口是否在同一子网。如果是则直接发送,不需再转给路由器,否则还需要转发给下一个路由器继续进行处理。
查找到下一跳ip地址后,还需要知道它的mac地址,这个地址要作为链路层数据装进链路层头部。这时需要arp协议,具体过程是这样的,查找arp
缓冲,windows下运行arp
-a可以查看当前arp缓冲内容。如果里面含有对应ip的mac地址,则直接返回。否则需要发生arp请求,该请求包含源的ip和mac地址,还有目的地
的ip地址,在网内进行广播,所有的主机会检查自己的ip与该请求中的目的ip是否一样,如果刚好对应则返回自己的mac地址,同时将请求者的ip
mac保存。这样就得到了目标ip的mac地址。
链路层
将mac地址及链路层控制信息加到数据包里,形成Frame,Frame在链路层协议下,完成了相邻的节点间的数据传输,完成连接建立,控制传输速度,数据完整。
物理层
物理线路则只负责该数据以bit为单位从主机传输到下一个目的地。
下一个目的地接受到数据后,从物理层得到数据然后经过逐层的解包 到 链路层 到 网络层,然后开始上述的处理,在经网络层 链路层 物理层将数据封装好继续传往下一个地址。
在上面的过程中,可以看到有一个路由表查询过程,而这个路由表的建立则依赖于路由算法。也就是说路由算法实际上只是用来路由器之间更新维护路由表,
真正的数据传输过程并不执行这个算法,只查看路由表。这个概念也很重要,需要理解常用的路由算法。而整个tcp协议比较复杂,跟链路层的协议有些相似,其
中有很重要的一些机制或者概念需要认真理解,比如编号与确认,流量控制,重发机制,发送接受窗口。
tcp/ip基本模型及概念
物理层
设备,中继器(repeater),集线器(hub)。对于这一层来说,从一个端口收到数据,会转发到所有端口。
链路层
协议:SDLC(Synchronous Data Link Control)HDLC(High-level Data Link
Control)
ppp协议独立的链路设备中最常见的当属网卡,网桥也是链路产品。集线器MODEM的某些功能有人认为属于链路层,对此还有些争议认为属于物理层设备。除
此之外,所有的交换机都需要工作在数据链路层,但仅工作在数据链路层的仅是二层交换机。其他像三层交换机、四层交换机和七层交换机虽然可对应工作在OSI
的三层、四层和七层,但二层功能仍是它们基本的功能。
因为有了MAC地址表,所以才充分避免了冲突,因为交换机通过目的MAC地址知道应该把这个数据转发到哪个端口。而不会像HUB一样,会转发到所有滴端口。所以,交换机是可以划分冲突域滴。
网络层
四个主要的协议:
网际协议IP:负责在主机和网络之间寻址和路由数据包。
地址解析协议ARP:获得同一物理网络中的硬件主机地址。
网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。
互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。
该层设备有三层交换机,路由器。
传输层
两个重要协议 TCP 和 UDP 。
端口概念:TCP/UDP 使用 IP 地址标识网上主机,使用端口号来标识应用进程,即 TCP/UDP 用主机 IP
地址和为应用进程分配的端口号来标识应用进程。端口号是 16 位的无符号整数, TCP 的端口号和 UDP
的端口号是两个独立的序列。尽管相互独立,如果 TCP 和 UDP
同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。利用端口号,一台主机上多个进程可以同时使用
TCP/UDP 提供的传输服务,并且这种通信是端到端的,它的数据由 IP 传递,但与 IP
数据报的传递路径无关。网络通信中用一个三元组可以在全局唯一标志一个应用进程:(协议,本地地址,本地端口号)。
也就是说tcp和udp可以使用相同的端口。
可以看到通过(协议,源端口,源ip,目的端口,目的ip)就可以用来完全标识一组网络连接。
应用层
基于tcp:Telnet FTP SMTP DNS HTTP
基于udp:RIP NTP(网落时间协议)和DNS (DNS也使用TCP)SNMP TFTP
『肆』 dsr路由流程
nexthop_list_init(); 初始化下一跳列表,主要用来保存下一跳的信息,确定ack的请求机会
gw_list_init(); 初始化网关列表
routecache_init(); 初始化路由缓存
reqtable_init(); 初始化路由请求表,记录收到的路由请求的信息
rtsmbuffer_init(); 初始化重发缓冲区,保存发出数据中,需要ack回复的数据报的信息
sendbuffer_init(); 初始化发送缓冲区 ,临时存储 发送路由请求之后,受到路由应答请求之前,发送的数据报
dsr_stat_init(); 初始化统计信息
init_packet_queue(); 初始化用户空间队列
对全局变量 ipq_queue_t q 进行初始化,
注册一个处理netfilter队列的函数 netfilter_receive,一旦有数据进入队列就调用,做两件事情:
1.调用ipq_enqueue函数(收到的包和发出的包都由他加入到q队列中,进入的包有dsr头,而发出的包没有dsr头,所以在程序中使用了两次switch来吧接受的发送的udp包添加的q中)
发出的hello包,info设置为空,根据不同的协议头,把元素加入到不同的list中
接受到的数据包,info字段是由netfileter自己填写的
2.唤醒dsr进程。
startup_dsr(); 创建DSR进程,负责处理用户空间队列的数据报
注册pre_route local_out gw_post_route3个钩子 ,gw_post_route为最后一个被调用的钩子
pre_route 钩子
1如果发现数据包中dsrhdr的头部需要ack标志为1,则直接发送一个ack回复,不进入用户空间排队。
2如果是ack数据包,也就是下游节点返回的ack应答,然后进入dsr_in_ack_op_handler中进行处理,之前的判断已经没有必要了,不过还是按照从前的习惯保留了。其中在dsr_in_ack_op_handler中调用rtsmbuffer_ack_del函数,这个函数用来根据ack回复时间动态调整ack超时,这是和从前dsr最大的区别:
如果是数据包,则直接去掉dsr头,返回netfilter
其他类型的数据包,则加入用户队列 (返回NF_QUEUE)
加入队列的数据包,有netfitlerreceive调用packet_enqueue来完成,并触发dsr进程,然后再由packet_in和packet_out进行处理
dsr_local_out流程
如果是自己给自己的,则直接返回
如果是发往外网段的直接返回
其他的数据报全部返回到用户空间队列排队。加入队列的数据包,有netfitlerreceive调用packet_enqueue来完成,并触发dsr进程,然后再由packet_in和packet_out进行处理
dsr进程流程
循环从用户空间队列中取出元素 (iqp_dequeue)
{
进入的数据报 ,调用packet_in
发出的数据报,调用packet_out
}
packet_in 的流程
循环处理dsr头部字段
如果是DSR_SRC_OPT :调用dsr_src_opt_handler ,
如果DSR_IN_OPT,调用dsr_in_src_opt_handler处理:
如果dsrhdr标志位中需要ack为1,则发送一个ack
如果DSR_FORWARD_OPT,调用dsr_forward_src_opt_handler
1重新设置接受地址为下一跳地址,源地质为本节点地址;
2重新设置nexthop_info_entry中下一跳的ack请求时间,即:
if_in_nexthop_list判断转发的包的目的地址是否在下一跳得列表中。
Get_nexthop_natime来获得请求下一个跳节点ack的时间。从nexthop_info_entry中得到最近一次从下一收到的ack时间。改变Nexthop_info_entry中的标志位,需要ack ,计算下一次需要ack的时间;
3 修改ip头目的地址为本节点地址,源地址为本节点地址
如果是DSR_REQ_OPT ,调用dsr_req_opt_handler
如果是DSR_IN_OPT ,则调用dsr_in_req_opt_handler,
1首先处理路由信息,添加从本节点到路由请求发起源的路由信息。
2再次判断是否为网关请求,然后make_and_send_dsr_reply回复一个网关应答,否则回复一般的请求 同样是使用make_and_send_dsr_reply
3 修改ip头目的地址为本节点地址
如果是DSR_FORWARD_OPT dsr_forward_req_opt_handler
1判断是否收到过这个请求,如果收到过,则返回,否则继续
2处理路由信息,添加从本节点到路由请求发起源的路由信息
3然后针对网关修改,首先查找本的路由网关列表,没有则转发网关请求:iph->daddr= BCAST;
4如果本节点网关列表不为空,则还是make_and_send_dsr_reply来发送回复,将本地有的网关路由发送给请求节。
如果是DSR_REP_OPT ,调用dsr_rep_opt_handler
如果是DSR_IN_OPT, 则dsr_in_rep_opt_handler
首先先把添加本地路由信息,然后添加网关列表,然后处理发送缓冲区的数据,这个缓冲区的数据,是在make_dsr_source_route_option中调用sendbuffer_insert添加的。
如果是DSR_FORWARD_OPT, 则调用dsr_forward_rep_opt_handler ,
首先将reply信息中自己需要的路由信息提取,添加本地路由信息,如果是网关发现应答,然后则提取网关路由,并添加网关列表
如果是DSR_ERR_OPT ,则dsr_err_opt_handler
如果DSR_IN_OP 则dsr_in_err_opt_handler
如果DSR_FORWARD_OPT dsr_forward_err_opt_handler
循环结束
如果数据包是给自己的,则从dsr头部恢复真正的源地址和目的地址(针对网关设计的),而后去掉dsr头部,然后返回nf_accept
否则,则直接由自己转发,返回nf_stolen
重新注入netfilter架构:nf_reinject()
paket_out 流程:
调用了make_and_send_dsr_data_packet进行处理具体过程:
1如果hoplist是空 则调用make_dsr_source_route_option ,在这个函数中,首先比较目的地址是否为本网段,如果不是本网段则需要查找本地网关列表
如果没有网关信息,则发起网关发现:gateway_discovery()
否则检查到网关/内网地址由,如果没有路由,则发起路由请求,将发送的数据暂时保存在发送缓冲区中,【在收到路由请求应答之后来发送】
总结一下make_dsr_sour_route_option 的功能,就是检查网关信息和路由信息,没有相关信息则发起路由请求,把要发送的数据存到发送缓冲区中
2如果hoplist不为空 则 调用make_dsr_source_route_opt 直接将hoplist复制给scropt的hoplist.
3 ,填写dsrhdr的头部信息
4.获取下一跳的地址 填写ip头的目的地址
5.对nexthop_info_entry中的ack请求时间进行修改,并根据条件修改dsr需要dsr头部的需要ack标志位。
6.dsr_merge_opt_two合并dsr头和源路由选项,并发送insert_dsr_stuff_and_send
在insert_dsr_stuff_and_send中 又调用dsr_send_packet,而后在dsr_send_packet中
调用了rtsmbuffer_insert来插入发送缓冲区一个记录
回到packet_out,然后返回一个NF_STOLEN
网关节点的钩子调用处理过程
说明几个钩子
dsr的 nat
dsr_pre_route 优先级最高 pre_route 优先级低于dsr_pre_route
pre_route ,本在发出之前的 localout 优先级高于gw_local_out
gw_local_out 上线之前
第一部分 ,从网关受到发往外网段的数据报:
首先调用dsr_pre_route,进行各种头部处理,然后恢复ip头,交付给netfilter.
这时候nat的pre_route 被调用,nat负责转换原地质为网关地址,记录内外对应的ip信息和段口号,返回netfilter,然后在发出是掉用localout 转换目标地址,返回给netfilter,
此时gw_local_out由于也是挂在local_out处,优先级低,所以在nat的localout结束后会被调用,察看是不是由内网发给内网的,不是则直接返回nf_accept,由此一个外发的数据报处理完毕。
第二部分 ,从外网发给内网的
首先由dsr_pre_route处里,由于外网进入的是原始的数据报,所以直接返回 ,再次有nat的preroute捕获,进行原地址的变换,转为网关地质,经过内外对应的iptable,再local-out出 转换目标地址为内网结点地址,然后gw_local_out 再次截获,发现是由外网发到内网段的,则进行处理调用make_and_send_dsr_data_packet,转为dsr协议可以识别的包,发送出去
『伍』 请求知道路由器的工作原理
路由器工作于OSI七层协议中的第三层,其主要任务是接收来自一个网络接口的数据包,根据其中所含的目的地址,决定转发到下一个目的地址。因此,路由器首先得在转发路由表中查找它的目的地址,若找到了目的地址,就在数据包的帧格前添加下一个MAC地址,同时IP数据包头的TTL(Time To Live)域也开始减数,并重新计算校验和。当数据包被送到输出端口时,它需要按顺序等待,以便被传送到输出链路上。
路由器在工作时能够按照某种路由通信协议查找设备中的路由表。如果到某一特定节点有一条以上的路径,则基本预先确定的路由准则是选择最优(或最经济)的传输路径。由于各种网络段和其相互连接情况可能会因环境变化而变化,因此路由情况的信息一般也按所使用的路由信息协议的规定而定时更新。
网络中,每个路由器的基本功能都是按照一定的规则来动态地更新它所保持的路由表,以便保持路由信息的有效性。为了便于在网络间传送报文,路由器总是先按照预定的规则把较大的数据分解成适当大小的数据包,再将这些数据包分别通过相同或不同路径发送出去。当这些数据包按先后秩序到达目的地后,再把分解的数据包按照一定顺序包装成原有的报文形式。路由器的分层寻址功能是路由器的重要功能之一,该功能可以帮助具有很多节点站的网络来存储寻址信息,同时还能在网络间截获发送到远地网段的报文,起转发作用;选择最合理的路由,引导通信也是路由器基本功能;多协议路由器还可以连接使用不同通信协议的网络段,成为不同通信协议网络段之间的通信平台。
一般来说,路由器的主要工作是对数据包进行存储转发,具体过程如下:
第一步:当数据包到达路由器,根据网络物理接口的类型,路由器调用相应的链路层功能模块,以解释处理此数据包的链路层协议报头。这一步处理比较简单,主要是对数据的完整性进行验证,如CRC校验、帧长度检查等。
第二步:在链路层完成对数据帧的完整性验证后,路由器开始处理此数据帧的IP层。这一过程是路由器功能的核心。根据数据帧中IP包头的目的IP地址,路由器在路由表中查找下一跳的IP地址;同时,IP数据包头的TTL(Time To Live)域开始减数,并重新计算校验和(Checksum)。
第三步:根据路由表中所查到的下一跳IP地址,将IP数据包送往相应的输出链路层,被封装上相应的链路层包头,最后经输出网络物理接口发送出去。
简单地说,路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳传输路径,并将该数据包有效地传送到目的站点。由此可见,选择最佳路径策略或叫选择最佳路由算法是路由器的关键所在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用。上述过程描述了路由器的主要而且关键的工作过程,但没有说明其它附加性能,例如访问控制、网络地址转换、排队优先级等。
『陆』 数据在网络的ip路由器通信的过程
IP数据报需从主机A上传送到主机B上,主机A首先查找路由表;
if(目的主机是与自己在同一个网段内回)
{
主机A查询答自己的ARP表;
if(有该目的IP地址对应的MAC地址的记录)
{
将该MAC地址作为目的MAC地址,封装数据帧,传送给主机B;
}
else
{
发送一个ARP请求广播给网段内的所有主机,来查询该目的IP地址的MAC地址;
收到ARP请求报文的各个主机如果发现该IP地址是自己的IP地址,则返回一个ARP应答报文告诉主机A自己的MAC地址;
如果发现不是自己的IP地址,则丢弃该报文。
『柒』 请描述一下IP分组的路由转发过程
2 路由原理
——当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的路由器上。“缺省网关”是每台主机上的一个配置参数,它是接在同一个网络上的某个路由器端口的IP地址。
——路由器转发IP分组时,只根据IP分组目的IP地址的网络号部分,选择合适的端口,把IP分组送出去。同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组。路由器也有它的缺省网关,用来传送不知道往哪儿送的IP分组。这样,通过路由器把知道如何传送的IP分组正确转发出去,不知道的IP分组送给“缺省网关”路由器,这样一级级地传送,IP分组最终将送到目的地,送不到目的地的IP分组则被网络丢弃了。
——目前TCP/IP网络,全部是通过路由器互连起来的,Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。这种网络称为以路由器为基础的网络(router based network),形成了以路由器为节点的“网间网”。在“网间网”中,路由器不仅负责对IP分组的转发,还要负责与别的路由器进行联络,共同确定“网间网”的路由选择和维护路由表。
——路由动作包括两项基本内容:寻径和转发。寻径即判定到达目的地的最佳路径,由路由选择算法来实现。由于涉及到不同的路由选择协议和路由选择算法,要相对复杂一些。为了判定最佳路径,路由选择算法必须启动并维护包含路由信息的路由表,其中路由信息依赖于所用的路由选择算法而不尽相同。路由选择算法将收集到的不同信息填入路由表中,根据路由表可将目的网络与下一站(nexthop)的关系告诉路由器。路由器间互通信息进行路由更新,更新维护路由表使之正确反映网络的拓扑变化,并由路由器根据量度来决定最佳路径。这就是路由选择协议(routing protocol),例如路由信息协议(RIP)、开放式最短路径优先协议(OSPF)和边界网关协议(BGP)等。
——转发即沿寻径好的最佳路径传送信息分组。路由器首先在路由表中查找,判明是否知道如何将分组发送到下一个站点(路由器或主机),如果路由器不知道如何发送分组,通常将该分组丢弃;否则就根据路由表的相应表项将分组发送到下一个站点,如果目的网络直接与路由器相连,路由器就把分组直接送到相应的端口上。这就是路由转发协议(routed protocol)。
——路由转发协议和路由选择协议是相互配合又相互独立的概念,前者使用后者维护的路由表,同时后者要利用前者提供的功能来发布路由协议数据分组。下文中提到的路由协议,除非特别说明,都是指路由选择协议,这也是普遍的习惯。
3。 路由协议
——典型的路由选择方式有两种:静态路由和动态路由。
——静态路由是在路由器中设置的固定的路由表。除非网络管理员干预,否则静态路由不会发生变化。由于静态路由不能对网络的改变作出反映,一般用于网络规模不大、拓扑结构固定的网络中。静态路由的优点是简单、高效、可靠。在所有的路由中,静态路由优先级最高。当动态路由与静态路由发生冲突时,以静态路由为准。
——动态路由是网络中的路由器之间相互通信,传递路由信息,利用收到的路由信息更新路由器表的过程。它能实时地适应网络结构的变化。如果路由更新信息表明发生了网络变化,路由选择软件就会重新计算路由,并发出新的路由更新信息。这些信息通过各个网络,引起各路由器重新启动其路由算法,并更新各自的路由表以动态地反映网络拓扑变化。动态路由适用于网络规模大、网络拓扑复杂的网络。当然,各种动态路由协议会不同程度地占用网络带宽和CPU资源。
——静态路由和动态路由有各自的特点和适用范围,因此在网络中动态路由通常作为静态路由的补充。当一个分组在路由器中进行寻径时,路由器首先查找静态路由,如果查到则根据相应的静态路由转发分组;否则再查找动态路由。
——根据是否在一个自治域内部使用,动态路由协议分为内部网关协议(IGP)和外部网关协议(EGP)。这里的自治域指一个具有统一管理机构、统一路由策略的网络。自治域内部采用的路由选择协议称为内部网关协议,常用的有RIP、OSPF;外部网关协议主要用于多个自治域之间的路由选择,常用的是BGP和BGP-4。下面分别进行简要介绍。
『捌』 什么是路由请求啊如何实现一个网络队列服务并且能够支持Push, Pop, IsEmpty等常用的队列操作。
路由请求就是向下个节点发送请求信息,获得最短途径
『玖』 路由器数据包转发过程,简单回答下就行了,坐等!!
对,A路由器会作为一个代理ARP,欺骗主机A1就是B1,做出响应,然后再通过路由查找的方式找到路由器B,然后到主机B1