IP协议介绍

  1、IP协议是TCP/IP协议族中最为核心的协议。IP协议将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP协议承载所有上层的TCP、UDP、ICMP数据都以IP数据报格式进行传输。

  2、IP提供不可靠、无连接的数据报传送服务。不可靠(unreliable)意为它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制,如果出错可以通过ICMP报告,ICMP在IP模块中实现,任何需要可靠传输的数据都需要TCP来提供无连接(connetionless)意为它不维护任何后续数据报的状态信息,每个数据报的处理是相互独立的,数据报可以不按发送顺序接收。

  

  IPv4协议结构

  

  1、版本(4bit):目前的协议版本号是4,IP也称为IPv4。

  2、首部长度(4bit):指的是包括IP首部固定部分和可变部分的总长(不含数据部分)。由于首部长度占4bit,可以表示的最大数值为15(二进制数为1111),那它能表示的最长首部长度为60字节。这60字节是怎么计算的呢?因为规定是1bit位代表32bit,那么15 * 4B(32bit/8bit) = 60B(字节)。这也就说明了IP首部的长度最小值是5最大值是15,可以表示的最小长度是20B(字节)最大长度是60B(字节)。

  3、区分服务(8bit):包括一个3位的优先字段,4位的TOS字段和1位的保留字段(必须置0)。

    优先字段3位:设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)- 7(网络控制),延迟字段:1位,取值:0(正常)、1(期特低的延迟)。

    流量字段:1位,取值:0(正常)、1(期特高的流量)。

    可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)。

    成本字段:1位,取值:0(正常)、1(期特最小成本)。

  4、总长度(16bit):总长度是指数个IP数据报的长度,以字节为单位。利用IP首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。该字段长16bit,因此数据报的最大长度为2^16-1=65535字节。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

  5、标识(16bit):IP协议在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中,因此同一个数据报的所有分片都具有相同的标识值。

  6、标志(3bit):第一位保留。第二位(Don’t Fragment,DF)表示“禁止分片”。如果设置了这个位,IP模块将不对数据报进行分片,在这种情况下,如果IP数据报长度超过MTU的话,IP模 块将丢弃该数据报并返回一个ICMP差错报文,第三位(More Fragment,MF)表示“更多分片”,除了数据报的最后一个分片外,其他分片都要把它置1。

  7、片偏移(13bit):较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始,片偏移以8个字节为偏移单位,这就是说,除了最后一个分片,每个分片的长度一定是8字节(64位)的整数倍。

  8、生存时间(8bit):(Time To Live,TTL)是数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置(常见的值是64)。数据报在转发过程中每经过一个路由,该值就被路由器减1。当TTL值减为0时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。

  9、协议(8bit):用来区分上层协议,其中,ICMP是1,TCP是6,UDP是17。

  10、首部检验和(16bit):这个字段只检验数据报的首部,但不包括数据部分,这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和。(交换机是二层设备不识别IP数据报文这要注意)

  11、源地址(32bit):

  12、源端IP地址和目的端IP地址:用来标识数据报的发送端和接收端。一般情况下,这两个地址在整个数据报的传递过程中保持不变,而不论它中间经过多少个中转路由器

  13、可选字段(40bit):这部分最多包含40字节,因为IP头部最长是60字节(其中包含固定部分20字节)。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目,某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。可选包括:

    记录路由(record route),告诉数据报途经的所有路由器都将自己的IP地址填入IP头部的选项部分,这样我们就可以跟踪数据报的传递路径。

    时间戳(timestamp),告诉每个路由器都将数据报被转发的时间,填入IP头部的选项部分,这样就可以测量途经路由之间数据报传输的时间。

    松散源路由选择(loose source routing),指定一个路由器IP地址列表,数据报发送过程中必须经过其中所有的路由器。

    严格源路由选择(strict source routing),和松散源路由选择类似,不过数据报只能经过被指定的路由器。

 

  IP路由选择(实例 )

  测试路由的走向,我用H3c模拟器做了实验,整个环境中有R1、R2、R3三台路由器,路由器的MAC、IP都标识如下:

  

  测试项目

    1、目标IP与本地IP是同一地址段(如172.16.1.1 -> 172.16.1.2),不需要网关转发,即可通信,

      请求时,源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 向 目标MAC地址(78:51:84:11:10:05)目标IP地址(172.16.1.2)发请求包;

      回复时,目标MAC地址(78:51:84:11:10:05)、目标IP地址(172.16.1.2)向 源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 发回复包。

    2、目标IP与本地IP是不同地址段(如172.16.1.1 -> 172.16.2.2),需要网关转发,才可通信,

      请求时,源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 向 目标MAC地址(78:51:84:11:10:05)目标IP地址(172.16.2.2)发请求包;

      回复时,目标MAC地址(78:51:84:11:10:05)、目标IP地址(172.16.2.2)向 源MAC地址(78:51:7b:21:0f:05)、源IP地址(172.16.1.1) 发回复包。

    注:通过观查测试结果可以知道,当目标IP与本地IP是不同地址段时,请求和回复时,都需要通过R1路由器上的网关R2上的接口地址请求和回复,也就是需要网关来完成数据报的转发,而IP地址无论是请求还是回复两种测试项目中都无变化(没有做NAT的情况)。

TCP/IP协议 网络层的更多相关文章

  1. TCP/IP协议 (图解+秒懂+史上最全)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  2. TCP\IP协议实践:wireshark抓包分析之链路层与网络层

    目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...

  3. 门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结

    门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的 ...

  4. OSI七层模型详解 TCP/IP协议

      总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...

  5. TCP/IP协议(二)tcp/ip基础知识

    今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...

  6. TCP/IP协议(一)网络基础知识

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

  7. 【原创】技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)

    1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UDP协议),但对于IP协议,对于应用程序员来说更多的印象还是IP地址这个东西,再往深一点也就很难 ...

  8. HTTP协议—— 简单认识TCP/IP协议

    大学没读计算机专业,所以很多的专业知识都不知道.既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际工作中这些东西用不到.高楼大厦,起于平川.不积跬步,无以至千里,不积小流,无以成江海.我现 ...

  9. Http TCP/IP 协议的关系

    转自:http://www.cnblogs.com/ymy124/archive/2012/03/18/2404958.html 项目要求Web服务是高安全级别,在选择.net remoting,we ...

随机推荐

  1. CentOS 7 中 Systemd详解

    一.systemd的由来 Linux一直以来采用init进程但是init有两个缺点: 1.启动时间长.Init进程是串行启动,只有前一个进程启动完,才会启动下一个进程.(这也是CentOS5的主要特征 ...

  2. matplotlib 无法显示中文和负号的解决办法

    matplotlib无法显示中文和负号解决办法

  3. ES6 语法学习(二)

    1.类的建立与继承 constructor方法是类的构造函数是默认方法,通过new命令生成对象实例时,自动调用该方法.一个类必须有constructor方法,如果没有显式定义,一个默认的constru ...

  4. SpringBoot系列三:SpringBoot自定义Starter

    在前面两章 SpringBoot入门 .SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目.SpringBoot 的运行原理以及自动配置等都有了一定的了解.如果 ...

  5. Django web框架

    urls的配置 views视图函数 tempalte模板 settings的配置 Django目录结构分析 Django主线 Django-model基础 Django-model聚合查询与分组查询 ...

  6. bootstrap selectpicker控件select下拉框动态数据无法回显的问题

    有关于selectpicker下拉框数据回显的问题,当查看一个对象的属性的时候, 发现有关于selectpicker的下拉框并没有将返回的数据进行回显,显示的都是请选择, 经查证,当查看属性的时候,他 ...

  7. Matlab将多项式的系数设为0

    符号运算时有些多项式的系数值接近于0,像这样 fun = 3.5753839759325595498222646101085e-49*x + 1.836709923159824231201150839 ...

  8. Cow Relays POJ - 3613 (floyd+快速幂)

    For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race usin ...

  9. 初学Python的一些细节

    一.python的数据类型 1.python的基本数据类型包括数值数据类型和字符串数据类型:基本数据类型的特点是不允许改变,如果改变基本数据类型的值,会导致内存的重新分配. int 整形 二进制    ...

  10. vue实现数据双向绑定的原理

    一.知识准备Object.defineProperty( )方法可以直接在一个对象上定义一个新属性,或者修改一个已经存在的属性,并返回这个对象.Object.defineProperty(obj,pr ...