• 网络协议学习DAY1


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

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

        应用层:
            HTTP    超文本传输协议
            HTTPS   
            FTP     文件传输协议
            TFTP    简单文本传输协议
            SMTP    邮件传输协议
            MQTT    
            TELNET  
            ..
        
        传输层:
            UDP     用户数据报协议
                    特点:
                        1.实现机制简单
                        2.资源开销小
                        3.不安全不可靠

            TCP     传输控制协议
                    特点:
                        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 
                用于实验

    2.UDP编程
        socket套接字编程:
            socket 
            int socket(int domain, int type, int protocol);
            功能:
                创建一个用来通信的文件描述符
            参数:
                domain:使用的协议族 AF_INET (IPv4协议族)
                type:套接字类型
                    SOCK_STREAM:流式套接字
                    SOCK_DGRAM:数据报套接字
                    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:目的地址的长度
            自带结构体:
            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 

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

            htons
            uint16_t htons(uint16_t hostshort);
            功能:
                将本地字节序转换为网络的大端字节序
      
         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 

            注意:最后一个参数是socklen_t  类型,因此与sendto不同,要设置一个socklen_t类型的值储存src_addr的长度。

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

       UDP编程的步骤
        发端:socket -> sendto -> close 
        收端: socket -> bind -> recvfrom -> close 

    对网络代码进行测试的方法:

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

    即可得到信息是否发送。

  • 相关阅读:
    vue+vite项目静态文件引用丢失
    外包干了一个月,技术明显进步。。。。。
    T1028:字符菱形(信息学一本通C++)
    佩戴最稳固的蓝牙运动耳机、好用的运动耳机推荐
    性能测试 —— 性能测试常见的测试指标 !
    剑指offer全集系列Java版本(2)
    C. Minimum Varied Number
    【关于Anaconda闪退无法启动】新版本anaconda3中ssl模块缺失的问题
    Spring——Spring_XML实现DI
    零信任沙盒,加密沙盒,防泄密沙盒
  • 原文地址:https://blog.csdn.net/weixin_69286552/article/details/136496767