<JavaEE> 协议格式 -- 传输层协议 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位。但并不是只能代表0~65535的数据。它会通过选项中的“窗口大小扩展因子”进行计算,以获取更大的表示范围。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

56.网游逆向分析与插件开发-游戏增加自动化助手接口-通过UI分析自动药水设定功能

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一节内容&#xff1a;自动药水设定功能的逆向分析-CSDN博客 这次是假设没有之前的思路积累的话&#xff0c;怎样去找按钮事件。 通过ui当做切入点去做&#xff0c;就是一个窗口它显示不显示&#xff0c;游戏怎样控制这个…

【unity中使用高度图创建地图】

unity中使用高度图创建地图 插件 讲解案例为unity2022版本 这个是插件地址 也可以在资源商店中搜索 terrain-tools 介绍 Terrain Tools入门Terrain Tools是一个软件包&#xff0c;你可以选择将其添加到Unity 2019.1或更高版本中的任何项目中。要将该软件包添加到你的项目…

2023年03月21日_chatgpt宕机事件的简单回顾

你能想象吗 ChatGPT挂了 昨天半夜呢 来自全球各地的用户纷纷发现 ChatGPT的网站弹出了报错警告的信息 然后立即就无法使用了 即使是有特权的plus账户也未能幸免 一时之间呢 chatgptdown的话题在Twitter刷屏 不少重度的用户表示很着急 有的用户说呢没了ChatGPT 这工作…

uniapp打包Android、Ios、微信小程序

首先我们需要在我们的代码中&#xff0c;把我们所要用到的配置信息配置好&#xff0c;在检查一下我们测试的内容是否有打开&#xff08;取消注释&#xff09;&#xff0c;在检查一下我们的版本信息是否正确&#xff0c;查看一下接口ip是否是正式线 这里的配置信息一定要配置好…

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解 目录 时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现贝叶斯变化点检测与时间序列分解 1.Matlab实现贝叶斯变化点检测与时间序列分解&#xff0c;完…

产品经理学习-策略产品指标

目录&#xff1a; 数据指标概述 通用指标介绍 Web端常用指标 移动端常用指标 如何选择一个合适的数据指标 数据指标概述 指标是衡量目标的一个参数&#xff0c;指一项活动中预期达到的指标、目标等&#xff0c;一般用数据表示&#xff0c;因此又称为数据指标&#xff1b;…

python+django在线学习教学辅助作业系统gp6yp

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask Python版本&#xff1a;python3.…

【计算机毕业设计】python+django数码电子论坛系统设计与实现

本系统主要包括管理员和用户两个角色组成&#xff1b;主要包括&#xff1a;首页、个人中心、用户管理、分类管理、数码板块管理、数码评价管理、数码论坛管理、畅聊板块管理、系统管理等功能的管理系统。 后端&#xff1a;pythondjango 前端&#xff1a;vue.jselementui 框架&a…

SpringValidation自定义注解以及分组校验

SpringValidation的参数校验使用可参考&#xff1a;【SpringMVC应用篇】Spring Validation 参数校验-CSDN博客 目录 1. 引入依赖 2. 自定义注解校验 2.1 创建Validation类 2.2 创建注解对象 2.3 使用注解 3. 分组校验 3.1 实体类内部定义接口 3.2 在参数上指定分组 1. …

leetcode 315. 计算右侧小于当前元素的个数(hard)【小林优质解法】

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {int[]counts; //用来存储结果int[]index; //用来绑定数据和原下标int[]helpNums; //用于辅助排序 nums 数组int[]helpIndex; //用于辅助排序 i…

学习动态规划不同路径、最小路径和、打家劫舍、打家劫舍iii

学习动态规划|不同路径、最小路径和、打家劫舍、打家劫舍iii 62 不同路径 动态规划&#xff0c;dp[i][j]表示从左上角到(i,j)的路径数量dp[i][j] dp[i-1][j] dp[i][j-1] import java.util.Arrays;/*** 路径数量* 动态规划&#xff0c;dp[i][j]表示从左上角到(i,j)的路径数量…

KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models

论文链接&#xff1a;2023.12-https://arxiv.org/pdf/2312.06185.pdf 1.Background & Motivation 目前生成式的语言模型&#xff0c;如ChatGPT等在通用领域获得了巨大的成功&#xff0c;但在专业领域&#xff0c;由于缺乏相关事实性知识&#xff0c;LLM往往会产生不准确的…

List常见方法和遍历操作

List集合的特点 有序&#xff1a; 存和取的元素顺序一致有索引&#xff1a;可以通过索引操作元素可重复&#xff1a;存储的元素可以重复 List集合的特有方法 Collection的方法List都继承了List集合因为有索引&#xff0c;所以有了很多操作索引的方法 ublic static void main…

sklearn学习的一个例子用pycharm jupyter

环境 运行在jupyter 进行开发。即一个WEB端的开发工具。能适时显示开发的输出。后缀用的是ipynb.pycharm也可以支持。但也要提示按装jupyter. 或直接用andcoda 这里我们用pycharm进行项目创建 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterlab pip ins…

Java关键字(1)

Java中的关键字是指被编程语言保留用于特定用途的单词。这些关键字不能用作变量名或标识符。以下是Java中的一些关键字&#xff1a; public&#xff1a;表示公共的&#xff0c;可以被任何类访问。 private&#xff1a;表示私有的&#xff0c;只能被定义该关键字的类访问。 cl…

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

2023 IoTDB Summit:天谋科技 CTO 乔嘉林《IoTDB 企业版 V1.3: 时序数据管理一站式解决方案》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Rust开发⼲货集(1)--迭代器与消费器

本内容是对 Rust开发干货集[1] 的实践与扩展. iter() 不转移所有权 先简单解释下什么叫"转移所有权": 在 Rust 中&#xff0c;"转移所有权"&#xff08;Ownership Transfer&#xff09;是一种核心概念&#xff0c;它涉及变量和数据的所有权从一个实体转移…

2023.12.28 关于 Redis 数据类型 List 内部编码、应用场景

目录 List 编码方式 早期版本 现今版本 List 实际应用 多表之间的关联关系 消息队列 频道&#xff08;多列表&#xff09;消息队列 微博 Timeline 栈 & 队列 List 编码方式 早期版本 早期版本 List 类型的内部编码方式有两种 ziplist&#xff08;压缩列表&#xf…

vscode: make sure you configure your user.name and user.email in git

一、问题描述 使用VScode编辑代码后&#xff0c;Push到云端报错&#xff1a;Make sure you configure your "user.name" and "user.email" in git 二、解决方案 解决步骤&#xff1a; 1.打开Git Bash&#xff1a; 2.输入命令&#xff1a; git config -…