网络协议和IP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络协议和IP相关的知识,希望对你有一定的参考价值。

     IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。

                   

    

IP协议是TCP/IP体系中两个主要的协议之一,而IP地址位于IP数据报的首部,在网络层及以上使用的是IP地址,因此在数据链路层是看不见数据报的IP地址,另外首部的前一部分是固定长度,共20字节。在TCP/IP的标准中,各种数据格式常以32位为单位来描述,通过分析IP数据报的格式就能够知道IP协议都具有哪些功能    

                

  从捕捉的数据包看出是ipv4的版本,首部长度为20字节,次长度为固定长度,total length :60 全部长度为字节  Differentiated services Field: 0xoo 指明服务类型;flags  标志  Fragment offset :0 片偏移量为零。time to live :64 生存时间,又叫跳数。header checksum :oxee19 校验和,可验证数据包是否出错,source:172.28.15.1 原地址的ip Destination:172.28.15.55为目的地址ip

    IP使用四个关键技术提供服务:服务类型,生存时间,选项和报头校验码。服务类型指希望得到的服务质量。服务类型是一个参数集,这些参数是Internet能够提供服务的代表。这种服务类型由网关使用,用于在特定的网络,或是用于下下一个要经过的网络,或是下一个要对这个数据报进行路由的网关上选择实际的传送参数。生存时间是数据报可以生存的时间上限。它由发送者设置,由经过路由的地方处理。如果未到达时生存时间为零,抛弃此数据报。对于控制函数来说选项是重要的,但对于通常的通信来说它没有存在的必要。选项包括时间戳,安全和特殊路由。报头校验码保证数据的正确传输。如果校验出错,抛弃整个数据报

        IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。

                    接下来即是校验和的计算:

          IP首部校验和的计算方法

            1.把校验和字段清零。

          2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。

            下面以网络上的例子讲述:

                                

        接收方进行校验时,也是对每16位进行二进制反码求和。接收方计算校验和时的首部与发送方计算校验和时的首部相比,多了一个发送方计算出来的校验和。因此,如果首部在传输过程中没有发生差错,那么接收方计算的结果应该为全一,因为接收方计算除校验和以外的部分得到值是校验和的反码,再加多出来的校验和当然是全一了。

          最后对上述过程举个例子:先将校验和字段置零;

                              IP头:

                              45 00    00 31

                              89 F5    00 00

                              6E 06    00 00(校验字段)

                              DE B7   45 5D       ->    222.183.69.93

                              C0 A8   00 DC     ->    192.168.0.220

                              计算:  

                      4500 + 0031 +89F5 + 0000 + 6e06+ 0000 + DEB7 + 455D + C0A8 + 00DC =3 22C4

                      0003 + 22C4 = 22C7

                      ~22C7 = DD38      ->即为应填充的校验和

        

                     当接受到IP数据包时,要检查IP头是否正确,则对IP头进行检验,方法同上:

             计算:

                 4500 + 0031 +89F5 + 0000 + 6E06+ DD38 + DEB7 + 455D + C0A8 + 00DC =3 FFFC

                 0003 + FFFC = FFFF

             得到的结果是全一,正确

(作业)

        求校验和的算法及程序:

                    算法:

                    SHORT checksum(USHORT* buffer, int size){
    unsigned long cksum = 0;
    while(size>1)
    {
        cksum += *buffer++;
        size -= sizeof(USHORT);
    }
    if(size)
    {
        cksum += *(UCHAR*)buffer;
    }
    cksum = (cksum>>16) + (cksum&0xffff); 
    cksum += (cksum>>16); 
    return (USHORT)(~cksum);
}

   

以上是关于网络协议和IP的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络—— OSI七层协议和TCP/IP四层协议

网络通讯中TCP协议和UDP协议的区别

网络协议和IP

TCP/IP协议和HTTP协议

TCP/IP协议和OSI七层模型说明

细说DHCP网络协议和如何搭建DHCP服务器