❶ 什麼是IP組播單播、多播,在網路裡面分別指的是什麼很多人研究IP組播,那麼IP組播到底是什麼
一般是根據傳輸的消息特徵將IP地址分為單播、廣播或多播。
1 單播 (Unicast)
一個單播IP地址只能標識一台用戶主機,一台用戶主機只能識別一個單播IP地址。一份使用單播IP地址為目的地址的IP報文,只能被一台用戶主機接收。
2 廣播(Broadcast)
一個廣播IP地址能夠標識某確定網段內的所有用戶主機,一份使用廣播IP地址為目的地址的IP報文,能夠被該網段內的所有用戶主機接收。IP廣播報文不能跨網段傳播。 廣播分組的目標IP地址的主機部分全為1,如:
C類網路192.168.1.0的默認子網掩碼為255.255.255.0,其廣播地址為192.168.1.255,其主機部分為十進制數255或二進制數11111111(全為1)。
3 組播/多播(Multicast)
一個組播IP地址能夠標識網路不同位置的多個用戶主機,一台用戶主機可以同時識別多個組播IP地址。一份使用組播IP地址為目的地址的IP報文,能夠被網路不同位置的多個用戶主機接收。 多播地址范圍為224.0.0.0~239.255.255.255。
組播的特點:
組播就是類似於發布-訂閱模式,一端是出版商,進行數據發布(向組播地址發送數據),一端是訂閱者,根據內容決定訂閱哪些數據(加入多播組)。
出版商向組播地址發送數據,數據在網路中傳輸,只有一份就可以,經過交換機時,交換機之下的子網中如果沒有人訂閱,則數據繼續傳輸;如果有人訂閱,則交換機將把數據復制多份,轉發給子網的訂閱者。所以組播的最大好處就是節省帶寬。
❷ 有誰能給我貼一份可用的 UDP 組播代碼嗎
組播技術可形象的描述如下:
假設一個企業分布於各地的子公司(兩個以上)之間需要通過Internet進行實時的交換信息(數據,聲音,圖像),他們的計算機可能不屬於同一物理網 絡,甚至不屬於同一自治系統,這種通信的特點是「多點」式的。子公司發出的數據希望其他子公司都能收到,而總部發出的指示全體子公司都應收到。這種多點通信方式為組內廣播,即組播技術,也稱多播技術,多目網關技術。
1.2、TCP/IP傳送方式
組播技術是TCP/IP傳送方式的一種。在我們討論組播技術之前先來看看TCP/IP傳送方式。TCP/IP傳送方式有三種:單播,廣播,組播。
單播(Unicast)傳輸:在發送者和每一接收者之間需要單獨的數據信道。 如果一台主機同時給很少量的接收者傳輸數據,一般沒有什麼問題。但如果有大量主機希望獲得數據包的同一份拷貝時卻很難實現。這將導致發送者負擔沉重、延遲長、網路擁塞;為保證一定的服務質量需增加硬體和帶寬。
組播(Multicast)傳輸:它提高了數據傳送效率。減少了主幹網出現擁塞的可能性。組播組中的主機可以是在同一個物理網路,也可以來自不同的物理網路(如果有組播路由器的支持)。
廣播(Broadcast)傳輸:是指在IP子網內廣播數據包,所有在子網內部的主機都將收到這些數據包。廣播意味著網路向子網主機都投遞一份數據包,不論這些主機是否樂於接收該數據包。然而廣播的使用范圍非常小, 只在本地子網內有效,因為路由器會封鎖廣播通信。廣播傳輸增加非接收者的開銷。
組播是一種允許一個或多個發送者(組播源)發送單一的數據包到多個接收者(一次的,同時的)的網路技術。 組播源把數據包發送到特定組播組,而只有屬於該組播組的地址才能接收到數據包。組播可以大大的節省網路帶寬, 因為無論有多少個目標地址,在整個網路的任何一條鏈路上只傳送單一的數據包。 它提高了數據傳送效率。減少了主幹網出現擁塞的可能性。組播組中的主機可以是在同一個物理網路, 也可以來自不同的物理網路(如果有組播路由器的支持)。
❸ 組播和廣播的區別
廣播:
主機之間一對所有的通訊模式,網路對其中每一台主機發出的信號都進行無條件復制並轉發,所有主機都可以接收到所有信息(不管你是否需要),由於其不用路徑選擇,所以其網路成本可以很低廉。有線電視網就是典型的廣播型網路,我們的電視機實際上是接受到所有頻道的信號,但只將一個頻道的信號還原成畫面。在數據網路中也允許廣播的存在,但其被限制在二層交換機的區域網范圍內,禁止廣播數據穿過路由器,防止廣播數據影響大面積的主機。
廣播的優點:
1)網路設備簡單,維護簡單,布網成本低廉
2)由於伺服器不用向每個客戶機單獨發送數據,所以伺服器流量負載極低。
廣播的缺點:
1)無法針對每個客戶的要求和時間及時提供個性化服務。
2)網路允許伺服器提供數據的帶寬有限,客戶端的最大帶寬=服務總帶寬。例如有線電視的客戶端的線路支持100個頻道(如果採用數字壓縮技術,理論上可以提供500個頻道),即使服務商有更大的財力配置更多的發送設備、改成光纖主幹,也無法超過此極限。也就是說無法向眾多客戶提供更多樣化、更加個性化的服務。
3)廣播禁止允許在Internet寬頻網上傳輸。
組播:
主機之間一對一組的通訊模式,也就是加入了同一個組的主機可以接受到此組內的所有數據,網路中的交換機和路由器只向有需求者復制並轉發其所需數據。主機可以向路由器請求加入或退出某個組,網路中的路由器和交換機有選擇的復制並傳輸數據,即只將組內數據傳輸給那些加入組的主機。這樣既能一次將數據傳輸給多個有需要(加入組)的主機,又能保證不影響其他不需要(未加入組)的主機的其他通訊。
組播的優點:
1)需要相同數據流的客戶端加入相同的組共享一條數據流,節省了伺服器的負載。具備廣播所具備的優點。
2)由於組播協議是根據接受者的需要對數據流進行復制轉發,所以服務端的服務總帶寬不受客戶接入端帶寬的限制。IP協議允許有2億6千多萬個組播,所以其提供的服務可以非常豐富。
3)此協議和單播協議一樣允許在Internet寬頻網上傳輸。
組播的缺點:
1)與單播協議相比沒有糾錯機制,發生丟包錯包後難以彌補,但可以通過一定的容錯機制和QOS加以彌補。
2)現行網路雖然都支持組播的傳輸,但在客戶認證、QOS等方面還需要完善,這些缺點在理論上都有成熟的解決方案,只是需要逐步推廣應用到現存網路當中。
❹ c語言實現基於遺傳演算法的時延受限組播路由選擇(受限最小生成樹)
啊~~我們也學遺傳演算法呢~
代碼已經發到你的郵箱里了,請及時查看的~
有什麼問題可以Hi我呀,交流下
❺ c# UdpClient如何實現組播要求一對多相互發送和接收信息。
不用..一個就可以了...又可以組播又可以單播
收發都是啊~~~一個就能完成功能了.
組波還是單播都是使用Send函數.只是IPEndPoint這個參數不一樣..何必用2個發呢....不同的發送方式.只需要修改這個參數就可以了啊
_localIpAddress = GetLocalIpAddress();
_msgSocket = new UdpClient(new IPEndPoint(IPAddress.Parse(_localIpAddress),_msgPort));
_msgSocket.EnableBroadcast = true;
_msgSocket.JoinMulticastGroup(_groupIP);
/// <summary>
/// 組播消息
/// </summary>
/// <param name="msg"></param>
public static void SendMsgToAll(string msg)
{
try
{
byte[] buffer = Encoding.Default.GetBytes(msg);
_msgSocket.Send(buffer, buffer.Length,_groupEP);
}
catch (Exception err)
{
throw err;
}
}
/// <summary>
/// 發送消息給指定IP
/// </summary>
/// <param name="msg">要發送的消息</param>
/// <param name="ip">接收方的IP地址</param>
public static void SendMsgToOne(string msg,string ip)
{
try
{
byte[] buffer = Encoding.Default.GetBytes(msg);
_msgSocket.Send(buffer, buffer.Length, new IPEndPoint(IPAddress.Parse(ip), _msgPort));
}
catch (Exception err)
{
throw err;
}
}
只要替換最後一個參數.就實現了組播和單播.
❻ c語言中的 netinet/in是什麼意思
名稱
netinet/in.h - Internet address family netinet / in.h - 互聯網地址族
SYNOPSIS故事大綱
#include <netinet/in.h> #包括<netinet/in.h>
DESCRIPTION描述
The <netinet/in.h> header shall define the following types:該<netinet/in.h>頭應確定以下類型:
in_port_t in_port_t
Equivalent to the type uint16_t as defined in <inttypes.h> .等價的類型uint16_t在定義<inttypes.h> 。
in_addr_t in_addr_t
Equivalent to the type uint32_t as defined in <inttypes.h> .等價的類型uint32_t在定義<inttypes.h> 。
The sa_family_t type shall be defined as described in <sys/socket.h> .該sa_family_t類型應被定義為描述<sys/socket.h> 。
The uint8_t and uint32_t type shall be defined as described in <inttypes.h> .該uint8_t和uint32_t類型應被定義為描述<inttypes.h> 。 Inclusion of the <netinet/in.h> header may also make visible all symbols from <inttypes.h> and <sys/socket.h> .標題包含的<netinet/in.h>也可從所有可見的符號<inttypes.h>和<sys/socket.h> 。
The <netinet/in.h> header shall define the in_addr structure that includes at least the following member:該<netinet/in.h>頭應確定in_addr結構,至少包括以下成員:
in_addr_t s_addr in_addr_t s_addr
The <netinet/in.h> header shall define the sockaddr_in structure that includes at least the following members:該<netinet/in.h>頭應確定SOCKADDR_IN結構,其中包括至少下列成員:
sa_family_t sin_family AF_INET. in_port_t sin_port Port number. struct in_addr sin_addr IP address. sa_family_t sin_family是AF_INET。in_port_t sin_port埠號。 結構in_addr sin_addr的IP地址。
The sin_port and sin_addr members shall be in network byte order.該sin_port和sin_addr成員應在網路位元組順序。
The sockaddr_in structure is used to store addresses for the Internet address family.該SOCKADDR_IN結構是用來存儲家庭地址的Internet地址。 Values of this type shall be cast by applications to struct sockaddr for use with socket functions.值類型轉換插座職能,應由申請與使用結構sockaddr的。
[ IP6 ] [ 肌醇 ] [備選案文開始] The <netinet/in.h> header shall define the in6_addr structure that contains at least the following member:該<netinet/in.h>頭應確定in6_addr結構,至少包含以下成員:
uint8_t s6_addr[16] uint8_t s6_addr [16]
This array is used to contain a 128-bit IPv6 address, stored in network byte order.這個數組用來包含一個128位的IPv6地址,在網路存儲位元組順序。
The <netinet/in.h> header shall define the sockaddr_in6 structure that includes at least the following members:該<netinet/in.h>頭應確定sockaddr_in6結構,至少包括以下成員:
sa_family_t sin6_family AF_INET6. sa_family_t sin6_family AF_INET6。
in_port_t sin6_port Port number. in_port_t sin6_port埠號。
uint32_t sin6_flowinfo IPv6 traffic class and flow information. uint32_t sin6_flowinfo IPv6通信類和信息流。
struct in6_addr sin6_addr IPv6 address. 結構in6_addr sin6_addr IPv6地址。
uint32_t sin6_scope_id Set of interfaces for a scope. uint32_t sin6_scope_id范圍一套介面。
The sin6_port and sin6_addr members shall be in network byte order.該sin6_port和sin6_addr成員應在網路位元組順序。
The sockaddr_in6 structure shall be set to zero by an application prior to using it, since implementations are free to have additional, implementation-defined fields in sockaddr_in6 .該sockaddr_in6結構應被設置為應用零一前使用它,因為可以自由的實現有執行定義的領域sockaddr_in6增加。
The sin6_scope_id field is a 32-bit integer that identifies a set of interfaces as appropriate for the scope of the address carried in the sin6_addr field.該sin6_scope_id欄位是一個32位整數,在該領域的sin6_addr標識一組介面的地址進行適當的范圍。 For a link scope sin6_addr , the application shall ensure that sin6_scope_id is a link index.對於一個鏈接范圍sin6_addr的,應當確保sin6_scope_id是一個環比價格指數。 For a site scope sin6_addr , the application shall ensure that sin6_scope_id is a site index.對於一個場址范圍sin6_addr的,應當確保sin6_scope_id是一個網站的索引。 The mapping of sin6_scope_id to an interface or set of interfaces is implementation-defined.該介面映射到一個或介面sin6_scope_id集是實現定義。
The <netinet/in.h> header shall declare the following external variable:該<netinet/in.h>頭應宣布下列外部變數:
const struct in6_addr in6addr_any 常量結構in6_addr in6addr_any
This variable is initialized by the system to contain the wildcard IPv6 address.這個變數是由系統初始化包含通配符的IPv6地址。 The <netinet/in.h> header also defines the IN6ADDR_ANY_INIT macro.該<netinet/in.h>頭還定義IN6ADDR_ANY_INIT宏。 This macro must be constant at compile time and can be used to initialize a variable of type struct in6_addr to the IPv6 wildcard address.這個宏必須保持在編譯時,可以用來初始化一個類型變數的結構in6_addr到IPv6的通配符地址。
The <netinet/in.h> header shall declare the following external variable:該<netinet/in.h>頭應宣布下列外部變數:
const struct in6_addr in6addr_loopback 常量結構in6_addr in6addr_loopback
This variable is initialized by the system to contain the loopback IPv6 address.這個變數是由系統初始化,控制迴路的IPv6地址。 The <netinet/in.h> header also defines the IN6ADDR_LOOPBACK_INIT macro.該<netinet/in.h>頭還定義IN6ADDR_LOOPBACK_INIT宏。 This macro must be constant at compile time and can be used to initialize a variable of type struct in6_addr to the IPv6 loopback address.這個宏必須保持在編譯時,可以用來初始化一個類型變數的結構in6_addr到IPv6的環回地址。
The <netinet/in.h> header shall define the ipv6_mreq structure that includes at least the following members:該<netinet/in.h>頭應確定ipv6_mreq結構,至少包括以下成員:
struct in6_addr ipv6mr_multiaddr IPv6 multicast address. 結構in6_addr ipv6mr_multiaddr IPv6組播地址。
unsigned ipv6mr_interface Interface index. 未簽名的ipv6mr_interface介面索引。
[備選案文完]
The <netinet/in.h> header shall define the following macros for use as values of the level argument of getsockopt () and setsockopt () :該<netinet/in.h>頭應確定水平的論點如下宏作為值使用getsockopt()和使用setsockopt() :
IPPROTO_IP IPPROTO_IP
Internet protocol.互聯網協議。
IPPROTO_IPV6 IPPROTO_IPV6
[ IP6 ] [ 肌醇 ] [備選案文開始] Internet Protocol Version 6. Internet協議版本6。 [備選案文完]
IPPROTO_ICMP IPPROTO_ICMP
Control message protocol.控制消息協議。
IPPROTO_RAW IPPROTO_RAW
[ RS ] [ 遙感 ] [備選案文開始] Raw IP Packets Protocol.原始IP數據包協議。 [備選案文完]
IPPROTO_TCP IPPROTO_TCP
Transmission control protocol.傳輸控制協議。
IPPROTO_UDP IPPROTO_UDP
User datagram protocol.用戶數據報協議。
The <netinet/in.h> header shall define the following macros for use as destination addresses for connect () , sendmsg () , and sendto () :該<netinet/in.h>頭應確定目標地址為使用如下宏連接 () , sendmsg() ,和SendTo文件 () :
INADDR_ANY INADDR_ANY
IPv4 local host address. IPv4的本地主機地址。
INADDR_BROADCAST INADDR_BROADCAST
IPv4 broadcast address. IPv4的廣播地址。
The <netinet/in.h> header shall define the following macro to help applications declare buffers of the proper size to store IPv4 addresses in string form:該<netinet/in.h>頭應當載明下列事項,以幫助申請申報宏大小適當的緩沖區來存儲的字元串形式的IPv4地址:
INET_ADDRSTRLEN INET_ADDRSTRLEN
16. 16。 Length of the string form for IP.長度為IP字元串形式。
The htonl () , htons () , ntohl () , and ntohs () functions shall be available as defined in <arpa/inet.h> .該htonl() , htons() , ntohl() ,和ntohs()函數應可在定義<arpa/inet.h> 。 Inclusion of the <netinet/in.h> header may also make visible all symbols from <arpa/inet.h> .標題包含的<netinet/in.h>也可從所有可見的符號<arpa/inet.h> 。
[ IP6 ] [ 肌醇 ] [備選案文開始] The <netinet/in.h> header shall define the following macro to help applications declare buffers of the proper size to store IPv6 addresses in string form:該<netinet/in.h>頭應當載明下列事項,以幫助申請申報宏緩沖區的大小適當的形式存儲的IPv6地址的字元串:
INET6_ADDRSTRLEN INET6_ADDRSTRLEN
46. 46。 Length of the string form for IPv6.長度為IPv6的字元串形式。
The <netinet/in.h> header shall define the following macros, with distinct integer values, for use in the option_name argument in the getsockopt () or setsockopt () functions at protocol level IPPROTO_IPV6:該<netinet/in.h>頭應當載明下列事項宏,有明顯的整數值,在參數的使用在option_name getsockopt()或使用setsockopt() IPPROTO_IPV6功能在協議級別:
IPV6_JOIN_GROUP IPV6_JOIN_GROUP
Join a multicast group.加入一個多播組。
IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
Quit a multicast group.退出一個多播組。
IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
Multicast hop limit.組播跳的限制。
IPV6_MULTICAST_IF IPV6_MULTICAST_IF
Interface to use for outgoing multicast packets.即將離任的介面用於多播數據包。
IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
Multicast packets are delivered back to the local application.多播數據包被傳遞回本地應用程序。
IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
Unicast hop limit.單播跳的限制。
IPV6_V6ONLY IPV6_V6ONLY
Restrict AF_INET6 socket to IPv6 communications only.限制AF_INET6到IPv6通訊插座只。
The <netinet/in.h> header shall define the following macros that test for special IPv6 addresses.該<netinet/in.h>頭應當載明下列事項宏測試特殊的IPv6地址。 Each macro is of type int and takes a single argument of type const struct in6_addr * :每個宏是int 類型的常量 ,而所需的類型單一參數的結構in6_addr *:
IN6_IS_ADDR_UNSPECIFIED IN6_IS_ADDR_UNSPECIFIED
Unspecified address.未指定地址。
IN6_IS_ADDR_LOOPBACK IN6_IS_ADDR_LOOPBACK
Loopback address.環回地址。
IN6_IS_ADDR_MULTICAST IN6_IS_ADDR_MULTICAST
Multicast address.組播地址。
IN6_IS_ADDR_LINKLOCAL IN6_IS_ADDR_LINKLOCAL
Unicast link-local address.單播鏈路本地地址。
IN6_IS_ADDR_SITELOCAL IN6_IS_ADDR_SITELOCAL
Unicast site-local address.單播站點本地地址。
IN6_IS_ADDR_V4MAPPED IN6_IS_ADDR_V4MAPPED
IPv4 mapped address.映射的IPv4地址。
IN6_IS_ADDR_V4COMPAT IN6_IS_ADDR_V4COMPAT
IPv4-compatible address. IPv4兼容地址。
IN6_IS_ADDR_MC_NODELOCAL IN6_IS_ADDR_MC_NODELOCAL
Multicast node-local address.組播節點本地地址。
IN6_IS_ADDR_MC_LINKLOCAL IN6_IS_ADDR_MC_LINKLOCAL
Multicast link-local address.組播鏈路本地地址。
IN6_IS_ADDR_MC_SITELOCAL IN6_IS_ADDR_MC_SITELOCAL
Multicast site-local address.組播站點本地地址。
IN6_IS_ADDR_MC_ORGLOCAL IN6_IS_ADDR_MC_ORGLOCAL
Multicast organization-local address.組播組織本地地址。
IN6_IS_ADDR_MC_GLOBAL IN6_IS_ADDR_MC_GLOBAL
Multicast global address.全球多播地址。 [備選案文完]
❼ C語言實現基於網路編碼的無線多跳網路組播路由演算法設計
c語言實現網路,我想你是說用VC開放win32的應用程序吧,直接用API函數,不是c語言實現!
它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。
1.一個C語言源程序可以由一個或多個源文件組成。 2.每個源文件可由一個或多個函數組成。 3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。 4.源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。 5.每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。 6.標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
底下是重點了,C語言不是萬能的
1. C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。 2. C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。 [C語言指針] 指針是C語言的一大特色,可以說是C語言優於其它高級語言的一個重要原因。就是因為它有指針,可以直接進行靠近硬體的操作,但是C的指針操作也給它帶來了很多不安全的因素。C++在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。Java取消了指針操作,提高了安全性,適合初學者使用。
❽ 組播和廣播的區別
一、主體不同
1、組播:為了減少在廣播中涉及的不必要的開銷,可以只向特定的一部分接收方(可以是域內也可以是域間)發送流量。
2、廣播:指將報文發送到網路中的所有可能的接收者。
二、原理不同
1、組播:在通信中參與或感興趣的主機需要處理相關的分組,流量只會被承載於它將被使用的鏈路上,並且只有任意組播數據報的一個副本被承載於這樣的鏈路上。
2、廣播:路由器簡單地將它接收到的任何廣播報文副本轉發到除該報文到達的介面以外的每個介面。
三、特點不同
1、組播:通過發送方指明接收方,或是通過接收方獨立地指明就可以完成這項工作。然後網路只負責向預期的或感興趣的收件方發送流量。
2、廣播:通過將地址中的主機部分全部置1形成的,特殊地質255.255.255.255對應於本地網路廣播。
❾ 一個組播編程的例子以及組播和廣播的區別
你首先要明白組播和廣播的定義:
組播(multicasting)是一種多點投遞的形式,它使用硬體技術,通過使用大量組播地址來通信.當某一組機器需要通信時,選擇一個組播地址,並配置好相應的網路介面硬體,識別組播地址,從而收到該組播地址上分組的拷貝.
廣播(broadcasting)是多點投遞的最普遍的形式,它向每一個目的站投遞一個分組的拷貝.它可以通過多個單次分組的投遞完成,也可以通過單獨的連接傳遞分組的拷貝,直到每個接收方均收到一個拷貝為止.
舉個例子:縣里開大會,只同時通知了A村、B村、C村參加就是組播;同時通知了所有的村子參加就是廣播了!
❿ 如何辨別數據包是組播還是單播
D類的組播地址是不能分配給主機當作IP地址用的,是組播專用的地址。