UDP單播 廣播 多播

2021-07-08 18:16:48 字數 2369 閱讀 3091

單播:就是我們常見的包含s端和c端的一對一方式,要c端向s端發生前要先明確指明s端的ip及port;

程式設計說明:略

廣播:又叫分有限廣播和和直接廣播。

有限廣播:

使用的位址是255.255.255.255,即向該ip的任何乙個埠發生資料,資料將發生給該區域網內的所有主機的同一埠,因為廣播位址(255.255.255.255)是不會被路由器路由的,智慧型到達本物理網路內的主機,這一點不能理解:如果可以被路由的話,那勢必造成網路的癱瘓。

直接廣播:

在使用tcp/ip 協議的網路中,主機標識段host id 為全1 的ip 位址為廣播位址。如果你的ip為:192.168.1.39,子網掩碼為:255.255.255.0,則廣播位址為:192.168.1.255;如果ip為192.168.1.39,子網掩碼為:255.255.255.192,則廣播位址為:192.168.1.63。

如果只想在本網路內廣播資料,只要向廣播位址傳送資料報即可,這種資料報可以被路由,它會經由

路由器到達本網段內的所有主機,此種廣播也叫直接廣播;

廣播一般用於同乙個區域網內的使用者進行互動聊天,如同一本地的遊戲玩家進行資訊的交流。

程式設計說明:

setsockopt(sock, sol_socket, so_broadcast, (

char

*)&opt, 

sizeof

(opt)); 

//設定套接字為廣播型別

接收方不需要設定接收廣播包

多播:

ip多播通訊必須依賴於ip多播位址,在ipv4中它是乙個d類ip位址,範圍從224.0.0.0到239.255.255.255,並被劃分為區域性鏈結多播位址、預留多播位址和管理許可權多播位址三類。其中,

區域性鏈結多播位址範圍在224.0.0.0~224.0.0.255,這是為路由協議和其它用途保留的位址,路由器並不**屬於此範圍的ip包;

預留多播位址為224.0.1.0~238.255.255.255,可用於全球範圍(如internet)或網路協議;

管理許可權多播位址為239.0.0.0~239.255.255.255,可供組織內部使用,類似於私有ip位址,不能用於internet,可限制多播範圍。 序。

程式設計說明:

在linux中使用多播技術,與使用udp給單個使用者傳送訊息,沒有多大的區別,只是你要使用乙個特殊的多播ip位址,還有一些環境需要改變一下。

一般的網絡卡,都是支援多播技術的,但是作業系統不一定。linux一般在預設狀態編譯時,可能都不支援multicast,你需要從新配置和編譯你的核心,使它支援多播,然後你需要使用類似這樣的命令:

route add -net 224.0.0.0 netmask 240.0.0.0 dev lo

要編譯和配置核心,只是在配置的網路部分選項中選中:enable multicast ip,然後編譯,編輯lilo的配置檔案lilo.conf,就可以搞定。

在使用多播技術時,除了通常使用的socket函式外,還需要使用getsockopt()和setsockopt() 來支援multicast。你可以執行「man multicast」,看看它的各種選項。編制多播的程式,也分為兩方面,乙個是broadcast data的服務程式,另乙個是監聽multicast ip 廣播資料的客戶端程式。

服務程式的編制和普通udp服務程式的編制一樣,只是在你的sockaddr_in結構的初始化時,賦值給它的sin_addr。s_addr使用inet_addr("224.0.0.1")給乙個特殊的muticast ip值就可以了。

在客戶端的編制方面,相對複雜一點。一般我們需要先使用gethostbyname,得到伺服器的資訊。然後使用socket(af_inet,sock_dgram,0)建立套接字,我們接著呼叫setsockopt(sockfd,sol_socket,so_reuseaddr,&share,sizeof(share)),其中,char share = 1, sockfdsocket建立的套接字,這一步就是允許了多程序共享同乙個埠。接著,是通用的bzero(), 給sockaddr_in填入資訊,bind(),下來,我們要通知linux kernel來的資料是廣播資料,這一步通過給optval付值來搞定,如 optval.imr_multiaddr.s_addr = inet_addr("224.0.0.1"); optval.imr_inte***ce.s_addr = htonl(inaddr_any); 先面的這一步,則用來使自己的主機加入乙個廣播組: setsockopt(sockfd, ipproto_ip, ip_add_membership, &optval, sizeof(command)); 現在,你可以使用recvfrom()來接收多播資料了,當然,最後你還要使用: setsockopt(sockfd, ipproto_ip,ip_drop_membership, &optval, sizeof(optval)); 來退出多播組。

UDP單播 多播 廣播

廣播udp與單播udp的區別就是ip位址不同,廣播使用廣播位址255.255.255.255,將訊息傳送到在同一廣播網路上的每個主機。值得強調的是 本地廣播資訊是不會被路由器 當然這是十分容易理解的,因為如果路由器 了廣播資訊,那麼勢必會引起網路癱瘓。這也是為什麼ip協議的設計者故意沒有定義網際網路...

UDP 單播 廣播和多播

閱讀目錄 content 三 udp廣播與單播 使用udp協議進行資訊的傳輸之前不需要建議連線。換句話說就是客戶端向伺服器傳送資訊,客戶端只需要給出伺服器的ip位址和埠號,然後將資訊封裝到乙個待傳送的報文中並且傳送出去。至於伺服器端是否存在,或者能否收到該報文,客戶端根本不用管。單播用於兩個主機之間...

UDP 單播 廣播和多播

閱讀目錄 content 三 udp廣播與單播 使用udp協議進行資訊的傳輸之前不需要建議連線。換句話說就是客戶端向伺服器傳送資訊,客戶端只需要給出伺服器的ip位址和埠號,然後將資訊封裝到乙個待傳送的報文中並且傳送出去。至於伺服器端是否存在,或者能否收到該報文,客戶端根本不用管。單播用於兩個主機之間...