网络编程与TCP/IP协议

网络编程与TCP/IP协议

一、网络分层模型

1. OSI七层模型(理论模型)

层级 名称 功能 数据单元
7 应用层 为应用程序提供网络服务 数据(data)
6 表示层 数据的格式化和转换 数据(data)
5 会话层 建立、管理、终止会话 数据(data)
4 传输层 提供端到端的数据传输 段/数据报
3 网络层 路径选择和路由,IP寻址 数据包
2 数据链路层 设备间传输数据帧,物理寻址
1 物理层 定义物理介质和电气特性 比特

2. TCP/IP模型(实际应用)

层级 协议 功能
应用层 HTTP、FTP、DNS 应用程序通信
传输层 TCP、UDP 端到端数据传输
网络层 IP 路由和寻址
网络接口层 以太网、WiFi 物理传输

网络连接要素:网络设备 + 传输介质

二、TCP协议详解

TCP三大核心特点

  1. 面向连接:通信前必须经过"三次握手",结束后必须经过"四次挥手"
  2. 可靠传输:基于序号确认、超时重传、流量控制机制
  3. 面向字节流:不保留边界信息,将数据切分成TCP段

关键机制

三次握手(建立连接)

  1. 客户端发送SYN请求连接
  2. 服务器回复SYN+ACK确认
  3. 客户端发送ACK应答,连接建立完成

四次挥手(断开连接)

  1. 主动方发送FIN请求关闭
  2. 被动方回ACK确认收到
  3. 被动方发送FIN请求关闭
  4. 主动方回复ACK,连接关闭

三、TCP编程相关结构体

sockaddr_in结构

struct sockaddr_in {
    sa_family_t sin_family;    // 地址族
    in_port_t sin_port;        // 端口号(网络字节序/大端)
    struct in_addr sin_addr;   // IPv4地址(网络字节序/大端)
};

struct in_addr {
    uint32_t s_addr;           // IPv4地址
};

字节序说明

  • 主机字节序:根据不同CPU架构,存储多字节的方式不同
  • 网络字节序:统一标准,采用大端序,保证不同计算机通信

四、TCP服务器编程流程

1. 创建套接字

int socket(int domain, int type, int protocol);

2. 绑定地址

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
// addrlen: 结构体大小,通常使用sizeof获取

3. 监听连接

int listen(int sockfd, int backlog);
// backlog: 连接请求队列的最大长度

作用:将未连接的套接字转换为被动套接字,监听客户端连接请求

4. 接受连接

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

返回值:成功返回新的套接字文件描述符,失败返回-1
作用:从等待队列中取出第一个连接请求,创建新套接字与客户端连接

套接字类型说明

  • 监听套接字

    • 由socket()创建,bind()绑定,listen()监听
    • 被动角色,只接受连接请求
    • 生命周期:整个服务器程序执行时间
  • 连接套接字

    • 由accept()返回创建
    • 主动角色,专门与特定客户端通信
    • 生命周期:与客户端连接结束后关闭

5. 数据接收

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

返回值:

  • >0:实际接收的字节数
  • =0:连接已关闭
  • =-1:失败

6. 数据发送

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

7. 关闭连接

int close(int fd);

五、TCP客户端编程

连接服务器

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

返回值:

  • 0:连接已建立
  • -1:连接失败

作用:主动向服务器发起连接请求,自动触发三次握手

六、协议对比

特性 TCP UDP HTTP
连接性 面向连接 无连接 应用层协议
可靠性 可靠传输 不可靠 基于TCP
速度 较慢 较快 中等
数据边界 字节流 数据报 消息
使用场景 文件传输、网页 视频流、DNS Web应用
posted @ 2025-10-16 09:58  四毛mao  阅读(48)  评论(0)    收藏  举报