分布式系统-第2课

原创 2015年07月10日 13:54:50
第一题:
用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操作是否就绪,避免服务器产生大量线程,减少线程切换的性能消耗。
使用读写缓存,增加系统吞吐量。
版权声明:本文为博主原创文章,未经博主允许不得转载。

【七月Python入门】 第四课面向对象基础

Python学习笔记
  • sinat_23133783
  • sinat_23133783
  • 2017年12月21日 18:24
  • 32

Spark定制班第2课:通过案例对Spark Streaming透彻理解三板斧之二:解密Spark Streaming运行机制和架构

上节课我们谈到了技术界的寻龙点穴。这就像过去的风水一样,每个领域都有自己的龙脉,Spark就是龙脉之所在,它的龙穴或者关键点就是Spark Streaming。这是上一节课我们非常清晰知道的结论之一。...
  • csdn_zf
  • csdn_zf
  • 2016年05月07日 20:20
  • 533

第2课 检索数据

这一课介绍如何使用SELECT语句从表中检索一个或多个数据列。2.1SELECT语句正如第 1课所述,SQL语句是由简单的英语单词构成的。这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的...
  • Rainary
  • Rainary
  • 2017年09月12日 21:55
  • 242

第2课:什么是SQL注入

第2课:什么是SQL注入 SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。 随着B/S模式被广泛的应用,用这种模式编写应用程序的程...
  • zzjjiandan
  • zzjjiandan
  • 2014年06月17日 11:04
  • 362

第2课 GPIO实验

1.用汇编语言点亮一盏灯.  全过程涉及到2个寄存器 .global _start _start:: LDR R0,=0x56000050 @RO为GPFCON寄存器。配置GPIO口的功能 MOV ...
  • u013426958
  • u013426958
  • 2015年05月25日 16:06
  • 321

Java第2课 eclipse的使用

一、下载安装 1、  下载: Eclipse官方网站:http: //www.eclipse.org 2、  安装: Eclipse为绿色版本,不需要安装。解压后,直接双击以下图片即可打开。 ...
  • e5Max
  • e5Max
  • 2013年09月20日 21:04
  • 897

Python第2课 字符串(1)

特别说明:本文章参考《跟老齐学Python》齐伟 著 >>> x="I love Python." #用双引号可以表示字符串 >>> print x I love Python. >>> ty...
  • ccnuacmhdu
  • ccnuacmhdu
  • 2017年12月16日 23:20
  • 34

第2课:什么是SQL注入

SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。 随着B/S模式被广泛的应用,用这种模式编写应用程序的程序员也越来越多,但由于开发人员的...
  • 3150379
  • 3150379
  • 2015年02月28日 06:58
  • 362

Spark数据分析之第2课

本课主要介绍对类别变量基数相对小的数据创建直方图,比如本课中对匹配和不匹配的记录数统计。 #读取HDFS文件并创建RDD scala> val rawblocks = sc.textFil...
  • jiangshouzhuang
  • jiangshouzhuang
  • 2016年05月24日 11:52
  • 716

第2课 掌握C++

1.定义结构体和类时别忘记在最后加入 ";" 号!例如 Class Point{int x;int y;}; 2.#include  与#include "xxx.h"的区别: 不查找运...
  • zhang_zxk
  • zhang_zxk
  • 2016年09月01日 17:24
  • 52
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分布式系统-第2课
举报原因:
原因补充:

(最多只允许输入30个字)