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

news2024/11/24 19:46:02

前言

 在上一节中,我们介绍了 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.coloradmin.cn/o/1835711.html

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

相关文章

redhat 7.8修改网卡名称,最佳实践

背景&#xff1a; 因业务需求&#xff0c;需要将新创建的redhat7.8服务器的网卡名称修改为ens160&#xff0c;目前服务器的网卡名称是ens192。 一、修改网卡配置信息&#xff1a; 查看当前网卡信息&#xff0c;并获取到网卡到Mac地址 [rootlocalhost ~]# ip addr 1: lo: <L…

【CT】LeetCode手撕—103. 二叉树的锯齿形层序遍历

目录 题目1- 思路2- 实现⭐103. 二叉树的锯齿形层序遍历——题解思路 2- ACM实现 题目 原题连接&#xff1a;103. 二叉树的锯齿形层序遍历 1- 思路 二叉树的层序遍历&#xff0c;遇到奇数时&#xff0c;利用 Collections.reverse() 翻转即可 2- 实现 ⭐103. 二叉树的锯齿形层…

QT修改界面图标及exe程序图标

目录 步骤1. 添加图标文件2. 添加保存图标变量3. 窗口启动初始化图标文件4. 构建后即可完成图标的更改 步骤 1. 添加图标文件 如下&#xff0c;添加一个名为 favicon.ico 的文件到.pro 工程文件所在的目录中。 2. 添加保存图标变量 RC_ICONS是一个变量&#xff0c;它被用于存储…

项目准备和启动

1.什么是项目建议书&#xff1f; 2.项目建议书的内容 3.可行性分析方法 4.项目组织结构&#xff08;职能型 项目型 矩阵型&#xff09; 5.项目管理层决策层执行层之间的关系 6.软件项目的可行性分析包括哪几个方面&#xff1f;影响决策的关键因素又是什么&#xff1f; 软件项目…

88. 合并两个有序数组(简单)

88. 合并两个有序数组 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;88. 合并两个有序数组 2.详细题解 两个数组均有序&#xff08;非递减&#xff09;&#xff0c;要求合并两个数组&#xff0c;直观的思路&#xff0c;借助第三个数…

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020&#xff0c;基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV&#xff0c;主要用于优化彩色视频信号的传输。与RGB视频信号传输相比&#xff0c;它最大的优点在于只需占用极少的频宽&#xff08;RGB要求三个独立的视频信号同时传输&#xff09;。其…

栈(Stack)

目录 一.栈&#xff08;Stack&#xff09; 1.概念 2.栈的使用 3.栈的模拟实现 二.栈相关习题 1.逆波兰表达式求值 &#xff08;1&#xff09;链接 &#xff08;2&#xff09;解析 &#xff08;3&#xff09;题解 2.括号匹配 &#xff08;1&#xff09;链接 &#xff…

【UIDynamic-动力学-UICollisionBehavior-碰撞行为-创建边界 Objective-C语言】

一、接下来,我们来说一个,碰撞的创建边界, 1.我们刚才呢,仅仅是让self.view,来变成边界, 实际上,这个边界呢,还可以自己去创建, 我们把之前的代码备份一份儿,改个名儿:05-碰撞行为-创建边界, 选中这一段儿,先删掉, command + R, 好,这一段儿,删掉啊, 接下来…

Altair 助力优化摩托车空气动力学性能,实现最佳的整流罩设计

案例简介 整流罩是绝大多数摩托车的重要组成部分&#xff0c;旨在提高车辆的空气动力学性能和稳定性。Altair 与 KTM 公司员工组成的项目团队&#xff0c;针对摩托车整流罩空气动力学方面的学生项目&#xff0c;展开了密切合作。 项目任务主要是对摩托车整流罩设计进行比较&…

基于QT和C++实现的中国象棋

一&#xff0c;源码 board.h #ifndef BOARD_H #define BOARD_H#include <QWidget> #include "Stone.h"class Board : public QWidget {Q_OBJECT public:explicit Board(QWidget *parent 0);bool _bRedTurn; // 红方先走int _currentPlayer; // 当前玩家&…

电子期刊制作秘籍:如何让你的出版物脱颖而出?

​如何让你的电子期刊在众多出版物中脱颖而出&#xff0c;吸引读者的目光呢&#xff1f;在微信公众号这个平台上&#xff0c;让你的电子期刊内容更具吸引力、专业性和创新性&#xff0c;是至关重要的。下面&#xff0c;我将教你制作电子期刊一些方法&#xff0c;助你打造出一本…

在得物的小程序生态实践

一、前言 提起微信小程序&#xff0c;相信所有人都不陌生&#xff0c;下面这个典型使用场景你一定经历过&#xff1a; 餐馆落座——微信扫桌角小程序码——使用微信小程序点餐&#x1f354; 微信小程序&#xff08;下文简称&#xff1a;小程序&#xff09;作为一种在微信平台…

怎么样判断真假单北斗

国产化替代正在中国各行各业逐步提升中&#xff0c;特别涉及重点产业——国家安全&#xff01; 只有仅支持B1I和B3信号的芯片才是真正的单北斗芯片。但凡你支持了B1C、B2a、B2b中的一个就是假的单北斗。 B1C/L1/E1、B2a/ L5/E5a、B2b/G3/E5b这些频点与其他GNSS系统是完全重合的…

举个栗子!Tableau 技巧(277):创建径向 WIFI 信号图

之前为大家分享了 &#x1f330;&#xff1a;学做径向柱状图&#xff08;Radial Column Chart&#xff09;。在此基础上&#xff0c;我们又做了进一步的延展&#xff1a;径向 WIFI 信号图。 它的用法和径向柱状图一致&#xff0c;区别在于它将柱体分切成多个弧线&#xff08;内…

豆包高质量声音有望复现-Seed-TTS

我们介绍了 Seed-TTS&#xff0c;这是一个大规模自回归文本转语音 &#xff08;TTS&#xff09; 模型系列&#xff0c;能够生成与人类语音几乎没有区别的语音。Seed-TTS 作为语音生成的基础模型&#xff0c;在语音上下文学习方面表现出色&#xff0c;在说话人的相似性和自然性方…

pg表空间和mysql表空间的区别

一、表空间的定义 1、在pg中表空间实际上是为表指定一个存储的目录。并且在创建数据库时可以为数据库指定默认的表空间。创建表和索引时可以指定表空间&#xff0c;这样表和索引就可以存储到表空间对应的目录下了。 在pg中一个库中可以有多个表空间&#xff0c;一个表空间可以…

Linux实现: 客户端(cli01)通过TCP(或UDP)连接到聊天服务器(serv)进行聊天?(伪代码版本)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

6月17(信息差)

1.马斯克最新预测&#xff1a;未来不再需要手机 将被脑机芯片替代 当地时间6月17日&#xff0c;马斯克高仿号“Not Elon Musk”发帖称&#xff1a;“你会在你的大脑上安装一个Neuralink接口&#xff0c;让你通过思考来控制你的新X手机吗&#xff1f;”对此&#xff0c;马斯克本…

东莞酷得:电子玩具嵌入式方案商

东莞市酷得智能科技有限公司&#xff0c;作为一家专业的玩具底层方案服务商&#xff0c;与国内外多家优秀制造企业有着深度合作&#xff0c;始终坚持以孩子为中心&#xff0c;以创新为动力&#xff0c;为孩子们打造独具特色的玩具产品。公司拥有一支专业的设计团队&#xff0c;…

SSM考研咨询app-计算机毕业设计源码05262

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设考研咨询app。 本设计…