IP协议简介

Posted zkccnb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IP协议简介相关的知识,希望对你有一定的参考价值。

IP协议简介

IP协议真是一个复杂的协议。。想象一下它要直接控制数以亿计的各种网络设备,形成极其复杂的网络环境。详细介绍IP协议的方方面面并不是我们的重点,本篇只简要介绍IP协议的几个侧面。

一、IP报文格式


图1 IPv4与IPv6报文格式对比

  • **源地址和目标地址:**IPv4和IPv6共有部分,这个必须得有,因为IP协议就是干这个的:将数据包从源IP发送到目标IP。
  • **分片相关:**标识字段、标志字段、片偏移字段。稍后会看到IPv4的分片机制,用这3个字段保证IP分片后可以正确重组。但IPv6嫌在网络层(各路由器中)分片再重组太麻烦了,所以取消了分片机制。
  • **生存时间:**之前介绍过,网络层数据包经过一定数量的路由器后如果还没到达目的地,就会被当前路由器丢弃,同时发送ICMP协议报文给源端,通知此消息。生存时间这个量的单位其实是跳数。
  • **校验:**IPv4会对数据包进行网络层的校验(意味着每个路由器都要如此)。IPv6取消了网络层校验,因为链路层和传输层都有相应的校验机制,网络层其实做了重复的工作。

可以看到,IPv6比IPv4的首部短了很多,而且还取消了分片和校验机制。这就使得使用IPv6协议进行传输速度更快。

二、IP协议分片

讲TCP的基本性质时,提到了网络层的数据包最大运载单元(MTU)和传输层的最大报文单元(MSS)的关系:


图2 MTU与MSS的关系

IP层为什么要分片呢?

因为下层协议(传输层)向上层提供的单元运载能力有限(常用的以太网链路MTU为1500B),超过了下层协议的单元运载能力将导致包被丢弃,所以IP层需要确保不会出现超过链路最大运载能力的包。

IP层的分片十分简单粗暴:每个路由器测量加上IP头部的数据包长度超过MTU,则拆成多个片打出去。而当最后一跳路由器发现这些分片中的一个丢了,则抛弃所有分片,也不重传!如果没丢,则在路由器中重组这些分片。

之前也提到过,TCP会对数据长度超过MSS的部分自动分片,使得每一个TCP报文段的数据长度不大于MSS。这是为了避免触发IP层的分片机制。因为如果触发了IP分片,且当前丢失了一个IP片后,IPv4会丢掉所有其他的分片。。效率很低。而传输层的分片效率就不低了,丢了只会重传当前的分片(因为TCP会在内核中缓存其他正常收到的片)。

因此,IPv6才放弃了网络层分片的想法,既然上层协议不买账(TCP自己分片,UDP不建议传超过MSS的数据),而且在路由器中重组分片也会额外花费一些时间,那不如干脆取消了。

三、路由选择简介

IP协议最核心的部分应该就是路由选择算法了。同样也是最复杂精妙的部分,这里只简单介绍其大概的工作流程。

1.路由器结构

从物理上说路由器是由:若干输入端口、路由选择处理器、若干输出端口 构成的。

而从网络层的抽象上说,路由器本身维护着若干IP地址,每一个IP地址代表连接一个网络的接口。

每个路由器和主机维护一个路由表,即网络地址和下一跳地址的键值表。

2. 路由选择过程

  • 第一跳,源主机 to 默认网关路由器(主机连上网络后自动分配默认网关):

    当数据包还在主机这时,先查主机的路由表,主机路由表记录着默认网关的几个对内接口IP。如果匹配上了,就说明此包发向局域网,通过默认网关路由内网接口转发即可;如果匹配不上,则发给默认网关路由器IP。

  • 中间跳:路由器to路由器:

    发往外网的数据包中间可能会经历若干路由器,每个路由器都通过子网掩码判断目标IP所处的网络地址。然后对网络地址查找路由表匹配到下一跳地址,将其发出。

  • 最后一跳:目标端局域网路由器 to 目标主机:

    经过若干中间跳,现在已经到了目标主机的内网路由器了!目标路由器也有若干内网接口,所以还是会匹配与目标IP相符的内网接口IP,先把数据包发送到此内网接口上。最后,再由此内网接口经过链路层交换机转发到目标主机。

    另外,链路层交换机和网络层交换机(路由器)可不一样,链路层交换机存在于两个路由器之间的输入输出接口中间,也存在于路由器输出接口到目标主机之间。负责提供设备到设备间的传送服务,在链路层中会具体介绍这种设备。

    结合下面的图更能看清这个过程的大概:

    图3 路由选择过程

以上是关于IP协议简介的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP协议详解

Ip/TCP协议简介

HTTP协议简介

TCP/IP简介

TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点

网络编程的基本概念,TCP/IP协议简介