Linux菜鸟学习之网络浅入

来源:互联网 发布:goeasy实现java推送 编辑:程序博客网 时间:2024/05/16 19:09

Network

个人认为要想学习网络必须从网络的诞生到发展都有个了解,这样才能深刻体会什么是路由,为什么需要路由、什么是网关,为什么需要网关。这样可以更好的理解他们被需要的意义。本人刚学linux,以下都是本人对网络的个人学习体会,如有错误,请大神们指点。

我们用的比较多的是以太网。关于这个就不多废话了。

1.初级阶段

  在最开始的时候,2台计算机需要通信的话,需要介质连接起来。如双绞线、同轴电缆、以太网网线、蓝牙信号、无线信号等等。刚开始的时候都是靠电磁信号。这下有个问题了。假设高电压是“1”信号,低电压是“0”信号。但对方怎么知道一个高电压过来是几个“1”呢?这下就有了限定,多长时间的高电压算一个1。所以在传输之前就要商定多长时间算收到一个“1”。这就是最初的协议(protocol)。我喜欢叫游戏规则,(带宽的单位Mbps是兆比特位每秒的意思

  现在不满足了,希望有3台主机可以互相通信了。为了不乱套,就得加游戏规则了。

  问题1

  现在需要给3台主机编个号,来区分不同的主机。不妨先编个号A,B,C。因为介质是电信号。所以,当A和B通信的时候,C就不能说话了,因为C一说话,总线上的电信号就混乱。这下就需要线路仲裁,规定在某一个时刻,规定谁有权利和别人说话。



以太网中的CSMA/CD:载波侦听、多路访问、冲突检测。
     这种协议解决了线路仲裁的问题。具体实现方法简单了说就是说话前看看总线有人用没,没人用的话,自己说,有人用的话就等着。任何时候只要冲突就立即后退并且等待。

      问题2

  现在A发了一个信息,B,C都能看见了,现在作为发送方,他怎么表达自己想跟B说话,而不跟C说话。(A,B,C是为了我好区别三台主机取的名,你可以叫A,我也可以叫A。而MAC是唯一的)那么游戏规则就给每一个接入这个线上的设备一个识别码,那么这个标志叫做MAC标示,也叫MAC地址。这下A就可以说了,先喊一声:"我要将信息发给B的MAC",C一看,MAC和自己的不一样。那么C就不理会这条信息。那么游戏规则就规定了,说的话之前要加一个首部报头来规定是发给谁的

                        
  首部写上我是谁,我要发给谁!!!B,C都看到了有这条消息从总线上来了一条消息,但B看到是自己的MAC地址,C看到不是自己的MAC地址,C就无视了这条信息。。。(其实这是广播)

  问题3

  这下线路仲裁,和谁给谁发的问题解决了。但如果主机数越来越多变成100个,200个,那么总线的冲突可能就越来越大,直到谁发就阻塞,整个线路大家都用不了,就跟北京三环一样,有车也不能开。这下怎么办呢??
  为了解决这个问题,游戏规则就得改改了。一个家族人太多了,那么就得分家了,把一部分人分出去。将大的网络切割成小的网络,这下就可以大大降低冲突的可能了。可以正常通信了。

这下A给B发信息,并不影响C和D之间的通信,A,B用的总线和C,D用的总线被隔离开了。但当A需要和C通信时,这个智能设备会发现A要通信的对象不在左网络中,于是发给右网络给C,这个智能设备就解决了主机数太多会占用线路的问题。这个设备就是网桥。

   问题4

    这下问题又来了。网桥怎么知道,A要通信的对象是在左网络还是右网络呢??

    网桥内部维护了一张表,A要发送给C,网桥查表,A要发的目标不在A所在的左网络,于是网桥将信号发给其他所有接口(这里我只画了一个右网络),这还是广播机制。这张表是网桥不停学习的结果。C回信时,网桥这下就知道了,C在右网络,A在左网络。而不要广播了。


   这下看起来网络初具规模了,游戏可以暂时进行下去了,为了更好的游戏,如果上述的那个智能设备的每一个接口都接一台主机,而不是接进来一个小网络,那么是不是效率可以高点。再给那个设备里多弄点线路,让其不互相影响。不就完美了吗?于是出现了交换机
   A和B通信时,C和D也能通信,因为,交换机内部有交叉点阵列。就是说,能走的路很多,大家不用互相争抢了,再加上主机与交换机连接时用双绞线,A跟B发信时,B也能跟A发信。
  交换机还在不停得记录通信都有谁接在交换机上。

问题5

A想和B通信,但A不知道B存在不存在,怎么办??很简单,广播~
A先喊一声,看B存在不,B存在的话,B会回信,这下就问题解决了,网桥不能阻断广播,交换机也不能。


2.发展阶段

  现在的网络好像已经差不多形成了,至少像一点现代网络了。游戏可以继续下去了。

问题1

但随着发展,主机数还是在不断的增加,变成上千台主机。这下问题又出现了,交换机有那么多接口吗。还有数量过多,每台主机想要和另一台主机通信都需要喊一下。确认对方存在不,上千台主机都广播, 又变得混乱了。
(举个例子,有1000个人都进了一个QQ群里,大家都不知道自己的朋友此时此刻有没有上线,在QQ群里说话叫广播,A想和B说话,A先在群里发“B,你在吗?”,如果B在,B私聊A“我在,我的QQ号是xxx(MAC地址),咱们私聊吧”。上千个人在QQ群里找人,你发一句,我发一句,一下就乱套了)况且不是QQ会员的话,群聊人数还被限制的很低。。。。

因为人数过多的问题永远是将大群人再分成小部分人。将一个交换机上的主机分出去。



这下人数被分出去了,这下可以解决交换机接口不够的问题了。但还有个问题,广播泛滥问题,如果中间的智能设备还是转发广播的话就还是没解决广播泛滥的问题。但要不转发广播的话,A怎么知道E主机存在呢??
为了解决这个问题,游戏规则就得再加加东西了,这下就提出了逻辑地址,也就是现代IP地址的雏形。



这下再对上述网络再进行一次地址赋予,这次给他们一个IP地址
这下将不同的小网络也区分开了,中间的设备R标记不同的小网络。R不管信息报中信息是啥,也不管MAC地址是什么。他只管IP地址是什么,是哪个网络的。当A要确认E存在时,是说“我是1.1,mac:xxx ,目标:2.1,max:R1。”。发信时。指定MAC地址是R1的MAC地址。让R1去转发。。设备R发现A要找2网络的主机,于是R告诉R2。让R2帮忙转给2网络中E。如果要找的不是2.1而是1.2。那么设备R就不管,而设备R与交换机的接口叫做网关(R1)。R1是交换机上的接口。而R就是路由器。网关和路由器接着。
这下IP就横空出世了,互联网进入了发展中期。一下子引出了子网掩码,网关,路由等等概念。这样的话就很好理解IP与MAC的关系。


注:假如主机名为A,IP为1.1,mac为xxx 的一台主机要和E通信 。A写了一个报文
原地址:1.1 目标地址:2.1
原MAC:xxx 目标MAC:R1(1.5)xxx
要说的悄悄话。

至于A要知道R1(1.5)网关的MAC地址,还得通过广播。
R1网关收到信息后给路由器,路由器再根据2.1这个IP给2号网的网关。R2网关地址2.3。这下网关2.3广播一下,得到了2.1对应的MAC地址,也就是主机E的MAC地址。这下R2网关2.3根据2.1的MAC将报文送给2.1.主机E看到信后回话。
源地址:2.1 目标地址:1.1
原MAC:yyy 目标MAC:R2(2.3)yyy
回信

又将信回给2号网的网关。等等。。。。


本地网络通信必须要靠MAC地址,也就是现在所说的局域网通信靠MAC地址。MAC地址不能跨网络。本地通信依赖广播。
通过广播将问问ip为1.2的mac地址。这个IP地址得到mac地址的过程叫做ARP地址解析。知道MAC地址问ip叫做RARP地址解析。

当需要跨网络通信时就需要IP地址来指明了。为了指明此网络是否是本地网络就需要子网掩码了,子网掩码把网络段和主机段分开。





路由器记录着不同的接口对应着不同的网络,就是路由表

3.成熟阶段

互联网到这个阶段已经算是比较成熟了,也和我们见到的网络也是差不多了,接下来的发展就是路由器变的更多了。路由器会学习那张路由表。那么就会产生下面这种情况

如果主机1.1要和7.1通信。信息报交给路由器A,A发现自己的路由表里没有7号网。那怎么办???
那可以让路由器自己找不到的全交给R5。让下一个路由器去找找。让下一个路由器看看他路由表里有7号网络吗。
路由设备可以自动学习。路由A发现7号网可以通过自己的R5发往目的地。路由B发现7号网可以通过自己的R12。路由C发现7号网可以通过自己的R9。各个路由都在整个路由网络里贴出,到哪些网可以从自己这走!!!

但这又有一个问题出现了,有一天交换机7坏了,R9线断了,于是路由C发现路由B说他知道从哪到7号网络。于是信息被发给路由B,路由B按照自己之前的路由表将信息发给路由C,路由C又将信息发给路由B,路由B又将信息发给路由C。循环往复。。。。。

   
    所以学习是需要动态的。当路由C发现自己不能到7号网的时候,需要通知下去,给所有看过自己贴出信息的路由器,以后7号网的信息报别发给自己了,这个过程叫做路由器的收敛过程。这就需要算法了,RiP2协议。。。。。


   这下就清晰了。MAC地址是用来本地通信的,IP使用网间通信的。。IP是主机到主机的通信。在1.1与7.1通信时。IP地址是不会变的,但MAC地址不停变(网关的MAC)。


   最后再通过端口号识别不同主机的不同进程,从而实现了,进程到进程的通信。这下就需要再在信息报再加个端口首部。
   只要按照游戏规定将相应的程序对应相应的端口。。
     



  不同主机就是通过这种方法连接在一起的,至于具体的QQ聊天等等,还需要加更丰富的首部,以上的都是菜鸟的初学看法,如果哪里不对,请指点指点






1 0