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. LightOJ 1349 Aladdin and the Optimal Invitation(中位数)

    题目链接:https://vjudge.net/contest/28079#problem/N 题目大意:给一个mxn的平面,有q个位置,每个位置坐标为(u,v)有w人,求一个点在平面内使得所有人都到 ...

  2. Apache服务器中设置端口映射和反向代理的方法

    在/etc/httpd/conf路径下的httpd.conf文件###new add for webui.cong###Include "E:/local/Wamp/bin/apache/A ...

  3. DOS批处理高级教程(还不错)(转)

    前言 目录 第二节 常用特殊符号     1.@  命令行回显屏蔽符     2.%  批处理变量引导符     3.>   输出重定向符     4.>>  输出重定向符     ...

  4. freemarker是什么东西?

    前言 由于考虑到网站访问量,以及tocmat可能承受的最大访问压力,我们需要引进一些比较好的技术,来解决这个问题.所以在项目快要结束之际又收到消息,我们要考虑到这些问题然后对现在的项目进行改进,于是就 ...

  5. Java是解释型还是编译型语言?

    有人说Java是编译型的.因为所有的Java代码都是要编译的,.java不经过编译就无法执行. 也有人说Java是解释型的.因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型 ...

  6. 解决git反复输入密码的问题

    打开git命令面板 cd到项目根目录 $ git config --global credential.helper store然后只输入一次密码,后面就不需要了

  7. Linux下执行Java程序报错

    在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量 ...

  8. Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1045E.html 4K码量构造题,CF血腥残暴! 题解 首先,如果所有点颜色相同,那么直接连个菊花搞定. ...

  9. POJ 1149 PIGS 【最大流】

    <题目链接> 题目大意:有一个养猪场,厂长没有钥匙,这个养猪场一共M个猪圈,N个顾客,每个顾客有一些猪圈的钥匙,每个顾客需要一些猪,问你厂长最多能卖多少猪?这里有个条件是,厂长可以在一个顾 ...

  10. 删除jar包

    public class TestDelete { private static List<File> files = new ArrayList(); public static voi ...