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. 论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)

    论文原址:https://arxiv.org/abs/1708.02002 github代码:https://github.com/fizyr/keras-retinanet 摘要 目前,具有较高准确 ...

  2. HTML目录:

    HTML常用标签 CSS样式

  3. C/S,B/S应用的区别

    ——————C/S,B/S应用的区别 C/S是指客户端/服务器架构,是一种典型的两层架构,可充分发挥客户端pc的性能,相对减轻服务器的压力. B/S是指浏览器/服务器架构,区别于传统的C/S(客户端/ ...

  4. James Munkres Topology: Theorem 19.6

    Theorem 19.6 Let \(f: A \rightarrow \prod_{\alpha \in J} X_{\alpha}\) be given by the equation \[ f( ...

  5. 网络安全第一集之【SQL注入:sqlmap入门】

    1,安装sqlmap和python环境 2,对于环境变量超长问题 3,使用sqlmap: sqlmap.py -u "http://k2.hlxy.net/csdw/news1.asp?dp ...

  6. Hibernate 映射多对多关联关系

    映射多对多,需要建立一张中间表 一共三张表,一个是 Category,一个是 Item,还有一个是 Categories_Items Categories_Items 作为中间表,其包含两个列,分别对 ...

  7. VS的Mvc项目右键没有控制器右键菜单(转)

    今天遇到了一个比较少见的问题,我用vs2012打开一个从Svn上拉下来的mvc5项目,在Controller文件夹上右键却发现没有新建控制器的选项,在View文件夹上右键也没有新建视图的选项. 我的第 ...

  8. idea使用配置

    一,打开窗口多行显示, Window→Editor Tabs→Tabs Placement→Show Tabs in Single Row 取消选中后即可在多行显示 2 .还可以自行设置打开文件窗口数 ...

  9. JDBC API 事务的实践

    使用了持久化框架几乎没有使用过原生的jdbc API ,发现原来使用jdbc API来实现事务也是很简单的. 数据库的链接connection具有一个属性autocommit,这个属性默认是true, ...

  10. 版本管理_svn_检出_更新_提交_本机 MAC 地址_冲突

    版本管理 git svn [subversion] 实现集中式的版本控制工具软件 来源于最初的工程图纸. 需求: 备份还原 协同修改 权限控制 弊端:集中式(管理方便,但是如果中心服务器瘫痪,整个开发 ...