【TCP/IP】广播 - 定义、原理及编程实现

这篇具有很好参考价值的文章主要介绍了【TCP/IP】广播 - 定义、原理及编程实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        本文共计2974字,预计阅读时间4分钟

目录

广播

广播的原理及形式

广播的编程与实现

套接字选项设置

发送者

接收者

拓展资料


广播

        广播(Broadcast)是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式。这里所说的“所有设备”也被限定在一个范围之中,这个范围被称为“广播域”。

        基于广播的特性,广播普遍应用于局域网中,而不用于广域网。

广播的原理及形式

        多播的数据传输协议与多播相同,通过UDP协议完成。同时,广播又分为两种形式,分别是:

  • 直接广播 (能够跨越不同网络的广播)
  • 本地广播 (只在本地网络中的广播)

        直接广播用于向特定区域内(已知目标主机网络地址)主机传输数据。使用上,若已知目标主机IP地址及子网掩码为192.168.1.0/24,那么广播地址即为192.168.1.255。(需要注意的是,255.255.255.255为受限广播地址,不能被使用),按照该地址发送数据包时,路由器将会把数据包发送给192.168.1.1 ~ 192.168.1.254下所有主机,如下图所示:

tcp广播,计算机网络,# 网络编程,tcp/ip,网络,服务器,网络协议,udp

        本地广播用于本地网络内的通信(只能用于局域网下)。无论特定主机位于何种 IP 网络上,当前的主机始终可以使用 255.255.255.255 这个地址向本地网络上的每个节点发送数据包。比如,在192.168.0网段下的任意一台主机,向255.255.255.255发送数据包,那么在192.168.0网段下所有的主机将会收到该数据包,同时,该数据包也不会被转发到其他网段去。如下图所示:

tcp广播,计算机网络,# 网络编程,tcp/ip,网络,服务器,网络协议,udp

拓展:

        如何知道一台主机是属于哪一个广播域?

        用主机的IP地址与子网掩码进行“与运算”即可知道该主机属于哪一个广播域。

        例如:一台主机的IP地址为192(1100 0000).168(1010 1000).23(0001 0111).150(1001 0110),子网掩码为255(1111 1111).255.255.0,那么它所属的广播域就是(实际计算是以二进制的哦~):

        那么其它的在广播域192.168.23.0内的所有主机就可以收到该设备发送的广播包。

拓展:

        如何计算广播地址?

        广播地址的计算方法为子网掩码“取反”后再与广播域进行“或运算”。
        例如:主机当前所属广播域为192(1100 0000).168(1010 1000).0.0,子网掩码为255.255.0.0,那么广播地址为(是或操作,即 | ;是取反操作):

广播的编程与实现

套接字选项设置

        广播的编程实现与多播类似,区别在于对套接字选项的设置。通过 setcokopt 函数,将选项级别设为 SOL_SOCKET ,对应选项为 SO_BROADCAST 。选项设置为1,表示“可以进行数据广播”。

int send_sock;
int so_brd = 1; //对变量进行初始化以将 SO_BROADCAST 选项信息设为 1 

send_sock = socket(PF_INET , SOCK_DGRAM , 0);

setsockopt(send_sock , SOL_SOCKET , SO_BROADCAST , (void*) & so_brd , sizeof(so_brd));

发送者

        在实现上与多播类似,主要集中在套接字选项的设置。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 1024

//报错消息发送
void Sender_message(char *message)
{
    puts(message);
    exit(1);
}


int main(int argc, char *argv[])
{
	int send_sock;
	struct sockaddr_in brd_addr;
	FILE *fp;
	char buf[BUF_SIZE];
	int so_brd=1;
	
	send_sock=socket(PF_INET, SOCK_DGRAM, 0);
    if(send_sock==-1)
    {
        Sender_message((char*)"socket creation error");
    }	
	memset(&brd_addr, 0, sizeof(brd_addr));
	brd_addr.sin_family=AF_INET;
	brd_addr.sin_addr.s_addr=inet_addr(argv[1]);
	brd_addr.sin_port=htons(atoi(argv[2]));
	
	setsockopt(send_sock, SOL_SOCKET, SO_BROADCAST, (void*)&so_brd, sizeof(so_brd));	
	fp=fopen(argv[3], "r");
    if(fp==NULL)
    {
		Sender_message((char*)"file open error");
    }

	while(!feof(fp))
	{
		fgets(buf, BUF_SIZE, fp);
		sendto(send_sock, buf, strlen(buf), 0, (struct sockaddr*)&brd_addr, sizeof(brd_addr));
	}

	close(send_sock);
	return 0;
}

接收者

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 1024

// 报错消息发送
void Sender_message(char *message)
{
    puts(message);
    exit(1);
}

int main(int argc, char *argv[])
{
    int recv_sock;
    struct sockaddr_in addr;
    int str_len;
    char buf[BUF_SIZE];

    recv_sock = socket(PF_INET, SOCK_DGRAM, 0);
    if (recv_sock == -1)
    {
        Sender_message((char *)"socket creation error");
    }
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    addr.sin_port = htons(atoi(argv[1]));

    if (bind(recv_sock, (struct sockaddr *)&addr, sizeof(addr)) == -1)
    {
        Sender_message((char *)"bind error");
    }
    while (1)
    {
        str_len = recvfrom(recv_sock, buf, BUF_SIZE - 1, 0, NULL, 0);
        if (str_len < 0)
        {
            break;
        }
        buf[str_len] = 0;
        fputs(buf, stdout);
    }

    close(recv_sock);
    return 0;
}

运行结果:

tcp广播,计算机网络,# 网络编程,tcp/ip,网络,服务器,网络协议,udp

拓展资料

[1] setsockopt函数功能及参数详解 - 博客园 

[2] 本地广播与定向广播到底有什么区别? - 知乎

[3] 多播与广播原理分析及区别 - CSDN博客文章来源地址https://www.toymoban.com/news/detail-661876.html

到了这里,关于【TCP/IP】广播 - 定义、原理及编程实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++11实现计算机网络中的TCP/IP连接(Windows端)

    TCP/IP 指 传输控制协议/网际协议(Transmission Control Protocol / Internet Protocol) 。 [1] 在TCP/IP协议簇中主要包含以下内容: TCP (传输控制协议) - 应用程序之间通信 UDP (用户数据报协议) - 应用程序之间的简单通信 IP (网际协议) - 计算机之间的通信 ICMP (因特网消息控制协议) - 针对错

    2024年02月02日
    浏览(44)
  • TCP/IP UDP广播无法发送或接收

    在看《TCP/IP 网络编程》这本书的时候,看到广播那一节,跟着书上写代码,怎么写都不行,广播就是没法发送/接收,发送端一直在发送数据,接收端就是没有反应。 对了好几遍源码,没有问题。实在是愁人。 最后查了很多资料,确定是网卡的问题。 现在的计算机都是多网

    2024年02月04日
    浏览(51)
  • 《TCP/IP网络编程》--基于TCP实现字符串对话和文件传输

    主要需求:         服务器端和客户端各传递 1 次字符串,基于 TCP 协议,传递字符串前先以 4 字节整数型方式传递字符串长度,剩余部分为字符串数据; 注:下面的代码基于 Windows 系统实现; 项目链接:Chapter5

    2024年02月09日
    浏览(55)
  • TCP/IP网络编程(1)——基于TCP的服务端和客户端的简单实现

    目录 前言 一、服务器端函数 1. 创建套接字函数 socket 2. 套接字绑定地址函数 bind 3. 等待连接请求函数 listen 4. 处理连接请求函数 accept 5. 关闭套接字函数 close 二、客户端函数 1. 请求连接函数 connect 三、完整代码 四、 基于TCP的半关闭 shutdown 五、 套接字可选项 getsockopt setsoc

    2024年02月07日
    浏览(58)
  • 【计算机网络】TCP|IP协议

    目录 前言 什么是TCP/IP协议? TCP/IP协议的层次结构 TCP/IP协议的工作原理 TCP/IP协议的重要性 结语   TCP/IP协议是当今互联网世界中最重要的网络协议之一,它是网络通信的基石,为数据在网络中的传输提供了可靠性和有效性。本文将深入探讨TCP/IP协议的重要性、基本原理以及其

    2024年02月03日
    浏览(60)
  • 计算机网络——TCP/IP网络层次模型

    我们上一次了解了OSI的网络层次模型,如果还没有看过上一次OSI网络模型的可以点击这里: https://blog.csdn.net/qq_67693066/article/details/136597950 我们今天来看实际在生活中使用更广的 TCP/IP网络模型 : TCP/IP网络模型的起源可以追溯到20世纪60年代末和70年代初,当时美国国防部的高级

    2024年03月17日
    浏览(48)
  • TCP/IP 下的计算机网络江湖

            在当今数字化时代,计算机网络宛如广袤江湖,涵盖着五大门派:物理层、数据链路层、网络层、传输层和应用层。每个门派独具技能,共同构筑着现代网络的框架。物理层宛如江湖基石,将比特流传输;数据链路层如武林传承,组织数据帧传递;网络层则像导航

    2024年02月13日
    浏览(39)
  • Linux网络编程——C++实现进程间TCP/IP通信

    地址接口 1、通用地址接口 共16字节 = 2字节地址类型 + 14字节地址数据 2、自定义地址接口 地址转换 1、需要将点分字符串ip转化为程序ip,使用inet_addr函数: 2、字节序转换 地址接口配置中的端口需要字节序转换,网络规定使用大端字节序。 地址接口配置 1、socket:创建套接

    2024年02月20日
    浏览(57)
  • 【C语言实现windows环境下Socket编程TCP/IP协议】

    代码是别人的,问题是我的。顺便记录一下遇见的各种问题和我的解决办法。 可能的解决方案: 1、服务端和客户端不在一个局域网,可以开热点,这样就在了。然后ipconfig查看IP地址,就ok了。至于怎么查看在不在就ping一下对方就好了。 2、一个局域网下也ping不通:看看自己

    2024年02月04日
    浏览(48)
  • 计算机网络学习01-TCP/IP 五层模型概述

    谈论计算机网络模型之前,我们先来谈谈,为什么要分层,这样的好处是什么。 当谈到Internet 时,我们总能听到的一个词汇就是 协议 (protocol)。协议定义了发送者、接收者和所有中间设备为了高效通信需要遵循的规则。当通信简单时,我们可能只是需要一个简单的协议:当通

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包