欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阅读笔记(3)——IP层的分用(UDP和IGMP)

程序员文章站 2022-06-12 18:34:56
...

这一次将总结IP层的分用中的UDP与IGMP。UDP是一个简单的面向数据报的运输层协议,它提供不可靠服务:它把应用程序的数据加上UDP头部之后就传递给IP层发送出去,但是并不能保证它们能到达目的地。应用程序必须关心IP数据报的长度,如果它超过网络的MTU,那么就要对IP数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。IGMP是一种支持主机和路由器进行多播的Internet组管理协议。广播和多播只能应用于UDP,所以我在这里把UDP和IGMP放在一起总结了,书中也是这样的顺序,呵呵。

 

1. UDP:用户数据报协议

下图是UDP首部的格式:
<tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记   

端口号表示发送进程和接收进程。UDP长度字段指的是UDP首部和UDP数据的字节长度,该值等于IP数据报总部中的IP数据报长度减去TCP首部的长度。UDP检验和(可选)覆盖UDP首部和UDP数据,计算方法跟我们前面提到的IP首部检验和的计算方法一致。如果遇到UDP数据为奇数字节,则填充一字节的0. 计算时,还将在UDP首部前加上UDP伪首部,目的是让UDP两次检查数据是否已经正确到达目的地。下图是伪首部和字节填充的示意图:
<tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
我们提到过网络的MTU,也提到过IP数据报首部中的MF和DF位以及13位偏移位,当UDP数据报的长度超过网络的MTU时,必须对其进行分片。如果设置了DF位但是通过某个网络时需要分片,将会产生ICMP“不可达(需要分片)”的差错报文,我在前面的ICMP部分居然写着写着就把它给忘了。新一些的路由器都允许在ICMP首部8个字节的每7~8字节(那里被要求设置成0)中返回自己的MTU。分片需要注意的是:(1)在分片时,除最后一片外,其他每一片中的数据部分(除IP首部外的其余部分)必须是8整数倍(这是为什么呢?后面的习题也有瓿,我目前还不知道。。。);(2)运输层首部只出现在第一片中。UDP比较简陋,所有包丢失、重传问题都必须由上层应用程序来管理。

 

2. 互联网的地址、广播、多播

互联网地址有5类,格式如下:
<tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
 有三类地址:单播地址,多播地址和广播地址。主机号为全0代表网络号,主机号为全1代表在该网络的广播。有四种广播地址:

一是受限的广播地址255.255.255.255.该地址用于主机配置过程中IP数据报的目的地址,在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样数据报仅出现在地址网络中。

二是指向网络的广播地址,主机号为全1.如A类广播地址为netid.255.255.255,一个路由器必须转发指向网络的广播。

三是指向子网的广播。指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码,例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。

四是指向所有子网的广播。指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开来,指向所有子网的广播地址的子网号和主机号全为1.例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255就是一个指向所有子网的广播地址,然而,如果网络没有划分子网,这就是一个指向网络的广播。

广播给网络中的主机产生了很多负担,广播的数据报要直到UDP层才被确定是否为主机所需要(没有监听的端口)然后才会被丢弃。多播是介于单播与广播之间的一种方式。

能够接收发往一个特定多播组地址数据的主机集合称为主机组。一个主机组可以跨越多个网络,主机组中成员可以随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。

下图是多播组地址到以太网地址的转换:
<tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
 之所以是23位映射,听说是发明组播的那个人(当时还是个博士)的导师只肯给他买半个A类地址做实验,所以就只映射了23位。这是我在某次网络课的时候迷迷糊糊听到的,嘿嘿。

 

3. IGMP协议

多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况,其报文格式如下:


<tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
 

规则如下:

(1)当第一个进程加入一个组时,主机发送一个IGMP报告,如果有多个进程加入同一个组,只需发送一个报告;

(2)进程离开一个组时,不需要发送任何报告;后期路由器发送IGMP查询时,不再发送报告;

(3)多播路由器定时发送(向每个接口)IGMP查询来了解是否还有任何主机包含有属于多播组的进程,此时IGMP查询报文中的组播地址被设置为0.

(4)主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报文。

我记得上网络课时还提到过多种算法来减少网络中的流量,包含剪枝、抑制之类的。总之,一个核心思想是,多播路由器并不关心有多少主机属于一个多播组,它只是想知道给定接口上的多播组是否还有人对这个多播组感兴趣。

 

 

  • <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
  • 大小: 17.2 KB
  • <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
  • 大小: 26.5 KB
  • <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
  • 大小: 26.8 KB
  • <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
  • 大小: 21.3 KB
  • <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
            
    
    博客分类: tcp/ip详解 阅读笔记  
  • 大小: 13.7 KB