当前位置: 首页 > news >正文

TCP报头详解及TCP十种核心机制(一)

目录

前言:

TCP报头

TCP核心机制

一、确认应答

二、超时重传

小结:


前言:

    这篇文章详细介绍了TCP报头中的一些核心数据,及两种TCP核心机制。其他的一些机制会在后面文章中详细介绍。

TCP报头

解释:

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

    源端口号,目的端口号就是在网络通信中五元组之二。由于是16位,那么就存在数据的取值范围。0 -- 1023为知名端口号,和UDP这里是一样的,上篇文章中有详细介绍。

2)32位序号

    TCP为了实现可靠性,提出了确认应答和超时重传来主要保证TCP的可靠性。32位序号就是针对TCP发送的数据按照字节进行编号(累加进行编号)。

    因此只需要确定第一个字节的序号,根据数据长度就可以推算出其他字节的序号。那么在数据传输时只需要将第一个字节序号传输过去即可。

    由于数据传输存在 “后发先至” 的问题,那么接收方回复的数据就不知道是针对那一条。因此在应答报文中,就可以利用序号确定对哪一条数据进行应答(回复时针对编号进行回复)。

3)32位确认序号

    当接收方接收到数据后,按照接收到的数据最后一个字节序号 + 1 作为确认序号。如果返回的应答报文这个确认序号是上一条数据最后一字节序号加1,就证明这个序号以前的数据发送成功了。

4)4位首部长度

    描述了TCP报头的长度(单位4字节),4位最大就是15,即报头长度最大就是60字节。

    报头除过选项,其他长度是固定的20个字节。

5)保留六位

    为以后的扩展提供位置,便于TCP扩展。

6)六位标志位

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

    ACK这位如果为1证明就是应答报文,如果为0就不是。确认序号只有在应答报文中才有意义。其他几位后续的十种核心机制中会提到。

    六位标志位,就是为了确定了这个报文是哪一类。

7)16位窗口大小

    后面的滑动窗口中详细介绍。

8)16位校验和

    这里和UDP原理一样。根据一些算法计算出校验和,在接收的数据再计算一遍,然后对比是否相等,来确定数据是否准确。UDP这里有详细介绍。

9)16位紧急指针

    标识了那部分数据为紧急数据。

10)选项

    TCP报头除过选项其他固定20位,即:首部长度 - 20 = 选项长度。TCP报头大小是可变的,就是因为选项的存在,选项对TCP报文一些属性进行解释说明。

TCP核心机制

一、确认应答

问题:    

    网络中后发先至这个现象是客观存在的,无法避免。因此报文到达的顺序也是会有变化的。

解决方案:

    针对数据进行编号,按照字节为单位进行编号。字节序号进行累加,因此只需要标注起始字节序号,其他字节序号就可以推断出来。对于后一条数据起始序号就是前一条数据最后字节序号加1。在响应数据时只需要针对序号进行响应即可。

    当客户端接收到响应后,按照应答报文中的确认序号,就可以确定这个序号之前的数据已经发送成功了。

确认序号取值:

    针对收到数据后最后一个字节序号 + 1。返回的ACK,如果这个确认序号是上一条数据最后一字节序号加1,就证明数据发送成功了。接下来发送方就从上一条数据最后一字节序号 + 1 为下一条      数据的起始序号进行发送。

小结:

    TCP可靠传输能力,最主要就是通过确认应答和超时重传体现的。通过应答报文,就可以让发送方清楚知道数据传输是否成功。进一步引入序号和确认序号,针对多组数据进行区分。

二、超时重传

问题:

    丢包分为两种情况:1.发送的数据包丢了。2.返回的应答数据包丢了。发送方看到的结果就是没有响应,那么一致认为丢包了。(丢包的概率非常小,但是存在)

TCP重传机制:

    引入一个时间阈值。发送方发送数据后,开始计时。如果时间阈值内没有收到响应,就认为是丢包了。然后就进行重新传输。(超时重传,超过一定的时间,没有响应,就重新传输)

    如果重传多次都失败(时间间隔会增大,非常小概率事件),TCP会认为网路出现故障。TCP就会断开重新连接。如果重置还是失败,就彻底断开连接了。

问题:

    如果返回的应答数据报丢了,重传就会使接收方收到多个一样的数据。

解决方案:

    TCP存在接收缓冲区(内核中的一块内存),每个socket对象都有一个接收缓冲区(也有发送缓冲区)。缓冲区可以认为是一个阻塞的优先级队列,利用序号针对重复数据进行去重(丢包重传产生的),利用序号对数据进行排序。然后接收端从缓冲区接收的数据就是,有序且去重的。

小结:

    可靠传输是TCP的最核心部分。TCP的可靠传输就是通过 确认应答 + 超时重传 来体现的。确认应答描述的是传输顺利的情况,超时重传描述的是传输出现问题的情况。两种相互配合,共同体现TCP的可靠性。

相关文章:

TCP报头详解及TCP十种核心机制(一)

目录 前言: TCP报头 TCP核心机制 一、确认应答 二、超时重传 小结: 前言: 这篇文章详细介绍了TCP报头中的一些核心数据,及两种TCP核心机制。其他的一些机制会在后面文章中详细介绍。 TCP报头 解释: 1&#xff…...

Linux用户的添加、修改和删除以及相关配置文件:useradd、passwd、usermod、userdel、相关配置文件

目录 账户的创建(useradd) 第一步:创建账号 第二步:创建密码 useradd参考文件 CROUP100 HOME/home INACTIVE-1 EXPIRE SHELL/bin/bash SKEL/etc/skel UID/GID密码参数参考:/etc/login.defs 密码参数显示命…...

进程地址空间

目录 回顾C/C语言的程序地址空间 感性认识虚拟地址空间 虚拟地址空间与物理空间如何建立映射关系 为什么要虚拟地址空间? 回顾C/C语言的程序地址空间 在学习C/C语言时我们知道了一个概念叫程序地址空间。通俗来说就是如下一张表,从中可以得知系统的几…...

数楼梯(加强版)

数楼梯(加强版) 题目背景: 小明一天放学回家,看到从1楼到2楼共有n个台阶,因为好奇,他想尝试一下总共有几种方案到二楼?他可以1步,2步,3步的跳,不能跳3步以上. 他试了很多次都没有解决这个问题,于是请求聪明的你帮忙解决这个问题. 题目描述: 1楼到2楼楼梯有n级台阶。小明每…...

MySQL-数据类型

数据类型简介数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容。不同的数据类型也决定了 MySQL 在存储它们的时候使用的方式,以及在使用它们的时候选择什么运算符号进行运…...

剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)

剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)1. 题目2. 解题思路3. 数据类型功能函数总结4. java代码5. 踩坑记录1. 题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉…...

C#网络爬虫开发

1前言爬虫一般都是用Python来写,生态丰富,动态语言开发速度快,调试也很方便但是我要说但是,动态语言也有其局限性,笔者作为老爬虫带师,几乎各种语言都搞过,现在这个任务并不复杂,用我…...

Fastjson 总结

0x00 前言 这一篇主要是针对已经完成的fastjson系列做一个知识点总结,一来是为了更加有条理的梳理已经存在的内容,二来是为了更好的复习和利用。 0x01 Fastjson基础知识点 1.常见问题: 问:fastjson的触发点是什么?…...

文件路径模块os.path

文件路径模块os.path 文章目录文件路径模块os.path1.概述2.解析路径2.1.拆分路径和文件名split2.2.获取文件名称basename2.3.返回路径第一部分dirname2.4.扩展名称解析路径splitext2.5.返回公共前缀路径commonprefix3.创建路径3.1.拼接路径join3.2.获取家目录3.3.规范化路径nor…...

Kerberos简单介绍及使用

Kerberos作用 简单来说安全相关一般涉及以下方面:用户认证(Kerberos的作用)、用户授权、用户管理.。而Kerberos功能是用户认证,通俗来说解决了证明A是A 的问题。 认证过程(时序图) 核心角色/概念 KDC&…...

DOM编程-全选、全不选和反选

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>全选、全不选和反选</title> </head> <body bgcolor"antiquewhite"> <script type"text/jav…...

C++11可变模板参数

C11可变模板参数一、简介二、语法三、可变模版参数函数3.1、递归函数方式展开参数包3.2、逗号表达式展开参数包一、简介 C11的新特性–可变模版参数&#xff08;variadic templates&#xff09;是C11新增的最强大的特性之一&#xff0c;它对参数进行了高度泛化&#xff0c;它能…...

Linux多线程

目录 一、认识线程 1.1 线程概念 1.2 页表 1.3 线程的优缺点 1.3.1 优点 1.3.2 缺点 1.4 线程异常 二、进程 VS 线程 三、Linux线程控制 3.1 POSIX线程库 3.1 线程创建 3.3 线程等待 3.4 线程终止 3.4.1 return退出 3.4.2 pthread_exit() 3.4.3 pthread_cancel…...

Webpack5 环境下 Openlayers 标注(Icon) require 引入图片问题

Webpack5 环境下 Openlayers 标注&#xff08;Icon&#xff09; require 引入图片问题环境版本Openlayers 使用 require 问题Webpack5 正确配置构建新环境的时候&#xff0c;偶然发现 Openlayers 使用 require 的方式加载图片&#xff08;Icon&#xff09;报错&#xff0c;开始…...

Zookeeper安装部署

文章目录Zookeeper安装部署Zookeeper安装部署 将Zookeeper安装包解压缩&#xff0c; [rootlocalhost opt]# ll 总用量 14032 -rw-r--r--. 1 root root 12392394 10月 13 11:44 apache-zookeeper-3.6.0-bin.tar.gz drwxrwxr-x. 6 root root 4096 10月 18 01:44 redis-5.0.4 …...

Cow Acrobats ( 临项交换贪心 )

题目大意&#xff1a; N 头牛 &#xff0c; 每头牛有一个重量(Weight)和一个力量(Strenth) &#xff0c; N头牛进行排列 &#xff0c; 第 i 头牛的风险值为其上所有牛总重减去自身力量 &#xff0c; 问如何排列可以使最大风险值最小 &#xff0c; 求出这个最小的最大风险值&am…...

MySQL:为什么说应该优先选择普通索引,尽量避免使用唯一索引

前言 在使用MySQL的过程中&#xff0c;随着表数据的逐渐增多&#xff0c;为了更快的查询我们需要的数据&#xff0c;我们会在表中建立不同类型的索引。 今天我们来聊一聊&#xff0c;普通索引和唯一索引的使用场景&#xff0c; 以及为什么说推荐大家优先使用普通索引&#xf…...

Spring Cloud alibaba之Feign

JAVA项目中如何实现接口调用&#xff1f;HttpclientHttpclient是Apache Jakarta Common下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持Http协议的客户端编程工具包&#xff0c;并且它支持HTTP协议最新版本和建议。HttpClient相比传统JDK自带的URL Connection&a…...

零信任-Google谷歌零信任介绍(3)

谷歌零信任的介绍&#xff1f; "Zero Trust" 是一种网络安全模型&#xff0c;旨在通过降低网络中的信任级别来防止安全威胁。在零信任模型中&#xff0c;不论请求来自内部网络还是外部网络&#xff0c;系统都将对所有请求进行详细的验证和审核。这意味着每次请求都需…...

Numpy基础——人工智能基础

文章目录一、Numpy概述1.优势2.numpy历史3.Numpy的核心&#xff1a;多维数组4.numpy基础4.1 ndarray数组4.2 内存中的ndarray对象一、Numpy概述 1.优势 Numpy(Nummerical Python),补充了Python语言所欠缺的数值计算能力&#xff1b;Numpy是其它数据分析及机器学习库的底层库&…...

电商仓储与配送云仓是什么?

仓库是整个供给链的关键局部。它们是产品暂停和触摸的点&#xff0c;耗费空间和时间(工时)。空间和时间反过来也是费用。经过开发数学和计算机模型来微调仓库的规划和操作&#xff0c;经理能够显著降低与产品分销相关的劳动力本钱&#xff0c;进步仓库空间应用率&#xff0c;并…...

【零基础入门前端系列】—HTML介绍(一)

【零基础入门前端系列】—HTML介绍&#xff08;一&#xff09; 一、什么是HTML HTML是用来描述网页的一种语言HTML指的是超文本标记语言&#xff1a;HyperText Markup LanguageHTML不是一种编程语言&#xff0c;而是一种超文本标记语言&#xff0c;标记语言是一套标记标签(ma…...

Elasticsearch索引库和文档的相关操作

前言&#xff1a;最近一直在复习Elasticsearch相关的知识&#xff0c;公司搜索相关的技术用到了这个&#xff0c;用公司电脑配了环境&#xff0c;借鉴网上的课程进行了总结。希望能够加深自己的印象以及帮助到其他的小伙伴儿们&#x1f609;&#x1f609;。 如果文章有什么需要…...

使用Python,Opencv检测图像,视频中的猫

使用Python&#xff0c;Opencv检测图像&#xff0c;视频中的猫&#x1f431; 这篇博客将介绍如何使用Python&#xff0c;OpenCV库附带的默认Haar级联检测器来检测图像中的猫。同样的技术也可以应用于视频流。这些哈尔级联由约瑟夫豪斯&#xff08;Joseph Howse&#xff09;训练…...

浅谈域名和服务器集约化管理的误区

一个正常的网站通常由域名、网站程序、服务器三个部分组成&#xff0c;网站程序由单位开发设计&#xff0c;而域名和服务器则需要租用购买&#xff0c;那么域名和服务器之间的关系是什么&#xff1f;如何实现域名和服务器的有效管理呢&#xff1f; 服务器和域名的关系 服务器…...

迪赛智慧数——柱状图(正负条形图):20212022人才求职最关注的因素

效果图从近两年职场跳槽方向看&#xff0c;相比此前人们对高薪大厂趋之若鹜&#xff0c;如今职场人更关注业务前景。根据相关数据显示&#xff0c;职场人求职最关注的因素中&#xff0c;“薪资福利”权重下降&#xff0c;“个人发展”权重上升&#xff0c;“业务前景”首次进入…...

网络安全-黑帽白帽红客与网络安全法

网络安全-黑帽白帽红客与网络安全法 本章内容较少&#xff0c;因为刚开端。 黑客来源于hacker 指的是信息安全里面&#xff0c;能够自由出入对方系统&#xff0c;指的是擅长IT技术的电脑高手 黑帽黑客-坏蛋&#xff0c;研究木马的&#xff0c;找漏洞的&#xff0c;攻击网络或者…...

Xpath元素定位之同级节点,父节点,子节点

XPath学习:轴(8)——following-siblingXPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素&#xff0c;并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。推荐一个挺不错的网站&#xff1a;htt…...

华为OD机试 - 挑选字符串(Python)| 真题+思路+代码

挑选字符串 题目 给定 a-z,26 个英文字母小写字符串组成的字符串 A 和 B, 其中 A 可能存在重复字母,B 不会存在重复字母, 现从字符串 A 中按规则挑选一些字母可以组成字符串 B 挑选规则如下: 同一个位置的字母只能挑选一次, 被挑选字母的相对先后顺序不能被改变, 求最…...

python笔记-- “__del__”析构方法

-#### 1、基本概念&#xff08;构造函数与析构函数&#xff09; 特殊函数&#xff1a;由系统自动执行&#xff0c;在程序中不可显式地调用他们 构造函数&#xff1a; 建立对象时对对象的数据成员进行初始化&#xff08;对象初始化&#xff09; 析构函数&#xff1a; 对象生命期…...

网站做好后怎么做seo/免费制作网站app

#!/usr/bin/env python#! _*_ coding:utf-8 _*_ #注:多实例DB数据,my.conf,sock文件目录要统一#每个实例要建有shutdown权限mt_user用户 import os,sysimport socket myd /usr/local/mysql/bin/mysqld#1myadmin /usr/local/mysql/bin/mysqladminm_user rootm_password exsd…...

html 企业网站模板/在线网站流量查询

有没有遇到过&#xff0c;导航UITableView&#xff0c;在push&#xff0c;back回来之后&#xff0c;当前cell仍然是选中的状态。当然&#xff0c;解决办法简单&#xff0c;添加一句[tableView deselectRowAtIndexPath:indexPath animated:YES]即可。令人纠结的时&#xff0c;在…...

做亚马逊网站需要租办公室吗/网站排名查询工具有哪些

点击下面链接查看 方法1&#xff08;和2结合&#xff09; 方法二 终极解决方案&#xff0c;最后也是用这个方案给搞好的&#xff1a;点击查看...

营销型网站的三元素/seo关键词优化方法

将以下代码复制粘贴到txt文件中&#xff0c;另存为bat格式&#xff0c;并将文件编码格式修改为ANSI&#xff0c;跟要处理的文件放一个文件夹内运行。 代码中制定的是删除1,2行&#xff0c;可根据需求自行修改。 echo off rem 根据指定的行号范围删除多个txt文件里的连续多行内…...

上海闵行做网站的公司/河源市seo点击排名软件价格

正则表达式-理论基础篇 搬运自个人博客,原址正则表达式-理论基础篇什么是正则表达式?可以称作规则一个描述字符模式的对象&#xff0c;正则表达式中的字母和数字&#xff0c;都是按照字面含义进行匹配的。强大的字符串匹配工具如何建立一个正则表达式&#xff1f;使用RegExp()…...

少儿编程培训哪个机构好/微信搜一搜seo优化

cat test.txt12341.合并上下两行sed $!N;s/\n/\t/ test.txt1 23 42.合并匹配模式及其下一行sed /2/{N;s/\n/\t/} test.txt12 343.合并所有行sed :a;N;s/\n/ /;ba; test.txt1 2 3 44.交互奇偶行sed $!N;s/\([^\n]*\)\n\([^\n]*\)/\2\n\1/ test.txt2143655.删除…...