广播:实现一对多的通信
SO_BROADCAST选项
它控制了UDP套接字是否能发广播数据报,选项类型是int,非零表示“是”。 只有UDP能用,TCP不能。
如果是一个广播地址,但SO_BROADCAST 选项却没有被设定, 就会返回EACCES错误。
int opt = 1;
if((sockdfd = socket(AF_INET, SOCK_DGRA, 0)) < 0){
//perror
}
if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, %op, sizeof(opt)) < 0){
//perror
}
SO_SNDBUF选项 & SO_RCVBUF选项
每个套接字都有一个发送缓冲区和接收缓冲区,由底层协议使用。这两个选项分别控制发送和接收缓存区的大小,类型为int,以字节为单位。
通过getsockopt函数获得发送缓存区的大小,默认的缓存区大小存储在函数的第四个参数opt中;
通过setsockopt函数可以重新设置发送缓存区的大小。
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror()
}
if((getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)) < 0){
perror()
}
opt += 2048;
if(setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt, sizeof(opt)) < 0){
perror()
}
广播地址
IPV4: {netID,subnetID,hostID}
即网络ID(A B C D E五种)、子网ID和主机ID,
共32bit 4个字节(点分十进制),用-1表示所有比特都为1的字段。
有四类广播地址:
子网广播地址: {netID,subnetID,-1}
例:如果采用B类地址192.168,8位子网ID,那么192.168.2.255是192.168.2子网上所有接口的子网广播地址。路由器通常不转发这类广播(只能在这个子网中使用)。
全部子网广播地址:{netID,-1,-1}
这类广播地址编排指定网络上的所有子网,现在很少见。
受限广播地址:{-1,-1,-1}或255.255.255.255
路由器从不转发目的地址为255.255.255.255的IP数据报,它用于主机配置过程中IP数据报的目的地址,仅出现在本地网络中。
补充内容——IP地址
IP地址 = 网络地址 + 主机地址
同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。
根据起始字符(网络ID)的不同分为5种类型:
A类地址:0(开头)+7位(网络地址)+24位(主机地址)
从1.0.0.0 到126.255.255.255;可用的A类网络有126个,每个网络能容纳1亿多个主机。 应用于大规模网络环境。
B类地址:10(开头)+14位(网络地址)+16位(主机地址)
从128.0.0.0到191.255.255.255;可用的B类网络有16382个,每个网络能容纳6万多个主机 。
C类地址:110(开头)+21位(网络地址)+8位(主机地址)
从192.0.0.0到223.255.255.255 其中127.x.x.x段地址空间是被保留的回环地址;C类网络可达209万余个,每个网络能容纳254个主机。 只有8位主机地址,所以应用于小规模网络环境。
D类地址: 以1110开头 它是一个专门保留的地址,它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。从224.0.0.0到239.255.255.255。
E类地址: 以11110开头 用于科研保留;从240.0.0.0到255.255.255.254。
A B C类地址中,各有一部分用于局域网的IP地址:
A类的私有地址: 10.0.0.0 ~ 10.255.255.255
B类的私有地址: 172.16.0.0 ~ 172.31.255.255
(网络号范围: 10101010 00010000 ~ 10101010 00011111)
C类的私有地址: 192.168.0.0 ~ 192.168.255.255
(网络号范围: 11000000 10101000 00000000 ~ 11000000 10101000 11111111)
补充内容——子网掩码
子网掩码(subnet mask):将某个IP地址划分成网络地址和主机地址两部分。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
屏蔽一个IP地址的网络ID——“全1”比特模式:
A类地址,默认的子网掩码是255.0.0.0
B类地址,默认的子网掩码是255.255.0.0
C类地址,默认的子网掩码是255.255.255.0
计算公式:
IP地址 = 网络地址 + 主机地址(前半段和后半段)
网络地址 = IP地址 & 子网掩码(按位与)
主机地址 = IP地址-网络地址
主机数 = 2^(主机号) - 2
主机位= log_2(主机数量+1(网络地址)+1(广播地址)+1(网关))(向上取整)
补充内容——网关
网关(Gateway)又称网间连接器、协议转换器。在网络层上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。
网关实质上是一个网络通向其他网络的IP地址。
例如:网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。这两个都是C类地址,都采用默认网关,不属于同一个网络。
在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。
要实现这两个网络之间的通信,必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。
只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。
网关的IP地址是具有路由功能的设备的IP地址。
(具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器))。
ip段/数字 如192.168.0.1/24标示了我们的网络号的位数,即网络号是24位
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)