news 2026/6/10 13:28:44

自学嵌入式day38天,tcp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式day38天,tcp
1. TCP传输控制协议概述

TCP(传输控制协议)是一种用于在网络中可靠传输数据的协议。它基于服务器客户端模型工作,常见的模型包括:

  • CS(Client-Server)模型:客户端和服务器角色分明,客户端向服务器请求服务。
  • BS(Browser-Server)模型:浏览器作为通用客户端,服务器提供服务。
  • P2P(Peer-to-Peer)模型:节点之间对等通信,每个节点既是客户端又是服务器。

这些模型的区别如下:

  • CS模型:使用专用客户端,应用层协议可自定义,功能相对复杂,资源(如数据)存储在本地。
  • BS模型:使用通用客户端(浏览器),应用层协议固定为HTTP,功能相对简单,资源由服务器发送给客户端。
  • P2P模型:常用于网络下载工具。例如,初始下载进度为0%时,其他客户端或服务器提供数据;当进度达90%时,自身也为新客户端上传数据,实现同时下载和上传。
2. TCP的主要特征:
  • 有连接:通过三次握手建立连接,连接建立后保持直到一方断开(四次挥手)。
  • 可靠传输:通过应答(ACK)、超时重传等机制确保数据完整。但实时性较弱,网络资源消耗较大。
  • 流式套接字:数据无边界,连续有序。
  • 全双工:支持双向通信,使用双缓存区。
  • 发送与接收次数不匹配:发送次数和接收次数不需要对应。
  • 写阻塞:存在64K的缓冲区限制。
  • 感知断开:一方断开连接时,另一方可通过四次挥手感知。

可靠传输机制包括:

  • 应答(ACK):确认数据接收。
  • 超时重传:未收到应答时重发数据。
  • 实时性弱:不适合高实时性应用。
  • 资源消耗大:相比UDP,占用更多网络资源。
3. TCP相关函数详解
创建套接字:socket()

用于创建套接字描述符。

int socket(int domain, int type, int protocol);
  • 功能:向内核申请创建套接字描述符。
  • 参数
    • domain:地址族,如PF_INET(互联网程序)或PF_UNIX(单机程序)。
    • type:套接字类型,如SOCK_STREAM(TCP流式套接字)、SOCK_DGRAM(UDP数据报套接字)、SOCK_RAW(原始套接字)。
    • protocol:协议,设为0表示自动适应应用层协议。
  • 返回值:成功返回套接字ID,失败返回-1。
绑定地址:bind()

用于服务器绑定地址。

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
  • 功能:将套接字ID与指定地址关联,用于接收数据。
  • 参数
    • sockfd:套接字ID。
    • my_addr:地址结构指针。
    • addrlen:地址长度。
  • 返回值:成功返回0,失败返回-1。
监听连接:listen()

用于服务器监听连接请求。

int listen(int sockfd, int backlog);
  • 功能:在套接字ID上监听连接。
  • 参数
    • sockfd:套接字ID。
    • backlog:允许三次握手的排队数。
  • 返回值:成功返回0,失败返回-1。
接受连接:accept()

用于服务器接受客户端连接。

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  • 功能:从监听队列中取出有效客户端连接。
  • 参数
    • sockfd:套接字ID。
    • addr:客户端地址结构指针,可设为NULL忽略地址信息。
    • addrlen:地址长度指针,需设置为sizeof(struct sockaddr)
  • 返回值:成功返回新通信套接字ID,失败返回-1。
接收数据:recv()

用于接收数据。

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • 功能:从套接字接收数据到缓冲区。
  • 参数
    • sockfd:通信套接字ID(服务器为accept()返回的ID,客户端为socket()返回的ID)。
    • buf:存储数据的缓冲区。
    • len:要接收的数据长度。
    • flags:接收方式,0表示阻塞接收。
  • 返回值:成功返回接收数据长度(≤len),失败返回-1。
发送数据:send()

用于发送数据。

int send(int sockfd, const void *msg, size_t len, int flags);
  • 功能:从缓冲区发送数据到套接字。
  • 参数
    • sockfd:通信套接字ID(同上)。
    • msg:要发送的数据指针。
    • len:要发送的数据长度。
    • flags:发送方式。
  • 返回值:成功返回发送数据长度,失败返回-1。
连接服务器:connect()

用于客户端连接服务器。

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 功能:向目标主机发起连接请求。
  • 参数
    • sockfd:本地套接字ID。
    • addr:目标主机地址结构指针。
    • addrlen:地址长度。
  • 返回值:成功返回0,失败返回-1。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 14:18:04

SMUDebugTool:解锁AMD处理器性能潜力的终极调试指南

SMUDebugTool:解锁AMD处理器性能潜力的终极调试指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…

作者头像 李华
网站建设 2026/5/19 9:07:07

LosslessCut:告别重编码,体验真正的无损视频剪辑革命

还在为传统视频编辑软件导致的画质损失而烦恼吗?LosslessCut这款革命性的无损视频处理工具,让你在不损失任何画质的情况下完成专业级的视频编辑。无论是从长视频中提取精彩片段,还是为不同平台优化视频格式,这款被誉为"音视频…

作者头像 李华
网站建设 2026/6/10 5:38:27

SteamCMD容器化部署终极指南:快速搭建游戏服务器环境

SteamCMD命令行工具是游戏服务器管理的利器,通过Docker容器化部署可以大幅简化安装流程和环境配置。本指南将帮助您快速掌握使用SteamCMD容器镜像搭建稳定游戏服务器环境的完整方案。 【免费下载链接】steamcmd Dockerfile for automated build of a SteamCMD insta…

作者头像 李华
网站建设 2026/6/10 11:11:42

java计算机毕业设计线上考试系统 基于SpringBoot的在线无纸化考试平台 Web端智能题库与远程测评系统

计算机毕业设计线上考试系统3r6e29(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。疫情把“考场”搬到屏幕前,高校、培训机构、企业内训都在寻找零接触、高并发、防作…

作者头像 李华
网站建设 2026/6/10 7:43:41

2024年Windows透明任务栏终极指南:5分钟让你的桌面焕然一新

2024年Windows透明任务栏终极指南:5分钟让你的桌面焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Wind…

作者头像 李华
网站建设 2026/6/10 11:09:36

Pony V7:AuraFlow架构角色生成模型深度解析

Pony V7:AuraFlow架构角色生成模型深度解析 【免费下载链接】pony-v7-base 项目地址: https://ai.gitcode.com/hf_mirrors/purplesmartai/pony-v7-base Pony V7作为基于AuraFlow架构的新一代角色生成模型,凭借多风格支持、跨物种生成能力及自然语…

作者头像 李华