UNIX高级编程【深入浅出】 网络基础

  1. 网络编程

    1. 是指通过计算机网络进行数据传输和通信的编程过程,也就是两个不在同一台主机上的进程间通信
  2. 常用的编程模型有两种:客户端-服务器模型和对等模型

    1. 客户端-服务器模型:客户端发送请求,服务器接收请求并提供服务。这种模型适用于大多数的网络应用,例如 Web 应用、邮件服务、数据库服务等。常见的编程协议是 TCP/IP 协议栈,可以使用套接字(socket)编程来实现。

    2. 对等模型:也称为点对点模型或对等通信模型,其中所有参与方都可以充当客户端和服务器的角色,并且可以直接相互通信。这种模型适用于实时通信、文件共享、即时聊天等应用。常见的编程协议有 UDP、WebSocket 等。

  3. 常见的概念和技术:

    1. IP 地址:用于标识网络中的设备。IPv4 和 IPv6 是常见的 IP 地址格式。
    2. 端口:用于区分同一设备上不同应用程序的通信端点。
    3. 套接字(socket):用于在应用程序之间建立连接和进行数据传输的接口。
    4. TCP(传输控制协议):提供可靠的、面向连接的数据传输服务。
    5. UDP(用户数据报协议):提供无连接的、不可靠的数据传输服务。
    6. HTTP(超文本传输协议):用于在客户端和服务器之间传输超文本的协议。
    7. WebSocket:一种基于 TCP 的全双工通信协议,常用于实现实时通信应用。
    8. RESTful API:一种基于 HTTP 协议的架构风格,用于设计和开发 Web 服务接口。
    9. Socket 编程:使用套接字进行网络通信的编程方式。
  4. 如何通过网络进行通信

    1. 分层结构(为了简化跨主机通信的步骤)
      1. OSI七层网络模型
      2. 应用层(http ,ftp ,tftp)、表示层、会话层、传输层(TCP,UDP)、网络层(IP)、数据链路层(ARP, RARP)、物理层
      3. TCP/IP四层网络模型
      4. 应用层(表示, 会话)、传输层、网络层、网络接口层(数据链路, 物理)
  5. IP

    1. ipv4地址是一个32位的地址(4字节),理论上最多可分配2^32-1个地址,实际上早已耗尽
    2. ipv6地址是一个128位的地址(8字节)
    3. IPv4地址的表达
      1. 点分十进制的表达,也就是每一个字节用.来分割,转换为十进制表达,例如"192.168.2.111"
      2. 直接整型数值
      3. 点分十进制的地址转换为整型
        1. inet_aton(3)
      4. 将整形地址转换为点分十进制表达
        1. inet_ntoa(3)
    4. IPv6地址
      1. 地址空间的扩展:  由八组四位十六进制数字组成,每组之间使用冒号分隔,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
      2. 简化的报头:IPv6的报头相比IPv4更加简化,提高了处理效率。它还支持可选扩展报头,使得在传输过程中可以添加额外的功能。

      3. 自动地址配置:IPv6支持通过一种称为SLAAC(Stateless Address Autoconfiguration)的技术,使设备能够自动获取全球唯一的IPv6地址,简化了网络配置过程。

      4. 改进的安全性:IPv6内置了IPsec(Internet Protocol Security)协议,提供了端到端的数据包加密和认证。这增加了网络通信的安全性,并简化了在IPv4中需要额外配置的安全功能。

      5. QoS支持:IPv6在报头中添加了一些字段,可以支持更好的服务质量(Quality of Service),包括流量分类和优先级处理。

    5. IPv4地址划分(网络号+主机号)网络号是用于划分网段,主机号用于分配主机

      A(1字节的网络号+3字节的主机号)

      B(2bytes网络号+2bytes主机号)

      C(3bytes网络号+1byte主机号)

      D(组播地址)E(科学研究)

      网络号(ABCD)     0开头,那么范围0~127     10开头,那么范围就是128~191                              110开头,那么范围就是192~223      110开头,那么范围就是224~239
      网络类型 适合大型网络  适合中大型网络  适合小型网络
      内网地址(ABC)

      10.0.0.0~10.255.255.255  172.16.0.0~172.31.255.255  192.168.0.0~192.168.255.255

    6. IPv4特殊地址
      1. "127.0.0.1"环回测试地址,测试本机TCP/IP协议栈是否是通的
      2. "255.255.255.255"全网广播地址
      3. "0.0.0.0"本地任意地址
  6. port端口

    1. 区分服务
    2. 两个字节的整型数:0~65535
    3. 0~1024专用端口,周知端口
    4. 1024~65535用户端口
  7. 跨主机传输数据类型需要注意什么?

    1. 数据类型中一定不能包含指针
    2. 大小端未必一致(字节序)
      1. 大端存储:低字节存再高地址,高字节存在低地址
      2. 小端存储:低字节存低地址,高字节存高地址
      3. 字节序转换
        • 本地字节序转换为网络字节序
          • htons(3) / htonl(3)
        • 网络字节序转换为本地字节序
          • ntohs(3) / ntohl(3)
    3. 验证大小端存储(两种方法)
    4. 数据类型要明确
      1. int8_t / uint16_t/u32
    5. 结构体对齐因编译器版本而异
      1. 单字节对齐
      2. struct {}__attrbute__((packed));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值