UDP、广播与多播(七)

(参考文献)TCP/IP详解,卷1:协议

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。UDp数据报封装成IP数据报格式如下图:

UDP首部

UDP首部的各个字段如下图:

端口号表示发送进程和接收进程。由于IP层已经把数据报分配给TCP或者UDP(根据IP首部中协议字段值),因此TCP端口号有TCP查看,UDP端口号由UDP查看。TCP端口号与UDP端口号时是相对独立的。

UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(即没有数据时的情况)。

UDP和TCP在首部中都有覆盖他们首部和数据的校验和。UDP校验和是可选的,而TCP校验和是必须的。

IP分片

物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层收到一份要发送的IP数据报时,他要判断向本地哪个接口发送数据(选路),并查询该接口获取MTU。IP把MPU和数据报进行比较较,如果需要。则进行分片。分片可以发生在原始发送端上,也可以发送在中间路由器上。

把一数据报进行分片后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,他们要求下一站就进行重新组装,而不是在最终目的地)。重新组装由目的地的IP层来完成。已经分过片的数据报有可能再次进行分片。IP首部中包含的数据位分片和重组提供了足够的信息。

如上图,对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中。标志字段用一个比特位来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置一。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,该数据报被分片后,每个片的总长度值要为该片的长度值。

最后,标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个ICMP差错报文(需要进行分片但设置了不分片比特)给起始端。

当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时和其他分组独立。这样,当数据报到达目的端时有可能失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据片。

IP数据报与分组

IP数据报是指IP层端到端的传输单元(在分组之前和重新组装之后)。分组是指在IP层和链路层之间传送的数据单元,一个分组可以是一个IP数据报,也可以是IP数据报的一个分片。

广播和多播

IP 地址分三种:单播地址、广播地址和多播地址。

广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机内的两进程间存在一连接。

考虑包含多个主机的共享信道网络,如以太网。每个以太网帧包含源主机和目的主机的以太网地址(48bit)。通常每个以太网帧仅发往单个目的主机,目的地址指往单个接收接口,因而称为单播。

然而,有时候一个主机要向网络上的所有主机发送帧,这就是广播。通过ARP和RARP可以看到这一过程。多播处于单播和广播之间,帧只发送属于多播组的多个主机。

要了解广播和多播,需要了解主机对由信道传送过来帧的过滤过程。

首先,网卡查看由信道传送过来的帧,确定是否接受该帧,若接收后就把他传往设备驱动程序。通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。另外,多数接口被设置为混杂模式,这种模式能够接收每个帧的一个复制。

目前,大多数的网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高啊字节的最低位设置为1时表示改地址是一个多播地址,用十六进制可表示为01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff可以看做是以太网多播地址的特例)。

如果网卡收到一个帧,这个帧将被传送给设备驱动程序(如果帧检验和错,网卡就会丢弃该帧)。设备驱动程序将进行另外的帧过滤。首先,帧类型中必须指定要使用的协议(IP、ARP等等),其次,进行多播过滤来检查该主机是否属于多播地址说明的多播组。

设备驱动程序随后将数据帧传送给上一层,比如,当帧类型指定为IP数据报时,就传往IP层。IP根据IP地址中的源地址和目的地址进行更多的过滤监测。如果正常,就把数据报再传送给上一层(TCP或UDP层)。

每次UDP收到有IP传送过来的数据报,就根据目的端口号,有时还根据源端口号进行数据报过滤。如果当前没有进程使用目的端口号,就丢弃该数据报,并产生一个ICMP不可到达 报文(TCP根据端口号做相似的处理)。如果UDP数据报出现检验和错,数据报将被丢弃。

多播之于广播出现的原因

使用广播的问题在于,它增加了对广播数据不感兴趣主机的处理负荷。拿一个使用UDP广播应用作为例子。如果网络内有50个主机,但仅有20个参与该应用,每次这20个主机中的一个发送UDP广播数据时,其余30个主机不得不处理这些广播数据报。一直到UDP层收到的广播数据报才会被丢弃。这30个主机丢弃该数据报的原因是因为这些主机没有使用该目的端口。

多播的出现减少了对应用不感兴趣主机的处理负荷。使用多播,主机可以加入一个或者多个多播组,这样网卡就仅接收主机所在多播组的那些数据帧。

广播

广播地址主要有4种:受限的广播、指向网络的广播、指向子网的广播、指向所有子网的广播。

受限的广播

受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码甚至连他的IP地址也不知道。

在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。

指向网络的广播

指向网络的广播地址是主机号全为1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。

一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。

指向子网的广播

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

指向所有子网的广播

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

多播

IP多播提供两类服务:

1.  向多个目的地址传送数据。有许多向多个接收者传递信息的应用:例如交互式会议系统或向多个接收者分发邮件或新闻。如果不采用多播,目前这些应用都采用TCP来完成(向每个目的地址传送一个单独的数据复制)。然而,即使使用多播,某些应用任然采用TCP来保证他的可靠性。

2.  客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器,目前这项服务是通过广播来提供的,但是如果采用多播,则可以降低不提供这项服务主机的负担。

多播组地址

不像其他IP地址(A、B、C类地址),分配的28bit均用作多播组号,而不再表示其他。

多播组地址包括为1110的最高4bit和多播组号。它表示的地址范围从224.0.0.0到239.255.255.255 。

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

一些多播组地址被IANA确定为知名地址。他们也被当做永久主机组,这和TCP和UDP中的熟知端口相似。例如:224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。多播组地址224.0.1.1用作网络时间协议NTP

时间: 2024-11-08 07:08:14

UDP、广播与多播(七)的相关文章

TCP/IP||UDP广播和多播

1.概述 广播和多播应用于UDP,TCP是一个面向连接协议,意味着分别运行与两个主机内的两进程间存在一个连接,在考虑多个主机内的共享通信网络,每个以太网帧包含源主机和目的主机以太网地址(48bit),通常以以太网帧发往单个主机,目的地指明单个接收接口,因此称单播(unicast),然而需要一个主机向网上的所有主机发送帧,只就是广播,再通过ARP和RARP发现,多播(multicast)处于单播和广播之间,帧仅属于多播组的多个主机. 该图中,网卡查看由信道传送过来的帧,确认是否收到帧,如果接收到发

UDP通信之单播、广播和多播

使用UDP协议进行信息的传输之前不需要建议连接.换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去.至于服务器端是否存在,或者能否收到该报文,客户端根本不用管. 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信.单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信.实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途. 通

UDP 单播、广播、多播

一.UDP广播 广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机.值得强调的是:本地广播信息是不会被路由器转发.当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪.这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制. 广播地址通常用于在网络游戏中处于同一本地网络的玩家之间交流状态信息等. 其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可

[C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享下,本专题主要介绍下如何实现UDP广播的程序,下面就直接介绍实现过程和代码以及运行的结果. 一.程序实现 UDP广播程序的实现代码: [csharp] view plain copy print? using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.W

广播和多播

概述: 广播和多播,顾名思义,分别是传给子网中的所有系统或属于某个多播组的系统.它们仅应用于UDP. 对于ip,我们知道主机号全为1的使广播地址,而D类ip(即从224.0.0.0到239.255.255.255)为多播地址. 对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,即01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff是多播地址特例). 如果网卡收到一个帧,要先经过4步: 1.接口卡.如果帧检验和错误,该帧将被丢弃: 2.设备驱动

android 发送UDP广播,搜寻服务器建立socket链接

应用场景:客户端(手机,pc)需要搜寻所在局域网内的服务器并获得服务器地址. 方法简介:客户端发送UDP广播,服务收到广播后得到客户端ip地址,然后向客户端发送一次socket链接,客户端收到socket链接,获得服务器地址. 相关知识: UPD.TCP.TCP是面向链接的,可靠的通信方式.UDP是面向非链接的通讯方式.TCP的建立比较麻烦,要经过"三次握手".而UDP的建立比较简单,发送方只管把内容发送出去,不管接收方是否收到.UDP的传输分为:单播,多播,广播.其中,多播和广播是通

《网络编程》广播和多播

概述 主机可採用的通信方式有例如以下三种: 单播:单台主机与单台主机之间的数据通信: 广播:单台主机向网络中全部主机发送数据报的过程: 多播:单台主机向选定的一组主机发送数据报的过程: 在网络协议中 IP 地址有三种方式,即为单播地址.广播地址 以及 多播地址.如果多个主机上的共享信道网络是以太网,每一个以太网帧包括源主机和目的主机的以太网地址. 若目的地址仅指定单个接收接口,则称为单播.在单播方式下,随意两台主机之间的通信不会干扰网内其它主机.若目的地址包括网上的全部主机的接收接口时,即一个主

《TCP/IP详解卷1:协议》第12章 广播和多播---读书笔记

<TCP/IP详解卷1:协议>第12章 广播和多播---读书笔记 1.引言 广播和多播仅用于UDP,他们对需将报文同时传往多个接受者的应用来说十分重要. 有时,一个主机要向网上的所有其他主机发送帧,这就是广播. 多播(multicast)处于单播和广播之间:帧仅传送给属于多播组的多个主机. 2.广播 2.1.受限的广播 受限的广播地址是255.255.255.255.该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址都不知道. 在任何情

TCP/IP协议 卷一 -----------广播和多播

小小搬运工又来了,五一假期结束了 1.引言 广播和多播仅应用于UDP,因为TCP是面向连接的协议(IP地址确定) 单播:以太网帧仅发往单个目的主机,目的地址指明单个接收接口.该模式下,任意两主机通信不会影响网内其他主机(争夺共享信道情况除外) 广播:主机向网上的所有其他主机发送帧.但是只有ARP和RARP可以看到该过程. 组播:帧传送给属于多播组的多个主机. 主机对帧过滤过程: 网卡查看由信道传送过来的帧,确定是否接收该帧.若接收则将它传往设备驱动程序.通常网卡接收目的地址为网卡物理地址或广播地