• Linux 网络编程基础知识


    网络编程基础

    • 网络地址分类:ABCDE类

    子网掩码:求出IP地址的网络号或主机号
    子网掩码 & IP地址 = 网络号
    ~子网掩码 & IP地址 = 主机号

    • 协议:两者之间的一种约定

    网络程序设计框架:

    C/S:客户端/服务器 设计框架

    • 优点:支持本地缓存(能实现较好的效果)、应用层协议可以自己灵活制定
    • 缺点:开发工作量较大、用户安全性较低

    B/S:浏览器/服务器 设计框架

    • 优点:开发工作量小、用户安全性较高
    • 缺点:不支持本地缓存、应用层协议必须遵守http协议

    网络协议分层模型:
    OSI分层模型【理想的网络分层模型】

    应用层
    表示层
    会话层
    传输层
    网络层
    数据链路层
    物理层

    TCP/IP分层模型:标准的网络分层模型

    应用层:HTTP协议,TFTP协议,NFS协议…
    传输层:TCP协议,UDP协议…
    网络层:IP协议、ICMP协议…
    物理接口层:以太网协议、ARP协议、RARP协议…

    总结:

    1. 应用层:可以由用户来自定义协议,方便数据传输以及数据加密
    2. 传输层:提供端对端的数据传输(IP地址,端口号…)
    3. 网络层:提供数据的路由
    4. 网络接口层:实现网络底层驱动
    网络接口层:
    负责将二进制流转化为数据帧,并进行数据帧的接收和发送。
    数据帧是网络传输的基本单元。
    
    • 1
    • 2
    • 3

    网络接口编程

    • Linux系统内核提供套接字作为网络通信的接口
    • 注意: 只有应用层是程序员能够自己定义的,下面三层的协议封装都是由内核完成(但是可以选择)

    套接字分类:

    • 流式套接字(SOCK_STREAM):数据以二进制流的方式进行传递,无大小限制,保证数据可靠、无丢失,顺序发送,主要用于TCP协议,一般情况下只要选择流式方式,那内核就会默认选择TCP传输层协议
    • 数据报套接字(SOCK_DGRAM):只要通过数据报的方式发送,固定大小。不能保证数据可靠,可能丢失,乱序发送。主要用于UDP协议。一般情况下只要选择数据报方式,那内核就会默认选择UDP传输层协议
    • 原始套接字(SOCK_RAW):可以对较低层次协议如IP、ICMP直接访问

    相关接口函数

    • socket(); 创建套接字
    • bind(); 绑定套接字
    • listen(); 将套接字设置为监听模式,准备接收 客户端的连接请求
    • accept(); 服务器等待并接收客户端连接请求,成功返回一个新的已连接套接字
    • connect(); 客户端主动发送连接请求
    • recv() / send(); write() / read(); 收发数据
    • close(); 关闭套接字描述符
    • sendto() / recvfrom(); 一般用于UDP协议,也可用于TCP时
  • 相关阅读:
    sourceTree中的git rebase变基操作
    【毕业设计】深度学习车牌识别系统 - python opencv 卷积神经网络
    CentOS7.6+openGauss2.1.0【纯安装操作步骤】
    基于Springboot的旅游网管理系统设计与实现(有报告)。Javaee项目,springboot项目。
    保研/考研复试-数据结构
    HiveServer2负载均衡
    外观缺陷检测原理
    JavaScript系列之标识符、关键字、保留字
    Linux 下玩《原神》等游戏怎样查看实时帧率等信息
    火狐为 Firefox所有用户推出了GPC
  • 原文地址:https://blog.csdn.net/weixin_45649201/article/details/126392229