老郑的博客

木叶飞舞之处,火亦生生不息!

IP协议

简介

  IP协议是TCP/IP中核心的协议,也是听得最多的协议,不管是TCP、UDP的数据都是以IP数据进行传输的。

  IP协议不能保证IP数据报能成功到达目的,IP只提供数据传输,如果发生错误的话,会丢弃该报文并且发送一个ICMP消息报给信息源。可靠性的服务是由TCP来完成。

报文格式

  普通的IP首部长为20个字节,除非含有选项字段


1.版本号
    主要有IP4,IP6现在大部分还是在用IP4协议。4位长度

2.4位首部长度
    首部长度从IP数据报开头,每32bit算一个首部长度,首部长度这个字段占4个bit.
    全为1的话,换算成十进制就是15,则15*4=60字节.

3.服务类型
    其中3bit的优先权字段,4bit的TOS子字段,1bit未用字段但必须置为0
    4bit的TOS分别代表【最小时延、最大吞吐量、最高可靠性和最小费用】

4.16位总长度
    以字节为单位,代表整个IP数据报的内容,由于16位bit,所以ip数据报最长可达65535字节
    但是大多数链路层都会对它进行分片,而且主机也要求不能接收超过576字节的数据报
    
5.16位标识
    主机发送一份数据报,它的值就会加1

6.TTL
    数据报可以经过最多的路由器时间

7.协议
    上层协议

8.校验和
    把首部中每个16bit进行二进制反码求和。结果存在检验和字段

  注意:ICMP、IGMP、UDP和TCP都采用相同的算法,但是TCP和UDP除了本身的首部喝数据外,在IP首部中还包含不同的字段

校验和计算






1.IP首部校验和
    1.1接收方:  IP首部校验和主要是针对IP首部看成16bit为单位的数字组成
        ,依次进行二进制求和,然后得出反码
        0x4500 0x0040 0x40d2 0x4000 0x8006  0xD272 0xc0a8 0x0301 0x2762 0xfc5c
        求和为
        3FFFC
        高位溢出值为3
        FFFC+0x0003=FFFF,转换为2进制为:1111111111111111
        反码为:0
    1.2接收方:
        4500 0028 a5a7 4000 7406 79c0 2762 fc5c c0a8 0301
        求和为:3FFFC.
        高位溢出:FFFC+0003=FFFF 转换为二进制反码为0

  发送方例子



1.发送方1
    4510 0054 7e02 4000 4006 0000 c0a8 031f c0a8 030e
    求和值为:2CAE9
    高位溢出为2,0002+CAE9=CAEB 转换为2进制为:1100101011101011
    反码为:11010100010100 转为十六进制:3514

IP路由选择

  目的主机和源主机直连(点对点链路),或者都在一个共享网络上,那么IP数据报就可以直接发送

  IP层在内存中有一个路由表,当收到一份数据报的时候,它都要对该表进行搜索一次。

  在liunx上采用route命令查看路由表。主要包含:目的地址、下一站、标志、网络接口



  IP路由选择是逐跳进行,逐跳的意思就是IP不知道到达任何目的的完整路径,所有的IP路由选择只为数据报传输数据提供下一站路由器的IP地址。

  IP路由选择主要完成以下功能:

1.搜索路由表,寻找能与目的IP地址完全匹配的表目

2.搜索路由表,寻找能与目的网络号相匹配的表目
  如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口
  
3.搜索路由表,寻找标为【默认】的表目

  如果上述步骤没有成功,该数据报不能被传送。并且会返回一个ICMP的主机不可达或者网络不可达错误

例子

  主机bsdi有一份IP数据报要传到ftp.uu.net主机上,它的IP地址时192.48.96.9,经过的前三个路由器如下图



1.主机bsdi搜索路由表,没有找到与主机地址或网络地址匹配的表目
只能用默认的表目,把数据报传给下一站路由器,即【主机sun】
    注意:数据报在发送的时候目的以太网是140.25.213.33这也是默认路由表。但是目的IP地址不变

2.sun接收到数据报后,目的IP地址时最终的信宿机地址(192.48.96.9)
但是链路层地址却是sun主机的以太网接口地址


3.sun接收到数据报后,发现目的IP并不是本机的任一地址,
而sun被设置成具有路由器的功能,因此它把数据报进行转发
经过搜索路由表,选用了默认表目


4.根据sun默认表目,它把数据报转发到下一站路由器netb,该路由器的地址时
140.252.1.183

5.数据报是经过点对点SLIP链路被传送的

6.当netb收到数据报后,它执行和sun主机相同的步骤,把数据报发送到下一站
路由器gateway(140.252.14).
位于以太网140.252.1上的主机netb用ARP获得对应于
140.252.1.4的48bit以太网地址。
这个以太网地址就是链路层数据帧头上的目的地址

子网寻址

  首先了解互联网地址分为五类,如下图所示



  例如有一个B类网络(140.252),在剩下的16bit当中,8bit用于子网号,8bit用于主机号,这样的话就允许有254个子网,每个子网可以有254台主机。

1.A类网络号
    1.网络号占一个字节,但这个字节【最高位为0】,只剩下7位可以进行分配
    2.网络号为127保留作为本地【环回测试】


2.B类网络号
    1.网络号占二个字节,最高位是【10】,只剩下14位进行分配
    2.主机号占2个字节
    
3.C类网络号
    1.网络号占三个字节,只剩下21位可以进行分配
    2.c类主机号占一个字节
posted @ 2020-07-08 15:23  zyz1  阅读(350)  评论(0编辑  收藏  举报