当前位置:文档之家› IP协议详解

IP协议详解

IP协议详解

IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。

IP头部信息。IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP 地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

IP数据报的路由和转发。IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。他们决定数据报是否应该转发以及如何转发。

IP服务的特点

IP协议为上层协议提供无状态、无连接、不可靠的服。

无状态指的是IP通信双方不同步传输数据的状态信息(IP数据报的发送、传输和接收相互独立)。

缺点:无法处理乱序和重复的IP数据报。—–只要收到IP数据报(分片则先重组),就将数据报的数据部分交给上层不管重复还是无序

TCP协议则可以处理乱序的,重复的报文段。

优点:简单高效。UDP和HTTP(一个浏览器的连续两次网页请求之间没有任何关联,被web服务器独立处理)都是无状态协议。

无连接是指IP通信双方都不长久地维持对方的任何信息。这样,上层协议每次发数据时,都要指明对方的IP地址。

(IPv6 traffic class->通信类型flow lable->流标签payload length->净荷长度不包括固定头部长度hop limit->跳数限制和TTL相同)

1.version 4位版本号

2.IHL 4位头部长度—标示IP头部有多少个4字节,IP头部最长是60字节。

3.Type of service(TOS) 8位服务类型

包含3位优先权字段,4位TOS字段和1位保留字段(必须置0。

4位TOS表示:最小延时,最大吞吐量,最高可靠性和最小费用。

ssh和telnet这样的登陆程序需要的是最小延时服务。

文件传输程序ftp需要最大吞吐量的服务。

4.Total length 16位总长度—-整个IP数据报的长度。

IP数据报的最大长度为65535(2的16次方-1)字节。(注意是字节)

由于MTU的限制,超过MTU的数据报将被分片传输

5.identification 16位标识—唯一地标识主机发送的每一个数据报,初始值系

统随机生成,每发一个数据报,值会加1,同一数据报所有分片具有相同的标识。

6.flag 3位标志第一位保留第二位(DF dont fragment)表示禁止分片。如果IP数据报长度超过MTU,IP模块将丢弃该数据报并返回一个ICMP差错报文第三位(MF more fragment)更多分片除了最后一位分片外,其他分片都要把它置为1。

7.fragment offset 13位分片偏移

8.time to live(TTL) 8位生存时间数据报到达目的地之前允许经过的路由器跳数。TTL减为0时,路由器将丢弃数据报,返回ICMP差错报文。

9.protocol 8位协议区分上层协议ICMP为1 TCP为6 更多情况请cat /etc/protocols

10.header checksum 16位检验ip包头部信息由发送端填充,接收端用CRC 算法检验IP头部

11.source address/destination address都是32位发出地/目的地

12.options padding选填性质区域

记录路由(record route):告诉数据报途径的所有路由器将自己的IP地址的选项部分

时间戳(timestamp):告诉每个路由器都将数据报被转发的时间,填入IP地址的选项部分

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

严格源路由选择(strict source routing),只能经过指定路由器

观察IPV4头部

1个终端执行sudotcpdump -ntx -i lo

1个终端执行 telnet 127.0.0.1

∙ 1

∙ 2 获取的数据

第一行第3个和第4个10表示TOS选项最小延时服务开启,因为telnet服

务使用具有最小延时服务。

IP分片

以太网MTU具有1500字节(在ifconfig里可以查看到)

IP数据报的数据部分最多占1480字节(IP头部占20字节)

要封装一个1481字节的ICMP报文(8个字节的头部,数据部分1473)则要分片传输。

1.分片长1500

2.分片长21字节

第一个IP头部的flag 第三位设为MF 第二个由于是最有一个分片不用设。第一个含ICMP头部信息第二个不含

IP模块工作流程

当收到数据链路层IP数据报时,首先队数据报的头部做CRC校验,确认没问题看是分析头部信息。如果头部设置源站选路选线,则IP模块会调用数据报转发子模块来处理数据报,如果数据报发送给本机,那么发送给指定的上层应用,如果不是,则也调用数据报转发子模块处理。

数据报转发子模块先查看系统释放允许转发,不允许IP模块丢弃数据报,允许则数据报转发子模块进行操作,然后交个IP数据报输出子模块。

IP模块核心数据结构是路由表。此表按数据报目标IP地址分类,同类型IP数据报将发往相同下一跳路由器。

IP输出队列存放所有等待发送的IP数据报,还包括封装本机上层数据(ICMP

报文、TCP报文段、UDP数据报)的IP数据报。

route命令可以查看路由表

IP路由机制

(1)查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到使用路由项,没找到则转到步骤2

(2)查找路由表中和数据报的目标IP地址具有相同网路ID的网络IP地址,找到使用路由项,没找到则转到步骤3

(3)选择默认路由项,通常意味着下一跳路由是网关

sudo route del default //删除默认路由项,导致无法访问互联网

route命令修改路由表,是静态的路由更新方式。

对于大型的路由器,他们通过BGP(Border Gateway Protocol,边际网关协议)、RIP(Routing Information Protocol,路由信息协议)、OSPF等协议发现新路径,动态更新方式。

IP转发

对于允许IP数据报转发的系统,数据报转发子模块操作如下:

检查数据报头部TTL值。为0,丢弃

查看头部填充区域是否设置严格源路由选择项,设置了,则检测目标地址是否魏本机某个IP 地址,不是,发送ICMP失败信息。

如果有必要,给源端发ICMP重定向报文,以告诉它更合理的下一跳路由

TTL 减1

相关主题