数据包的转发实例10.0.0.5/2410.0.0.6/2410.0.0.1/2411.0.0.1/2411.0.0.2/24172.16.0.1/30172.16.0.2/30Fa0/0Fa0/1Fa0/1Fa0/0Fa0/24Fa0/24Pc1Pc2Pc3例举pc1pingpc3的通信过程sw1sw2R1R2第一步应用程序生成数据10.0.0.5/24Pc1ApplicationPresentationSessionTransportNetworkDataLinkPhysicalData第二步调用传输层服务ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24DATATCP/UDPHead第三步调用网络层服务ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24DATATCP/UDPHeadDATATCP/UDPHeadIPHeadIP包头中的源地址由主机网卡中直接得到,目的ip则由我们在使用应用程序时输入得到,如果是基于域名,调用别一个通信过程DNS来获得目的ip,然后放入到ip包头中,则ip包头封装完成第三步查主机路由表ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24DATATCP/UDPHeadDATATCP/UDPHeadIPHead使用目的IP与PC机路由表进行比较,得下一跳ip地址和出接口。两种况:一是匹配真正的下一跳地址(主机上一般是默认网关);二是下一跳指向本机网卡地址。第四步通过arp表查找下一跳mac地址ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24DATATCP/UDPHeadDATATCP/UDPHeadIPHead当为第一种情况时,则查找下一跳mac地址,若为第二种情况则查找目的ip对应的mac地址。如果查找成功则封装第二层链路层地址。第四步发送arp请求ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24DATATCP/UDPHeadDATATCP/UDPHeadIPHead若查找没有成功,则发送arp请求报文,去获得下一跳或目标ip的mac地址。Arprequest第四步收到arp响应报文ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24DATATCP/UDPHeadDATATCP/UDPHeadIPHead加入arp表项中,同时使用得到的mac地址,进行数据链路层封装ArpresponsesFrameHead第五步封装数据链路层包头并发送出接口ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24封装好第二层包头后,交由接口卡,发送数据包到交换机DATATCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第六步交换机1接收到数据包ApplicationPresentationSessionTransportNetworkDataLinkPhysicalPc110.0.0.5/24检查链路层包头目的字段,查看是否为自己接口的mac址,或广播(0xffffffffffff),若是其中之一则去掉链路层包头,并送上层协议处理。若不是,则交换机知道是需要进行转发的数据包,则查找mac地址表。DATATCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHeadsw1ApplicationPresentationSessionTransportNetworkDataLinkPhysical若从mac表中查到出接口,则直接转发数据包。若没成功,则需要在同一广播域内泛洪数据包TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第七步查找mac地址表Fa0/24SW1R1R2ApplicationPresentationSessionTransportNetworkDataLinkPhysical检查链路层包头目的字段,查看是否为自己接口的mac址,或广播(0xffffffffffff)或组播,是其中之一则去掉链路层包头,并送上层协议处理。否则丢弃数据包TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第八步数据包到达路由器1接口Fa0/24SW1R1R2ApplicationPresentationSessionTransportNetworkDataLinkPhysical检查ip包头,若是目的ip是入接口ip或广播地址,则去掉ip包头,并送上层协议处理,若不是,则知道是需进行转发的包,查找路由表。TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第九步解封装链路层包头,检查ip层Fa0/24ApplicationPresentationSessionTransportNetworkDataLinkPhysical得到下一跳ip和出接口,则ip包头ttl值减1,重新封装数据链路层地址,查arp表,得到下一跳mac地址,同样如果arp表没有对应表项,则发arp请求。发出数据包。第十步封装链路层包头,发送数据包Fa0/24TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHeadSW1R1R2重复第八、九、十步。Fa0/24TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第十步数据包到达路由器2SW1R1R211.0.0.2/24Fa0/24Pc3TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第十一步数据包到达交换机2sw2R2重复第六、七步11.0.0.2/24Fa0/24Pc3TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHead第十二步数据包到达PC3sw2检查链路层包头目的字段,查看是否为自己接口的mac址,或广播(0xfffffffffff)、组播地mac,若是其中之一则去掉链路层地址,并送上层协议处理。若不是丢弃数据包第十三步送网络层处理11.0.0.2/24Fa0/24Pc3TCP/UDPHeadDATATCP/UDPHeadIPHeadFrameHeadsw2去丢链路层地址,送网络层处理ApplicationPresentationSessionTransportNetworkDataLinkPhysical11.0.0.2/24Pc3TCP/UDPHeadDATATCP/UDPHeadIPHeadsw2若目的ip是接口ip,或广播、组播ip,则去掉ip包头,并且根据协议号送上层处理ApplicationPresentationSessionTransportNetworkDataLinkPhysical第十三步送传输层处理11.0.0.2/24Pc3TCP/UDPHeadDATAsw2ApplicationPresentationSessionTransportNetworkDataLinkPhysical第十四步应用程序处理