网络编程与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三大核心特点
- 面向连接:通信前必须经过"三次握手",结束后必须经过"四次挥手"
- 可靠传输:基于序号确认、超时重传、流量控制机制
- 面向字节流:不保留边界信息,将数据切分成TCP段
关键机制
三次握手(建立连接)
- 客户端发送SYN请求连接
- 服务器回复SYN+ACK确认
- 客户端发送ACK应答,连接建立完成
四次挥手(断开连接)
- 主动方发送FIN请求关闭
- 被动方回ACK确认收到
- 被动方发送FIN请求关闭
- 主动方回复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应用 |

浙公网安备 33010602011771号