论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
TCP传输控制协议的简谈
TCP传输控制协议的简谈
前进之路
论坛元老
|
2025-4-8 01:41:53
|
显示全部楼层
|
阅读模式
楼主
主题
1582
|
帖子
1582
|
积分
4746
1.说明
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节省的传输层通讯协议。
1.1 TCP特点
基于流的方式;
面向连接;
可靠通讯方式;
在网络状态不佳的时候尽量降低系统由于重传带来的带宽开销;
通讯连接维护是面向通讯的两个端点的,而不考虑中间网段和节点。
2.简历连接
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
3.断开连接
建立一个连接必要三次握手,而停止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。详细过程如下图所示。
某个应用进程首先调用close,称该端执行“自动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
吸取到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
一段时间后,吸取到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
吸取这个最终FIN的原发送端TCP(即执行自动关闭的那一端)确认这个FIN。
留意:
FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
复制代码
既然每个方向都必要一个FIN和一个ACK,因此通常必要4个分节。
留意:
“通常”是指,某些情况下,步骤1的FIN随数据一起发送,别的,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。
在步骤2与步骤3之间,从执行被动关闭一端到执行自动关闭一端活动数据是可能的,这称为“半关闭”(half-close)。
当一个Unix进程无论志愿地(调用exit或从main函数返回)还黑白志愿地(收到一个停止本进程的信号)停止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
无论是客户还是服务器,任何一端都可以执行自动关闭。通常情况是,客户执行自动关闭。
4.发送
当调用Send函数时,实际上在Socket内部会做以下事项:
检查Send数据的有效性。例如是否为null,长度是否为0等。
检查发送缓存区是否有空闲,如果有,将必要发送的数据复制到缓存区,并且返回已复制的字节数。如果没有空闲,则会一直等待。
通过上述两个步骤,我们会明白,Send函数的返回,仅仅是包管数据被复制到了发送缓存区,而不是已被吸取方收到。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
前进之路
论坛元老
这个人很懒什么都没写!
楼主热帖
UWP/WinUI3 Win2D PixelShaderEffec ...
低代码平台 - 危险的赌注
后台性能测试规范
小小项目-博客系统 - 服务器版本 - jav ...
端午假期整理了仿天猫H5 APP项目vue.js ...
Docker 基础 - 1
Python3程序捕获Ctrl+C终止信号 ...
实用五步法教会你指标体系的设计与加工 ...
Fastjson反序列化
Redis常见使用场景
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表