UNP卷一chapter20 廣播

2021-08-20 12:01:35 字數 2218 閱讀 9479

型別ipv4

ipv6

tcpudp

所標識介面數

遞送到介面數單播y

yyy乙個

乙個任播*y

尚沒有y

一組一組中的乙個

多播可選yy

一組一組中的全體廣播y

y全體全體表中要點:

i、多播支援在ipv4中是可選的,在ipv6中卻是必需的

ii、ipv6不支援廣播。使用廣播的任何ipv4應用程式一旦移植到ipv6就必須改用多播重新新編寫

iii、廣播和多播要求用於udp或原始ip,不能用於tcp

廣播的用途有:資源發現,多個客戶主機與單個伺服器主機通訊的區域網環境中儘量減少分組流通。如下,

arp:在子網中廣播乙個請求說「ip位址為a.b.c.d的系統亮明身份,請告訴我你的硬體位址」。arp使用鏈路層廣播而不是ip層廣播。

還有ntp、路由守護程序等等運用廣播的例子。

右側主機把該udp資料報傳遞給繫結埠520的應用程序。乙個應用程序無需就為接收廣播udp資料報而進行任何特殊處理:它只需要建立乙個udp套接字,並把應用的埠號摁綁到其上。(假設**的ip位址是典型的inaddr_any。)

中間的主機沒有任何應用程序繫結的udp埠520。於是該主機udp**丟棄這個已收取的資料報。切記,該主機絕不能傳送乙個icmp埠不可達訊息,因為這麼做可能產生廣播風暴,導致網路擁塞。

三種方法解決在使用廣播的dg_cli函式中競爭狀態問題。

i、用pselect阻塞和解阻塞訊號(需要了解pselect的用法,見書上6.9節p142)

#include	"unp.h"

static void recvfrom_alarm(int);

void

dg_cli(file *fp, int sockfd, const sa *pservaddr, socklen_t servlen)

else if (n != 1)

err_sys("pselect error: returned %d", n);

len = servlen;

n = recvfrom(sockfd, recvline, maxline, 0, preply_addr, &len);

recvline[n] = 0; /* null terminate */

printf("from %s: %s",

sock_ntop_host(preply_addr, len), recvline);

} }free(preply_addr);

}static void

recvfrom_alarm(int signo)

ii、使用sigsetjump和siglongjmp
#include	"unp.h"

#include static void recvfrom_alarm(int);

static sigjmp_buf jmpbuf;//分配乙個將由本函式及其訊號處理函式使用的跳轉buffer

void

dg_cli(file *fp, int sockfd, const sa *pservaddr, socklen_t servlen)

} free(preply_addr);

}static void

recvfrom_alarm(int signo)

iii、使用從訊號處理函式到主控函式的ipc

#include	"unp.h"

static void recvfrom_alarm(int);

static int pipefd[2];

void

dg_cli(file *fp, int sockfd, const sa *pservaddr, socklen_t servlen)

if (fd_isset(sockfd, &rset))

if (fd_isset(pipefd[0], &rset))

} }free(preply_addr);

}static void

recvfrom_alarm(int signo)

以上知識點來均來自steven先生所著unp卷一(version3),剛開始學習網路程式設計,如有不正確之處請大家多多指正。

Chapter20 迭代器模式

迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露改物件的內部表示 當你需要訪問乙個聚集物件,而且不管這些物件是什麼,並且要遍歷這個物件的時候,你就應該考慮用迭代器模式。迭代器模式為遍歷不同的聚集結構提供了如開始 下乙個 是否結束 當前哪一項等統一的介面。迭代器模式...

UNP卷一chapter8 基本UDP套接字程式設計

以下知識點來均來自steven先生所著unp卷一 version3 剛開始學習網路程式設計,如有不正確之處請大家多多指正。需要注意的是,udp不面向連線,故不需要使用connect函式,但使用connect也是可以的,只是作用不再是三次握手建立連線,其作用表現在檢測非同步錯誤 asychronous...

UNP卷一chapter2相關概念

以下知識點來均來自steven先生所著unp卷一 version3 剛開始學習網路程式設計,如有不正確之處請大家多多指正。1 tcp是乙個提供面向連線 可靠 無差錯 不丟失 不重複 按序到達的資料流傳輸協議。頭部開銷為20位元組。全雙工邏輯通道。支援的上層應用協議為telnet ftp smtp h...