首页 > 其他 > 详细

TCP/IP协议族——IP工作原理及实例详解(上)

时间:2014-06-26 07:48:59      阅读:872      评论:0      收藏:0      [点我收藏+]


IP协议详解

        本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程。

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

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

IP服务的特点

IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。

无状态是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。这种服务最大的缺点是无法处理乱序和重复的IP数据报。

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

不可靠是指IP协议不能保证IP数据报准确的达到接收端。

IPv4头部结构

bubuko.com,布布扣

4位版本号指定IP协议的版本

4位头部长度表示IP有多少个32bit字(4字节)

8为服务类型(Type OfService)包括一个3为优先字段,4位的TOS字段和1位保留字段(必须置0)。4位的TOS字段分别表示:最小延迟,最大吞吐量,最高可靠性和最小费用。其中最多有一个能置为1

16位总长度是指整个IP数据报的长度,以字节为单位。由于MTU的限制,长度超过MTU的数据豆浆杯分片传输。

16位标识唯一标识主机发送的每一个数据报,同一个数据报的所有分片具有相同标识值。

3位标志字段第一位保留,第二位表示“禁止分片”,第三位表示更多分片,除了数据报最后一个分片外,其他分片都要把她置1.

13位分片偏移是分片对原始IP数据报开始出的偏移。

8位生存时间(Time ToLiveTTL)是数据报到达目的地之前允许经过的路由器跳数。每经过一个路由,该值减1.

8位协议用来区分上层协议,其中ICMP1TCP6UDP17.

16位头部校验和检验IP数据头部在传输过程中是否损坏。

32位源端IP地址和目的端IP地址用来标识发送端和接收端。

使用tcpdump观察IPv4头部结构

chen123@ubuntu:~$ sudo tcpdump -ntx -i lo

chen123@ubuntu:~$ telnet 127.0.0.1

IP 127.0.0.1.47513> 127.0.0.1.23: Flags [.], ack 90, win 342, options [nop,nop,TS val 5091357ecr 5091357], length 0

     0x0000: 4510 0034 52b6 4000 4006 e9fb 7f00 0001

     0x0010: 7f00 0001 b999 0017 a304 e30f 5c98 cfa6

     0x0020: 8010 0156 fe28 0000 0101 080a 004d b01d

     0x0030: 004d b01d

IPv4头部各个字段详解:

十六进制

十进制

IP头部信息

0X4

4

IP版本号

0X5

5

头部长度为532

0x10

 

TOS选项中最小延迟被开启

0x0034

52

数据报总长度,52字节

0x52b6

 

数据报标识

0X4

 

设置禁止分片标志

0x000

0

分片偏移

0x40

64

TTL被设为64

0x06

6

协议字段为6,表示上层协议TCP协议

0xe9fb

 

IP头部校验码

0X7f000001

 

32位源端IP地址127.0.0.1

0X7f000001

 

32位目的端IP地址127.0.0.1

IP分片

IP数据报的长度超过帧的MTU时,将被分片传输。分片可能发生在发送端,也可能发生在路由器上,而且可能在传输过程中被多次分片。但只有在最终目标机器上,这些分片才会被内核中的IP模块重新组装。

IP头部中的如下三个字段给IP的分片和重组提供了足够的信息:数据报标识、标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,他们具有相同的标识值,但具有不同的片偏移。并且除了最后一个分片外,其他分片都将设置MF标志。此外,每个分片的IP头部的总长度将被设置为该分片的长度

以太网的MTU(关于MTU概念http://blog.csdn.net/walkerkalr/article/details/34410937封装部分)是1500字节,因此它携带的IP数据报的数据部分最多是1480字节(IP头部占用20字节)。烤炉用IP数据报封装一个长度为1481字节的ICMP报文(包括8字节的ICMP,所以其数据部分长度为1473字节),则该数据报在使用以太网帧传输室必须分片。

需要指出的是,ICMP报文的头部长度取决于报文类型,下面的例子使用ping程序,而ping程序使用的ICMP回显与应答报文的头部长度是8字节。为了看清楚IP分片的具体过程,考虑从chen123(关于在一台主机上搭建的测试网络见http://blog.csdn.net/walkerkalr/article/details/34420041)来ping机器li123,每次传送1473个字节以强制引起IP分片,并用tcpdump抓取这一过程中双方的数据报。具体操作如下:

chen123@ubuntu:~$sudo tcpdump -ntv -i eth0 icmp #只抓取ICMP

chen123@ubuntu:~$ping 192.168.73.130 -s 1473 #-s选项指定每次发送1473字节的数据

如下是在敲入tcpdump命令终端上的输出:

1. IP(tos 0x0, ttl 64, id 21061, offset 0, flags [+], proto ICMP (1), length 1500)

   192.168.73.130 > 192.168.73.129: ICMPecho reply, id 4311, seq 11, length 1480

2. IP(tos 0x0, ttl 64, id 21061, offset 1480, flags [none], proto ICMP (1), length21)

   192.168.73.130 > 192.168.73.129:ip-proto-1

这两个IP的表示值都是21061,说明它们是同一个IP数据报的分片。第一个分片的片偏移是0,第二个是1480。很显然,第二个分片的片偏移实际上是第一个分片的ICMP报文的长度。第一个分片设置了MF标识表示还有后续分片,所以tcpdump输出”flags[+]”。而第二个分片则没有设置任何标识,所以tcpdump输出“flags[none]”。因为我们发送1473个字节,加上8字节的ICMP头部长度和20字节的IP头部长度,则最终长度1501字节大于MTU值,需要被分片。也就是,第一个IP分片长度为1500,第二个为21,每个分片都有自己的IP头部(20字节)。

TCP/IP协议族——IP工作原理及实例详解(上),布布扣,bubuko.com

TCP/IP协议族——IP工作原理及实例详解(上)

原文:http://blog.csdn.net/walkerkalr/article/details/34436233

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!