Linux学习-网络UDP

news2024/11/27 21:03:14

网络


    数据传输,数据共享

网络协议模型


    OSI协议模型
        应用层              实际发送的数据
        表示层              发送的数据是否加密
        会话层              是否建立会话连接
        传输层              数据传输的方式(数据报、流式)
        网络层              数据的路由(如何从一个局域网到达另一个局域网)        IP地址
        数据链路层          局域网下如何通信
        物理层              物理介质的连接

    TCP/IP协议模型   
        应用层              传输的数据
        传输层              传输的方式
        网络层              数据如何从一台主机到达另一台主机
        网络接口层          物理介质的连接

    应用层:
        HTTP    超文本传输协议
        HTTPS   
        FTP     文件传输协议
        TFTP    简单文本传输协议
        SMTP    邮件传输协议
        MQTT    物联网交互
        TELNET   远程登陆协议
        ..
    
    传输层:
        UDP     用户数据报协议 。 不会对接收ip是否可以接受进行核验,直接发送。是否收到数据也不知道。
                特点:
                    1.实现机制简单
                    2.资源开销小
                    3.不安全不可靠

        TCP     传输控制协议   在通信之前进行三次握手。发送请求应答信号SYN。收到后回复ACK+SYN确认应答并请求对方应答。对方在发ACK应答,保证双方都是收发通讯正常。

                    数据发出后,对方没有接收完整,返回ACK告知发送方自己接受多少数据,然后发送方会再次进行缺失数据的发送以保证数据完整。

                       还可以进行流量控制。

                        关闭实现四次挥手,等待数据传输完毕才可以关闭
                特点:
                    1.实现机制复杂
                    2.资源开销大
                    3.安全可靠

    网络层:
        IPv4

        IP地址:唯一标识网络中一台主机的标号
        IP地址:网络位 + 主机位
        子网掩码:用来标识IP地址的网络位和主机位
                子网掩码是1的部分表示IP地址的网络位
                子网掩码是0的部分表示IP地址的主机位
        网段号:网络位不变,主机位全为0,表示网段号
        广播地址:网络位不变,主机位全为1,表示广播地址

端口号就是找电脑中是哪个软件需要接收信息

        IP地址类型:
        A类
            1.0.0.0 - 126.255.255.255
            子网掩码:255.0.0.0
            管理超大规模网络
            10.0.0.0 - 10.255.255.255 

        B类
            128.0.0.0 - 191.255.255.255
            子网掩码:255.255.0.0 
            管理大中规模型网络
            172.16.0.0 - 172.31.255.255

        C类
            192.0.0.0 - 223.255.255.255
            子网掩码:255.255.255.0
            管理中小规模型网络 
            192.168.0.0 - 192.168.255.255

        D类
            224.0.0.0 - 239.0.0.0
            用于组播

        E类
            240.0.0.0 - 255.255.255.255 
            用于实验

UDP编程


    socket套接字编程:
    1.发端:
        socket 
        int socket(int domain, int type, int protocol);
        功能:
            创建一个用来通信的文件描述符
        参数:
            domain:使用的协议族 AF_INET (IPv4协议族)  还有其他协议组,可在手册中查看。
            type:套接字类型
                SOCK_STREAM:流式套接字        tcp
                SOCK_DGRAM:数据报套接字  udp
                SOCK_RAW:原始套接字   协议
            protocol:协议
                默认为0 
        返回值:
            成功返回文件描述符
            失败返回-1 

        sendto 
        ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);
        功能:
            利用套接字向指定地址发送数据信息 
        参数:
            sockfd:套接字文件描述符
            buf:发送数据空间首地址
            len:发送数据的长度
            flags:属性默认为0 
            dest_addr:目的地址信息存放的空间首地址
            addrlen:目的地址的长度(就是dest_addrlen的大小)
        
        struct sockaddr_in {
            sa_family_t    sin_family; /* address family: AF_INET */协议族
            in_port_t      sin_port;   /* port in network byte order */
            struct in_addr sin_addr;   /* internet address */
        };

这是ipv4的协议结构体,要转换乘通用的要强制转化(struct sockaddr *)

        /* Internet address. */
        struct in_addr {
            uint32_t       s_addr;     /* address in network byte order */
        };
                  
        返回值:
            成功返回实际发送字节数
            失败返回-1 

        inet_addr:
        in_addr_t inet_addr(const char *cp);
        功能:  
            将字符串IP地址转换为内存中的IP地址 

        htons
        uint16_t htons(uint16_t hostshort);
        功能:
            将本地字节序转换为网络的大端字节序
        关闭close() 

1.recvfrom
    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
    功能:
        从套接字中接收数据
    参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        flags:属性 默认为0 
        src_addr:存放IP地址信息的空间首地址
        addrlen:存放接收到IP地址大小空间的首地址
    返回值:
        成功返回实际接收字节数
        失败返回-1 

如果要接收收据要加上

ssize_t recv_len;

socklen_t len;

len = sizeof(s);

recv_len = recvfrom(sco_num, b, sizeof(b), 0, (struct sockaddr *)&s, &len);

传长度指针,是因为当接受完了之后,该指针指向的值会改正真正结收的地址的大小

2.修改虚拟机到桥接模式:
    点击"虚拟机"
    点击"设置"
    点击"网络适配器"
    选择"桥接模式"
    点击"确定"

3.将网卡桥接到无线网卡
    点击"编辑"
    点击"虚拟网络编辑器"
    点击"更改设置"

4.在Ubuntu中重启网络服务
    sudo /etc/init.d/networking restart 

    ifconfig

2.bind 
    int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
    功能:
        在套接字上绑定一个IP地址和端口号,只能绑定自己的IP地址
    参数:
        sockfd:套接字文件描述符
        addr:绑定IP地址空间首地址
        addrlen:绑定IP地址的长度
    返回值:
        成功返回0 
        失败返回-1 


3.UDP编程:
    发端:socket -> sendto -> close 
    收端: socket -> bind -> recvfrom -> close 

练习:
    编写程序实现两台主机间传输一个文件
    ./recv 
    
    ./send 
    a.txt 

4.UDP需要注意的细节点:
    1.UDP是无连接,发端退出,收端没有任何影响
    2.UDP发送数据上限,最好不要超过1500个字节
    3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失

5.wireshark
  抓包工具

  操作流程:
    1.sudo wireshark
      打开wireshark抓包工具
    2.选择抓取数据包的网卡
      any
    3.执行通信的代码
    4.停止通信
    5.设定过滤条件
        ip.addr == IP地址 
        udp 
        tcp 
        udp.port == 端口

6.UDP包头长度:8个字节
    源端口号(2个字节)
    目的端口号(2个字节)
    长度(2个字节)
    校验和(2个字节)


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++STL(list类)

文章目录 1.list类的介绍2.list的基本用法2.1 基本用法2.2 迭代器失效2.3 reverse(逆置)2.3 sort(排序)2.4 unique(去重)2.5 splice(转移) 3.list的底层(模拟实现)3.1 list的3.2 修改链表问题3.3 完整代码 1.list类的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列…

代码随想录阅读笔记-二叉树【将有序数组转换为二叉搜索树】

题目 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 思路 做这道题目之前大家可以了解一下之前讲到的一些问题 从中序和后序遍历…

红豆开箱上手必读

什么是红豆? 红豆开源平台是由奇迹物联发布并主导维护的 LTE Cat1 物联网产品开发平台,它是基于 Cat1 蜂窝通信模组 AM430E 构建的技术开源平台。该平台的目标是帮助物联网行业从业者利用搭乐高模块化模式进行 Open CPU 开发,它为开发者提供…

C++:类与对象(一)

hello,各位小伙伴,本篇文章跟大家一起学习《C:类与对象(一)》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 文章目录 面向对象和面向过程的区别1.类的引入2.…

2024年MathorCup妈妈杯数学建模思路C题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享,点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间:2024年4月11日(周四)12:00 比赛开始时间:2024年4月12日(周五)8:00 比赛结束时间&…

Hello 算法9:图

https://www.hello-algo.com/chapter_graph/graph/#911 图的基本概念 图由顶点和边组成,比起链表(线性数据结构)和树(分治结构),图更自由也更复杂 方向性 在无向图中,边表示两个顶点之间的双…

苹果手机怎么查找对方手机位置?2招快速定位!

在现代社会中,智能手机已经成为我们生活中不可或缺的一部分。然而,随着手机的普及,我们也面临着一些问题,比如手机丢失或被盗。 在这种情况下,如何快速准确地找到手机的位置就显得尤为重要。苹果手机怎么查找对方手机…

PKI:构建数字安全基石的关键技术

在数字化时代,网络安全已成为我们日常生活和工作的重要组成部分。为了确保数据的完整性、机密性和身份的真实性,公钥基础设施(Public Key Infrastructure,简称PKI)技术应运而生,为构建数字安全基石提供了重…

面试算法-151-矩阵置零

题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 解 class Solutio…

LangChain - 文档加载

文章目录 一、关于 检索二、文档加载器入门指南 三、CSV1、使用每个文档一行的 CSV 数据加载2、自定义 csv 解析和加载3、指定用于标识文档来源的列 四、文件目录 file_directory1、加载文件目录数据2、显示进度条 (tqdm3、使用多线程 use_multithreading4、更改加载…

通用开发技能系列:Scrum、Kanban等敏捷管理策略

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能 Scrum、Kanban等敏捷管理策略 进行学习 1.什么是敏捷开发 敏捷是一个描述软件开发方法的术语,它强调增量交付、团队协作、持续规划和持续学习…

如何使用生成式人工智能撰写关于新产品发布的文章?

利用生成式人工智能撰写新产品发布文章确实是一种既有创意又高效的内容生成方式。以下是如何做到这一点的指南,附带一些背景信息: • 背景:在撰写文章之前,收集有关您的新产品的信息。这包括产品的名称、类别、特点、优势、目标受…

git 常用命令和使用方法

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

DJ的打碟是什么意思 FL Studio怎么制作打碟的效果

在如今的音乐文化中,DJ打碟已经成为一种重要的表演形式和音乐创作方式。但是,对于许多人来说,仍然会对DJ的打碟到底意味着什么存在疑惑,接下来给大家介绍DJ的打碟是什么意思,FL Studio怎么制作打碟的效果的具体内容。 …

Pentaho Data Integration(kettle)下载

Kettle已然是改了名了,新名字叫Pentaho Data Integration 网上常见的下载地址已经失效,被提示找不到Date Integration目录: https://sourceforge.net/projects/pentaho/files/Data%20Integration/ 点击页面上的pdf,下载文件后打…

基于单片机16路多路抢答器仿真系统设计

**单片机设计介绍,基于单片机16路多路抢答器仿真系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机16路多路抢答器仿真系统的设计概要主要涵盖硬件设计、软件编程以及功能实现等方面。以下是针对该设计的详细概…

ABAP 弹出输入框/弹出屏幕选择条件框

简单输入框 代码 DATA:TAB TYPE TABLE OF SVAL WITH HEADER LINE ,CODE TYPE C . TAB-TABNAME ZTAB_XX."表 TAB-FIELDNAME XXXX."字段 TAB-FIELDTEXT 条码扫描 ."说明 APPEND TAB. "弹出填写数据的框 CALL FUNCTION POPUP_GE…

mysql安装初始化(windows)

文章目录 一、下载二、 初始化数据库三、把mysql注册成服务 一、下载 https://downloads.mysql.com/archives/community/ 二、 初始化数据库 mysqld --initialize-insecure初始化完成后,可以开黑框运行数据库 mysqld --console三、把mysql注册成服务 mysqld -…

博士推荐 | 西安交通大学毕业的机械工程博士,EIT认证机械工程师

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态,用科技解决职业领域问题,提升行业数字化服务水平,提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

webpack5如何关闭全屏错误

1、找到vue.config.js 2、在上面的devServer里面添加如下: client: {overlay: false, // 禁用全局错误提示},