days31:零基础学嵌入式之网络1.0

一、网络编程基本内容(概念、编程框架)

1.网络相关的基本概念和协议  ⭐

2.数据库(实现远程、批量数据处理)

3.构建网络服务器

二、网络

1.网络:实现进程间通信

2.为了实现不同主机的通信,要实现:

        1)主机间在硬件层面互联互通;

        2)主机间在软件层面也要互联互通;

交换机:局域网内的数据转发;

路由器:广域网的数据路由;路由:负责路径选择的

IP地址:区分不同主机,每次分配是有变化的。

MAC地址:计算机的硬件地址,计算机出厂之后,是唯一的。

IP + MAC 来标记计算机。

端口号:区分同一主机的不同进程

 端口号:区分一台主机不同的应用程序(0 - 65535)

3.国际网络体系结构 OSI(open system interconnect):定义了网络通信中不同层的协议

        1)应用层:用来表示用户发的数据内容和格式

        2)表示层:数据加密,解密操作,压缩,解压缩

        3)会话层::建立数据传输通道

        4)传输层:传输的方式  UDP  TCP   端口号

        5)网络层:实现数据路由    路由器  ip

        6)数据链路层:封装成帧,点对点通信(局域网内通信),差错检测   交换机  ARP

        7)物理层:定义物理设备标准,网线、光纤等传输介质   比特流  bit  0 1

4.TCP/IP模型:

4层
    应用层:HTTP、HTTPS、FTP、TFTP、MQTT(应用层、会话层、表示层,三层合一)
    传输层:TCP、UDP
    网络层:IP
    网络接口层:网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路
   
5层
    应用层:HTTP、HTTPS、FTP、TFTP、MQTT(应用层、会话层、表示层,三层合一)
    传输层:TCP、UDP
    网络层:IP
    数据链路层:封装成帧,点对点通信(局域网内通信),差错检测   交换机
    物理层:定义物理设备标准,比如网线,光纤等传输介质   比特流  bit

5.协议:


(1) 应用层协议:
        FTP:文件传输协议(实现文件上传/下载)
        TFTP:简单文件传输协议(实现文件上传/下载)
        HTTP:超文本传输协议(实现超文本(集视频、图片、文字于一体的文件类型)传输)
        HTTPS:加密版超文本传输协议
        MQTT:消息队列遥测传输协议(物联网传输)

        DNS:用户名解析服务
(2)传输层协议:
        UDP:用户数据报协议
        TCP:传输控制协议

(3)网络层:
        IP协议
        IPv4    32位
        IPv6    128位
        192.168.1.3         (用户表示形式)   点分十进制   
        11000000101010000000000100000011    (计算机存储形式) 32bits
        IP地址 = 网络位 + 主机位 
        192.168.0.121/24
        24:网络位的位数,前3段时网络位

        192.168.1.0:网段号;

        192.168.1.255:广播号;

        192.168.1.1:网关号;
        网络位:该IP地址位于哪个网段(局域网)内
        主机位:这个网段(局域网)第几台主机

        子网掩码:
            如:255.255.255.0
            11111111.11111111.11111111.00000000
            用来区分IP地址的网络位和主机位,搭配IP地址使用。

  •             子网掩码是1的部分对应IP地址的网络位
  •             子网掩码是0的部分对应IP地址的主机位

端口号:16位的数值 0 -- 65535;,唯一表示一个网络进程。

三、网络配置

1.ping 命令:检查两个主机之间是否网络连通

        ping + 域名 / IP地址 (IP给计算机看的,域名是给人看的,互相绑定,可以互相转换)

        ping WWW.baidu.com  ----->  DNS(域名解析服务,在应用层)  ---------> IP地址

一台主机只有一个IP,但是一个服务器可以链接多个IP。

2.虚拟机 ===》设置 ===》网络适配器====》桥接模式

3.编辑 ===》续集网络编辑器 ====》 更改设置 ===》桥接到 能上网的网卡上去====》应用===》确定

3.

4.设置虚拟机的IP地址

打开虚拟机网卡配置文件===》

TTL:

四、网络协议

1.UDP(用户数据报协议/User Datagram Protocol):传输层

(1)特点 :

        1)无需建立连接;

        2)面向数据包的通信;在底层,只会拆包,不组包;

        3)不安全、不可靠(尽最大交付的协议,可能存在丢包、乱序);

        4)资源开销小(udp头部信息少)、效率高(无需建立连接和应答,只需要一股脑发);

(2)应用

        允许数据丢失、要求实时性高的场景;例如直播、投屏之类

(2)编程

客户端:

        socket :创建一个网络通信套接字(文件描述符),为网络通信抽象出的一个通信端口;

        sendto :发

        recvfrom :收

        close:关文件描述符

服务端:

        socket:

        bind:绑定自己的IP地址和端口号(用来区分进程的端口号);

        recvfrom:收

        sendto:发

        close:关闭

int socket(int domain, int type, int protocol);

(1)功能:创建一个用于网络通信的套接字(相当于文件描述符)

(2) 参数:
                domain:通信的协议族(AF_INET:IPv4协议族;AF_INET6:IPv6)
                type:
                            SOCK_DGRAM:数据报套接字    (UDP使用此类型)
                            SOCK_STEAM:流式套接字    (TCP使用此类型)
                            SOCK_RAW:原始套接字
                protocol:
                            默认传0 按照协议的默认属性创建
(3) 返回值:
               成功返回用来进行通信的文件描述符
               失败返回-1     

5.bind

int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);

(1) 功能:将一个套接字与IP地址和端口号绑定(只能绑定自己的IP地址)
(2) 参数:
            sockfd:套接字文件描述符 
            addr:IP地址和端口号结构体首地址
            addrlen:长度
(3)返回值:
            成功返回0
            失败返回-1 
 

 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);

(1)功能: 向一个IP地址和端口发送数据信息
                  端口号:区分一台主机不同的网络进程(0 - 65535)

                  IP地址:区分不同主机
(2)参数:
                sockfd:套接字文件描述符
                buf:发送数据空间首地址
                len:发送数据的长度
                flags:发送数据属性(默认为0)
                dest_addr:目的IP地址和端口
                addrlen:目的IP地址和端口的长度

(3) 返回值:
                成功返回实际发送字节数
                失败返回-1 

(4) IPv4地址形式:(man 7 ip)
        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 */
       };

  •         网络字节序:大端存储
  •         主机字节序:小端存储:低地址保存低字节

(5)htons----》主机转网络字节序
        主机:小端   host
        网络:大端   network
    
      uint32_t htonl(uint32_t hostlong);          主机转网络
      uint16_t htons(uint16_t hostshort);         主机转网络
      uint32_t ntohl(uint32_t netlong);           网络转主机
      uint16_t ntohs(uint16_t netshort);          网络转主机

      h:host
      n:net 
      l:long  
      s:short 

 in_addr_t inet_addr(const char *cp);

(1)功能:将字符串IP地址转换成二进制IP地址形式

 char *inet_ntoa(struct in_addr in);

 (1)功能:
        将二进制ip转换成字符串

6.recvfrom

 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);

(1) 功能:  接收网络发送的数据信息
(2)参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        len:最大能够接收的数据个数
        flags:属性默认为0(阻塞方式)
        src_addr:存放发送端IP地址信息的空间首地址
        addrlen:想要接收的数据长度的空间首地址
(3)返回值:
        成功返回实际接收字节数
        失败返回-1 

具有阻塞功能(直到接收到数据,才会继续向下执行)

五、网络编程模型:

1.B/S :browser /server ---> 浏览器/服务器。通用客户端-----》服务器

(1)通用客户端

(2)客户端无需开发

(3)请求的资源绝大多数都需要来源于服务端

2.C/S  : client / server  -----> 客户端/服务器 。专用客户端-----》服务器

(1)专用的客户端

(2)客户端和服务端都要开发

(3)客户端可以保留一定资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值