嵌入式学习Day31---Linux软件编程---网络编程

目录

一、网络基本概念

1.1.协议

1.2.国际网络通信协议标准

1.OSI协议

2.TCP/IP协议 (现在常用)

        1.应用层

        2.传输层

                 1)UDP (用户数据报协议

                 2)TCP (传输控制协议

        3) 端口号:找到同一台主机不同的应用程序; 

        3.网络层 

        1)IP地址分类  

        2)MAC地址:设备自带网卡的地址(该地址是唯一的);

     

 1.3.命令

       1. ifconfig

        2.将虚拟机的网络IP设置为桥接模式     

二、UDP编程

2.1.套接字

1.什么是套接字?

2.功能

2.2.UDP发信息步骤

1.创建套接字

2.将自己的端口和IP与套接字绑定

3.配置要发生的IP

4.发消息

5.关闭套接字 

2.3.UDP接收消息步骤

1.创建套接字

2.将自己的端口和IP与套接字绑定

3.接收消息

三、总结



一、网络基本概念

1.1.协议

        通信双方约定的一套标准;

1.2.国际网络通信协议标准

1.OSI协议

        应用层          发送的数据内容
        表示层          数据是否加密
        会话层          是否建立会话连接
        传输层          数据传输的方式
        网络层          数据的路由
        数据链路层      局域网内部通信
        物理层          物理介质的连接

2.TCP/IP协议 (现在常用)

        应用层          发送的数据内容
        传输层          数据传输的方式
        网络层          数据由一台主机到达另一台主机
        网络接口层      物理介质连接 
        1.应用层
            FTP     文件传输协议    
            TFTP    简单文件传输协议
            HTTP    超文本传输协议
            HTTPS   安全超文本传输协议
            SMTP    简单邮件传输协议
            TELNET  网络终端登录协议
            DNS     域名系统
            .. 
        2.传输层
                 1)UDP (用户数据报协议)
              UDP:不安全、不可靠的传输方式
              UDP机制简单
              UDP占用的资源开销比较小

                他只管发,不管对方能不能收到 

                 2)TCP (传输控制协议)
              TCP:安全、可靠的传输方式
              TCP机制复杂
              TCP占用的资源开销比较大                 

                为何安全呢?

此过程会经历如下:                

                 三次握手建立连接,确认双方能够通信
                 通信过程中保障数据传输的完整性
                 四次挥手断开连接,确保数据传输的完整

        3) 端口号:找到同一台主机不同的应用程序; 
        3.网络层 
IPV4协议
 IP地址

       IP地址 = 网络位 + 主机位 

       网络位:IP地址所属的网段(局域网的编号)

       主机位:局域网中的第几台主机

       网段号:网络位不变,主机位全为0 

       广播号:网络位不变, 主机位全为1 

       子网掩码:
          每个IP地址都会搭配一个子网掩码,用来区分IP地址的网络位及主机位

          子网掩码展开成二进制,1对应的部分就是IP地址的网络位,0对应的部分就是IP地址的主机位
            

         
        1)IP地址分类  
        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.255.255.255
                用于组播:255.255.255.0

            E类:240.0.0.0 ~ 255.255.255.255
                用于实验和研究:255.255.255.0
       2)MAC地址:设备自带网卡的地址(该地址是唯一的);
     

 1.3.命令

       1. ifconfig

             查看自己IP地址

        2.将虚拟机的网络IP设置为桥接模式     

2.将虚拟机IP地址设置为桥接模式:
        1.点击"虚拟机"
        2.点击"设置"
        3.选择"网络适配器"
        4.点击"桥接模式"
        5.点击"确定"
    3.将虚拟机桥接到无线网卡上去
        1.点击"编辑"
        2.点击"虚拟网络编辑器"
        3.点击"更改设置"
        4.已桥接至选择无线网卡
        5.点击"确定"
    4.修改网卡配置文件
        1.sudo vim /etc/network/interfaces
        2.修改文件内容为:
           auto lo
           iface lo inet loopback

           auto ens33
           iface ens33 inet dhcp
           
        3.保存退出
          :wq
    5.重启网络服务
        sudo /etc/init.d/networking restart
    6.测试与局域网内其余IP地址是否能够连通
        ping 192.168.0.167
        ping www.baidu.com 

二、UDP编程

2.1.套接字

1.什么是套接字?

一次通信对象的抽象

2.功能

实现Linux系统下的网络通信 

2.2.UDP发信息步骤

1.创建套接字

函数接口:socket

 int socket(int domain, int type, int protocol);
      功能:
        创建套接字
      参数:
        domain: AF_INET 表示IPV4协议
        type:套接字类型
            SOCK_STREAM:流式套接字
            SOCK_DGRAM:数据报套接字
            SOCK_RAW:原始套接字
        protocol:
            TCP和UDP协议:0
      返回值:  
        成功返回用来通信的文件描述符
        失败返回-1 

2.将自己的端口和IP与套接字绑定

函数接口:htons、inet_addr、bind

uint16_t htons(uint16_t hostshort);
      功能:    
        将本地字节序(小端)转换成网络大端字节序
 in_addr_t inet_addr(const char *cp);
      功能:
        将字符串的IP地址转换为32位的地址类型 
  int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      功能:
        将套接字与IP地址和端口进行绑定
      参数:
        addr:绑定地址结构体空间首地址
        addrlen:绑定地址空间大小
      返回值:
        成功返回0 
        失败返回-1 

      注意:
        只能绑定自己的IP地址(发送端哦,也可不用,不绑定默认随机端口号)

3.配置要发生的IP

函数接口: htons、inet_addr

4.发消息

函数接口: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:目的地址的长度
      返回值:
        成功返回发送字节数
        失败返回-1 

        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 */
        };

 注意: 如果sendto对应的套接字没有绑定端口,则sendto绑定一个随机端口完成发送功能

5.关闭套接字 

函数接口:close

2.3.UDP接收消息步骤

1.创建套接字

函数接口:socket

2.将自己的端口和IP与套接字绑定

函数接口:htons、inet_addr、bind

3.接收消息

函数接口:recvfrom

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

三、总结

        2024年8月15日,学习的第31天。今天开始学习了Linux下的网络编程,主要学习了基础的网络知识以及UDP编程的实现。

        加油!

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值