该部分介绍IP的相关内容,其中包括IP数据报首部的各个字段,以及路由选择,子网划分的有关内容。(关于IP的协议规范在RFC 791中有非常详细的说明)
IP数据报基础
基础就是基础啦!闭眼睛思考一下一个IP数据报都包含那些部分呢?1.版本 2.首部长度3.数据报总长度(做减法可以得出数据长度喽)4.标志5.服务类型6.标识7.片偏移8.生存时间9.协议首部检验和10.源IP地址11.目的IP地址
以下是对IP数据报首部的具体说明可以瞧一瞧========================bulabulalala........................................
1.IP 首部,IP首部一般有20个字节,图1表示IP数据报首部字段:
图1 IP数据报首部字段
1.4位版本号:目前主要使用的协议版本号是4;
2.首部长度是4位的最大值是:1111,每一位代表4个字节,所以最大为60字节;
3.服务类型(TOS)包括3bit 的优先权字段(目前已被忽略),4bit的TOS字段,分别代表:最小时延,最大吞吐量,最高可靠性,最小费用,1bit未用位但必须置为0。图2列出对应不同服务的TOS字段的设置值:
图2 不同应用程序建议TOS值优先级队列联合使用哦。。
这些字段一般都都默认为0,会在QoS y
4.总长度字段是整个IP 数据包的长度,容易看出通过总长度字段和IP数据报的首部长度字段得出数据的长度,以及数据的起始位置。
5.16位标识位:标识位唯一的标识主机发送的每一个数据报,通常每发送一份数据包标识位就会加一,要想好好的了解16位标识位,3位标志位和13位片偏移就应该知道分片的内容。
下面对IP分片做出详细介绍:
为什么要进行分片呢?
当IP层收到一份IP数据报时要向接口发送IP数据报,但是每个接口的MTU是不同的,IP需要知道该接口的MTU然后与IP数据报对比,看是否需要进行分片,分片可以发生在原始主机上也可以发生在中间路由上,然后到达下一站时在进行重装,目的是使分片和重装对上一层(传输层)透明,IP数据报对重装和分片提供了充足的信息,因为标识位对于每一个IP数据报都是唯一的,如果对该IP数据包进行了分片标识位会被分配到每一个片中,标志位用1bit标识更多的片,除了最后一个片,其他的片该位都设置成1,片偏移指的是该片与原始数据报开始的偏移值(*当分片以后,每个片的16位总长度需要改成当前的值),标志位有一位标识不分片,不分片时该标志位为1,如果对于需要分片的数据报设置该位为1,则会把该数据报丢弃并且发送一个ICMP数据包差错报文给起始端。当IP数据报被分片后就成为了一个独立的分组,当数据报的这些分组到达目的端时可能会失序但是IP数据报首部有充分的信息保证接收端正确重组这些分片。对于IP层如果丢失了一个分片也会重传整个IP数据报,所以要尽量避免分片(可以看文献[Kent and Mogul 1987])。在分片中除了最后一片其余的片必须是8的整数倍,eg:1480就是8的整数倍。需要注意的是只有第一个分片有运输层首部如图3 所示为UDP 分片举例:
图 3 UDP分片举例
6.8位生存时间(TTL):数据报在传输中可通过路由的最大值。
7.8位协议:指出该数据报中使用何种协议(当一个主机收到的IP数据报de目的IP是该主机本身或者是一个广播包就会接受该数据报并且通过该字段发送给相应的协议模块进行处理)。
8.16位首部检验和:只检验首部部分,不检验数据部分。
9.源/目的 IP地址:通过IP找主机Ya。
对IP数据报首部的具体说明差不多叨叨完了===============bulabulalala............开始下一话题............................
IP路由选择
首先我们先来看window里面路由表长什么样子:
要知道IP路由选择是十分简单的,如果目的主机和源主机相互连接点对点或在同一个共享网络上例如以太网上或令牌环网上,那么IP数据包就会直接送到目的主机上,否则就发送到默认路由上,让路由来进行转发该数据报。以便目的主机的IP层将数据交给那么程序处理。路由表的制作是通过网络号的,而不是主机号,因为如果通过主机号来制作路由表,路由表会过于庞大。在路由表中网络号和下一跳地址是最主要的。网络接口软件使用ARP将下一跳路由的IP地址解析成硬件地址,并将硬件地址放在MAC帧的首部,然后根据硬件地址来选择下一跳路由。可以将路由想象成一个中转站,你如何将一个数据报送达到指定IP都是通过路由来进一步传送的,要知道IP是一个抽象的概念至于如何找到还要知道mac啦,后面咱们也会慢慢的讲到。
要理解IP选路,我们也要知道内核是如何维护路由表的。路由表中包含的信息决定了IP选路的决策。IP执行路由选择机制,路由守护程序提供选路决策等等。他们都是连续知识,需要慢慢理解,不可急躁,下面简单的说一说IP选路,可以要有印象慢慢理解才是。
一个数据报在IP层选路的过程如下:
(1)搜索路由表,寻找与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。找到将报文发送给该表目指定的下一站路由器或直接连接的接口。
(2)搜索路由表,寻找能与目的网络号相匹配的表目。找到将报文发送给该表目指定的下一站路由或直接的网络接口。
(3)搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
(4)如果上面步骤都未成功,那么发送一个“主机不可达”或“网络不可达”的错误。
通过经典例题做出相关的介绍,图 4为路由选路图片,如下:
假设在bsdi主机(IP为140.252.13.35)上发送一个到达A主机(IP为:192.48.96.9)的一个报文,由图可知主机bsdi在网络号为140.252.13的B类网络上,很显然每次传递数据报都会根据下一站的IP地址来改变链路层目的MAC,也就是说若向不同的网络进行传输数据就要知道传递的过程经过的路由,而如何找到经过的路由就要看该路由的IP地址了,注意该传递过程中目的IP是不会变的,改变的是链路层的目的MAC。链路层的首部的地址是下一跳的物理地址,也就是路由的硬件地址,但是如果源主机和目的主机在一个网络上,链路层的硬件地址也就是目的主机的硬件地址。
10.子网寻址:
为什么要划分子网呢?
A类地址可分配主机号是2^24-2,但是在一个网络中往往用不了这么多主机,会造成浪费,而划分子网就减少了这种浪费,子网对外部路由来说隐藏了内部的组织,划分子网可以看成将网络号+主机号变成网络号+(网络号+主机号),也就是将原来的主机号进行划分。
11.子网掩码: 掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号(任何主机在引导时进行的部分配置是指定主机IP地址。大多数系统把IP地址存在一个磁盘文件里供引导时读用)。如图5 位子网掩码的例子:
图 5 子网掩码
12.子网的例子:
附1 :
名词解释:
1.SLIP(Serial line internet prltocal)串行线路因特网协议,它是一个封装成连接串行接口和调试解调器的因特网协议,在RFC1055有具体的说明。
2.Modem (modulator-demodulator) 调制解调器可以将模拟信号变成数字信号,也能将数字信号变成模拟新型号。