㈠ 路由器转发数据包的工作原理
路由器转发数据包的工作原理
路由器有很多接口(也就是数据出入的端口),每个接口都有不同网络的IP地址,连接着不同的网络。当一个接口收到一个数据报文后,根据报文头信息,目标地址和原地址,查找路由表,按路由规则,转发到相应的接口上,把数据转发出去。
另外还有ACL,TCP/UDP等转发控制规则,对数据进行是否转发的控制。
㈡ 这数据包怎么发送,想学数据传送的原理,能教我一下吗,谢谢!!
比如我们要打开一个网页,过程是,先发一个请求到服务器(HTTP请求),服务器会将你要请求的网页文件发回来给你,你就能看到网页信息了。
我给你说一下请求发过去的过程(服务器把网页发回来给你的过程是一样的)。
你在计算机打开浏览器以后,计算机会给浏览器分配一个端口号,并在应用层生成HTTP请求,要发往服务器的80端口,这个请求一层一层往下,到传输层的时候,被封装为“数据段”;再往下传,到网络层的时候被封装为“IP数据包”,再往下传,到数据链路层的时候被封装为“帧”,这个帧再往下传,到物理层的时候,被转换为电信号。
电信号从物理层发出,到交换机的物理层,交换机的物理层将电信号转换为帧(接收方做的是一个跟发送方相反的过程),交换机拿到帧以后,读懂上面的MAC地址,拿到MAC地址以后,去对照MAC地址映射表,决定要从哪一个端口转发出去以后,将帧发给物理层,物理层再将帧转换为电信号,然后发出。
到路由器的物理层接收到交换机发过来的电信号以后将其转换为帧,路由器的物理层将这个帧发给路由器的数据链路层,数据链路层将帧拆开,得到IP数据包,并将这个帧发给网络层;路由器的网络层拿到IP数据包以后,读出包上的目的IP地址,然后去对照路由表,决定要把这个包从哪个端口转发出去。决定以后,网路层把这个包往下发,到数据链路层,数据链路层把IP包封装为新的帧,再往下发给物理层,物理层再把帧转换为电信号,发给服务器。
服务器的物理层接收到电信号以后,将电信号转换为帧发给数据链路层;数据链路层将帧拆开,得到IP数据包以后,发给网络层;网络层得到IP数据包以后,将包拆开,得到数据段,并继续往上传,给传输层;传输层得到数据段以后,将数据段拆开,就得到当初客户机生成的原本的HTTP请求,这个请求一直往上发,到应用层,工作在应用层的网站服务就得到了这个请求,并作出响应。
响应的方式就是将你请求的网页发回来给你,过曾是一样的。
要理解这个过程,最好能先理解一下网络模型的概念。
希望对你有帮助。
㈢ 路由器使用转发信息库和临接表时用于作出交换决策所采用的数据包转发方法是什么
交换机(Switch)是一种基于MAC(网卡的硬件地址)识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。交换机分为:二层交换机,三层交换机或是更高层的交换机。三层交换机同样可以有路由的功能,而且比低端路由器的转发速率更快。它的主要特点是:一次路由,多次转发。
路由器(Router)亦称选径器,是在网络层实现互连的设备。它比网桥更加复杂,也具有更大的灵活性。路由器有更强的异种网互连能力,连接对象包括局域网和广域网。过去路由器多用于广域网,由于路由器性能有了很大提高,价格下降到与网桥接近,因此在局域网互连中也越来越多地使用路由器。路由器是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读”懂对方的数据,从而构成一个更大的网络。路由器有两大典型功能,即数据通道功能和控制功能。数据通道功能包括转发决定、背板转发以及输出链路调度等,一般由特定的硬件来完成;控制功能一般用软件来实现,包括与相邻路由器之间的信息交换、系统配置、系统管理等。
就路由器与交换机来说,主要区别体现在以下几个方面:
(1)工作层次不同
最初的的交换机是工作在OSI/RM开放体系结构的数据链路层,也就是第二层,而路由器一开始就设计工作在OSI模型的网络层。由于交换机工作在OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。
(2)数据转发所依据的对象不同
交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
(3)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。
(4)路由器提供了防火墙的服务
路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。
交换机一般用于LAN-LAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。相比较而言,路由器的功能较交换机要强大,但速度相对也慢,价格昂贵,第三层交换机既有交换机线速转发报文能力,又有路由器良好的控制功能,因此得以广泛应用。
(5)总之,可以这么认为,交换机在具体的城域网中往往扮演着VLAN透传的角色,就是桥。而路由器默认的是不支持二层的,路由器的每一个端口都是一个独立的广播域和冲突域,而交换机是只有一个广播域和端口数量的冲突域,在二层交换机上存在MAC表,三层交换机上存在路由表.MAC.ARP表,在路由器上存在路由表和arp表。比如当一个路由器上有一个2层的vlan100和另外一个路由器上的3层vlan100对接的时候,是不通的,这时候我们需要借助L2VPN技术来进行互通,比较流行的就是VPLS技术。
㈣ 如何拦截并修改网络数据包
拦截并修改网络数据包方法有:
1、用网络安全开发包,类似winpcap之类的吧,但有一个问题,如果程序写好,在主机上不安装winpcap环境,程序能不能正常工作?是不是主机也必须安装相应的开发包。如果要实现数据包拦截修改转发功能,用什么开发包好?至少winpcap是不能实现的;
2、实在不行只能用防火墙拦截机制和raw socket 之类的编写了;
3、从NDIS驱动下手,做一个驱动,拦截到数据包进行修改转发功能。
㈤ socket编程。怎么实现数据包的转发C语言版的。
我也不知道····只好复制一份···共同学习~~ 要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。除此,普通的程序员就不会知道太多了,很多时候这些知识已经够用了。最多,写服务程序的时候,会使用多线程来处理并发访问。我们还知道如下几个事实:1。一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了。2。很多防火墙只允许特定目标端口的数据包通过。3。服务程序在listen某个端口并accept某个连接请求后,会生成一个新的socket来对该请求进行处理。于是,一个困惑了我很久的问题就产生了。如果一个socket创建后并与80端口绑定后,是否就意味着该socket占用了80端口呢?如果是这样的,那么当其accept一个请求后,生成的新的socket到底使用的是什么端口呢(我一直以为系统会默认给其分配一个空闲的端口号)?如果是一个空闲的端口,那一定不是80端口了,于是以后的TCP数据包的目标端口就不是80了--防火墙一定会组织其通过的!实际上,我们可以看到,防火墙并没有阻止这样的连接,而且这是最常见的连接请求和处理方式。我的不解就是,为什么防火墙没有阻止这样的连接?它是如何判定那条连接是因为connet80端口而生成的?是不是TCP数据包里有什么特别的标志?或者防火墙记住了什么东西?后来,我又仔细研读了TCP/IP的协议栈的原理,对很多概念有了更深刻的认识。比如,在TCP和UDP同属于传输层,共同架设在IP层(网络层)之上。而IP层主要负责的是在节点之间(End to End)的数据包传送,这里的节点是一台网络设备,比如计算机。因为IP层只负责把数据送到节点,而不能区分上面的不同应用,所以TCP和UDP协议在其基础上加入了端口的信息,端口于是标识的是一个节点上的一个应用。除了增加端口信息,UPD协议基本就没有对IP层的数据进行任何的处理了。而TCP协议还加入了更加复杂的传输控制,比如滑动的数据发送窗口(Slice Window),以及接收确认和重发机制,以达到数据的可靠传送。不管应用层看到的是怎样一个稳定的TCP数据流,下面传送的都是一个个的IP数据包,需要由TCP协议来进行数据重组。所以,我有理由怀疑,防火墙并没有足够的信息判断TCP数据包的更多信息,除了IP地址和端口号。而且,我们也看到,所谓的端口,是为了区分不同的应用的,以在不同的IP包来到的时候能够正确转发。TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口--原来是这么回事啊!在Socket编程接口里,设计者提出了一个很重要的概念,那就是socket。这个socket跟文件句柄很相似,实际上在BSD系统里就是跟文件句柄一样存放在一样的进程句柄表里。这个socket其实是一个序号,表示其在句柄表中的位置。这一点,我们已经见过很多了,比如文件句柄,窗口句柄等等。这些句柄,其实是代表了系统中的某些特定的对象,用于在各种函数中作为参数传入,以对特定的对象进行操作--这其实是C语言的问题,在C++语言里,这个句柄其实就是this指针,实际就是对象指针啦。现在我们知道,socket跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。现在我们明白,如果一个程序创建了