Internet 协议
《TCP/IP详解 卷1:协议》 TCP posts
- Internet 协议
- 1 引言
- 2 IP数据报
- 2.2.1 生存期TTL
- 2.2.2 IP Fragment
- 标识
- 标志
- 分片偏移
- 任何一片数据的丢失需要上层重传整个报文
- 例子
1 引言
IP是TCP/IP协议族中的核心协议。所有TCP、 UDP、 ICMP和IGMP数据都通过IP数
据报传输。 IP提供了一种尽力而为、无连接的数据报交付服务。 “尽力而为”的含义是不保
证IP数据报能成功到达目的地。虽然IP不是简单丢弃所有不必要流量,但它也不对自已尝
试交付的数据报提供保证。当某些错误发生时,例如一台路由器临时用尽缓冲区, IP提供一
个简单的错误处理方法‥ 丢弃一些数据(通常是最后到达的数据报)。任何可靠性必须由上
层(例如TCP)提供。IPv4和IPv6都使用这种尽力而为的基本交付模式。
接下来我们了解一下IP数据报的组成和其有何作用。
2 IP数据报
数据报分为
IPv4
和
IPv6
,先看看
IPv4
头部中的字段组成
字段 | 长度 | 含义 |
版本 | 4比特 | 包含IP数据报的版本号,IPv4为 ,IPv6为 |
IHL | 4比特 | Internet头部长度,也就是首部长度由于它是一个4位的字段,所以IPv4头部被限制为最多15个32位字,即64字节(为什么头部又说是20字节?) |
DS字段(区分服务) | 6比特 | 本来这里应该是服务类型(TOS)字段,但是它们从未被广泛使用,因此最终这个8位长的字段被划分为2个部分。 |
ECN | 2比特 | 显式拥塞通知字段或指示位 |
总长度 | 16比特 | 通过这个和IHL字段,我们可以知道数据报的数据部分从哪开始,以及它的长度。最大长度 |
标识 | 16比特 | IPv4软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 ,并将此值赋给标识字段 |
标志 | 3比特 | 目前只有两位有意义。 为 表示后面“ ”的数据报,为 表示这已经是最后一个数据偏; 为 表示“ ”,为 才允许分片 |
分片偏移 | 13比特 | 指出较长的分组在分片后,该片在原分组的相对位置 |
生存期TTL | 8比特 | Time To Live,表示数据报在网络中的寿命,功能是“跳数限制”,防止分组在网络中无限期地转发 |
协议 | 8比特 | 指出数据报有效荷载部分的数据类型,最常用的值为 和 |
头部校验和 | 16比特 | IPv4独有,数据报每经过一个设备,设备都要重新计算以下头部检验和,若头部未发生变化,则此结果必为0,于是就保留这个数据报。这个字段只检验数据报的首部,但不包括数据部分 |
源IP地址 | 32比特 | 报文发送方的IPv4地址 |
目的地址 | 32比特 | 报文接收方的IPv4地址 |
选项 | 0~40字节 | 用来支持排错、测量以及安全等措施。在必要的时候插入值为0的填充字节 |
数据部分 | 可变 | 用来填充报文 |
2.2.1 生存期TTL
生存时间字段用来标识IP数据报在网络中传输的有效期,以秒来计数,占8位。最初的设计是以秒为单位,没经过一个路由器时,就在TTL(Time To Live)中减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1s,就把TTL值减1。TTL的建议值是
32s
,最长是
−1=
255s
。现在通常认为这个TTL是指数据报允许经过的路由器数,主要有以下几个功能:
- 防止数据报在网络上回环;
- 由时间值变为为路由的跳数,跳数限制;
- 当每经过一个路由,跳数限制减1,当为0时丢弃这个数据报,ICMP Time Exceeded Messages包发送给该数据包的源地址。
2.2.2 IP Fragment
IP分片由标识、标志和分片位移组成。
IP fragmentation is an Internet Protocol (IP) process that breaks datagrams into smaller pieces (fragments), so that packets may be formed that can pass through a link with a smaller maximum transmission unit (MTU) than the original datagram size. The fragments are reassembled by the receiving host. ——来自Wikipedia
IP分片通过IP协议将数据分成更小的碎片,所以数据包可以由带有最大传输单元的链路形成。
在很多链路层网络(比如以太网)中,携带高层协议PDU的帧大小是有限制的。链路层的这种特征被称为最大传输单元(
MTU
),如果IP需要发送一个数据报,并且这个数据报比链路层MTU大,则IP通过分片将数据报分解成较小的部分,使每个分片都小于MTU。
标识
每个IP包的唯一值,相同的分片标识相同
标志
DF | MF |
- DF:Don’t Fragment
- 0,可以分片
- 1,不可分片,出错时发送ICMP
- MF:More Fragmen
- 0,最后一个分片
- 1,还有更多的分片在后面
分片偏移
标识本包在整个数据包中的位置,以8字节为单位。
任何一片数据的丢失需要上层重传整个报文
例子
假设MTU为1300Bytes,现在有一个数据包为3280Bytes要传输。
MF | Offset | data |
3280B |
那么将会切割为3部分:
MF | Offset | data |
1 | 1280B | |
1 | 160 | 1280B |
320 | 720B |
之所以是1280B,因为数据头占20B;MF不解释;Offset因为占8个字节,而
,那么下一分片的位移就是
,依次累加。
查看原文:http://tanwenbo.top/c/internet-%e5%8d%8f%e8%ae%ae.html