导航:首页 > 操作系统 > 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相关的资料

热点内容
为什么网吧服务器会掉盘 浏览:525
文电通pdf套装版4 浏览:326
如何使用百度地图服务器地址 浏览:920
吉林租服务器托管云服务器 浏览:781
中越反击战电影全集 浏览:116
溯源码验证码无效 浏览:354
风月片有酷网站 浏览:687
大尺度电影韩剧 浏览:680
安卓手机怎么联接a 浏览:716
好色小姨 小说 浏览:677
网站的源码怎么使用 浏览:61
我的世界服务器b2怎么玩 浏览:582
付费电影免费看。 浏览:844
白领解压培训 浏览:578
密码加密用在什么地方 浏览:13
python教程100字 浏览:443
pdf小马 浏览:983
马云入股服务器 浏览:935
sdca哪个文件夹最好用 浏览:992
海猫电影网 浏览:32