IP协议

IP
协议是
TCP/IP
协议簇中的核心协议,也是
TCP/IP
的载体。所有的
TCP

UDP

ICMP

IGMP
数据都以
IP
数据报格式传输。

IP

提供不可靠的,无连接的数据传送服务。


不可靠指它不能保证
IP
数据报能成功到达目的地。
IP
仅提供最好的传输服务。当发生某种错误时,如某个路由器暂时用完了缓冲区,
IP
有一个简单的错误处理算法:丢弃该数据报,然后发送
ICMP
消息给信源。任何要求的可靠性必须由上层来提供。
无连接指
IP
并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。
IP
数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是
A
,然后是
B
)每个数据报都是独立的进行路由选择,可能选择不同的路线,因此
B
可能在
A
到达之前先到达。 
   
IP
包头
《IP协议》
版本号

4

bit
,用来标识
IP
版本号。这个
4
位字段的值设置为二进制的
0100
表示
IPv4
,设置为
0110
表示
IPv6
。目前使用的
IP
协议版本号是
4

首部长度

4

bit
。标识包括选项在内的
IP
头部字段的长度。
服务类型

8

bit
。服务类型字段被划分成两个子字段:
3bit
的优先级字段和
4bit TOS
字段,最后一位置为
0

4bit

TOS
分别代表:最小时延,最大吞吐量,最高可靠性和最小花费。
4bit
中只能将其中一个
bit
位置
1
。如果
4

bit
均为
0
,则代表一般服务。
《IP协议》  
《IP协议》

现在大多数的
TCP/IP
实现都不支持
TOS
特性,但自
4.3BSD Reno
以后的新版系统都对它进行了设置。另外,
OSPF

IS-IS
都可以根据这些字段的值进行路由策略。而类似
SLIP
这样的协议虽然提供基于服务类型的排队方法,允许对交互型数据优先进行处理,但它的这种排队机制由
SLIP
自身来判断和处理。驱动程序会先查看协议字段(确定是否是
TCP
段),然后检查
TCP
信源和信宿的端口号来判断是否是一个交互服务。  
最近,
TOS
字段已经作为区分服务(
Diffserv
)架构的一部分被重新定义了。
Diffserv

TOS
定义所允许的处理更加灵活。在
Diffserv
下,能够在一台路由器上定义服务分类(
COS
),将数据包归类到这些分类中去。路由器可以根据它们的分类使用不同的优先级对数据包进行转发。每一个排序和转发处理称为一个
PHB
。这个架构也被简称为
COS

《IP协议》  
利用开始的
6
个位构成
DSCP
位,可以使用任意数值或根据区分服务体系结构中预先定义的服务类别,最多可以定义
64
个不同的服务类别并整理到
PHB
中。
ECN
为显式拥塞通知位。当路由器支持该特性时,这些位可以用于拥塞信号(
ECN=11
)。  
总长度字段

16

bit
。接收者用
IP
数据报总长度减去
IP
报头长度就可以确定数据包数据有效负荷的大小。
IP
数据报最长可达
65535
字节。  
标识字段

16

bit
。唯一的标识主机发送的每一份数据报。接收方根据分片中的标识字段是否相同来判断这些分片是否是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加
1

标志字段

3

bit
。用于标识数据报是否分片。第
1
位没有使用,第
2
位是不分段(
DF
)位。当
DF
位被设置为
1
时,表示路由器不能对数据包进行分段处理。如果数据包由于不能分段而未能被转发,那么路由器将丢弃该数据包并向源发送
ICMP
不可达。第
3
位是分段(
MF
)位。当路由器对数据包进行分段时,除了最后一个分段的
MF
位被设置为
0
外,其他的分段的
MF
位均设置为
1
,以便接收者直到收到
MF
位为
0
的分片为止。
位偏移

13

bit
。在接收方进行数据报重组时用来标识分片的顺序。用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以位偏移字段可以使接收者按照正确的顺序重组数据包。
当数据包的长度超过它所要去的那个数据链路的
MTU
时,路由器要将它分片。数据包中的数据将被分成小片,每一片被封装在独立的数据包中。接收端使用标识符,分段偏移以及标记域的
MF
位来进行重组。
 
生存时间

8

bit

TTL
域防止丢失的数据包在无休止的传播。该域包含一个
8
位整数,此数由产生数据包的主机设定。
TTL
值设置了数据报可以经过的最多的路由器数。
TTL
的初始值由源主机设置(通常为
32

64
),每经过一个处理它的路由器,
TTL
值减
1
。如果一台路由器将
TTL
减至
0
,它将丢弃该数据包并发送一个
ICMP
超时消息给数据包的源地址。注意:
TTL
值经过
PIX
时不减
1

协议字段

8

bit
。用来标识是哪个协议向
IP
传送数据。
ICMP

1

IGMP

2

TCP

6

UDP

17

GRE

47

ESP

50

首部校验和
:根据
IP
首部计算的校验和码。
Option
选项
:是数据报中的一个可变长的可选信息。
《IP协议》
选项字段以
32bit
为界,不足时插入值为
0
的填充字节。保证
IP
首部始终是
32bit
的整数倍。  
IP
路由选择
如果目的主机与源主机直接相连(点对点)或都在一个共享网络上(以太网),那么
IP
数据报就直接送达到目的主机上。否则,主机把数据报发到网关(路由器),由路由器来转发该数据报。
IP
可以从
TCP

UDP

ICMP

IGMP
接收数据报并进行发送,或者从一个接口接收数据报并进行发送。
IP
层在内存中有一个路由表,当收到一份数据报并进行发送时,都要对该表进行搜索。当数据报来自某个接口时,
IP
首先检查目的
IP
地址是否为本机的
IP
地址或广播地址。如果是,数据报就被送到由
IP
首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么:

如果
IP
层被设置成路由器的功能,那么就对数据报进行转发。

数据报被丢弃。
路由表:
目的
IP
地址:可以是一个完整的主机地址,也可以是一个网络地址。
下一跳地址:一个直接相连网络上的路由器。下一跳路由器不一定是最终目的地,但它可以把传送给它的数据报转发到目的。
标志:其中一个标志指明目的
IP
地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一跳路由器还是一个直连接口。
IP
路由选择是逐跳的进行的。
IP
并不知道到达任何目的的完整路径。所有的
IP
路由选择只为数据报传送提供下一站路由器的
IP
地址。它假定下一站路由器比发送数据报的主机更接近目的,并且下一站路由器与该主机是直接相连的。
IP
路由选择主要完成以下功能:

搜索路由表,寻找与目的
IP
地址完全匹配的条目。

如果

失败,则寻找与目的网络号匹配的条目。

如果



都失败,则寻找默认路路由。如果找到,则把报文发送给该条目指定的下一站路由器。如果未找到,则丢弃数据报并向源发送
ICMP
不可达。  
子网寻址与子网掩码
IP
地址的分类如下:
《IP协议》
IP
地址掩码标识了
IP
地址的网络部分。
32
位掩码中的
1
标识了
IP
地址中相应的网络位,
0
标识了主机位。将
IP
地址和掩码进行与运算,结果是
IP
地址中对应于掩码网络部分的那一段不变,而对应于主机部分的全变成
0

子网化是对
A

B

C
类地址进行子分组。如果没有子网化,
A

B

C
类的主
IP
地址的网络部分将只能标识一个数据链路。子网化使用主
IP
地址中的一些主机位作为网络位,允许一个单独的主地址被划分为多个网络地址。
有类的路由协议不能区分全
0
和主
IP
地址,也不能区分全
1
子网和主
IP
地址的全主机,全子网广播地址
此部分为最基础知识,不再赘述。
 
特殊的
IP
地址
《IP协议》
 
Ifconfig & Netstat
命令
Ifconfig
命令一般在引导时运行,以配置主机上的每个接口。
netstat
命令也提供系统上的接口信息。
-i
参数将打印出接口信息,
-n
参数则打印出
IP
地址,而不是主机名字。
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
《IP协议》        
参考书籍:
Stevens,W.R.TCP/IP Illustrated,Vol.1.Reading
Comer,D.E.Internetworking with TCP/IP,Vol.1
Jeff Doyle.Routing TCP/IP Vol.1 Second Edition      

点赞