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

网络编程(一)

刷题:

网络编程核心要点总结


1. 网络编程基础
  • 目的:了解互联网数据传输过程、常见问题及解决方法,掌握不同协议和模型下的通信实现。
  • 协议:通信双方需遵循相同协议(数据表示与识别的规则)确保数据正常收发。

2. 套接字(Socket)
  • 操作方式:通过 int 类型的套接字文件描述符操作网络通信。
  • 功能
    • 发送端将数据写入套接字文件,接收端从中读取数据。
    • 套接字文件包含接收端的 IP地址 和 端口号,用于准确定位主机和进程。

3. OSI七层模型与TCP/IP四层模型
  • 分层原因:各层独立工作,便于维护和快速定位问题。
  • OSI七层模型
    1. 应用层:用户操作生成数据。
    2. 表示层:数据压缩、加密、统一格式(解决字节序和编码差异)。
    3. 会话层:管理通信会话(建立、维护、中断)。
    4. 传输层:选择协议(如TCP/UDP),控制传输速率。
    5. 网络层:选择最佳路由路径。
    6. 数据链路层:管理MAC地址。
    7. 物理层:定义物理传输标准(如电缆接口、电平值)。
  • TCP/IP模型:实际工业标准,分为应用层、传输层、网络层、网络接口层。

4. IP地址与分类
  • IPv4 vs IPv6
    • IPv4:32位,点分十进制格式(如 192.168.1.1),数量有限(约42亿)。
    • IPv6:128位,解决地址耗尽问题。
  • IPv4分类
    • A类0.0.0.0~127.255.255.255):公网IP(如云服务器)。
    • B类128.0.0.0~191.255.255.255):组织内部网络(校园网、政府)。
    • C类192.0.0.0~223.255.255.255):局域网。
    • D类:组播地址(仅局域网)。
    • E类:保留实验使用。
  • 特殊IP
    • 网段号:如 192.168.1.0
    • 广播地址:如 192.168.1.255(向网段内所有主机广播)。

5. 子网掩码
  • 作用:划分子网,减少广播风暴。
  • 格式:与IP地址类型匹配,如C类IP的子网掩码为 255.255.255.0
  • 子网计算子网网段号 = IP地址 & 子网掩码
    • 示例:192.168.1.2 & 255.255.255.128 → 划分出 192.168.1.0 和 192.168.1.128 两个子网。

6. 域名系统(DNS)
  • 功能:将IP地址转换为易记域名(如 www.baidu.com)。
  • 域名层级
    • 一级域名:国家(.cn)。
    • 二级域名:组织性质(.com.edu)。
    • 三级域名:组织名称(baidu)。
    • 四级域名:服务类型(www)。

7. 字节序与转换函数
  • 网络字节序:大端模式。
  • 转换函数
    • htonl()htons():本地转网络字节序(用于 int 和 short 类型)。
    • inet_pton():字符串IP转二进制(支持IPv4/IPv6)。
    • inet_ntop():二进制IP转字符串。

8. 端口号(Port)
  • 范围0~65535,其中 0~1023 为系统保留端口(如SSH:22,MySQL:3306)。

9. TCP与UDP协议
  • TCP
    • 特点:面向连接、可靠传输(应答机制、数据重发)、粘包与分包(数据拼接或拆分发送)。
    • 适用场景:要求数据完整性的应用(文件传输、网页浏览)。
  • UDP
    • 特点:无连接、不可靠传输(可能丢包)、数据报独立发送(上限约4096字节)。
    • 适用场景:实时性要求高(视频通话、在线游戏)。

10. 关键问题
  • 粘包与分包
    • 粘包:多个数据包合并发送(如连续发送400+500+600字节)。
    • 分包:单个数据包因超限拆分为多次发送(如1800字节拆为1500+300字节)。

总结:网络编程核心围绕协议、地址、数据传输模型展开,需掌握分层模型、IP/子网划分、TCP/UDP特性及数据转换方法,以解决实际通信中的问题。

套接字核心要点总结


1. 套接字定义与功能
  • 功能演变
    • 最初用于进程间通信(IPC),类似管道、消息队列。
    • 支持TCP/IP协议后,扩展为网络通信工具,称为域套接字
  • 核心作用:通过套接字文件实现数据收发,包含接收端IP和端口信息。

2. 套接字工作流程
  1. 写入地址:将接收端的IP和端口写入套接字文件。
  2. 写入数据:将待发送数据存入套接字文件。
  3. 发送文件:通过同一函数同步发送地址和数据。

3. 服务端配置步骤
  • 3.1 创建套接字文件
    使用函数:

    int socket(int domain, int type, int protocol);
    • 参数说明
      • domain:通信域,如AF_INET(IPv4)、AF_INET6(IPv6)、AF_UNIX(本地IPC)。
      • type:套接字类型,决定协议:
        • SOCK_STREAM:面向连接的TCP协议(可靠传输)。
        • SOCK_DGRAM:无连接的UDP协议(不可靠传输)。
      • protocol:通常设为0,根据type自动选择协议。
  • 3.2 绑定IP和端口

    • 结构体定义
    • struct sockaddr_in 
      {sa_family_t    sin_family;  // 地址族(固定AF_INET)in_port_t      sin_port;    // 端口号(需用htons转换网络字节序)struct in_addr sin_addr;    // IP地址(需用inet_pton或inet_addr转换)char           sin_zero[8]; // 填充字段
      };

    • 绑定函数
      int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      • 参数:套接字描述符、地址结构体指针(需强制转换(struct sockaddr*)&addr)、结构体长度。
      • 关键点
        • 端口被占用时bind()会失败,需错误处理(如检查返回值)。
        • IP过滤规则:
          • 0.0.0.0:接受任意IP。
          • 127.0.0.1:仅接受本地通信。

4. 客户端操作(补充)
  • 连接服务端:使用connect()函数(未在原文详细说明)。
  • 数据发送:通过send()write()写入套接字文件。

5. 注意事项
  • 字节序转换:端口号需用htons()转为网络字节序(大端模式)。
  • IP地址转换
    • inet_pton():推荐使用,支持IPv4/IPv6(示例:inet_pton(AF_INET, "192.168.1.1", &addr.sin_addr))。
    • inet_addr():仅支持IPv4,已逐渐淘汰。
  • 错误处理bind()失败常见原因为端口占用,需通过返回值检测。

6. 关键区别
  • TCP vs UDP
    • TCPSOCK_STREAM):可靠传输,需建立连接,适合大文件或连续数据流。
    • UDPSOCK_DGRAM):无连接,速度快但可能丢包,适合实时应用(如视频通话)。

总结:套接字是实现网络通信的核心工具,需掌握创建、绑定、地址转换等操作,并注意协议选择、字节序处理及错误排查。

http://www.xdnf.cn/news/4562.html

相关文章:

  • seamless_communication,facebook推出的开源语音翻译项目
  • 代码随想录算法训练营 Day39 动态规划Ⅶ 打家劫舍
  • 数据可视化:php+echarts实现数据可视化(包含echart安装引入)
  • 数据压缩实现案例
  • 以pytest_addoption 为例,讲解pytest框架中钩子函数的应用
  • RAG技术体系问题的系统性总结
  • C++并发编程完全指南:从基础到实践
  • BBDM学习笔记
  • Spring Boot 中 AOP 的自动装配原理
  • C语言复习笔记--自定义类型
  • Nacos源码—5.Nacos配置中心实现分析二
  • QT高级(1)QTableView自定义委托集合,一个类实现若干委托
  • C——函数递归
  • 软考冲刺——OSPF简答题
  • 仿真系统-学生选课管理
  • 数字化转型是往哪转?怎么转?
  • 第35周Zookkeeper+Dubbo Dubbo
  • 【前端笔记】CSS 选择器的常见用法
  • Cron 用法
  • 数据管道的解耦艺术:Dagster I/O管理器实现存储与逻辑分离
  • 第二章:MySQL 索引优化与高级应用
  • python的异常处理
  • CODESYS开发环境下的快捷键和软件操作汇总
  • 《C++ Templates》:有关const、引用、指针的一些函数模板实参推导的例子
  • Ubuntu 安装 Keepalived
  • Linux 系统的进阶指令详解
  • 【软件设计师:算法】3.排序算法
  • 微信小程序pinia的应用
  • 对redis的深入了解
  • 【每日刷题】第2天