Fluge Site

基本认识

 最近一次接触ip是在我读《TCP/IP详解》时读到了,其实我感觉这些基础对理解整个互联网的结构都有一些很好的认识,在TCP/IP的协议簇中,首先简单的说一下在TCP中分层:

  • 数据链路层:一般都是物理设备驱动程序和接口
  • 网络层:处理分组在网络中的活动,如分组选路。TCP/IP中,IP协议,ICMP协议,IGMP协议
  • 运输层:主要为应用程序提供端到端的通信,主要包括两种协议:TCP(高可靠的)、UDP(不可靠的,效率高的)
  • 应用层:负责处理特定的应用程序的细节

    上图是我认为对TCP/IP分层的理解很好的一张图TCP/IP分层和传统的OSI分层不一样。OSI的7层是分的更加详细。对于TCP/IP的协议簇重点关注的还是网络层,运输层。 在TCP/IP中有一个分层的概念值得注意:

    应用层关心的是应用程序的细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的通信细节.IP协议是一种不可靠的网络层服务,它只是尽可能的快地把分组从源节点送到目的节点,并不提供任何可靠性的保证,但是IP得可靠服务可以由上层协议(TCP)来提供。

IP地址的分类

 互联网上每个接口必须有一个唯一32位的Internet地址(IP地址),基本分类如下:

IP地址是具有一定基本结构,一共有5类地址,每一类都包括:标志位、网络号、主机号。5类地址分为三种:单播地址(目的为单个主机,有:A、B、C),广播地址(目的端为给定网络上的所有主机:D),多播地址(目的端为同一组内的所有主机:E)。

IP路由选择

 在一般的通信中,IP可以从TCP、UDP、ICMP、接受数据报(即本地生成的数据报)并进行发送,或者从一个网络接口接受数据报并进行转发。IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到处理。如果数据报的目的不是这些地址,那么如果IP层被设置为路由器的功能,那么就对数据报进行转发,否则数据报就被丢弃。并且IP数据包的TTL(生命周期)为0,则该IP数据包就也会被抛弃。路由表中一般包含:目的IP地址,数据报传输的网络接口,下一跳的IP地址。
 IP路由选择是逐跳进行的。IP不知道到达任何目地的完整路径(除了与主机 直接相连的目的地)。所有的IP路由选择只为数据报传输提供下一站路由器的IP地址。它假定下一站路由器比发送数据报的主机更接近目的路由。如果IP数据报不能送达且来自本机那么一般会想生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
基本过程:

  1. 如果ip数据包的TTL为0,则该IP数据报直接被丢弃
  2. 搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
  3. 搜索路由表,如果匹配主机失败,则匹配同子网的路由器,如果找到,则将该包发向路由器
  4. 搜索路由表,如果匹配同子网路由器失败,内匹配同网号路由器,如果找到,则将该包发向路由器
  5. 搜索路由表,如果以上都失败了,就搜索默认路由
  6. 如果都失败了,就直接丢弃

    子网寻址

     现在的所有主机都要求支持子网编址。不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号在分成一个子网号和一个主机号。这样做的原因就是应为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数为16777214和65534个主机,但是事实上,在一个网络中一般安排不了这么多的主机。下图为B类子网划分的例子:

    上面是一个B类网络地址(140.252),在剩下的16位中,8为用于子网号,8为用于主机号,这样就允许254个子网,每个子网就可以有254台主机。

    IP的子网掩码

     由于除了IP地址外,主机还需要知道有那几位是子网号,那几位是主机号,这两个信息都是通过子网掩码来获得

    ps:判断一个IP地址所属的类别,一般看IP地址的开头就行,不看子网掩码。一般0~127是A类,128~191是B类,192~223是C类,224~239是D类。

ARP协议—地址解析协议

 首先在以太网协议中的规定,同一局域网的一台主机要和另一台主机进行通信,必须知道目标主机的MAC地址。但是在TCP/IP协议中,网络层和传输层都只关心目标主机的IP地址.所以这个ARP协议就是IP和MAC的一种映射。
具体过程:当A:192.168.10.11向B:192.168.10.19发送数据时,主机A首先会在自己的ARP缓存表(IP-MAC地址的对应表)中寻找是否有目标的MAC,如果不存在,那么主机就向同一网段的网络发送一个ARP协议的广播包(谁知道192.168.10.19的MAC地址),网络上其他主机并不会响应ARP的广播,只有主机B接受大这个广播才会向主机A做出回应。主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可。同时ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。