ARP和RARP报文不被封装在IP数据报中,而ICMP和IGMP的数据则要封装在IP数据报中进行传输。由于IP协议在网络层中具有重要的地位,人们又将TCP/IP协议的网络层称为IP层。
※02.1 IP Protocol Overall
1、所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输
2、IP协议是点-点的网络层通信协议
3、IP协议是一种不可靠、无连接的数据报传送服务协议
Unreliable的意思是它不能保证IP数据能成功地达到目的地。如果发生某种错误时,IP有一个简单的处理算法:丢弃该数据报,然后发送ICMP消息报给源主机,任何要求的可靠性必须由上层来提供(TCP)。
Connectionless的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报处理是相互独立的。IP数据报可以不按发送顺序接收,可以选择不同线路传输。
4、IP协议向传输层屏蔽了物理网络的差异
5、IP软件执行路由功能,为数据发送指定路径。
6、IPv4的局限性
地址数量的不足 | 复杂的头标,难以扩充 |
缺少安全与保密方法 | 对头标服务数量的限制 |
※02.2 IP DATAGRAM
一、IP数据报为网络传输指定了一个精确的数据格式
首部前20BYTES的固定,后一部分长度可变的选项字段、填充。
版本与协议类型域 | 版本域—IP协议的版本号;协议类型域 —高层协议类型; |
长度域 | 头标长度域—以4字节为一个单位的头标的长度; 总长度域—以字节为单位的数据报的总长度; |
服务类型域TOS | 指示路由器如何处理该数据报; 由4位的服务类型子域与3的优先级构成; |
分片域 | 标识、标志、片偏移控制IP数据报的分片和组合。 |
生存时间域 | 丢弃TTL=0毫秒的报文:当路由器处理一个未经长时等待的数据报时,只要把TTL字段减一,而如果该路由器负载过大,数据报等待时间长,则减去其从到达路由器到得到处理这一段的毫秒数。 |
协议域 | 指定数据域的数据是由哪种高层协议创建的 0x01=ICMP,0x02=IGMP,0x06=TCP,0x17=UDP,0x89=OSPF |
头校验和域 | 保证数据头标部的数据完整性 ; |
地址域 | 包括源地址与目的地址; |
选项域 | 用于控制与测试的目的。“选项+填充”两个字段的长度和为32位。 |
二、SERVICE TYPE(TYPE OF SERVICE)
1、指定应如何处理该数据报,仅给路由选择提供建议,不一定要执行,又分为5个子字段(头3位优先级主机和路由器都忽略)。
2、常见服务的典型设置
※02.3 Header Checksum
IP/ICMP/IGMP/TCP/UDP算法相同
在发送端先计算校验和,并把得到的结果与分组一起发出去,同理,接收端检测结果,若正确则接收,反之丢弃。
一、 发送方
→将校验和字段置为0。 |
→将IP头按16比特分成多个单元,不足16比特的单元补0; |
→把数据按16位进行累加,最高位产生的进位循环加到和的最低位 |
→把累加和按位取反,即可得到所需的校验和。 |
→发送数据包。 |
二、接收方(反码运算:溢出循环到低位)
1、将IP头按16比特分成多个单元,不是16比特的倍数补0;
2、对各单元反码加法运算,检查得到的和是否符合是全1(有的实现可能对得到的和会取反码,判断最终值是不是全0);
3、如果是全1则进行下步处理,否则意味着包已变化从而丢弃之。
三、例题
问:假定使用8位的校验和发送下面16位的数据报"1010 1001 0011 1001",求其随数据一起发送的校验和为多少?
答:先将数据分为2段/每段8位,相加后再求反
※02.4 Fragment and Reassembly
一、IP数据报分片的基本方法
1、IP数据报在传送时封装在下层数据帧的数据域,硬件不能识别IP格式。每个路由器都要将接收到的帧进行拆包和处理,然后封装成另外一个帧。
2、IP数据报的尺寸大于将发往网络帧的MTU时(MTU长度取决于物理网所采用的协议),路由器将IP数据报分成若干较小分片。
3、数据报一旦被分片,则在到达目的主机之前就一直以单独的数据报存在,在到达主机后,才组合成原始的数据报,各个小的路由器可以独立路由,均衡负载。
二、分片后,每一片都与原始的数据报有相同的头格式
三、IP数据报的分片与标识、标志与片偏移的关系
四、在目的主机对分片进行重新组装,减少了中间路由器的计算量,路由器可以为每个分片独立选路
五、FLAGS(3bit) (More Fragment=1后面还有分片)
1、在Linux中修改网卡的MTU值
2、当某个路由器认为一个设为Don't Fragment=1的数据报需要分片时,路由器放弃该数据报并向源主机发送一个出错消息。