computer network basis

写VMware的网络模式那篇文章写不下去了,所以先写完这篇加深自己对计算机网络的认识再继续写那个。

关于计算机网络,大都要讲到TCP/IP 这个协议簇,总共有四层:网络接入层,网络层(说法不一),传输层,应用层。相比于OSI七层模型,它把物理层和数据链路层归一为网络接入层,因为我们很少情况下会考虑物理层的关系,然后又相当于把会话层,表示层,应用层归一为应用层,因为我们极少接触到会话层和表示层(我所接触的也就是像SDP这种传输信令的协议会归在会话层),所以没有必要细分。说完协议簇,再说这几个层次的标识:

  • 网络接入层:MAC地址标识,是计算机的硬件地址,一般不会改变,固化在计算机的网卡上。当然你有多个网卡就会有多个MAC地址,一般像PPP协议是工作在这上面的。
  • 网络层:IP地址标识,计算机的虚拟地址,相当于一个临时的身份证,很有可能会经常改变(除了某些骨干网的节点路由器和核心交换机一般不变,还有就是服务器的),一台计算机可能有多个IP地址,IP地址又可分为ABCDE类,当然现在一般都用CIDR进行路由,所以这个分类一般没啥意思了,还有就是一些特殊的IP地址:
    • 127.0.0.0/8 本地回环测试地址,不进行任何路由和转发直接,甚至不会进入到网卡,你可以试着用Wireshark监听网卡的ICMP报文,然后ping 127.0.0.1 会发现没有监听到任何数据包,这意味着数据报就没有下到链路层,直接在网络层就被返回本机处理了。
    • 0.0.0.0,关于这个地址说法一,主要还是参考维基百科里面的说法,主要有下面几个含义:
      • 从IPv4 角度来讲,作为目的地址是指不可路由的地址用于指定一个无效的或未知的或不适用的目标。作为源地址是一种带内信令的应用(DHCP),是给本来非法的数据报提供一个特殊含义。0.0.0.0作为源地址时一般用在DHCP获取IP时,主机从来不知道自己的IP所以就将源IP设置为 0.0.0.0 (如果之前有过IP的话就会和DHCP服务器协商这个IP是否有效,即租期到了没,即使是这种情况也是 把最后使用的那个IP地址放在udp数据报里面而不是源地址。顺便提一下DHCP的四个阶段 DHCPDISCOVER DHCPOFFER DHCPREQUEST DHCPACK)。
      • 从服务器角度来讲,这代表着本机所有的IPv4地址,如果一个服务器在监听0.0.0.0则表示它在监听本机的所有ip,所以可以通过任意一个可达的IP访问服务器。(所以在编程中经常是监听这个地址而不是127.0.0.1以便其他人访问)
      • 从路由的角度来看,这就意味着默认的路由,就是在路由表中查不到的就通过这个路由,相当于告诉你,其他路都走不通了就走这条路。Windows系统会自动产生一个目的地址为0.0.0.0的默认路由(他对应的网关就是默认网关)。而对于 0.0.0.0的默认网关就是意味着直接进行二层通信,不经过三层(代表直连路由,就是不要通过网关),一般这样的条目不会设置G标志,因为说明目的地是直接相连的条目会以G标识,该路由是到一个网关(路由器,要路由的)。
      • 0.0.0.0/8 指本网络的主机(0.0.0.0就是指本网络,主机ID为0),0.0.0.0/32(就是0.0.0.0) 作为一个源地址指本网络的本主机(只能在被用做源地址来获取自己主机IP的时候用) 0.0.0.0/8 里面的其他地址指本网络上的某个特定主机(只能在被用做源地址来获取特定主机IP的时候用,帮助别人获取ip)参考这里
    • 255.255.255.255 受限广播地址,只用作目的地址,这种目的地址的数据报不会被路由器转发(除非特别设置路由器将数据报转发到另一网络,这种情况一般是主机数较多,且主机和DHCP服务器不在同一网络内),其广播功能限制在本网内部,可用作DHCP时的目的ip。
    • 专用地址,一般用作局域网,比如校园网,家庭路由器。最大的CIDR地址块分别有 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16,这里要注意是 最大的 以为很多都不会用到最大的块,比如有些家庭路由器只是用到了 192.168.1.0/8 这样的一个C类地址块。
    • 169.254.0.0/16 链路本地地址,这些地址与专用网络地址一样不可路由,也不可作为公共网络上报文的源或目的地址。链路本地地址主要被用于地址自动配置:当主机不能从DHCP服务器处获得IP地址时,它会用这种方法生成一个。微软创建了一种叫自动专用IP寻址(APIPA)的实现,所以当你的windows电脑不能DHCP获取ip是就会生成一个169.254.x.x的ip。
    • 224.0.0.0/4 多播(之前的D类网络)只能用作目的地址,而不能作为分组中的源地址。
    • 240.0.0.0/4 保留(之前的E类网络)
    • 网络号全0, 当某个主机向同一网段上的其他主机发送报文时就可以使用这样的地址,分组也不会被路由器转发。相当于本网络。
    • 表示主机的二进制位(主机号)全0或全1不能使用,全0表示本网(网络地址),全1表示本网广播(直接广播地址),一个常见的误解是以0或255结尾的地址永远不能分配给主机:这仅在子网掩码至少24位长度时(旧的C类地址,或CIDR中的/24到/32)才成立。比如,在B类子网192.168.0.0/255.255.0.0(即192.168.0.0/16)中,广播地址是192.168.255.255。在这种情况下,尽管可能带来误解,但192.168.1.255、192.168.2.255等地址可以被分配给主机。广播地址是借由子网掩码的比特补数并和网络识别码运行 OR的比特运算就能获得,在A、B和C类网络中,广播地址总是以255结尾。随着CIDR的到来,广播地址不一定总是以255结尾。比如,子网203.0.113.16/28的广播地址是203.0.113.31。一般情况下,子网的第一个和最后一个地址分别被作为网络识别码和广播地址,任何其它地址都可以被分配给其上的主机。(以上内容参考维基百科)。
  • 传输层,主要是TCP UDP这些协议来保证网络的有效性。在这上面一般用端口来标识一个身份。
  • 应用层,用进程ID来标识一个身份。

说完四层模型,再说一些作用域的问题,先搞清楚几个东西:

  • 集线器,用来物理上连接几台主机,它的作用域在物理层,各主机处在同一碰撞域之中,他们共享带宽。
  • 网桥,为了减小碰撞域,实现几台主机的链路层互联,通信方式是以MAC地址进行通信。一般的网桥只有两端,而多接口网桥可以有多个端。网桥的A端口连接A子网,B端口连接B子网,为什么网桥知道哪些数据包该转发,哪些包不该转发呢?那是因为它有两个表A和B,当有数据包进入端口A时,网桥从数据包中提取出源MAC地址和目的MAC地址。一开始的时候,表A和表B都是空的,没有一条记录,这时,网桥会把数据包转发给B网络,并且在表A中增加一条MAC地址(把源MAC地址记录表中),说明这个MAC地址的机器是A子网的,同理,当B子网发送数据包到B端口时,网桥也会记录源MAC地址到B表。当网桥工作一段时候后,表A基本上记录了A子网所有的机器的MAC地址,表B同理,当再有一个数据包从A子网发送给网桥时,网桥会先看看数据包的目的MAC地址是属于A子网还是B子网的,如果从A表中找到对应则,抛弃该包,如果不是,则转发给B子网,然后检查源MAC地址,是否在表中已经存在,如果不存在,在表A中增加一条记录。
  • 二层交换机(多接口网桥),交换机也有一张MAC-PORT对应表(这张表的学名为:CAM),和网桥不一样的是,网桥的表是一对多的(一个端口号对多个MAC地址),但交换机的CAM表却是一对一的,如果一个端口有新的MAC地址,它不会新增MAC-PORT记录,而是修改原有的记录(参考这里)。 这就意味着如果二层交换机下面再接集线器是不是会出现问题?
  • 三层交换机与路由器,这和网桥有着本质的不同,这是工作在网络层的,用IP地址里面的 网络号 进行通信。但是三层交换机的主要功能仍是数据交换(参考这里),它的路由功能通常比较简单,因为它所面对的主要是简单的局域网连接,路由路径远没有路由器那么复杂,它用在局域网中的主要用途还是提供快速数据交换功能,满足局域网数据交换频繁的应用特点。路由器的主要功能还是路由功能,它的路由功能更多的体现在不同类型网络之间的互联上,如局域网与广域网之间的连接、不同协议的网络之间的连接等,所以路由器主要是用于不同类型的网络之间。它最主要的功能就是路由转发,解决好各种复杂路由路径网络的连接就是它的最终目的,所以路由器的路由功能通常非常强大,不仅适用于同种协议的局域网间,更适用于不同协议的局域网与广域网间。它的优势在于选择最佳路由、负荷分担、链路备份及和其他网络进行路由信息的交换等等路由器所具有功能。为了与各种类型的网络连接,路由器的接口类型非常丰富,而三层交换机则一般仅同类型的局域网接口,非常简单。从技术上讲,路由器和三层交换机在数据包交换操作上存在着明显区别。路由器一般由基于微处理器的软件路由引擎执行数据包交换,而三层交换机通过硬件执行数据包交换。三层交换机在对第一个数据流进行路由后,它将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通过而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。同时,三层交换机的路由查找是针对数据流的,它利用缓存技术,很容易利用ASIC技术来实现,因此,可以大大节约成本,并实现快速转发。而路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现,转发效率较低。正因如此,从整体性能上比较的话,三层交换机的性能要远优于路由器,非常适用于数据交换频繁的局域网中;而路由器虽然路由功能非常强大,但它的数据包转发效率远低于三层交换机,更适合于数据交换不是很频繁的不同类型网络的互联,如局域网与互联网的互联。如果把路由器,特别是高档路由器用于局域网中,则在相当大程度上是一种浪费(就其强大的路由功能而言),而且还不能很好地满足局域网通信性能需求,影响子网间的正常通信综上所述,在局域网中进行多子网连接,最好还选用三层交换机,特别是在不同子网数据交换频繁的环境中。一方面可以确保子网间的通信性能需求,另一方面省去了另外购买交换机的投资。当然,如果子网间的通信不是很频繁,采用路由器也无可厚非,也可达到子网安全隔离相互通信的目的。具体要根据实际需求来定。三层交换与路由最大的区别就在于:路由支持nat转换,而三层不支持。在实际工程中体现出来就在:路由上直接接光纤可以上网,而将光纤接到层三设备上是不能上网了。三层每个端口都有专用的mac地址,有专用的ASIC集成电路。 一般的对于家庭路由器只要不接wan口而全部接在LAN口就相当于一个小型的二层交换机了
  • 网关,(route -n查询)如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关。这个网关是由目的ip跟路由表里面的条目进行匹配后得出的()。默认网关是主机的默认下一跳地址,一般小型网络默认网关(家庭网络)是路由器,大型网络(校园网)是三层交换机。
  • ARP协议 地址解析协议,即ARP(Address Resolution Protocol),当数据报从路由器下发到交换机的端口时候只有IP地址,而没有MAC地址,所以就需要将IP地址里面的 主机号 翻译成为MAC地址(向局域网内广播来得到),然后将数据报下发到指定主机。还有就是主机要知道网关(DHCP只提供网关IP)、DHCP服务器的MAC地址时,或是和同一局域网内的主机通信时也会用到。例如我们可以看到这样的ARP请求 Broadcast ARP 60 Who has 172.19.72.1? Tell 172.19.73.53 响应是172.19.72.1 is at 00:18:82:c6:a3:b4,另外要注意的是路由表配置正确的路由器只会对本网内的ip使用arp协议,对于非本网内的ip由于不在一个链路域里面,所以即使拿到他的mac也无法下发,所以对于这种ip的数据报只能把它发给其他路由器。
  • TTL 是指链路的经过的跳数的最大值(有的是数据报的存活时间),这个主要是用来防止链路出现了环路而浪费带宽
T B
站点访问量: / , 本页阅读量:
T B