導航:首頁 > 操作系統 > linuxigmp

linuxigmp

發布時間:2022-09-26 21:46:47

linux基於UDP多播技術的群聊伺服器及其客戶端的基本原理是什麼

IGMP

⑵ 如何查看linux系統警告日誌

1、打開WDCP服務管理系統登錄界面,輸入用戶名和密碼,點擊登錄。

6、在操作日誌中,可以看到進行的操作,必要時可以找回誤刪的數據。

⑶ linux 怎樣加入一個多播組

應用程序通過命令字IP_ADD_MEMBERSHIP把一個socket加入到一個多播組,IP_ADD_MEMBERSHIP是一個IP層的命令字,其調用使用的參數是結構體struct ip_mreq,其定義如下:
struct ip_mreq
{
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
};
該結構體的兩個成員分別用於指定所加入的多播組的組IP地址,和所要加入組的那個本地介面的IP地址。該命令字沒有源過濾的功能,它相當於實現IGMPv1的多播加入服務介面。
ip_setsockopt實現了該命令字,它通過調用ip_mc_join_group把socket加入到多播組。
表示socket的結構體struct inet_sock有一個成員mc_list,它是一個結構體struct ip_mc_socklist的指針,實際上一個該結構體的鏈表,該結構體的定義如下:
struct ip_mc_socklist
{
struct ip_mc_socklist *next;
struct ip_mreqn multi;
unsigned int sfmode;
struct ip_sf_socklist *sflist;
};

next指向鏈表的下一個節點;multi表示組信息,即在哪一個本地介面上,加入到哪一個多播組;sfmode是過濾模式,取值為
MCAST_INCLUDE或MCAST_EXCLUDE,分別表示只接收sflist所列出的那些源的多播數據報,和不接收sflist所列出的那些源
的多播數據報;sflist是源列表,結構體struct ip_sf_socklist的定義如下:
struct ip_sf_socklist
{
unsigned int sl_max;
unsigned int sl_count;
__u32 sl_addr[0];
};

sl_addr是源地址列表,sl_count應該是源地址列表中源地址的數量,sl_max應該是當前sl_addr數組的最大可容納量(不確定)。對
於通過調用IP_ADD_MEMBERSHIP加入的多播組,它會在struct inet_sock的mc_list的鏈表頭添加如下一個節點:
struct ip_mc_socklist{
.next = 原來的鏈表頭;
.multi = 所加入的多播組,和介面信息;
.sfmode = MCAST_EXCLUDE;
.sflist = NULL; 即不排除任何源地址,也就是不存在源過濾。
}
另外,一個socket所允許加入的多播組的最大數量也是有限制的,mc_list中節點的數量不允許超過sysctl_igmp_max_memberships(預設為20)。

ip_mc_join_group還需要通過ip_mreq.imr_interface的指定值找到要加入多播組的那個介面,並為介面設置狀態(即該接
口要加入哪個多播組,過濾哪些源,也就是為該介面增加一個組,如果要增加的組已存在,則增加該組的引用計數)。代表網路設備介面的結構體struct
in_device有一個成員mc_list,這是一個結構體struct ip_mc_list的鏈表,該結構體的定義如下:
struct ip_mc_list
{
struct in_device *interface;
unsigned long multiaddr;
struct ip_sf_list *sources;
struct ip_sf_list *tomb;
unsigned int sfmode;
unsigned long sfcount[2];
struct ip_mc_list *next;
struct timer_list timer;
int users;
atomic_t refcnt;
spinlock_t lock;
char tm_running;
char reporter;
char unsolicit_count;
char loaded;
unsigned char gsquery;
unsigned char crcount;
};

interface指向網路設備介面,multicast即為加入的組的多播地址,users記錄當前有幾個socket在該介面上加入了該多播組。
sfcount是一個有兩個元素的數組,分別記錄在該介面上加入多播組的socket的過濾模式為EXCLUDE和INCLUDE的數量,sfmode為
該介面本身的過濾模式。sources為源地址列表,該結構體具體內容稍後再分析。timer為主動報告定時器,當一個介面(注意:不是socket)新
加入到一個多播組,需要向多播路由器發送一個igmp報告,以通知多播路由器需要向本地網路轉發該組的數據報。tm_running是一個標志,如果
timer當前正在運行,則置1,否則置0。reporter也是一個標志,如果當前正要開始發送igmp報告,則置該標志為1,否則為0。
unsolicit_count是當一個介面新加入到一個多播組時,發送主動報告的次數,值賦為
IGMP_Unsolicited_Report_Count(預設值為2)。loaded也是一個標志,當該介面上的該多播組被加入時,需要通知硬體過
濾器,通知完成即置該標志為1,否則為0。
該結構體比較復雜,先看通過IP_ADD_MEMBERSHIP命令字把一個socket加入到一個新的多播組,會使struct in_device的mc_list中增加一個什麼樣的節點。下面是生成的節點的情況:
struct ip_mc_list{
.interface = in_dev;
.multiaddr = 多播組地址;
.source = NULL; //源過濾列表為空。
.tomb = NULL;
.sfmode = MCAST_EXCLUDE; //EXCLUDE模式,即不過濾任何源。
.sfcount[MCAST_EXCLUDE] = 1;
.sfcount[MCAST_INCLUDE] = 0;//即該節點上該多播組有一個socket加入,過濾模式為EXCLUDE。
.users = 1; //有一個用戶。
.refcnt = 1; //引用計數為1
.tm_running = 0;
.unsolicit_count = 2;
... ...
}
新生成的節點加入到mc_list鏈表中後,要通知網路設備介面的硬體,以使它的過濾機制可以接收進該多播組的數據報,同時也要通知多播路由器。

首先要把多播地址映射成乙太網地址,映射規則是把多播IP地址的低23位放到乙太網多播地址01-00-5E-00-00-00(16進制)的低23位。
因為一個IP組地址有28位有效位(除去高位的1110),所以有可能出現多個組地址被映射成同一個乙太網多播地址,具體實現見
ip_eth_mc_map。然後把這個mac地址加到硬體的過濾機制中。
具體的實現在函數dev_mc_add中。代表網路設備介面的結構體struct net_device也有一個成員mc_list,它是一個結構體struct dev_mc_list的鏈表,該結構體的定義如下:
struct dev_mc_list
{
struct dev_mc_list *next;
__u8 dmi_addr[MAX_ADDR_LEN];
unsigned char dmi_addrlen;
int dmi_users;
int dmi_gusers;
};

next指向鏈表下一個節點,dmi_addr是多播mac地址,dmi_addrlen為多播mac地址的長度,dmi_users是在節點被重復到加
入到設備上的次數,struct
net_device還有一個成員mc_count,用於記錄鏈表中節點的數量。dev_mc_add創建一個新的struct
dev_mc_list節點,加入到鏈表中,並通過調用網路設備介面的成員函數set_multicast_list來啟用設備的過濾機制。

最後一步發送主動成員報告,這里,首先忽略IGMPv1和IGMPv2存在的情況。如果要加入的多播組是
IGMP_ALL_HOSTS(224.0.0.1),則不需要發送成員報告。否則啟用定時器struct
in_device->mr_ifc_timer(介面狀態改變定時器),該定時器在設備初始化的時候被建立,其超時處理函數是
igmp_ifc_timer_expire,它發送一個IGMPv3的報告,然後再次啟用定時器。也就是說,第一個主動成員報告立即發出,然後在一個0
到IGMP_Unsolicited_Report_Interval(預設為10秒)之間的一個時間後,發出第二個主動成員報告,連續發出
IGMP_Unsolicited_Report_Count(預設值為2)個。
測試環境中要加入的多播組是224.0.1.1,發出的IGMPv3報告如下:
數據 含義
22 第3版成員關系報告
00 8bit保留,必須為0
f8 fc 校驗和
00 00 16bit保留,必須為0
00 01 組記錄的數量,為1
下面為一條組記錄:
04 類型為CHANGE_TO_EXCLUDE_MODE,改變到EXCLUDE過濾模式
00 輔助數據長度
00 00 源地址的數量
e0 00 01 01 組地址224.0.1.1

⑷ linux用原始套接字可以分析ip包嗎

1. 本文所介紹程序平台
發板:arm9-mini2440
虛擬機:Red Hat Enterprise Linux 5
發板系統內核版本:linux-2.6.32.2

2. 原始套接字概述
通情況程序設計員接觸網路知識限於兩類:
(1)流式套接字(SOCK_STREAM)種面向連接套接字應於TCP應用程序
(2)數據報套接字(SOCK_DGRAM)種連接套接字應於UDP應用程序
除兩種基本套接字外類原始套接字種原始網路報文進行處理套接字
前面幾章介紹基礎套接字知識流式套接字(SOCK_STREAM)數據報套接字(SOCK_DGRAM)涵蓋般應用層TCP/IP應用

原始套接字創建使用與通用套接字創建致套接字類型選項使用另SOCK_RAW使用socket函數進行函數創建完畢候要進行套接字數據格式類型指定設置套接字接收網路數據格式
創建原始套接字使用函數socket第二參數設置SOCK_RAW函數socket()創建原始套接字面代碼創建AF_INET協議族原始套接字協議類型protocol
int rawsock = socket(AF_INET, SOCK_RAW, protocol);
注意:超級用戶才權利創建套接字否則函數返-1並設置errnoEACCES
protocol參數:量定義in.h>面
IPPROTO_IP = 0, /* Dummy protocol for TCP. */
#define IPPROTO_IP IPPROTO_IP
IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options. */
#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
IPPROTO_ICMP = 1, /* Internet Control Message Protocol. */
#define IPPROTO_ICMP IPPROTO_ICMP
IPPROTO_IGMP = 2, /* Internet Group Management Protocol. */
#define IPPROTO_IGMP IPPROTO_IGMP
IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94). */
#define IPPROTO_IPIP IPPROTO_IPIP
IPPROTO_TCP = 6, /* Transmission Control Protocol. */
#define IPPROTO_TCP IPPROTO_TCP
IPPROTO_EGP = 8, /* Exterior Gateway Protocol. */
#define IPPROTO_EGP IPPROTO_EGP
IPPROTO_PUP = 12, /* PUP protocol. */
#define IPPROTO_PUP IPPROTO_PUP
IPPROTO_UDP = 17, /* User Datagram Protocol. */
#define IPPROTO_UDP IPPROTO_UDP
IPPROTO_IDP = 22, /* XNS IDP protocol. */
#define IPPROTO_IDP IPPROTO_IDP
IPPROTO_TP = 29, /* SO Transport Protocol Class 4. */
#define IPPROTO_TP IPPROTO_TP
IPPROTO_IPV6 = 41, /* IPv6 header. */
#define IPPROTO_IPV6 IPPROTO_IPV6
IPPROTO_ROUTING = 43, /* IPv6 routing header. */
#define IPPROTO_ROUTING IPPROTO_ROUTING
IPPROTO_FRAGMENT = 44, /* IPv6 fragmentation header. */
#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT
IPPROTO_RSVP = 46, /* Reservation Protocol. */
#define IPPROTO_RSVP IPPROTO_RSVP
IPPROTO_GRE = 47, /* General Routing Encapsulation. */
#define IPPROTO_GRE IPPROTO_GRE
IPPROTO_ESP = 50, /* encapsulating security payload. */
#define IPPROTO_ESP IPPROTO_ESP
IPPROTO_AH = 51, /* authentication header. */
#define IPPROTO_AH IPPROTO_AH
IPPROTO_ICMPV6 = 58, /* ICMPv6. */
#define IPPROTO_ICMPV6 IPPROTO_ICMPV6
IPPROTO_NONE = 59, /* IPv6 no next header. */
#define IPPROTO_NONE IPPROTO_NONE
IPPROTO_DSTOPTS = 60, /* IPv6 destination options. */
#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
IPPROTO_MTP = 92, /* Multicast Transport Protocol. */
#define IPPROTO_MTP IPPROTO_MTP
IPPROTO_ENCAP = 98, /* Encapsulation Header. */
#define IPPROTO_ENCAP IPPROTO_ENCAP
IPPROTO_PIM = 103, /* Protocol Independent Multicast. */
#define IPPROTO_PIM IPPROTO_PIM
IPPROTO_COMP = 108, /* Compression Header Protocol. */
#define IPPROTO_COMP IPPROTO_COMP
IPPROTO_SCTP = 132, /* Stream Control Transmission Protocol. */
#define IPPROTO_SCTP IPPROTO_SCTP
IPPROTO_RAW = 255, /* Raw IP packets. */
#define IPPROTO_RAW IPPROTO_RAW
IPPROTO_MAX

⑸ Linux中,iptables如何信任一種服務。。

關於iptables的操作,網路一下,教程很多,我覺得會比在這里說的更詳細。
至於如何信任一種服務,你要清楚每個服務的應用都需要一個固定或者隨機的埠才可以使用。
你只要使用iptables配置埠的使用策略就可以達到目的。

舉個例子:
比如你說ping都ping不通,這種屬於讀取和流入數據包的策略,ping所發送的是IGMP包
你的策略上應該有限定IGMP的使用策略。

⑹ 監聽技術的乙太網上數據幀的監聽剖析

乙太網上的數據幀主要涉及Tcp/ip協議,針對以下幾個協議的分析:IP,ARP,RARP,IPX,其中重點在於ip和 arp協議,這兩個協議是多數網路協議的基礎,因此把他們研究徹底,就對大多數的協議的原理和特性比較清楚了。 由於各種協議的數據幀個不相同,所以涉及很多的數據幀頭格式分析,接下來將一一描述。在linux 下監聽網路,應先設置網卡狀態,使其處於雜混模式以便監聽網路上的所有數據幀。然後選擇用Linux socket 來截取數據幀,通過設置socket() 函數參數值,可以使socket截取未處理的網路數據幀,關鍵是函數的參數設置,下面就是有關的程序部分:AF_INET=2 表示 internet ip protocolSOCK_PACKET=10 表示 截取數據幀的層次在物理層,既不作處理。htons(0x0003)表示 截取的數據幀的類型為不確定,既接受所有的包。總的設定就是網卡上截取所有的數據幀。這樣就可以截取底層數據幀,因為返回的將是一個指向數據的指針,為了分析方便,我設置了一個基本的數據幀頭結構。Struct etherpacket{struct ethhdr eth; struct iphdr ip; struct tcphdr tcp; char buff; } ep;將返回的指針賦值給指向數據幀頭結構的指針,然後對其進行分析。以下是有關協議的報頭:ethhdr 這是乙太網數據幀的mac報頭:|48bit 目的物理地址 | 48bit 源物理地址 | 16bit協議地址|相應的數據結構如下struct ethhdrunsigned char h_dest[ETH_ALEN];unsigned char h_source[ETH_ALEN];unsigned short h_proto;其中h_dest是48位的目標地址的網卡物理地址,h_source 是48位的源地址的物理網卡地址。H_proto是16位的乙太網協議,其中主要有0x0800 ip,0x8035.X25,0x8137 ipx,0x8863-0x8864 pppoe(這是Linux的 ppp),0x0600 ether _loop_back ,0x0200-0x0201 pup等。Iphdr 這是ip協議的報頭:由此可以定義其結構如下:這是Linux 的ip協議報頭,針對版本的不同它可以有不同的定義,我們國內一般用BIG的定義,其中version 是ip的版本,protocol是ip的協議分類主要有0x06 tcp.0x11 udp,0x01 icmp,0x02 igmp等,saddr是32位的源ip地址,daddr是32位的目標ip地址。相應的數據結構:struct arphdr {unsigned short int ar_hrd; unsigned short int ar_pro; unsigned char ar_hln;unsigned char ar_pln; unsigned short int ar_op;#if 0unsigned char _ar_sha[ETH_ALEN];unsigned char _ar_sip;unsigned char _ar_tha[ETH_ALEN];unsigned char _ar_tip;#end if};這是linux 的arp 協議報頭,其中ar_hrd 是硬體地址的格式,ar_pro協議地址的格式,ar_hln是硬體地址的長度,ar_pln時協議地址的長度,ar_op是arp協議的分類0x001是arp echo 0x0002 是 arp reply.接下來的分別是源地址的物理地址,源ip地址,目標地址的物理地址,目標ip地址。Tcphdr ip協議的tcp協議報頭以下是相應數據結構:struct tcphdr{u_int16_t source; u_int16_t dest; u_int32_t seq; u_int32_t ack_seq; # if _BYTE_ORDER == _LITTLE _ENDIANu_int16_t resl:4; u_int16_t doff:4;u_int16_t fin:1;u_int16_t syn:1; u_int16_t rst:1;u_int16_t psh:1;u_int16_t ack:1; u_int16_t urg:1;u_int16_t res2:2; #elif _BYTE _ORDER == _BIG _ENDIANu_int16_t doff:4; u_int16_t res1:4;u_int16_t res2:2;u_int16_t urg:1; u_int16_t ack:1;u_int16_t psh:1;u_int16_t rst:1; u_int16_t syn:1;u_int16_t fin:1; #else#error Adjust your defines#endifu_int16_t window; u_int16_t check;u_int16_t urg_ptr;};這是Linux 下tcp協議的一部分與ip協議相同取BIG,其中source是源埠,dest 是目的埠,seq是s序,ack_seq是a序號,其餘的是tcp的連接標志其中包括6個標志:syn表示連接請求,urg 表示緊急信息,fin表示連接結束,ack表示連接應答,psh表示推棧標志,rst表示中斷連接。window是表示接受數據窗口大小,check是校驗碼,urg ptr是緊急指針。Udphdr 這是udp協議報頭struct udphdr {u_int16_t source; u_int16_t dest;u_int16_t len;u_int16_t check;}這是Linux下ip協議中udp協議的一部分,結構很明顯 source 源埠,dest目的埠,len udp 長度,check 是校驗碼。Icmphdr 這是ip協議的icmp協議的報頭struct icmphdr{u_int8_t type;u_int8_t code;u_int16_t checksum;union{struct {u_int16_t id;u_int16_t sequence;} echo;u_int32_t gateway;struct{u_int16_t_unused;u_int16_t mtu;}frag;} un;};這是linux下的ip協議中的icmp的協議,這裡面主要的是前兩項參數,其中type是icmp協議的類型,而code 則是對type類型的再分析。如:type 0x03 是表示unsearchable,這時code的不同表示了不同的unsearchable :0x00表示網路不可尋,0x01表示主機不可尋,0x02表示協議不可尋,0x03表示埠不可尋,0x05表示源路由失敗,0x06網路不可知,0x07主機不可知。Igmphdr 這是ip協議的igmp協議報頭struct igmphdr{ _u8 type;_u8 code;_u16 csum;_u32 group;};這是Linux下的ip協議中的igmp協議,協議中主要是前面兩個屬性,Type表示igmp 協議的信息類型,code表示routing code. 然後,將截取的數據幀的地址賦值給定義的結構.由此可根據不同的結構分析數據,得到我們需要的信息 。

⑺ linux igmpv2 是內核實現 還是應用層實現

首先,要理解操作系統的概念,操作系統是用戶和硬體之間的一層媒介程序。不管是Linux還是Windows或者安卓、IOS,它的主要功能有兩點:1、有效管理硬體。
2、方便用戶操作。

其次,Linux內核是Linux系統的核心程序,主要完成任務調度、內存管理、IO設備管理等等功能,主要目的是為了應用程序提供一個穩定良好的運行環境,這是一個基礎。

再次,驅動程序是操作系統有效管理硬體的一個途徑。應用程序是方便用戶操作提供的程序,比如Shell,Linux中的bash shell以及KDE、gnome等圖形Shell都是應用程序。 你可以簡單的理解為驅動程序實現了操作系統對硬體的有效管理,應用程序實現了操作系統方便用戶操作的目的。

最後,從編程角度來看,Linux內核就是一個調用庫,應用程序通過調用Linux提供的API函數來實現操作,Linux內核通過與驅動通信實現對硬體的有效管理。具體的編程細節,需要自己在實踐編程中體會。這是一個整體的描述。

⑻ 網路 linux 怎麼維護ip握手

TCP三次握手詳細介紹
1.TCP/IP協議簡單介紹:
TCP/IP是一個協議族,通常分不同層次進行工作,每個層次負責不同的通信功能。包含以下四個層次:

應用層:(http、telnet、Email、dns等協議)
傳輸層:(tcp和udp)
網路層:(ip、icmp、rarp、bootp)
鏈路層:(設備驅動程序及介面卡)

1).鏈路層,也稱作數據鏈路層或者網路介面層,通常包括操作系統中的設備驅動程序和計算機中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節。
2).網路層,也稱作互聯網層,處理分組在網路中的活動,例如分組的選路。網路層協議包括IP協議(網際協議)、ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)。
3).傳輸層主要是為兩台主機上的應用程序提供端到端的通信。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。TCP為兩台主機提供高可靠性的數據通信。他所作的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網路層,確認接收到的分組,設置發送最後確認分組的超時時間等。由於傳輸層提供了高可靠性的端到端通信,因此應用層可以忽略所有這些細節。而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一台主機發送到另一台主機,但並不保證該數據報能到達另一端。任何必須的可靠性必須由應用層來提供。
4).應用層負責處理特定的應用程序細節。包括Telnet(遠程登錄)、FTP(文件傳輸協議)、SMTP(簡單郵件傳送協議)以及SNMP(簡單網路管理協議)等。
二. TCP協議
TCP是一種面向連接(連接導向)的、可靠的基於位元組流的傳輸層通信協議。TCP將用戶數據打包成報文段,它發送後啟動一個定時器,另一端收到的數據進行確認、對失序的數據重新排序、丟棄重復數據。
TCP的特點有:
1. TCP是面向連接的運輸層協議
2. 每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的
3. TCP提供可靠交付的服務
4. TCP提供全雙工通信。數據在兩個方向上獨立的進行傳輸。因此,連接的每一端必須保持每個方向上的傳輸數據序號。
5. 面向位元組流。面向位元組流的含義:雖然應用程序和TCP交互是一次一個數據塊,但TCP把應用程序交下來的數據僅僅是一連串的無結構的位元組流

TCP報文首部,如下圖所示:

源埠、目標埠:計算機上的進程要和其他進程通信是要通過計算機埠的,而一個計算機埠某個時刻只能被一個進程佔用,所以通過指定源埠和目標埠,就可以知道是哪兩個進程需要通信。源埠、目標埠是用16位表示的,可推算計算機的埠個數為2^16個。
序列號:表示本報文段所發送數據的第一個位元組的編號。在TCP連接中所傳送的位元組流的每一個位元組都會按順序編號。由於序列號由32位表示,所以每2^32個位元組,就會出現序列號回繞,再次從 0 開始。那如何區分兩個相同序列號的不同TCP報文段就是一個問題了,後面會有答案,暫時可以不管。
確認號:表示接收方期望收到發送方下一個報文段的第一個位元組數據的編號。也就是告訴發送發:我希望你(指發送方)下次發送的數據的第一個位元組數據的編號是這個確認號。也就是告訴發送方:我希望你(指發送方)下次發送給我的TCP報文段的序列號欄位的值是這個確認號。
TCP首部長度:由於TCP首部包含一個長度可變的選項部分,所以需要這么一個值來指定這個TCP報文段到底有多長。或者可以這么理解:就是表示TCP報文段中數據部分在整個TCP報文段中的位置。該欄位的單位是32位字,即:4個位元組。
URG:表示本報文段中發送的數據是否包含緊急數據。URG=1,表示有緊急數據。後面的緊急指針欄位只有當URG=1時才有效。
ACK:表示是否前面的確認號欄位是否有效。ACK=1,表示有效。只有當ACK=1時,前面的確認號欄位才有效。TCP規定,連接建立後,ACK必須為1。
PSH:告訴對方收到該報文段後是否應該立即把數據推送給上層。如果為1,則表示對方應當立即把數據提交給上層,而不是緩存起來。
RST:只有當RST=1時才有用。如果你收到一個RST=1的報文,說明你與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然後再重新建立連接。或者說明你上次發送給主機的數據有問題,主機拒絕響應。
SYN:在建立連接時使用,用來同步序號。當SYN=1,ACK=0時,表示這是一個請求建立連接的報文段;當SYN=1,ACK=1時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1。
FIN:標記數據是否發送完畢。如果FIN=1,就相當於告訴對方:「我的數據已經發送完畢,你可以釋放連接了」
窗口大小:表示現在運行對方發送的數據量。也就是告訴對方,從本報文段的確認號開始允許對方發送的數據量。
校驗和:提供額外的可靠性。具體如何校驗,參考其他資料。
緊急指針:標記緊急數據在數據欄位中的位置。
選項部分:其最大長度可根據TCP首部長度進行推算。TCP首部長度用4位表示,那麼選項部分最長為:(2^4-1)*4-20=40位元組。
TCP三次握手過程
第一次握手:建立連接時,客戶端發送同步序號syn=1,隨機產生seq number數據包發送(seq=x)到伺服器,並進入SYN_SENT狀態,等待伺服器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

第二次握手:伺服器收到報文請求,由SYN=1知道客戶端要建立連接請求,向客戶端發送ack number(ack=x+1),syn=1,同時自己也發送一個SYN包(seq=y),即SYN+ACK包,此時伺服器進入SYN_RCVD

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ack(ack=y+1),同時發送序號seq=y+1,此包發送完畢,客戶端和伺服器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
TCP三次握手過程如下圖所示:

⑼ 如何在linux下打開組播功能

IGMP協議運行於主機和與主機直接相連的組播路由器之間,主機通過此協議告訴本地路由器希望加入並接受某個特定組播組的信息,同時路由器通過此協議周期性地查詢區域網內某個已知組的成員是否處於活動狀態(即該網段是否仍有屬於某個組播組的成員),實現所連網路組成員關系的收集與維護。IGMP有三個版本,IGMPv1由RFC1112定義,目前通用的是IGMPv2,由RFC2236定義。IGMPv3目前仍然是一個草案。IGMPv1中定義了基本的組成員查詢和報告過程,IGMPv2在此基礎上添加了組成員快速離開的機制,IGMPv3中增加的主要功能是成員可以指定接收或指定不接收某些組播源的報文。這里著重介紹IGMPv2協議的功能。
IGMPv2通過查詢器選舉機制為所連網段選舉唯一的查詢器。查詢器周期性的發送普遍組查詢消息進行成員關系查詢;主機發送報告消息來應答查詢。當要加入組播組時,主機不必等待查詢消息,主動發送報告消息。當要離開組播組時,主機發送離開組消息;收到離開組消息後,查詢器發送特定組查詢消息來確定是否所有組成員都已離開。
通過上述IGMP機制,在組播路由器里建立起一張表,其中包含路由器的各個埠以及在埠所對應的子網上都有哪些組的成員。當路由器接收到某個組G的數據報文後,只向那些有G的成員的埠上轉發數據報文。至於數據報文在路由器之間如何轉發則由路由協議決定,IGM

⑽ 求推薦linux c函數實現的書。。。。

Windows網路與通信程序設計(第2版) 王艷平 這本書寫的非常好,我有本王艷平寫的 windows程序設計,寫得很好,我自己不做網路開發,就沒有買網路的那本書!不過推薦你看看,真的很不錯!

本書將編程方法、網路協議和應用實例有機結合起來,詳細闡明Windows網路編程的各方面內容。本書首先介紹Windows平台上進行網路編程的基礎知識,包括網路硬體、術語、協議、Winsock編程介面和各種I/O方法等;然後通過具體實例詳細講述當前流行的高性能可伸縮伺服器設計、IP多播和Internet廣播、P2P程序設計、原始套接字、SPI、協議驅動的開發和原始以太數據的發送、ARP欺騙技術、LAN和WAN上的掃描和偵測技術、個人防火牆與網路封包截獲技術等;最後講述IP幫助函數和E-mail的開發方法。 本書結構緊湊,內容由淺入...
第1章 計算機網路基礎 1
1.1 網路的概念和網路的組成 1
1.2 計算機網路參考模型 2
1.2.1 協議層次 2
1.2.2 TCP/IP參考模型 2
1.2.3 應用層(Application Layer) 3
1.2.4 傳輸層(Transport Layer) 3
1.2.5 網路層(Network Layer) 3
1.2.6 鏈路層(Link Layer) 4
1.2.7 物理層(Physical Layer) 4
1.3 網路程序定址方式 4
1.3.1 MAC地址 4
1.3.2 IP地址 5
1.3.3 子網定址 6
1.3.4 埠號 8
1.3.5 網路地址轉換(NAT) 8
1.4 網路應用程序設計基礎 10
1.4.1 網路程序體系結構 10
1.4.2 網路程序通信實體 11
1.4.3 網路程序開發環境 12
第2章 Winsock編程介面 13
2.1 Winsock庫 13
2.1.1 Winsock庫的裝入和釋放 13
2.1.2 封裝CInitSock類 14
2.2 Winsock的定址方式和位元組順序 14
2.2.1 Winsock定址 14
2.2.2 位元組順序 16
2.2.3 獲取地址信息 17
2.3 Winsock編程詳解 20
2.3.1 Winsock編程流程 20
2.3.2 典型過程圖 23
2.3.3 TCP伺服器和客戶端程序舉例 24
2.3.4 UDP編程 26
2.4 網路對時程序實例 28
2.4.1 時間協議(Time Protocol) 28
2.4.2 TCP/IP實現代碼 29
第3章 Windows套接字I/O模型 31
3.1 套接字模式 31
3.1.1 阻塞模式 31
3.1.2 非阻塞模式 31
3.2 選擇(select)模型 32
3.2.1 select函數 32
3.2.2 應用舉例 33
3.3 WSAAsyncSelect模型 36
3.3.1 消息通知和WSAAsyncSelect函數 36
3.3.2 應用舉例 37
3.4 WSAEventSelect模型 40
3.4.1 WSAEventSelect函數 40
3.4.2 應用舉例 42
3.4.3 基於WSAEventSelect模型的伺服器設計 44
3.5 重疊(Overlapped)I/O模型 53
3.5.1 重疊I/O函數 53
3.5.2 事件通知方式 56
3.5.3 基於重疊I/O模型的伺服器設計 56
第4章 IOCP與可伸縮網路程序 67
4.1 完成埠I/O模型 67
4.1.1 什麼是完成埠(completion port)對象 67
4.1.2 使用IOCP的方法 67
4.1.3 示常式序 69
4.1.4 恰當地關閉IOCP 72
4.2 Microsoft擴展函數 72
4.2.1 GetAcceptExSockaddrs函數 73
4.2.2 TransmitFile函數 73
4.2.3 TransmitPackets函數 74
4.2.4 ConnectEx函數 75
4.2.5 DisconnectEx函數 76
4.3 可伸縮伺服器設計注意事項 76
4.3.1 內存資源管理 76
4.3.2 接受連接的方法 77
4.3.3 惡意客戶連接問題 77
4.3.4 包重新排序問題 78
4.4 可伸縮伺服器系統設計實例 78
4.4.1 CIOCPServer類的總體結構 78
4.4.2 數據結構定義和內存池方案 82
4.4.3 自定義幫助函數 85
4.4.4 開啟服務和停止服務 88
4.4.5 I/O處理線程 93
4.4.6 用戶介面和測試程序 99
第5章 互聯網廣播和IP多播 100
5.1 套接字選項和I/O控制命令 100
5.1.1 套接字選項 100
5.1.2 I/O控制命令 102
5.2 廣播通信 103
5.3 IP多播(Multicasting) 105
5.3.1 多播地址 105
5.3.2 組管理協議(IGMP) 105
5.3.3 使用IP多播 106
5.4 基於IP多播的組討論會實例 110
5.4.1 定義組討論會協議 110
5.4.2 線程通信機制 111
5.4.3 封裝CGroupTalk類 111
5.4.4 程序界面 117
第6章 原始套接字 121
6.1 使用原始套接字 121
6.2 ICMP編程 121
6.2.1 ICMP與校驗和的計算 121
6.2.2 Ping程序實例 124
6.2.3 路由跟蹤 126
6.3 使用IP頭包含選項 129
6.3.1 IP數據報格式 129
6.3.2 UDP數據報格式 131
6.3.3 原始UDP封包發送實例 133
6.4 網路嗅探器開發實例 134
6.4.1 嗅探器設計原理 135
6.4.2 網路嗅探器的具體實現 136
6.4.3 偵聽區域網內的密碼 138
6.5 TCP通信開發實例 140
6.5.1 創建一個原始套接字,並設置IP頭選項 140
6.5.2 構造IP頭和TCP頭 140
6.5.3 發送原始套接字數據報 142
6.5.4 接收數據 146
第7章 Winsock服務提供者介面(SPI) 147
7.1 SPI概述 147
7.2 Winsock協議目錄 148
7.2.1 協議特性 149
7.2.2 使用Winsock API函數枚舉協議 150
7.2.3 使用Winsock SPI函數枚舉協議 151
7.3 分層服務提供者(LSP) 153
7.3.1 運行原理 153
7.3.2 安裝LSP 154
7.3.3 移除LSP 158
7.3.4 編寫LSP 159
7.3.5 LSP實例 161
7.4 基於SPI的數據報過濾實例 165
7.5 基於Winsock的網路聊天室開發 171
7.5.1 服務端 171
7.5.2 客戶端 171
7.5.3 聊天室程序的設計說明 172
7.5.4 核心代碼分析 172
第8章 Windows網路驅動介面標准(NDIS)和協議驅動的開發 176
8.1 核心層網路驅動 176
8.1.1 Windows 2000及其後產品的網路體系結構 176
8.1.2 NDIS網路驅動程序 177
8.1.3 網路驅動開發環境 178
8.2 WDM驅動開發基礎 181
8.2.1 UNICODE字元串 181
8.2.2 設備對象 181
8.2.3 驅動程序的基本結構 183
8.2.4 I/O請求包(I/O request packet,IRP)和I/O堆棧 183
8.2.5 完整驅動程序示例 186
8.2.6 擴展派遣介面 188
8.2.7 應用舉例(進程診測實例) 191
8.3 開發NDIS網路驅動預備知識 198
8.3.1 中斷請求級別(Interrupt Request Level,IRQL) 198
8.3.2 旋轉鎖(Spin Lock) 198
8.3.3 雙鏈表 199
8.3.4 封包結構 199
8.4 NDIS協議驅動 200
8.4.1 注冊協議驅動 200
8.4.2 打開下層協議驅動的適配器 201
8.4.3 協議驅動的封包管理 202
8.4.4 在協議驅動中接收數據 203
8.4.5 從協議驅動發送封包 204
8.5 NDIS協議驅動開發實例 204
8.5.1 總體設計 204
8.5.2 NDIS協議驅動的初始化、注冊和卸載 206
8.5.3 下層NIC的綁定和解除綁定 209
8.5.4 發送數據 217
8.5.5 接收數據 219
8.5.6 用戶IOCTL處理 225
第9章 網路掃描與檢測技術 233
9.1 網路掃描基礎知識 233
9.1.1 乙太網數據幀 233
9.1.2 ARP 234
9.1.3 ARP格式 236
9.1.4 SendARP函數 237
9.2 原始以太封包的發送 238
9.2.1 安裝協議驅動 238
9.2.2 協議驅動用戶介面 238
9.2.3 發送以太封包的測試程序 244
9.3 區域網計算機掃描 245
9.3.1 管理原始ARP封包 246
9.3.2 ARP掃描示例 249
9.4 互聯網計算機掃描 253
9.4.1 埠掃描原理 253
9.4.2 半開埠掃描實現 254
9.5 ARP欺騙原理與實現 259
9.5.1 IP欺騙的用途和實現原理 259
9.5.2 IP地址沖突 260
9.5.3 ARP欺騙示例 261
第10章 點對點(P2P)網路通信技術 264
10.1 P2P穿越概述 264
10.2 一般概念 265
10.2.1 NAT術語 265
10.2.2 中轉 265
10.2.3 反向連接 266
10.3 UDP打洞 267
10.3.1 中心伺服器 267
10.3.2 建立點對點會話 267
10.3.3 公共NAT後面的節點 267
10.3.4 不同NAT後面的節點 268
10.3.5 多級NAT後面的節點 269
10.3.6 UDP空閑超時 270
10.4 TCP打洞 271
10.4.1 套接字和TCP埠重用 271
10.4.2 打開點對點的TCP流 271
10.4.3 應用程序看到的行為 272
10.4.4 同步TCP打開 273
10.5 Internet點對點通信實例 273
10.5.1 總體設計 273
10.5.2 定義P2P通信協議 274
10.5.3 客戶方程序 275
10.5.4 伺服器方程序 287
10.5.5 測試程序 291
第11章 核心層網路封包截獲技術 294
11.1 Windows網路數據和封包過濾概述 294
11.1.1 Windows網路系統體系結構圖 294
11.1.2 用戶模式下的網路數據過濾 295
11.1.3 內核模式下的網路數據過濾 296
11.2 中間層網路驅動PassThru 296
11.2.1 PassThru NDIS中間層驅動簡介 296
11.2.2 編譯和安裝PassThru驅動 297
11.3 擴展PassThru NDIS IM驅動——添加IOCTL介面 297
11.3.1 擴展之後的PassThru驅動(PassThruEx)概況 297
11.3.2 添加基本的DeviceIoControl介面 298
11.3.3 添加綁定枚舉功能 302
11.3.4 添加ADAPT結構的引用計數 307
11.3.5 適配器句柄的打開/關閉函數 308
11.3.6 句柄事件通知 315
11.3.7 查詢和設置適配器的OID信息 315
11.4 擴展PassThru NDIS IM驅動——添加過濾規則 323
11.4.1 需要考慮的事項 323
11.4.2 過濾相關的數據結構 324
11.4.3 過濾列表 326
11.4.4 網路活動狀態 327
11.4.5 IOCTL控制代碼 328
11.4.6 過濾數據 331
11.5 核心層過濾實例 339
第12章 Windows網路防火牆開發技術 342
12.1 防火牆技術概述 342
12.2 金羽(Phoenix)個人防火牆淺析 343
12.2.1 金羽(Phoenix)個人防火牆簡介 343
12.2.2 金羽(Phoenix)個人防火牆總體設計 344
12.2.3 金羽(Phoenix)個人防火牆總體結構 345
12.3 開發前的准備 345
12.3.1 常量的定義 346
12.3.2 訪問規則 348
12.3.3 會話結構 348
12.3.4 文件結構 349
12.3.5 UNICODE支持 355
12.4 應用層DLL模塊 356
12.4.1 DLL工程框架 356
12.4.2 共享數據和IO控制 362
12.4.3 訪問控制列表ACL(Access List) 364
12.4.4 查找應用程序訪問許可權的過程 367
12.4.5 類的介面——檢查函數 370
12.5 核心層SYS模塊 373
12.6 主模塊工程 375
12.6.1 I/O控制類 375
12.6.2 主應用程序類 377
12.6.3 主對話框中的屬性頁 380
12.6.4 主窗口類 381
12.7 防火牆頁面 383
12.7.1 網路訪問監視頁面 383
12.7.2 應用層過濾規則頁面 387
12.7.3 核心層過濾規則頁面 397
12.7.4 系統設置頁面 403
第13章 IP幫助函數 406
13.1 IP配置信息 406
13.1.1 獲取網路配置信息 406
13.1.2 管理網路介面 408
13.1.3 管理IP地址 412
13.2 獲取網路狀態信息 415
13.2.1 獲取TCP連接表 415
13.2.2 獲取UDP監聽表 418
13.2.3 獲取IP統計數據 420
13.3 路由管理 427
13.3.1 獲取路由表 427
13.3.2 管理特定路由 431
13.3.3 修改默認網關的例子 432
13.4 ARP表管理 433
13.4.1 獲取ARP表 433
13.4.2 添加ARP入口 434
13.4.3 刪除ARP入口 434
13.4.4 列印ARP表的例子 434
13.5 進程網路活動監視實例 438
13.5.1 獲取通信的進程終端 438
13.5.2 Netstate源程序代碼 439
第14章 Email協議及其編程 444
14.1 概述 444
14.2 電子郵件介紹 445
14.2.1 電子郵件Internet的地址 445
14.2.2 Internet郵件系統 445
14.2.3 電子郵件信頭的結構及分析 446
14.3 SMTP原理 448
14.3.1 SMTP原理分析 448
14.3.2 SMTP工作機制 449
14.3.3 SMTP命令碼和工作原理 449
14.3.4 SMTP通信模型 450
14.3.5 SMTP的命令和應答 451
14.4 POP3協議原理 452
14.4.1 POP3協議簡介 452
14.4.2 POP3工作原理 453
14.4.3 POP3命令原始碼 454
14.4.4 POP3會話實例 459
14.5 實例分析與程序設計 460
14.5.1 總界面設計 460
14.5.2 SMTP客戶端設計 461
14.5.3 POP3客戶端設計 473

閱讀全文

與linuxigmp相關的資料

熱點內容
墨西哥大尺度電影 瀏覽:167
黃秋生電影有個叫十方大師的 瀏覽:214
vodtypehtml/31/index_2.html 瀏覽:940
瀏覽器如何獲取加密文件 瀏覽:492
無廣告在線電影網站 瀏覽:298
電影里有個叫大衛的男主角 瀏覽:780
韓國中文字幕要愛電影網 瀏覽:977
古代父女禁愛 瀏覽:933
雲伺服器抽算力 瀏覽:534
哪些網站可以供成人看電影,而且不犯法 瀏覽:909
女主叫阮軟的小說男主姓霍 瀏覽:320
百倍暴擊主角叫林宇的小說 瀏覽:674
韓劇洗頭電影 瀏覽:453
如何獲得免費主題安卓手機 瀏覽:699
網站求片子 瀏覽:544
tailjava實現 瀏覽:193
主角從監獄出來拍電影的小說 瀏覽:629
網路錯誤47無法編譯 瀏覽:526
小說主角林奕陳婉兒 瀏覽:556
自製聖誕節解壓玩具 瀏覽:379