Internet上的网络层
TCP/IP协议栈第三层是网络层,网络层的目的是实现两个系统之间的数据透明传送,具体功能包括寻址和路由选择、连接和建立、保持和终止等。
TCP/IP协议给internet上的每台主机和路由分配一个地址,数据在internet中的传输主要就是依据一个个的IP地址来寻迹,最终把数据传送到要传送的目的主机上。
IP协议在TCP/IP协议栈的位置
无需连接:
跨域多个异构物理网,IP协议独立的对待要传输的数据报,在传输前不建立连接,传输数据报需要经过不同的路径。
不可靠性:
可靠性问题交由高层协议解决,数据在传输过程中可能出现丢失,延迟和无序情况。
最大努力传输:
IP尽最大的努力来交付数据报,不轻易放弃数据报。
互联网把它最基本的传输单元称为数据报,与物理网络帧类似,数据报分为首部和数据区,如下图:
IP不规定数据区的格式,可用来传输任意数据。
IP首部:
版本:占4位,指IP协议的版本,目前是IPv4或IPv6。无论主机还是路由器,在收到一个IP数据报时,首先要检查版本字段,以便选择相应的IP协议模块来进行处理。
首部长度:占4位,可表示最大数值是15个单位(一个单位4个字节(32位)),取值5-15,因此IP首部长度范围是20-60字节。
服务类型:占8位。该分组所期望的服务质量。(通用)
bir0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
precedence:低3位,指示对分组进行处理(排队或丢弃)的优先权,值从0(普通优先级)到7(网络控制)。
D、T、R:该分组所希望的路由转发服务类型,不能同时设置。
D:minimize delay
T:maximize reliability
R:maximize throughput
最高两位为保留位。
在RFC1349文件中多出一个C:minimize cost
在RFC2474文件中:
DSCP:differentiated services code point,区分服务编码点
CU:currently unused
服务类型:
bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
D(delay)延迟,T(throughput)吞吐量,R(reliable)可靠性,M(monetary cost花费,开销,U(unused)未使用。
优先级有种:
111-Network Control(网络控制)
110-Internetwork Control(网间控制)
101-CRITIC/ECP(关键)
100-Flash override(疾速)
011-Flash(闪速)
010-Immediate(快速)
001-Priority(优先)
000-Routine(普通)
优先级6和7一般保留给网络控制数据使用,如路由。
优先级5推荐给语音数据使用。
优先级4由视频会议和视频流使用。
优先级3给语音控制数据使用。
优先级1和2给数据业务使用。
优先级0为默认标记值。
在标记数据时,既可以使用数值,也可以使用名称(英文名称)。
第3到6比特的含义如下:
0000--normal service;
1000--minimize delay;
0100--maximize throughput;
0010--maximize reliability;
0001--minimize monetary cost。
服务类型功能:指定本数据报的处理方式,TOS不是必须实现的。
区分服务编码点(DSCP):
bit0 --- bit5 bit6-bit7
利用已使用的6比特和未使用的2比特,通过编码值来区分优先级。
DSCP 使用6个bit,DSCP的值得范围为0~63。
DSCP 是“IP 优先”和“服务类型”字段的组合。为了利用只支持“IP 优先”的旧路由器,会使用 DSCP 值,因为 DSCP 值与“IP 优先”字段兼容。
用通俗一点的语言解释,其实DSCP就是为了保证通信的QoS,在数据包IP头部的8个标识字节进行编码,来划分服务类别,区分服务的优先级。
每一个DSCP编码值都被映射到一个已定义的PHB(Per-Hop-Behavior)标识码。
通过键入DSCP值,电话、Windows客户和服务器等终端设备也可对流量进行标识。如果有兴趣,可以用Wireshark软件抓包看看数据。
总长度(total lenght):占16位,指首部和数据的总长度,单位以字节为单位,数据报最大长度为65535字节。
标识字段(identification):占16位,让目的主机确定一个新到达的分断属于哪一个数据报,源站每发送一个分组,标识值+1。
标志字段(flags):
第一位不使用,第二位为DF(Don't Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位为MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
分段偏移(Fragmentation offset):占13位,表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。以8字节为单位。
MTU,最大传输单元,当一个数据报较大,无法用一帧数据传输时(以太网一帧数据通常为64-1518字节),IP模块要把它分成较小的片,并为各个分片构造一个单独的IP数据报。
当同一个数据报的各个分片到达目的主机后,IP模块要将其重组,然后才能向上层交付。
生存时间(TTL):占8位,描述在一个数据包在计算机和网络设备间传送的时候, 在它可以被丢弃之前, 可以经历的设备的数目的一个极限值。TTL是由数据包的发送者设置的,在前往目的地的过程中,每经过一台主机或设备, 这个值就要减少一点.(通常为1)。如果在数据包到达目的地前,TTL值被减到了0,那么这个包将作为一个ICMP错误的数据包被丢弃。
TTL可以防止无法到达目的地的数据包在网络中无限制地传递, 形成"不死包"。主要用来限制数据报在网络中的存活时间。
在路由器收到数据报时,TTL值为t1,处理时延为t2(通常为1),计算t=t1-t2,如果t<0,丢弃数据报,否则将t置为新的TTL值,并转发数据报。
协议(protocol):占8位,指出此数据报携带的数据使用何种协议,以便目的主机的IP层知道将数据部分上交给哪个处理过程。
1:ICMP 2:IGMP 6:TCP 17:UDP 88:IGRP 89:OSPF
首部校验和:占16位,只校验数据报首部,数据部分不校验。
源地址:源主机的IP地址。
目的地址:目的主机的IP地址。
可选项(Options):这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容:
松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。
严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。
路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。
关于可选项部分详解,请关注http://bbs.alifpga.com/
数据部分:IP报文数据。IP数据包报的数据部分通常情况下是传输层数据报(TCP或UDP)。
首部校验和的计算:IP首部校验和算法同之前讲过的ICMP校验和算法是一样的。这里不再赘述。
版权所有权归卿萃科技,转载请注明出处
作者:卿萃科技ALIFPGA
原文地址:卿萃科技FPGA极客空间 微信公众号
扫描二维码关注卿萃科技FPGA极客空间