TCP/IP学习笔记——第四部分

一、UDP协议

UDP 是一个简单的面向数据报的运输层协议,进程的每个输出操作都产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP不提供可靠性。
UDP封装格式:

IP首部(20) UDP首部(8) UDP数据

1、UDP首部:

16位源端口号 16位目的端口号
16位UDP长度 16位UDP检验和
数据(如果有)

端口号表示发送和接收的进程。
UDP长度字段指的是UDP首部和UDP数据的字节长度,该字段的最小值是8,表示没有数据。该长度不包括IP首部长度。
UDP检验和包括UDP首部和UDP数据的检验和。由于UDP数据报的长度可以为奇数字节数,因此计算时在最后增加填充字节0,这只是为了检验和的计算。

2、 UDP检验和

UDP和TCP首部都包含一个12字节的伪首部,包含了IP首部和自身的一些字段,主要是为了计算检验和而设置的。伪首部是不占实际空间的。伪首部包含IP首部的一些字段,目的是让UDP两次检查数据是否已经到达目的地,以及IP层是否正确地传输了数据。
UDP伪首部格式如下:

32位源IP地址
32位目的IP地址
0 8位协议(17) 16位UDP长度
16位源端口 16位目的端口
16位UDP长度 16位UDP检验和
数据(如果有)

前12个字节就是UDP伪首部。

注意:UDP数据报的长度在检验和计算过程中出现两次。如果检验和的计算结果为0,则存入的值为全1(65535),如果传送的检验和是0,则说明发送端没有计算检验和。如果有错误,该报就被丢弃,不产生任何差错报文。

3、 IP分片

任何IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据,并查询该接口的MTU。IP把MTU与数据报的长度进行比较,如果需要则进 行分片。分片可以发生在原始发送端主机上,也可以发送在中间路由器上。IP数据报分片后,只有到达目的主机后才进行重装。
IP首部与分片有关的字段:

  • (1)对于每份IP数据报来说,都有一个标识字段,该值在分片时被复制到每个片中。
  • (2)标志字段用其中一个bit表示“更多的片”,除最后一片外,其他每个分片都要设置为1。
  • (3)片偏移字段指的是该片偏移原始数据报开始处的位置。
  • (4)数据报被分片后,每个片的总长度要改为该片的长度值。
  • (5)标志字段中有一个bit表示“不分片”,如果该位1,IP将不对数据报进行分片。

IP报即使丢失一片数据报也要重传整个数据报。为什么呢?因为IP层没有超时重传的机制,必须由更高层负责超时重传。

4、ICMP不可达差错(需要分片)

当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志位。如果需要判断到达目的端的路途中最小MTU是多少,就可以通过这个差错实现。
报文格式如下:

类型3 代码4 检验和
保留,必须为0 下一站的MTU
IP首部+原始IP数据报中数据前8位

可以用Traceroute确定路径MTU。要做的是发送分组,并设置“不分片”标志位。发送的第一个分组的长度正好与出口MTU相等,每次收 到ICMP“不能分片”差错时,就减少分组的长度。如果路由器发送的ICMP差错报文是上面格式,包含出口的MTU,那么就用该MTU值来发送,否则就用 下一个最小的MTU值来发送。MTU值的个数是有限的,因此可以取得路径的MTU。

5、 UDP服务器的设计:

  • (1)客户IP地址及端口号:Ip首部包括源端和目的端IP地址,UDP首部包括了远端和目的端的端口号。
  • (2)目的IP地址
  • (3)UDP输入队列:通常程序所使用的每个UDP端口都与一个有限大小的输入队列相联系。也就是来自不同客户的差不多同时到达的请求将由UDP自动排队,接收到的UDP数据报以其接收顺序交给应用程序。
  • (4)限制本地IP地址:大多数UDP服务器在创建UDP端口时都使其本地IP地址具有通配符的特点,表明进入的UDP数据报如果其目 的地位服务器端口,那么在任何本地接口均可接收到它。如果该端口设置位某接口的端口号,则只有发送给该接口的UDP数据报能收到。可以在同一个端口上启动 多个服务器,如以太网有一个,以太网广播有一个。
  • (5)限制远程IP地址:UDP也可以设定只能收到指定IP地址和端口号的UDP数据报。

二、广播

  • 1、受限的广播:受限的广播地址是255.255.255.255,该地址用于主机配置过程中IP数据报的地址,此时,主机可能还不知道它所在网 络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限广播地址的数据报,这样的数据报只出现在本地网络中。
  • 2、指向网络的广播:指向网络的广播地址是主机号全为1的地址,A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。
  • 3、指向子网的广播:指向子网的广播地址是主机号全为1的地址,作为子网直接广播的IP地址需要知道子网的掩码。如果B类网络128.1的子网掩码是255.255.255.0,则地址128.1.2.255就是对应子网的广播地址。
  • 4、指向所有子网的广播:指向所有子网的广播也需要知道目的网络的子网掩码。这些广播地址的子网号和主机号全为1。如果目的子网掩码是255.255.255.0,那么IP地址128.1.255.255就是一个指向所有子网的广播地址。

三、多播
IP多播主要向多个目的地发送数据,还可以无盘工作站启动时确定启动引导服务。多博地址是D类地址,格式如下:

1 1 1 0 28位多播组ID

1、多播地址包括为1110地最高4位和多播组号:
范围为:224.0.0.0到239.255.255.255。能够接收发往一个特定多播组地址数据地主机集合称为主机组,一个主机组可以跨越多个网络。 主机组中成员可随时加入或离开主机组,主机组中对主机地数量没有限制,同时不属于某一主机组地主机可以向该组发送信息。
一些多播组地址为知名地址:

224.0.0.1-该子网内地所有系统组
224.0.0.2-该子网内地所有路由器组
224.0.1.1-网络时间协议NTP
224.0.0.9-RIP2
224.0.1.2-SGI公司的dogfight应用

2、多播地址到以太网地址的转换:
IANA拥有一个以太网地址块,即高位24位为00-00-5e,这意味这该地址块所拥有的地址范围从00-00-5e-00-00-00到 00-00-5e-ff-ff-ff。IANA将其中的一般分配为多播地址。为了指明一个多播地址,任何以太网地址的首字节必须为01,这意味者与IP多 播相对应的以太网地址范围从01-00-5e-00-00-00到01-00-5e-7f-ff-ff。
这种地址分配将使以太网多播地址的23位与IP多播组号相对应起来,通过将多播组号中的低23位映射到以太网地址中的低23位事项。
由于多播组号中的最高5位在映射过程中被忽略,因此每个以太网多播地址对应的多播组是不唯一的,32个不同的多播组号被映射位一个以太网地址。例如,多播 地址224.128.64.32(16进制为e0-80-40-20)和224.0.64.32(16进制为e0-00-40-20)都映射为同一以太网 地址01-00-5e-00-40-20。
既然地址映射不是唯一的,那么设备驱动层或IP层就必须对数据报进行过滤,因为网卡可能收到主机不想接收的多播数据帧。

四、IGMP:Internet组管理协议

IGMP 让一个物理网络上的所有系统知道主机当前所在的广播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。IGMP也被当作IP层的一部分,IGMP报文通过IP数据报进行传输,其报文格式如下:

4位版本1 4位类型(1-2) 未用 检验和
32位组地址(D类IP地址)

IGMP类型位1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。
检验和的计算和ICMP协议一样。
组地址为D类IP地址,在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。

1、加入一个多播组

进程以某种方式在给定的接口上加入某个多播组,进程也能离开先前加入的多播组。一个进程可以在多个接口上加入同一多播组。主机通过组地址和接口来标识一个多播组。主机必须保留一个表,该表中包含所有至少含有一个进程的多播组及多播组中的进程数量。

2、IGMP报告和查询
多播路由器通过IGMP报文来记录与该路由器相连网络中组成员的变化情况,规则如下:

  • (1) 当第一个进程加入组时,主机就发送一个IGMP报告。如果主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
  • (2) 进程离开一个组时,主机不发送IGMP报告,即使时组中最后一个进程离开。主机知道在确定的组中已不再由组成员后,在随后的IGMP查询中就不再发送报告报文。
  • (3) 多播路由器定时发送IGMP查询是否还有任何主机包含有属于多播组的进程。多播路由器必须向每一个接口发送IGMP查询。因为路由器希望主机对它加入的每个多播组均返回一个报告,因此IGMP查询报文中的组地址被设置为0。
  • (4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

3、实现细节

  • (1) 当一个主机首次发送IGMP报告时,并不保证该报告被可靠地接收,下一个报告将在间隔一段时间后发送。
  • (2) 当一个主机收到从一个路由器发出地查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应。
  • (3) 一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就不用发送了。
  • (4) 在没有任何多播路由器的单个物理网络中,仅有的IGMP通信量就是在主机加入一个新的多播组时,支持IP多播的主机发送的报告。

4、生存时间字段

IGMP报告和查询的生存时间(TTL)均设置为1,这将使多播数据报仅限于同一子网内传送。更大的TTL值能被多播路由器转发。 224.0.0.0-224.0.0.255的特殊地址使打算用于多播范围不超过1跳的应用,不管TTL是多少,多播路由器均不转发目的地址为这些地址中 的任何一个地址的数据报。

5、所有主机组

224.0.0.1地址称为所有主机组地址,它涉及在一个物理网络中所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告。

发表评论

电子邮件地址不会被公开。 必填项已用*标注