news 2026/4/29 4:07:37

TCP传输控制协议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP传输控制协议

一、服务器客户端模型

CS,client,server 由功能强大的服务器为多个客户端提供集中服务

BS,browser,server 使用标准化浏览器作为统一客户端来访问服务器上的应用

P2P,peer to peer 网络中的每个节点同时作为客户端和服务端,彼此直接共享资源与服务

2.CS与BS的区别

对比维度CSBS
客户端类型专用客户端通用客户端
使用协议应用层标准协议/自定义协议应用层HTTP/HTTPS协议
功能强弱功能相对复杂,可承载高交互、高性能业务功能相对简单,侧重轻量化
资源存储资源存储在本地客户端资源由服务器发送,本地仅临时存储

3.P2P

在 P2P 网络下载工具中,下载初期自身进度为 0%,数据由其他客户端及服务器传输而来;当下载进度达到 90% 时,自身会向新接入的客户端上传已获取的数据,整个过程中,自身兼具下载者与上传者的双重身份,既是客户端,也是服务器。

二、TCP传输控制的特征

1.有链接 表现为三次握手。

2.可靠传输。

3.流式套接字,数据没有边界。连续的,有顺序的。

4.全双工,双缓存区。

5.发送和接受次数不需要对应。

6.有写阻塞 64k

7.如果对方端口断开连接,另一方端口可以感知 四次挥手

三、三次握手与四次挥手

三次握手:1.客户端向服务器发送SYN 报文,发起连接请求,携带初始序列号。
2. 服务器接收后,回复SYN+ACK 报文,确认客户端请求,同时携带自身初始序列号。
3. 客户端接收服务器的 SYN 报文后,发送ACK 报文确认,连接正式建立。

四次挥手:1.主动关闭方向被动关闭方发送FIN 报文,关闭自身发送通道。
2. 被动关闭方回复ACK 报文,确认收到关闭请求。
3. 被动关闭方数据发送完毕后,向主动关闭方发送FIN 报文,关闭自身发送通道。
4. 主动关闭方回复ACK 报文确认,等待超时后彻底断开连接。

四、TCP相关函数

1.int socket(int domain, int type, int protocol); 功能:程序向内核提出创建一个基于内存的套接字描述符 返回值:成功 返回申请的套接字id 失败 -1;
2、int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); 功能:如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地址关联,用于从该接口接受数据
3、 int listen(int sockfd, int backlog); 功能:在参数1所在的套接字id上监听等待链接。 返回值:成功 0 失败 -1
4.int accept(int sockfd, struct sockaddr *addr,socklen_t *addrlen); 功能:从已经监听到的队列中取出有效的客户端链接并接入到当前程序。 返回值:成功 返回一个用于通信的新套接字id; 通信套接字 从该代码之后所有通信都基于该id 失败 -1;
5.ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能:从指定的sockfd套接字中以flags方式获取长度为len字节的数据到指定的buff内存中。 返回值:成功 表示接受的数据长度,一般小于等于len 失败 -1
int send(int sockfd, const void *msg, size_t len, int flags); 功能:从msg所在的内存中获取长度为len的数据以flags方式写入到sockfd对应的套接字中。 返回值:成功 发送的字符长度 失败 -1;
客户端 自动连接服务器。 int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 功能:该函数固定有客户端使用,表示从当前主机向目标主机发起链接请求。 返回值:成功 0 失败 -1;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 9:09:55

Applite:Mac软件管理的终极图形化解决方案

还在为复杂的终端命令而烦恼吗?Applite这款用户友好的GUI macOS应用程序为您提供了一键安装、批量更新和彻底卸载的全新体验。作为Homebrew Casks的图形化界面工具,它让软件管理变得前所未有的简单直观。 【免费下载链接】Applite User-friendly GUI mac…

作者头像 李华
网站建设 2026/4/26 2:38:55

如何用GPT-SoVITS生成带情绪的语音输出?

如何用 GPT-SoVITS 生成带情绪的语音输出? 在虚拟主播直播时突然切换成“愤怒”语气怒斥弹幕,或是心理陪伴机器人轻声细语地安慰用户——这些不再是科幻场景。如今,借助像 GPT-SoVITS 这样的开源语音合成技术,我们已经可以用短短…

作者头像 李华
网站建设 2026/4/23 15:28:32

云顶之弈进阶指南:用悬浮助手告别信息焦虑

每次玩云顶之弈时,你是否也遇到过这样的困境:装备合成公式记不住,羁绊效果搞不清楚,经济运营一团糟?这些问题正是阻碍大多数玩家突破瓶颈的关键因素。今天介绍的这款云顶之弈悬浮助手,正是为了解决这些痛点…

作者头像 李华
网站建设 2026/4/23 12:28:21

7天精通开源字体:从设计新手到专业玩家的蜕变之路

7天精通开源字体:从设计新手到专业玩家的蜕变之路 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 🚀 快速上手:零基础字体应用指南 想要在设计中展…

作者头像 李华
网站建设 2026/4/28 19:36:39

从非结构化到结构化:运用大模型实现高效、准确地医疗文本信息抽取

在数字化医疗时代,医院每天产生海量的非结构化文本数据,包括病历记录、化验报告和影像检查结论等。这些文本中蕴含的患者病史、诊断结果、用药信息和检验数值等关键字段,对临床决策、科研分析和医疗质量管理至关重要。传统的文本信息抽取方法…

作者头像 李华
网站建设 2026/4/28 5:20:18

有源蜂鸣器驱动实战案例:基于STM32的 beep 实现

从“嘀”一声开始:用STM32驱动有源蜂鸣器的实战全解析你有没有过这样的经历?按下设备上的按钮,却不知道操作是否生效;系统报警了,但你正看着屏幕没注意——直到那熟悉的“嘀”一声响起,才意识到状态变了。这…

作者头像 李华