当前位置: 首页 > news >正文

网络协议学习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 == 端口

即可得到信息是否发送。

http://www.lryc.cn/news/312472.html

相关文章:

  • vue3中全局变量的定义和获取
  • 1.2 数据模型 数据库系统概论
  • C#中openFileDialog 对话框不在最顶层,TopMost的异常情况
  • 信息安全与阿里云等保三级方案实践总结
  • 嵌入式学习记录——线程
  • 同步服务器操作系统公网仓库到本地 _ 统信UOS _ 麒麟KYLINOS
  • 【数仓】flume常见配置总结,以及示例
  • 统计信息锁定
  • 光猫改为bridge模式
  • 回溯算法01-组合(Java)
  • 初始网络 --- 网络基础
  • 在Linux/Ubuntu/Debian中计算MD5,SHA256的方法
  • mybatis mysql insert 主键id为空
  • 批次大小对ES写入性能影响初探
  • c语言十大核心用法
  • 网页打开慢,这锅该谁背?
  • 题目 1538: 蓝桥杯-格子位置
  • 第十三届蓝桥杯嵌入式省赛程序设计详细题解
  • Go 语言指针
  • 指针运算笔试题解析
  • Matlab梁单元有限元编程 | 铁木辛柯梁 | 欧拉梁 | Matlab源码 | 理论文本
  • Tensorflow2.0笔记 - 常见激活函数sigmoid,tanh和relu
  • 1688商品详情数据采集,工程数据采集丨店铺数据采集丨商品详情数据采集
  • Flutter(四):SingleChildScrollView、GridView
  • 【C++】102.二叉树的层序遍历
  • Java学习笔记006——子类与父类的类型转换
  • FedAsync Asynchronous Federated Optimization
  • 学习基于 JavaScript 语言 的计算机界三大神书”之一 ——SICP
  • 【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型
  • K8s 镜像缓存管理 kube-fledged 认知