当前位置: 首页 > news >正文

网络(TCP)

TCP: 传输控制协议

1. 面向数据流(流式套接字)
2. 建立连接
3. 安全可靠的传输协议

应用场景:HTTP, MQTT,  FTP

一.建立连接与断开连接

三次握手(开始)

(1) 三次握手的第二个阶段为什么是 ACK+SYN?
核心目标:同步序列号 + 确认能力。
TCP 是全双工协议,双方需独立确认发送和接收能力。
SYN 用于交换初始序列号(ISN),ACK 用于确认收到 SYN。
合并原因:
减少网络开销(从 4 次握手优化为 3 次)。
服务器收到 SYN 后必须立即确认(ACK),同时需同步自己的序列号(SYN)。

四次挥手(结束)

(2)四次挥手的确认和结束为什么要分开发送?
核心目标:非对称关闭 + 数据传输可能性。
一方可能仍有数据需要发送(如 HTTP 响应剩余部分)。
FIN 表示“无数据发送”,ACK 表示“已收到 FIN”。
分开发送原因:
被动关闭方可能无法立即停止发送数据。
合并 FIN+ACK 会导致被动关闭方无法完成剩余数据传输。

二.函数接口

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

功能:建立连接

参数:

        sockfd:套接字

        sockaddr *addr 服务端地址

        addrlen 地址大小

返回值:成功:0       失败:-1           

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:发送数据。
参数:
sockfd:套接字文件描述符。
buf:数据缓冲区首地址。
len:数据长度。
flags:默认设为 0。
返回值:
成功:发送的字节数。
失败:-1

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:从 TCP 套接字接收数据。
参数:
sockfd:套接字文件描述符。
buf:保存接收数据的缓冲区首地址。
len:期待接收的字节数。
flags:默认设为 0。
返回值:
成功:实际接收的字节数。
发送端关闭时:返回 0。
失败:-1

int listen(int sockfd, int backlog);

  • 功能:监听三次握手请求。
  • 参数:
    • sockfd:套接字文件描述符。
    • backlog:等待处理的三次握手请求的最大数量。
  • 返回值:
    • 成功:0。
    • 失败:-1

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:处理三次握手队列中的第一个请求,创建新套接字。
参数:
sockfd:套接字文件描述符。
addr:保存客户端 IP 地址的缓冲区首地址。
addrlen:IP 地址长度。
返回值:
成功:新套接字文件描述符。
失败:-1

http://www.dtcms.com/a/286209.html

相关文章:

  • 百炼MCP与IoT实战(三):手搓自定义MCP Server与阿里云FC配置
  • CMU-15445(2024fall)——PROJECT#0
  • iOS 文件深度调试实战 查看用户文件 App 沙盒 系统文件与日志全指南
  • 【橘子分布式】gRPC(编程篇-上)
  • vue2 面试题及详细答案150道(91 - 100)
  • 人工智能概念之九:深度学习概述
  • kafka 单机部署指南(KRaft 版本)
  • 基于MATLAB的GA遗传算法优化BP神经网络的数据分类预测方法应用
  • 在ComfyUI中CLIP Text Encode (Prompt)和CLIPTextEncodeFlux的区别
  • docker gitlab 备份 恢复 版本升级(16.1.1到18.2.0)
  • SpringAI核心特性与Prompt工程
  • 六个直播回放的功能,助力在线教育蓬勃发展!
  • AR技术重塑电力巡检:效率提升与智能升级
  • Kubernetes (k8s)、Rancher 和 Podman 的异同点分析
  • 题解:CF1617C Paprika and Permutation
  • Redis学习其二(事务,SpringBoot整合,持久化RDB和AOF)
  • MySQL查询优化与事务实战指南
  • 【PTA数据结构 | C语言版】我爱背单词
  • 前端埋坑之element Ui 组件el-progress display:flex后不显示进度条解决方案
  • Java实战:实时聊天应用开发(附GitHub链接)
  • http性能测试命令ab
  • IntelliJ IDEA大括号格式设置:换行改行尾
  • Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
  • 【AI News | 20250717】每日AI进展
  • 【解码文本世界的“隐形分界线”:Windows与Linux回车换行之谜】
  • 基于单片机智能充电器系统设计
  • 如何检查GitHub上可能潜在的信息泄漏
  • 深入理解 Redis 集群化看门狗机制:原理、实践与风险
  • synchronized锁升级过程【AI笔记,仅供自己参考】
  • Pythonday17