JAVAEE之网络原理(2)_传输控制协议(TCP)、概念、格式、确认应答及超时重传机制

前言

 在上一节中,我们介绍了 UDP (用户数据报) 的相关知识,在这一节中我们将继续介绍传输层中另一种更为重要的协议。


一、什么是TCP协议?

1.1 TCP 基本概念

 TCP协议全称:传输控制协议(TCP,Transmission Control Protocol),它是是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。TCP通信一般指客户端和服务端通信。
 在Java中,一般使用SocketServer和Socket这两个类实现TCP通信,前者为服务端的一个实体,而后者可以认为是一种对连接的封装。一般来说,需要先启动服务端,然后客户端才能向服务端发送连接请求,连接成功后,两端就可以互相通信了。

1.2 TCP协议段格式

在这里插入图片描述

源端口(source port ) 和 目的端口(destination port)

 它们的长度都为 16 位,分别表示报文 发送方 的端口号 和 接收方 的端口号。

序号

 序号( sequence number )字段,长度为 32 位,表示数据首字节的序号。在三次握手阶段,SYN 指令也是通过该字段,将本端选定的 起始序号 告诉接收方。

确认号

 确认号 ( acknowledgement number )字段,长度为 32 位。它表示已确认收到的数据序号,它的值为:已收到数据最后一个字节的序号加一,即接收方期望进一步接收的数据序号。

首部长度

 首部长度 ( header length )字段,长度为 4 位,表示 TCP 报文首部的长度,也可称为 数据偏移 ( data offset )。跟 IP 协议一样,TCP 首部长度字段也不是以字节为单位,而是以 32 位字(4字节)为单位。

字( word )是计算机领域中的一个概念,表示由一系列比特组成的数据单位。字的长度可长可短,常见的有 8 位字、16 位字以及 32 位字等等。

 这个字段长度为 4 位,最大值为 2 4 − 1 = 15 {{2}^{4}}-1=15 241=15 。因此,TCP 头部最大长度只能达到 4 × 15 = 60 4\times 15=60 4×15=60 字节。

6位标志位

  • URG:紧急指针是否有效;
  • ACK:确认号是否有效;
  • PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走;
  • RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段
  • SYN:请求建立连接;我们把携带SYN标识的称为同步报文段
  • FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段。

窗口大小

 窗口大小( window size )字段长度为 16 位,表示当前报文发送者接收窗口的大小,单位一般是 字节 。接收窗口表示接收方还能接收的数据大小,用于实现 TCP 流量控制机制。

校验和

 校验和( checksum )发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的检验和不光包含TCP首部,也包含TCP数据部分。除此之外,TCP 还会在报文段前面拼接一个 IP 伪头部,同时参与校验和计算。

16位紧急指针

标识哪部分数据是紧急数据;

二、TCP原理

 TCP对数据提供的管控机制,主要体现在两个方面:安全和效率。这些机制和多线程的设计原则类似:保证数据传输安全的前提下,尽可能的提高传输效率

1. 确认应答机制(安全机制)

在这里插入图片描述
TCP将每个字节的数据都进行了编号。即为序列号。
在这里插入图片描述
 每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发。

2.2 超时重传机制(安全机制)

在这里插入图片描述

主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;
如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发。

但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了;
在这里插入图片描述
 因此主机B会收到很多重复数据。那么TCP协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉。这时候我们可以利用前面提到的序列号,就可以很容易做到去重的效果。
那么,如果超时的时间如何确定?

  • 最理想的情况下,找到一个最小的时间,保证 “确认应答一定能在这个时间内返回”;
  • 但是这个时间的长短,随着网络环境的不同,是有差异的;
  • 如果超时时间设的太长,会影响整体的重传效率;
  • 如果超时时间设的太短,有可能会频繁发送重复的包。

TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。

  • Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制,每次判定
    超时重发的超时时间都是500ms的整数倍;
  • 如果重发一次之后,仍然得不到应答,等待 2*500ms 后再进行重传;
  • 如果仍然得不到应答,等待 4*500ms 进行重传。依次类推,以指数形式递增;
  • 累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接。

2.3 连接管理机制(安全机制)

在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接

三次握手

在这里插入图片描述
握手过程可以简化为下面的四次交互:

  1. clien 端首先发送一个 SYN 包告诉 Server 端我的初始序列号是 X;
  2. Server 端收到 SYN 包后回复给 client 一个 ACK 确认包,告诉 client 说我收到了;
  3. 接着 Server 端也需要告诉 client 端自己的初始序列号,于是 Server 也发送一个 SYN 包告诉 client 我的初始序列号是Y;
  4. Client 收到后,回复 Server 一个 ACK 确认包说我知道了。

总结

 以上就是今天要讲的内容,本文仅仅简单介绍了传输控制协议(TCP)的相关概念,基本报文格式。此外,还介绍了TCP原理,包括确认应答机制,超时重传机制,并且还简单介绍了连接管理机制中的三次握手,在本栏的下一节我们将会继续介绍TCP原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础语法 002 - 4 字符串

1 字符串 字符串:引号括起来的数据类型 # 双引号 a "yuze wang"# 单引号 a ’yuze wang‘# 三引号 a ’‘’yuze‘‘’ a """yuze"""注意:所有格式表示都是半角,全角会报错 1.1 引号表示 …

HSE在企业中的重要性:健康、安全与环境的全面保障

在当今企业运营中,健康、安全与环境(HSE)管理体系已经成为不可或缺的一部分。HSE管理不仅保护员工的健康和安全,还致力于环境的可持续发展。本文将简洁明了地阐述HSE在企业中的关键作用及其带来的综合效益。 员工健康保护 健康风…

深入理解Qt状态机的应用(一)

Qt的状态机框架提供了一种管理复杂系统状态的方法,它基于经典的有限状态机(FSM)理论。这种框架在开发涉及多种状态和状态之间需要明确转换的应用程序时特别有用,如用户界面交互、网络协议、游戏开发等场景。 什么是有限状态机&a…

手写一个JSON可视化工具

前言 JSON 平时大家都会用到,都不陌生,今天就一起来实现一个 JSON 的可视化工具。 大概长成下面的样子: 树展示 相比于现有的一些 JSON 格式化工具,我们今天制作的这个小工具会把 JSON 转为树去表示。其中: 橙色标…

跟TED演讲学英文:A tale of mental illness -- from the inside by Elyn Saks

A tale of mental illness – from the inside Link: https://www.ted.com/talks/elyn_saks_a_tale_of_mental_illness_from_the_inside Speaker: Elyn Saks Date: June 2012 文章目录 A tale of mental illness -- from the insideIntroductionVocabularySummaryTranscriptA…

全新AI图像擦处理工具上线,手机电脑版资源合集下载

下载地址: 安卓手机版: 点击下载 苹果手机版: 点击下载 电脑版(支持Mac和Windows): 点击下载 图像处理技术在当今迅速发展,为了满足广大用户的需求,我们推出了一款强大的图像优化…

三星S20以上手机中的动态相片及其分解

三星S20以后的相机,相机拍出来的图片,用三星手机自带的“相册”打开之后,还会有“查看动态照片”的选项,点击之后就能查看拍照片时前后2秒左右的视频! 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…

yum的概念、相关命令、ftp http部署步骤;NFS共享文件操作步骤

目录 yum 配置文件 缓存功能操作步骤 创建并配置本地仓库文件 yum相关命令 yum install __ yum repolist yum list __ yum info __ yum search __ yum whatprovides __ yum remove __ yum -y update __ yum history yum grouplist yum groupinstall "__&q…

前沿技术丨实车测试必须注意的3个方面

在汽车网络通信中,ECU零部件测试、域/系统测试在测试条件上存在局限性,往往由于无法完全仿真工作环境、无法排除特殊干扰因素、异常场景预估不充分,导致在集成到整车后才新暴露出一些功能、性能、兼容性问题。 实车通信测试是作为测试验证的…

DolphinScheduler日志乱码、worker日志太多磁盘报警、版本更新导致不兼容怎么办?

作者 | 刘宇星 本文作者总结了在使用Apache DolphinScheduler过程中遇见过的常见问题及其解决方案,包括日志出现乱码、worker日志太多磁盘报警、版本更新导致不兼容问题等,快来看看有没有困扰你想要的答案吧! DolphinScheduler集群环境有多…

实验室装修公司教你在实验室装修设计中要注意哪些细节

实验室装修设计是一项高度专业化的工作,涉及到空间布局、材料选择、家具配置、施工质量和验收标准等多个方面。一个成功的实验室装修项目,不仅要满足实验操作的需求,还要确保人员的安全和舒适。以下是广州实验室装修公司小编分享的在实验室装…

github如何删除仓库?

之前练习Git上传的时候,在Github创建的测试项目已经不需要了,所以要如何删除? 首先进入Github主页,可以直接点击左侧1处的仓库,也可以点击2处的头像,再选择进入那个仓库。 我选择删除最后一个FlashAndShan…

高压线防外破警示灯在电力安全发挥的作用_鼎跃安全

高压输电线路往往跨越城市、乡村和野外,覆盖范围广泛。随着城乡建设和交通运输的快速发展,高压线路周围的活动频繁,外部破坏风险增加。车辆撞击电线杆、施工机械误碰线路以及人为破坏等事件时有发生,严重影响电力供应的稳定性和安…

基于javassm实现的物流管理系统

开发语言:Java 框架:ssm 数据库:mysql 系统页面展示 4.1登陆页面 平台登录:主要是做权限分配和安全限制等操作。可以把快递员,客户,派单员等人员角色区分开来。 4.2注册页面 用户注册界面:…

如何在宝塔中使用命令行执行命令

一、 进入宝塔,找到网站然后点击根目录 二、进入项目中,然后点击 终端 三、如果这里会弹出输入密码的框,那就是需要你输入一下你服务器的 账号密码,然后就登录进去了,可以在这里直接执行命令即可,比如我这…

RERCS系统开发实战案例-Part08 FPM 应用程序的表单组件(From UIBB)与列表组件(List UIBB)组合的创建

1、新建From UIBB的FPM Application的快速启动面板 备注:该步骤可第一步操作,也可最后一步操作,本人习惯第一步操作。 1)使用事务码 LPD_CUST,选择对应的角色与实例进入快速启动板定制页面; 2&#xff09…

函数依赖-函数依赖、平凡函数依赖、完全与部分函数依赖、传递函数依赖

一、引言 函数依赖是关系模式中属性与属性之间存在的一种重要数据依赖 1、将关系模式R的模式结构改为 R(SNO,CNO,SN,SD,DD,GRADE) 并对属性列进行重命名 R(学生学号&#xff0c…

力扣hot100:31. 下一个排列

LeetCode:31. 下一个排列 字典序的大小排序: 从前往后对比,如果先出现更小字符的,字典序更小,如果有个字符串结束了,则它更小。string s "112233"和string t "1122334",…

无代码爬虫八爪鱼采集器-如何采集携程网指定酒店差评信息

场景描述:有一些酒店会分析同行的差评原因,以便提前做预案,避免自己酒店也放同样的错误。他们通过采集携程网指定酒店的提取中差评,使用的采集工具为无代码爬虫软件八爪鱼采集器免费版,下载链接:1.软件分享…

【PyQt5】一文向您详细介绍 self.sender() 的作用

【PyQt5】一文向您详细介绍 self.sender() 的作用 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&a…