计算机网络理论知识:IP数据报
目录
一、零散的知识点
- 每个数据链路层协议只涉及一个直连网,而网络层协议涉及整个网络。
- 网络层协议负责确定把收到的包从哪条路径转发出去(forwarding),即路由选择功能。而具体的传送由数据链路层和物理层负责
- 因特网提供的是尽力服务(best effort service)。
二、电路交换与包交换
1、电路交换技术(circuit switching)
电路交换技术通过在网络中连接多条物理电路形成一条通路后传送数据。物理电路可以是一条链路或者一条链路通过FDM或TDM形成的通道。
2、包交换技术(packet switching)
采用统计多路复用的方法通过网络传送数据包。有虚电路和数据报两种方式。
- 虚电路:需要先建立连接然后才可以传送数据;有交换式虚电路和永久虚电路两种。交换式虚电路每次传送数据之前都要建立连接,传送完成后释放连接,而永久虚电路由管理员建立好后一直保持着,可以随时传送数据。(OSI中面向连接的网络服务就是虚电路服务)
- 数据报(datagram):不需要建立连接便可以发送数据包,交换机根据数据包的目的地址转发包。(因特网采用的就是数据报交换技术)
三、IP数据报
1、IP协议的服务模型
- IP协议是因特网的网络层协议;
- IP协议是可路由的,即IP地址是唯一的、全局的、按层分配的。按层分配的意思是可以根据IP地址跟踪到具体某一台计算机。
- IP协议提供尽力服务,即无连接无确认的数据报服务;
- IP协议可以运行在任何网络上,即IP协议可以连接任何物理网络;
2、IP数据报格式
- 头部长度:以4个字节为单位,所以一共可以表示60个字节。常规情况下头部必定包括前5行,即20个字节。
- 总长度是整个数据报的长度,以字节为单位。
- 标识、标志(DF,MF)和偏移量用于划分片段,其中偏移量以8个字节为单位。
- 生存期用于记载经过的路由器数,每经过一个路由器生存期减1,当生存期为0时连路由器丢弃该数据报并发送一个ICMP包告知源主机;生存期的默认值为网络直径(网络最大路由器数量)的两倍。
- TTL:每经过一个路由器减1;防止了数据报长时间滞留在因特网上,且限制了因特网的直径。
- 协议定义的是数据部分的协议:TCP=6,UDP=17,ICMP=1;
- 头部校验是头部的校验和,校验出错后路由器会丢弃出错的数据报;
- 选项和填充位最多40个字节,与头部长度有关,填充位用于32位对齐;
- 服务类型TOS,起初用于提出数据报的四种独立的服务要求(低延迟、高吞吐量、高可靠性和花钱最少)和优先权,现在被重新定义为区分服务。
- 如果不带选项的IP数据报被分段,这些片段头部的【头部校验和、MF、OFFSET、总长度】可能与原数据报头部字段的内容不一样。
- 一个物理网络的最大传输单元(MTU)是该网络可以运载的最大有效载荷,即IP数据报的最大长度(以太网的MTU=1500).故如果一个数据报的大小大于其要承载它的网络的MTU,则路由器要先对该数据报进行分段(fragment)。
- 源主机每次发送IP数据报时都会把标识字段加1,但在分段时同一数据报的各个段使用的标识的值保持不变。并且使用偏移量字段指出该片段的数据部分相对于原来的数据报的偏移量。
- 上图数据报总长度为1420,包括是20B的头部和1400B的数据,MTU为532,所以需要分段,每一段都是头部+数据。由于头部为20B,所以每一段的有效载荷最大只有512B,因此1400B的数据要分为三段:512+512+376=1400;
- MF标识符(more fragment):MF=0表示该段后面没有数据了,故如果没有收到MF=0的段则说明最后这一段丢失了。
- OFFSET只记录了数据部分的偏移量;(以8个字节为单位)
- 当目的主机收到该数据报的所有片段时,会将所有片段进行重组(reassemble),形成原来的数据报;接收第一段的时候即开启超时定时器准备重组数据报,如果到时间还有数据段未传送到,则丢弃该数据报的所有已被接收的片段。重组是按ID重组的。
- DF(don't fragment):DF=1时表示不将帧划分为段,若该帧的长度大于MTU则路由器接收到的时候会丢弃它,可用于获取MTU。
3、IP数据报的选项
一般格式:
代码 1B |
总长度 1B |
数据 nB |
选项最长为40B,常用的有7——记录路由,格式为:
- 每个IP地址4个字节 ,故最多只能记录9个(=36B),36+代码1B+长度1B+指针1B=39B,最后一个B可以用0表示选。项列表结束。(记录的是该数据报经过的每个路由器的转出接口的IP地址);
- 指针用于指向下一个IP地址的位置,同时也指明了记录的IP地址的个数(指针每次+4,当指针为4时表明还没有记录IP地址,若指针=16,则已经记录了3个IP地址)
- 记录时间戳:一个时间戳4B,IP地址4B,所以最多记录4个(记录转发路由器自身的IP地址和当时时间)
- 发包的时候可以设置TTL=N,则经过第N个路由器则会发回一个ICMP,这样可得知经过了哪些路由器。