嵌入式学习第二十五天!(网络的概念)

news/2024/10/21 3:45:14/

网络:

    可以用来:数据传输数据共享

1. 网络协议模型:

    1. OSI协议模型:

应用层实际收发的数据
表示层发送的数据是否加密
会话层是否建立会话连接
传输层数据传输的方式(数据包,流式)
网络层数据的路由(如何从一个局域网到达另一个局域网)
数据链路层局域网下如何通信
物理层物理介质的连接

      2. TCP/IP协议模型:

应用层传输的数据
传输层传输的方式
网络层数据如何从一个台主机到达另一台主机
网络接口层物理介质的连接
        1. 应用层:

               例如有:HTTP      超文本传输协议

                              HTTPS   

                              FTP        文件传输协议

                              TFTP      简单文本传输协议

                              SMTP     邮件传输协议

                              MQTT

                              TELNET

                              ...

        2. 传输层:

              UDP:用户数据报协议

                    特点:1. 实现机制简单

                               2. 资源开销小

                               3. 不安全不可靠

              TCP:传输控制协议

                      特点:1. 实现机制复杂

                                 2. 资源开销大

                                 3. 安全可靠

        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

                        管理超大规模网络

                        私有IP地址:10.0.0.0  -  10.255.255.255

                B类:

                        128.0.0.0  -  191.255.255.255

                        子网掩码:255.255.0.0

                        管理大中规模型网络

                        私有IP地址:172.16.0.0  -  172.31.255.255

                C类:

                        192.0.0.0  -  223.255.255.255

                        子网掩码:255.255.255.0

                        管理中小规模型网络

                        私有IP地址: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

                        用于实验

        4. UDP编程:

            socket套接字编程:

            1. 发端
                1. socket:
int socket(int domain, int type, int protocol);

                    功能:创建一个用来通信的文件描述符

                    参数:

                        domain:使用的协议族 AF_INET(IPv4协议族)

                        type:套接字类型

                                SOCK_STREAM:流式套接字

                                SOCK_DGRAM:数据报套接字

                                SOCK_RAW:原始套接字

                        protocol:协议

                                默认为0;

                    返回值:

                        成功返回文件描述符
                        失败返回-1

                2. 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:目的地址的长度

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 */
};/* Internet address. */
struct in_addr {uint32_t       s_addr;     /* address in network byte order */
};

                    返回值:

                        成功返回实际发送字节数
                        失败返回-1

                3. inet_addr:
in_addr_t inet_addr(const char *cp);

                    功能:将字符串IP地址转换为内存中的IP地址

                4. htons:
uint16_t htons(uint16_t hostshort);

                    功能:将本地字节序转换为网络的大端字节序

            练习:

                1. 编写程序实现从终端接收字符串发送给windows软件调试助手,并接收软件助手的回复,显示在终端屏幕上

#include "head.h"int main(void)
{int sockfd = 0;ssize_t nsize = 0;char tmpbuff[1024] = {0};struct sockaddr_in recvaddr;sockfd = socket(AF_INET, SOCK_DGRAM, 0);if(sockfd == -1){perror("fail to socket");return -1;}gets(tmpbuff);recvaddr.sin_family = AF_INET;recvaddr.sin_port = htons(50000);recvaddr.sin_addr.s_addr = inet_addr("192.168.1.162");bind(sockfd, (struct sockaddr *)&recvaddr, sizeof(&recvaddr));nsize = sendto(sockfd, tmpbuff, strlen(tmpbuff), 0, (struct sockaddr *)&recvaddr, sizeof(recvaddr));if(nsize == -1){perror("fail to sendto");return -1;}printf("成功发送 %ld 字节!\n", nsize);memset(tmpbuff, 0, sizeof(tmpbuff));nsize = recvfrom(sockfd, tmpbuff, sizeof(tmpbuff), 0, (struct sockaddr *)&recvaddr, (socklen_t *)sizeof(&recvaddr));printf("%s\n",tmpbuff);close(sockfd);return 0;
}


http://www.ppmy.cn/news/1372572.html

相关文章

mongodb备份脚本

mongodb备份脚本参考:根据自己实际情况进行修改 cat /usr/local/mcs8/mongodb/dbbak.sh #!/bin/bash #!/usr/bin/bashbasePath=$(cd `dirname $0`; pwd)#获取当前系统时间 DATE=`date +%Y_%m_%d_%H%M%S`#备份存放路径 DIR_DATE=`date +%Y_%m_%d` TAR_DIR=$basePath/bak/lis…

适用于ZigBee应用的JN5168/001K、JN5188HN、JN5188THN/001Z、JN5189THN超低功耗射频微控制器MCU

一、JN5168/001K 适用于ZigBee应用的超低功耗、高性能无线微控制器 JN5168是超低功耗、高性能无线微控制器,适用于ZigBee应用,它具有256kB嵌入式闪存、32 kB RAM,无需外部存储器即可进行OTA升级。32位RISC处理器可通过不同宽度指令、多级指令…

25.基于springboot + vue实现的前后端分离-停车管理系统(项目 + 论文)

项目介绍 本停车场管理系统是中小型的停车场管理的系统。包括用户信息管理,车位信息管理,车位费用管理,停泊车辆管理,车辆进出管理等主要功能。为方便用户可以清晰地了解到车辆运行情况,可以通过本系统日历图形报表和柱…

Linux操作系统的vim常用命令和vim 键盘图

在vi编辑器的命令模式下,命令的组成格式是:nnc。其中,字符c是命令,nn是整数值,它表示该命令将重复执行nn次,如果不给出重复次数的nn值,则命令将只执行一次。例如,在命令模式下按j键表…

CSS浮动的使用与清除,web前端开发发展趋势

css盒模型 1,css盒模型基本概念? 2,标准模型和IE模型的区别:计算高度和宽度的不同,怎么不同,高度宽度是怎么计算的? 3,css如何设置这两种模型? 4,js如何设置…

【学习笔记】开源计算机视觉库OPENCV学习方案

本文中,我们试图提供一些学习OpenCV的详细和实用资源,这些资源包括基础知识、进阶技巧以及实践项目,旨在帮助初学者和进阶学习者更好地掌握和使用OpenCV库。 一、学习资源 官方文档:OpenCV的官方文档是学习OpenCV的最佳起点。它包…

HTML入门:简单了解 HTML 和浏览器

你好,我是云桃桃。今天来简单了解一下 HTML 以及浏览器。 HTML 是什么? HTML(全称:Hypertext Markup Language)是一种标记语言,用于创建和呈现网页的结构和内容。 它由一系列标签(或称为元素…

游戏引擎渲染流程

一、渲染概述 我们首先看到渲染技术的发展 游戏渲染面临的挑战: 一个容器中同一时刻有大量的游戏对象需要进行渲染,并且不同对象渲染的形式、算法还有所差异,这些使得游戏的绘制系统变得非常复杂;其次,游戏引擎的渲染…