<JavaEE> 协议格式 -- 传输层协议 TCP

news/2024/5/17 18:20:36 标签: java-ee, tcp, 网络协议

目录

一、TCP协议格式长啥样?

二、TCP协议属性解释

1)源端口号/目的端口号

2)序号/确认序号

3)TCP报头长度

4)保留位

5)标志位

6)窗口大小

7)校验和

8)紧急指针

9)选项

10)数据

三、TCP协议通讯的特点

四、TCP协议和UDP协议的应用场景对比

五、基于TCP的应用层协议


一、TCP协议格式长啥样?

二、TCP协议属性解释

1)源端口号/目的端口号

指数据发送端和数据接收端端口号,各占16个bit位。

2)序号/确认序号

序号用于标识数据包在传输过程中的位置,每一个数据包的序号都是唯一的。
接收端收到数据包后,会对序号进行确认并记录,以确保数据传输的完整性。同时,计算确认序号,将确认序号填入应答报文中。
确认序号用于接收端向发送端确认已接受的数据包的序号和指示下一个数据包序号。
序号和确认序号就是一系列具有大小关系的整数,描述了数据的先后顺序。
序号和确认序号各占32个bit位。

3)TCP报头长度

TCP报头长度这个属性占4个bit位,每个bit位指代4个字节。
TCP报头的长度是不固定的,最短20字节,根据选项内容,最长为60字节。

4)保留位

预留6个bit位,没有实际内容。

5)标志位

标志位名说明(6个标志位各占一个bit位,使用0和1表示)
URG紧急标志,表示紧急指针是否有效。
ACK确认标志,表示发来的数据已确认接收无误。
PSH提示接收端应用程序立刻从TCP缓冲区中把数据读取走。
RST复位报文段标志,用于请求重新建立连接。
SYN同步报文段标志,用于请求建立连接。
FIN结束报文段标志,用于通知对端,本端将结束通讯。

6)窗口大小

占16个bit位。用于表示接收端可以接受的数据量,用于控制发送端和接收端之间的数据传输速度。
可以动态调整,用以平衡发送端和接收端的传输速度。

7)校验和

占16个bit位。由发送端填充,接收端使用CRC校验,校验不通过则认为数据有误。
校验内容既包括首部,也报过数据(荷载)部分。

8)紧急指针

占16个bit位。用于标识紧急数据,通知接收端优先处理紧急数据。

9)选项

占40字节。选项主要包括多种可选的扩展选项。
这些选项可以增强TCP协议的可靠性和灵活性,但也增加了协议的复杂度和字节长度。
选项包括:4位首部长度属性的扩展因子、16位窗口大小属性的窗口扩展因子等。

10)数据

应用层数据包,即荷载。是字节流数据。

三、TCP协议通讯的特点

<1> 有连接
通信时会先建立连接,存储对端信息。
<2> 可靠传输
有确认和重传机制,发送数据后会期待确认应答。
<3> 面向字节流
使用字节流传输数据,读写灵活,但要注意处理好数据边界问题。
<4> 全双工
使用一个连接,既可以发送又可以接收数据。

四、TCP协议和UDP协议的应用场景对比

TCP协议和UDP协议有各自的应用领域。
TCP协议适用于有可靠传输要求,传输数据包较大的情况。TCP适用于绝大部分场景,但不支持广播(增加应用层代码可以实现)。
UDP适用于要求高速传输和实时性要求较高的通信领域,且天然支持广播。

五、基于TCP的应用层协议

基于TCP的应用层协议包括:HTTP、HTTPS、SSH等。

阅读指针 -> 《 TCP 的通信机制 -- TCP如何确保可靠及高效传输?》

<JavaEE> TCP 的通信机制 -- 确认应答 和 超时重传-CSDN博客介绍 TCP 的通信机制,确认应答和超时重传。https://blog.csdn.net/zzy734437202/article/details/135228875


http://www.niftyadmin.cn/n/5288641.html

相关文章

git将其他分支的提交合并到当前分支

1. 执行以下命令&#xff0c;将源分支的 commit 合并到当前分支&#xff1a; git cherry-pick <commit_hash> 将 <commit_hash> 替换为要合并的 commit 的实际哈希值。 Git 将在当前分支上应用与指定 commit 相同的更改。 2. 如果存在冲突&#xff0c;请解决冲突…

竞赛保研 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习

文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xf…

十一.MyBatis的缓存

11.1缓存介绍 为什么使用缓存&#xff1f; 使用缓存的主要原因是为了提高应用程序的性能和响应速度。缓存可以存储经常访问的数据或计算结果&#xff0c;从而避免重复进行相同的计算或查询数据库等耗时的操作。通过使用缓存&#xff0c;你可以减少对原始数据源的访问次数&…

(四) ClickHouse 中使用 `MaterializedMySQL` 引擎单独同步 MySQL 数据库中的特定表(例如 `aaa` 和 `bbb`)

要在 ClickHouse 中使用 MaterializedMySQL 引擎单独同步 MySQL 数据库中的特定表&#xff08;例如 aaa 和 bbb&#xff09;&#xff0c;您可以使用 TABLE OVERRIDE 功能。这个功能允许您指定要同步的特定表&#xff0c;同时忽略其他表。以下是步骤说明&#xff1a; 1. 启用 M…

Android 13 限制原生浏览器(Browser)访问某个网址或只允许访问某个网址

介绍 客户需要只允许访问某些网站或限制某几个网站的访问。 修改 首先我们先限制浏览器加载页面的地方,这里我们实际上只是限制了网址中的关键字访问&#xff0c;例如www.baidu.com 我在数组中屏蔽了关键字baidu 检测到baidu的字样就return true掉&#xff1b;正常屏蔽网址我…

论文润色降重服务推荐 神码ai

大家好&#xff0c;今天来聊聊论文润色降重服务推荐&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文润色降重服务推荐――专业机构助力提升论文质量 …

前端axios与python库requests的区别

当涉及到发送HTTP请求时&#xff0c;Axios和Python中的requests库都是常用的工具。下面是它们的详细说明&#xff1a; Axios&#xff1a; Axios是一个基于Promise的HTTP客户端&#xff0c;主要用于浏览器和Node.js环境中发送HTTP请求。以下是Axios的一些特点和用法&#xff1…

如何让机器人具备实时、多模态的触觉感知能力?

人类能够直观地感知和理解复杂的触觉信息&#xff0c;是因为分布在指尖皮肤的皮肤感受器同时接收到不同的触觉刺激&#xff0c;并将触觉信号立即传输到大脑。尽管许多研究小组试图模仿人类皮肤的结构和功能&#xff0c;但在一个系统内实现类似人类的触觉感知过程仍然是一个挑战…