Socket编程整理笔记(一)

一、网络设备基础

  1. 交换机与路由器
    • 交换机:用于局域网(LAN)内的数据转发,基于MAC地址实现二层通信。
    • 路由器:连接局域网与外网(如Internet),基于IP地址实现三层(网络层)路由转发。
二、IP地址与子网划分
  1. IP地址概述
    • 定义:Internet中主机的唯一标识,32位(IPv4)或128位(IPv6)。
    • 组成:源IP与目的IP地址,用于数据包路由。
    • 表示形式:点分十进制(如202.38.64.10),最终转换为32位无符号整数。
  1. IP地址分类(IPv4)
    • A类(1.0.0.0-126.255.255.255):网络号1字节,主机号3字节,用于大型网络。
    • B类(128.0.0.0-191.255.255.255):网络号2字节,主机号2字节,用于中型网络。
    • C类(192.0.0.0-223.255.255.255):网络号3字节,主机号1字节,用于小型网络。
    • D类(224.0.0.0-239.255.255.255):多播地址。
    • E类(240.0.0.0-255.255.255.255):保留地址。
  1. 子网掩码与地址拆分
    • 功能:划分网络号与主机号,格式为32位二进制,前半段全1(网络部分),后半段全0(主机部分)。
    • 计算:
      • 网络号 = IP地址 & 子网掩码
      • 主机号 = IP地址 & (子网掩码取反)
    • 示例:C类地址192.168.1.0/24,主机范围192.168.1.1~192.168.1.254(排除网络地址和广播地址)。

三、网络体系结构
  1. OSI七层模型
    • 物理层:传输比特流(0/1),定义物理信号与接口。
    • 数据链路层:封装帧,实现相邻节点通信(如MAC地址)。
    • 网络层:处理IP地址,实现路由选择(路由器工作层)。
    • 传输层:端到端通信,提供TCP/UDP协议(端口号标识进程)。
    • 会话层:管理通信连接的建立与断开。
    • 表示层:数据格式转换、加密解密(如HTTP编码)。
    • 应用层:定义具体应用协议(HTTP、FTP、DNS等)。

 

  1. TCP/IP协议体系结构
    • 应用层:HTTP、FTP、DNS、SMTP等。
    • 传输层:TCP(面向连接,可靠)、UDP(无连接,不可靠)。
    • 网络层:IP、ICMP、路由协议(RIP、OSPF)。
    • 网络接口层:物理层与数据链路层的整合(如以太网、PPP)。

四、传输层协议:TCP vs UDP
  1. TCP协议
    • 特点:面向连接、全双工、可靠传输(重传机制、流量控制)。
    • 适用场景:大文件传输、需要可靠性的场景(如HTTP、FTP)。
  1. UDP协议
    • 特点:无连接、不可靠、高效(无需建立连接)。
    • 适用场景:实时通信、小数据传输(如DNS查询、视频流、VoIP)。

五、Socket编程基础
  1. Socket概述
    • 定义:网络编程接口,用于跨主机进程通信,本质是特殊文件描述符。
    • 类型:
      • 流式套接字(SOCK_STREAM):基于TCP,可靠连接。
      • 数据报套接字(SOCK_DGRAM):基于UDP,无连接。
      • 原始套接字(SOCK_RAW):直接访问底层协议(如IP、ICMP)。
  1. 端口号与字节序
    • 端口号:16位整数,标识主机中的进程(0~65535),分为:
      • 知名端口(1~1023):系统保留(如80端口用于HTTP)。
      • 注册端口(1024~49151):用户程序使用。
      • 动态端口(49152~65535):临时分配。
    • 字节序
      • 主机字节序(小端序或大端序)与网络字节序(大端序)的转换函数:
        • htonl()/htons():主机字节序转网络字节序。
        • ntohl()/ntohs():网络字节序转主机字节序。
  1. TCP编程流程

    • 服务器端
      1. socket():创建套接字。
      2. bind():绑定IP地址与端口号。
      3. listen():设置被动监听状态。
      4. accept():阻塞等待客户端连接,返回通信套接字。
      5. recv()/send():接收/发送数据。
      6. close():关闭套接字。
    • 客户端
      1. socket():创建套接字。
      2. connect():发起连接请求。
      3. send()/recv():发送/接收数据。
      4. close():关闭套接字。
  1. 关键函数详解
    • socket(int domain, int type, int protocol):创建套接字,domain为协议族(如AF_INET),type为套接字类型。
    • bind(int sockfd, struct sockaddr *addr, socklen_t addrlen):绑定地址结构(如struct sockaddr_in)。
    • accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen):获取客户端连接,返回新套接字。
    • recv(int sockfd, void *buf, size_t len, int flags):接收数据,类似read()flags通常为0。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值