TCP连接的建立与终止-程序员宅基地

技术标签: 三次握手  四次挥手  TCP序列号  学习笔记  半关闭  TCP连接  计算机网络  

TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此之间建立连接。虽然TCP和UDP使用相同的网络层(IPv4或IPv6),但是TCP给应用程序提供了一种与UDP完全不同的服务——面向连接(connection-oriented)、字节流传输。

TCP可靠性

TCP提供了一个字节流接口,TCP必须把一个发送应用程序的字节流转换成一组IP可以携带的分组,这被称为组包(packetization)。这些分组包含序列号,该序列号在TCP中实际代表了每个分组的第一个字节在整个数据流中的字节偏移,而不是分组号,这允许分组在传送中是可变大小的,并允许它们组合,称为重新组包(repacketization)。应用程序数据被打散成TCP认为的最佳大小的块来发送,一般使得每个报文段按照不会被分片的单个IP数据报的大小来划分,这一点与UDP不同。

TCP维持了一个强制的校验和,该校验和涉及其头部、任何相关应用程序数据和IP头部的所有字段。这是一个端到端的伪头部,它用于检测传送中引入的比特差错。如果一个带无效校验和的报文段到达,那么TCP会丢弃它。

当TCP发送一组报文段时,它通常设置一个重传计时器,等待对方的确认接收。TCP不会为每个报文段设置一个不同的重传计时器。相反,发送一个窗口的数据,它只设置一个计时器,当ACK到达时再更新超时。如果一个确认没有及时接收到,这个报文段就会被重传。

当TCP接收到连接的另一端数据时,它会发送一个确认。这个确认可能不会立即发送,而一般会延迟片刻。TCP使用的ACK是累积的,从某种意义来讲,一个指示字节号N的ACK暗示着所有直到N的字节(不包含N)已经被成功接收了。这对于ACK丢失来说带来了一定的鲁棒性——如果一个ACK丢失,很有可能后续的ACK就足以确认前面的报文段了。

TCP给应用程序提供一种双工服务——数据可向两个方向流动,两个方向互相独立。因此,连接的每个端点必须对每个方向维持数据流的一个序列号。一旦建立了一个连接,这个连接的一个方向上的包含数据流的每个TCP报文段也包含了相反方向上的报文段的一个ACK。每个报文段也包含一个窗口通告以实现相反方向上的流量控制。因此,一个完整的TCP连接是双向和对称的,数据可以在两个方向上平等地流动。

使用序列号,一个TCP接收端可丢弃重复的报文段和记录以杂乱次序到达的报文段。因为TCP是一个字节流协议(没有边界记录),所以TCP绝不会以杂乱的次序给应用程序发送数据。因此,TCP接收端可能会被迫先保持一个大序列号的数据不交给应用程序,直到缺失的小序列号的报文段(一个“洞”)被填满。

TCP头部

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37653144/article/details/82216283

智能推荐

tp 双击唤醒 最终方案 实现流程_高通平台tp双击唤醒怎么设置-程序员宅基地

文章浏览阅读4.2k次。双击唤醒_高通平台tp双击唤醒怎么设置

AWS EBS快照创建_aws自动创建快照-程序员宅基地

文章浏览阅读502次。EBS快照创建参数选择&填写资源类型:选择存储卷: 填写需要备份的EBS的卷ID描述: 填写此次快照的描述,方便识别标签: 可以编辑标签,标注这个快照属于哪个EBS卷或者属于卷挂载的机器信息参考文档创建Amazon EBS快照:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-creat..._aws自动创建快照

tp5 宝塔open_basedir restriction in effect 错误_thinkphp5 file_put_contents(): open_basedir restri-程序员宅基地

文章浏览阅读707次。_thinkphp5 file_put_contents(): open_basedir restriction in effect. file(/pub

OkHttp保存和使用cookie_okhttpclient cookie-程序员宅基地

文章浏览阅读4.6k次。1. client.cookieJar()用来设置cookie OkHttpClient okHttpClient = new OkHttpClient.Builder() //打印日志 .addInterceptor(interceptor) //设置Cache目录 ._okhttpclient cookie

【gitlab-runner】gitlab-runner安装注册到https的gitlab_为什么gitlab-runner要使用certificates-程序员宅基地

文章浏览阅读1w次。gitlab是一个代码托管工具,开源。gitrunner是一个持续集成工具(CI CD),只要gitlab代码有提交,gitlab-runner就会自动部署。很方便。gitlab-runner安装过程记录centos7 安装下载安装包sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/v12.8.0/binaries/gitlab-runner-linux._为什么gitlab-runner要使用certificates

APS系列:二_frepple aps-程序员宅基地

文章浏览阅读6.4k次,点赞7次,收藏23次。距上篇居然快一年了,汗。。。阶段总结真的不能停,否则过阵子就彻底淡忘了。年纪渐长,记性也指数下降。话说APS这个话题我已脱手半年多,懒是病,得治!APS在工业界、特别是制造行业是非常重要和核心的,可惜在学术界并不是研究热点。除了少数几个贼贵的行业软件,并不能看到太多这个信息资源共享时代带来的惊喜和改变。虽然行业软件在算法和性能上确实更下功夫,但以我个人的理解,当下更多企业需要的是先迈出第一步,..._frepple aps

随便推点

golang 创建函数基础语法_go函数里面创建函数-程序员宅基地

文章浏览阅读364次。为什么使用函数1:减少代码冗余2:提高代码维护程度基本语法func 函数名 (形参列表) (返回值列表) { 执行语句。。。。 return 返回值列表}package mainimport( "fmt")func cal(n1 float64,n2 float64,label byte) float64 { var res float64 switch label { case '+': res = n..._go函数里面创建函数

C语言数据结构——单链表(不带头)_不带头结点的单链表的元素的创建、查找、插入、删除等基本操作-程序员宅基地

文章浏览阅读1.9k次,点赞12次,收藏29次。一、单链表:1.1 概念、1.2 链表结构分析、1.3 单链表的基本操作、1.4 单链表的基本操作源码。_不带头结点的单链表的元素的创建、查找、插入、删除等基本操作

无法安装64位版本的office解决方案_无法安装office此安装适用于-程序员宅基地

文章浏览阅读5.6w次,点赞23次,收藏43次。文章目录问题描述出现原因解决方案卸载清除注册表重新安装本文小结问题描述无法安装64位版本的office,因为在您的PC上找到以下32位程序:请卸载所有32位office程序,然后重试安装64位office。如果想要安装32位office,请运行32位安装程序。出现原因 当我们安装64位的Excel的时候,由于我们电脑安装了32位的Excel,所以,安装会出错, 我们需要卸载32位E..._无法安装office此安装适用于

【项目技术介绍篇】若依项目代码文件结构介绍_若依管理系统左侧菜单代码在哪里-程序员宅基地

文章浏览阅读1.4k次,点赞10次,收藏25次。由于本专栏项目实战学习,是以若依开源项目RuoYi-Cloud为示例。所以,本文介绍一下若依开源项目RuoYi-Cloud中若依管理后台系统的代码文件结构,以管理后台系统中的岗位管理模块为示例。若依项目RuoYi-Cloud简介若依项目RuoYi-Cloud 是一个 Java EE 企业级的开源免费的快速开发平台,是一个基于Spring Boot、Spring Cloud & Alibaba的微服务的权限管理系统。_若依管理系统左侧菜单代码在哪里

深度学习与神经网络:数据集分析与预处理-程序员宅基地

文章浏览阅读777次,点赞25次,收藏16次。1.背景介绍深度学习是人工智能领域的一个重要分支,它主要通过神经网络来实现模型的训练和预测。深度学习的核心思想是通过多层次的神经网络来学习数据的复杂特征,从而实现更高的预测准确性。在这篇文章中,我们将讨论深度学习与神经网络的数据集分析与预处理。深度学习的发展历程可以分为以下几个阶段:2006年,Hinton等人提出了深度神经网络的重要性,并提出了一种称为“Dropout”的训练技术,...

vmware虚拟机挂载Windows磁盘的两种方法-程序员宅基地

文章浏览阅读5.2k次。第一种vmware虚拟机通过ntfs-3g挂接windows盘1.共享windows盘虚拟机设置——>添加硬盘——>选择IDE——>使用物理磁盘——>选择本地盘(单分区)——>默认完成添加2.上传ntfs-3g-2017.3.23-6.el7.x86_64.rpm安装:rpm -ivh ntfs-3g-2017.3.23-6.el7.x86_64.rpm3.挂..._vm虚拟机怎么把系统盘挂到虚拟系统中

推荐文章

热门文章

相关标签