关闭

分布式系统-第2课

标签: 分布式系统网络
242人阅读 评论(1) 收藏 举报
分类:
第一题:
用tcpdump、tshark等工具来来分析arp请求报文和应答报文,对照截获的数据,做出ARP请求应答的逻辑分析,建议本机安装虚拟机来进行测试和实践。
假设主机A和B在同一个网段,主机A要向主机B发送信息,通过ARP将IP地址解析为MAC地址的过程如下:
(1)主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2)如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3)主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4)主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

第二题:
如果一个VLAN交换机的所有端口都是Trunk模式,则意味着什么?
当使用多台交换机分别配置VLAN后,可以使用Trunk(干道)方式实现跨交换机的VLAN内部连通,交换机的Trunk端口不隶属于某个VLAN, 而是可以承载所有VLAN的帧。
如果所有端口都是Trunk模式,虽然只有属于相同VLAN的主机才能相互通信,但是广播域扩展到所有VLAN,有可能引起广播风暴,导致整个网络全被广播信息充满,直至完全瘫痪。

第三题:
说明下NAT在Linux中实现的原理和大致做法。
原理:
如果内网用户希望共享LINUX主机的上网线路,则数据包由客户端发送到LINUX主机时,先经过NAT表的PREROUTING链,再经过POSTROUTING链,在POSTROUTING链中将内网的IP地址(源IP)更改为LINUX主机连接公网的IP地址,然后将记录缓存,当收到来自公网的回应数据时,在PREROUTING链的地方将目的地址修改为内网的客户端IP地址。
设置NAT:
首先要打开系统的路由功能:
[root@root ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@root ~]# iptables –t nat –A POSTROUTING –s eht0 –o eth1 –j MASQUERADE
上段代码就是开启地址转换的功能了,当来自eth0接口的数据包要转发出去的时候,会将IP地址转换为eth1接口的IP地址,转换会自动进行,如果接口有固定的地址或者多个地址,可以直接指定IP地址的值:
[root@root ~]# iptables –t nat –A POSTROUTING –o eth1 SNAT --to 116.255.176.222
[root@root ~]# iptables –t nat –A POSTROUTING –o eth1 SNAT --to 116.255.176.222-116.255.176.225
端口映射:
当希望在NAT设备后边将内网的服务器发布到外部网络的时候,就会用到端口映射,前边也说了,NAT表中的PREROUTING链就是专门负责转换目的地址的,要设置端口映射当然要用到它了,这里以WEB服务器为例,端口为TCP的80端口。
[root@root ~]# iptables –t nat –A PREROUTING –p tcp –i eth1 --dport 80 –j DNAT --to 192.168.1.100:80
这样的话当外部用户访问LINUX的80端口的时候,就会重定向到内网的192.168.1.100上边去,如果内网WEB服务器用的不是常规80端口的话,直接在IP地址后边接其他端口就可以了。同理,也可以在LINUX主机上的非80端口映射到内网WEB服务器的80端口,除此之外,IPTABLES的端口映射还有比较高级的功能,那就是本机的端口重定向:
[root@root ~]# iptables –t nat –A PREROUTING --p tcp --dport 80 –j REDIRECT --to-ports 8080
这样当访问LINUX主机的80端口时会自动变为访问本机的8080端口。

第四题:
路由的原理和机制是什么?解释下Linux里 ip route命令的结果。
局域网的主机通过数据链路层就可以通信,当一台主机要与其它网段的主机通信时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把数据包送到目的地。如果没有找到这样的路由器,主机就把IP分组送给一个称为 “默认网关”的路由器上。“缺省网关”是每台主机上的一个配置参数,它是接在同一个网络上的某个路由器端口的IP地址。 路由器转发数据包时,只根据数据包目的IP地址的网络号部分,选择合适的端口,把数据包送出去。同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直 接把数据包通过端口送到网络上,否则,也要选择下一个路由器来传送数据包。路由器也有它的缺省网关,用来传送不知道往哪儿送的IP分组。这样,通过路由器把知 道如何传送的数据包正确转发出去,不知道的数据包送给“默认网关”路由器,这样一级级地传送,数据包最终将送到目的地,送不到目的地的数据包则被网络丢弃了。 

ip route命令用于显示Linux系统的路由表。如下,
[nemo@spring01 ~]$ /sbin/ip route
10.0.0.0/8 via 10.173.47.247 dev eth0 
default via 182.92.235.247 dev eth1
第一行表示如果目标主机所在网络的地址为10.0.0.0/8,则通过eth0将数据包转发到网关10.173.47.247;
第二行表示默认网关为182.92.235.247,通过eth1将数据包发送到默认网关。

第五题:
说说你所理解高性能网络编程的几个重要因素和他们之间的相互关系
用户线程要及时从SYN队列和ACCEPT队列取出连接套接字,防止队列满了之后丢弃新的连接。
使用IO多路复用或者异步IO高效率的使用CPU资源,增加并发连接数。
使用Reactor模式,单线程专门轮询IO操作是否就绪,避免服务器产生大量线程,减少线程切换的性能消耗。
使用读写缓存,增加系统吞吐量。
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:703次
    • 积分:30
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论