五、传输层(三)TCP

2023-11-01

目录

3.0   TCP特点补充

3.1  TCP报文段首部格式

3.2  TCP连接管理

3.2.1  三报文握手

3.2.2  四报文挥手

3.3  TCP的流量控制和可靠传输

3.4  TCP拥塞控制

3.4.1  接收窗口、拥塞窗口、发送窗口关系

3.4.2  慢开始和拥塞避免

3.4.3  快重传和快恢复


3.0   TCP特点补充

  • TCP提供一对一全双工可靠通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存接收缓存,用来临时存放双向通信的数据。
  • TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。
  • UDP报文长度由发送方应用进程决定,TCP报文段的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。如果应用进程传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;如果太短,TCP也可以等到积累足够多的字节后再构成报文段发送出去。
  • IP首部的协议字段:TCP=6,UDP=17。

3.1  TCP报文段首部格式

  • 源端口号和目的端口号各占2B。端口是传输层与应用层的SAP。传输层的复用和分用功能都要通过端口才能实现。
  • 序号:占4B,共2^32个序号。TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  • 确认号:占4B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。(数据链路层的后退N帧协议的累积确认ACK是表明N及N之间的都已正确收到)
  • 数据偏移(即首部长度):占4bit,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,单位是4B。TCP首部的最大长度为60B。注意不是IP数据报分片用到的那个数据偏移,而是TCP首部长度。
  • 确认位ACK:仅当ACK=1时,确认号字段才有效;当ACK=0时,确认号字段无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
  • 同步位SYN:当SYN=1时,表明这是一个连接请求报文或连接接受报文。当SYN=1,ACK=0时表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK=1
  • 终止位FIN(finish):当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
  • 窗口:占2B.窗口值为接收方让发送方设置发送窗口的依据。例如,设确认号位701,窗口字段是1000.这表明发送此报文段的一方还有字节序号位701~1700共1000B的接收缓存空间。
  • 校验和:占2B.校验和字段校验的范围包括首部和数据这两部分。在计算校验和时,要在TCP报文段的前面加上12B的伪首部。
  • 填充:为了使整个首部长度是4B的整数倍而设置的字段。
  • 保留位:保留为今后使用,但目前应置为0。
  • 紧急位URG:当URG=1时,表明紧急指针字段有效。
  • 紧急指针:占2B。它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据最前面)。
  • 推送位PSH(Push):接收方TCP收到PSH=1的报文段,就尽快地交付给接受应用进程,而不再等到整个缓存都填满了后再向上交付。
  • 复位位RST(Reast):当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  • 选项。长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS是TCP报文段中的数据字段的最大长度。

注:报文段的序号是其数据部分第一个字节的编号 。

3.2  TCP连接管理

 注:胡科大高军老师对于以下部分的视频讲解堪称完美,个人笔记只记录一些要点供以后补充。 

3.2.1  三报文握手

  • SYN报文段(连接请求报文或连接接受报文)不能携带数据,但要消耗一个序号
  • 普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号。如果该三报文握手的第三个报文段不携带数据,则TCP客户进程要发送的下一个数据报文段的序号仍为X+1。

3.2.2  四报文挥手

参与TCP连接的两个进程中的任何一个都能提出释放连接的请求。 

  • TCP规定终止标志位FIN等于1的TCP报文段即使不携带数据,也要消耗一个序号。
  • 终止等待1状态表明TCP客户不再发送数据,但TCP服务器可能还要发送数据。
  • 服务器进入关闭等待状态后,TCP连接处于半关闭状态,TCP客户不能再发送数据,但TCP服务器可能还要发送数据。

 

3.3  TCP的流量控制和可靠传输

数据链路层的可靠传输机制和传输层TCP的可靠传输机制有很多相同之处。如都使用窗口机制、确认、重传(超时或冗余ACK)。

因此TCP的可靠传输适合对比记忆,其不同点如下

  • TCP使用序号,序号建立在传送的字节流之上(即字节编号),而不是建立再报文段之上。TCP的窗口大小指明了有多少序号。而GBN和SR是给窗口编号
  • TCP默认使用累积确认,这于GBN相同。但GBN需要重传出错之后的所有帧,而TCP只重传出错的序号组成的报文段(失序的报文缓存起来)。此外,TCP中提供一个SACK选择确认选项,此时TCP与SR非常相似。TCP的差错恢复机制可视为GBN和SR协议的混合体。
  • TCP采取的是对报文段的确认机制,并不是每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认。
  • 数据链路层的后退N帧协议的累积确认ACK是表明N及N之间的都已正确收到而TCP的确认N是N-1及N-1以前的已正确收到
  • TCP服务器通过累积确认报文段调整接收窗口的大小对发送方进行流量控制

即使接收窗口值为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。 

  

3.4  TCP拥塞控制

在通信子网内,由于出现过量的数据包而引起网络性能下降的现象称为拥塞

在网络层实现拥塞控制的方法为显式反馈。目前网际控制报文协议(ICMP)最新规定已经不再使用源点抑制报文,即显式反馈。

在TCP中,拥塞控制主要是利用隐式反馈在传输层实现的

  • 流量控制是抑制发送端发送数据的速率,以便接收端来得及接收。
  • 拥塞控制是一个全局性的问题,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。单一地增加资源并不能解决拥塞问题。

拥塞控制的方法

  • 闭环控制指作为被控的输出量以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系。 是带有反馈信息的系统控制方式。
  • 开环控制是指无反馈信息的系统控制方式。

3.4.1  接收窗口、拥塞窗口、发送窗口关系

 

3.4.2  慢开始和拥塞避免

 

3.4.3  快重传和快恢复

1990的reno版本,来改进TCP的性能。 

 与快重传配合使用的是快恢复算法。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

五、传输层(三)TCP 的相关文章

  • 第二节课内容学习

    监听远程端口 并映射到本地 先配置ssh的公私钥非对称加密 假设远程开放的端口为33090 在本地计算机终端执行 ssh CNg L 6006 127 0 0 1 6006 root ssh intern ai org cn p 33090
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • 内网穿透的应用-使用Net2FTP轻松部署本地Web网站并公网访问管理内网资源

    文章目录 1 前言 2 Net2FTP网站搭建 2 1 Net2FTP下载和安装 2 2 Net2FTP网页测试 3 cpolar内网穿透 3 1 Cpolar云端设置 3 2 Cpolar本地设置
  • CTF之逆向入门

    逆向工程 Reverse Engineering 又称反向工程 是一种技术过程 即对一项目标产品进行逆向分析及研究 从而演绎并得出该产品的处理流程 组织结构 功能性能规格等设计要素 以制作出功能相近 但又不完全一样的产品 逆向工程源于商业及
  • 一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)

    文章目录 1 备份 SD TF 卡为镜像文件 2 压缩镜像文件 2 1 多分区镜像文件的压缩 树莓派 普通 linux 系统等 2 2 单分区镜像文件的压缩 Nvidia Jetson Nano 等 3 还原镜像文件到 SD TF 卡
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 掌握内网渗透之道,成为实战高手,看《内网渗透实战攻略》就够了

    文末送书 文末送书 今天推荐一本网络安全领域优质书籍 内网渗透实战攻略 文章目录 前言 如何阅读本书 目录 文末送书 前言 当今 网络系统面临着越来越严峻的安全挑战 在众多的安全挑战中 一种有组织 有特定目标 长时间持续的新型网络攻击日益猖
  • Web 安全漏洞之 OS 命令注入

    什么是 OS 命令注入 上周我们分享了一篇 Web 安全漏洞之 SQL 注入 其原理简单来说就是因为 SQL 是一种结构化字符串语言 攻击者利用可以随意构造语句的漏洞构造了开发者意料之外的语句 而今天要讲的 OS 命令注入其实原理和 SQL
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制_raylink todesk

    目录 一 前言 二 远程控制中的安全威胁 三 国内外远控软件安全机制 ToDesk RayLink Teamviewer Splashtop 四 安全远控预防 一 前言 近期 远程控制话题再一次引起关注 据相关新闻报道 不少不法分子利用远程
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 国外拨号VPS指南:开启你的全球网络之旅

    在当今数字化时代 互联网已经成为了我们生活的一部分 而要在全球范围内畅通无阻地访问互联网 拥有一个可靠的国外拨号VPS是非常重要的 无论您是为了工作 学习还是娱乐 国外拨号VPS都可以为您提供更广泛的网络体验 本文将为您提供国外拨号VPS的
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学

随机推荐

  • linux shell oracle脚本_分享一个shell脚本--统计Oracle最消耗资源的SQL语句

    概述 This project meant to provide useful scripts for DB maintance and management to make work easier and interesting 今天主要
  • Unity Shader Graphs无法代码动态赋值的问题解决

    起因 给一个材质球更换图片 动态更换了很久 换不上去 解决 Reference unity给的是随机的名字只需要改成自己的名字就可以了 完美解决 不需要下划线 只是自己定义的名字 box EndTarget image material S
  • sqli-labs通关攻略教程六(less26~less28a)

    文章目录 less 26 方法1 方法2 补充知识 less 26a less 27 less 27a less 28 less 28a less 26 方法1 由题目可知 本题绕过了空格和注释 注释符用 1 1或者 00绕过 空白符绕过
  • android intent深入解析

    一 Intent的显示调用 1 intent setClass this OtherActivity class 2 intent setClassName this com zizhu activitys OtherActivity 3
  • Linux chown命令

    Linux Unix 是多人多工操作系统 所有的文件皆有拥有者 利用 chown 将指定文件的拥有者改为指定的用户或组 用户可以是用户名或者用户ID 组可以是组名或者组ID 文件是以空格分开的要改变权限的文件列表 支持通配符 一般来说 这个
  • java解决Exception in thread “main“ java.lang.OutOfMemoryError: GC overhead limit exceeded

    这个就是内存占用超过了限制 解决方案 加载文件的容量太大 这个只能切分文件 使用BufferedInputStream一行行读取 BufferedInputStream bufferedReader new BufferedInputStr
  • 输入三角形的3个边长,a,b,c求出三角形的面积。(C语言)

    代码 define CRT SECURE NO WARNINGS 1 include
  • requestBody注解转化json报错

    RequestBody ResponseBody 注解详解 转 解决方法 不要用modelMap 新建一个hashMap类即可 进来给app写接口比较多 遇到一个bug requestBody会自动往modelMap里加解决办法 清空map
  • 用redis实现支持优先级的消息队列

    用redis实现支持优先级的消息队列 为什么需要消息队列 系统中引入消息队列机制是对系统一个非常大的改善 例如一个web系统中 用户做了某项操作后需要发送邮件通知到用户邮箱中 你可以使用同步方式让用户等待邮件发送完成后反馈给用户 但是这样可
  • 出现 HTTP 错误 500.19 错误代码 0x800700b7

    这个内容出现主要问题是在IIS上 我们一般程序开发 iis中默认的路径只是http localhost 相当于环境变量中已定义好了 如果自己创建的项目直接将路径定义到这 就会替换图二中的路径 然后你的程序图一中所指向的路径就会无效 图三是我
  • Java,Enum里定义属性和方法

    最近的项目用到了大神写的统一返回码的代码 ErrorCode java 统一6位 异常码 author Administrator public enum ErrorCode global OK 000000 操作成功 ERROR 0000
  • 子类化QListWidget实现自定义拖拽功能.

    我们经常会碰到这样的一个问题 我们想把其他地方选中的文本 直接通过拖拽移动到一个控件中 从而实现方便添加项的功能 这里我们以QListWidget作为例子 来实现这么一个功能 其他地方的文本可直接拖拽进QListWidget中 且QList
  • pandas to_sql详解

    pandas to sql api的使用文章已经很多了 但是都只是简单介绍了怎么使用 一些细节问题没有介绍到 这里我们增加说明一些细节问题 1 列的对应 2 多值插入 3 批量插入 api说明 照常 我们对api参数也做一下详细的介绍 也就
  • 第一次使用markdown编辑器_交换两个数组

    交换两个数组 将两个整形变量进行交换可引入第三个变量 数组的交换也可以这样做 int main int arr1 1 2 3 定义两个数组 int arr2 2 3 4 int i 0 int tmp 0 定义第三个数组用于交换 for i
  • 12-控制Pawn类移动与调整视角 UE4 C++

    在上一节 11 控制Pawn类移动增加镜头摇臂 已经完成了Pawn的移动和镜头摇臂功能 本节继续增加移动镜头视角的功能 首先在MyPawn h中增加如下代码 void CameraPitch float Value 用于调整抬头低头 voi
  • cocos2d-x下c++调用lua函数

    首先需要lua中的函数句柄传到c 层 通过tolua 将c 类绑定到lua后 构造该c 类时传入lua函数句柄即可 在c 层回调lua函数的具体代码如下 void notifyLua int type int value CCLuaStac
  • C++ sort()排序函数用法详解

    include
  • python自动化操作_文件和目录的批量重命名操作

    一 文件和文件夹的批量重命名 1 文件重命名使用os库里的rename函数 os rename old new 二 复杂路径中的文件重命名 1 注意文件夹修改的时候 会只修改最外层的文件夹 因为改了后就变了名字 找不到啦 解决办法 加top
  • JAVA在线考试系统

    一 项目简介 随着互联网迅速发展 人们的生活已经越来越离不开互联网 人们足不出户就可以工作 买卖 学习等 对于在校学生 通过网络教育不仅可以随时进行网络学习 也可以根据学习的情况自我检测 有利于学生高效 快捷地掌握所学的知识 本系统预设计的
  • 五、传输层(三)TCP

    目录 3 0 TCP特点补充 3 1 TCP报文段首部格式 3 2 TCP连接管理 3 2 1 三报文握手 3 2 2 四报文挥手 3 3 TCP的流量控制和可靠传输 3 4 TCP拥塞控制 3 4 1 接收窗口 拥塞窗口 发送窗口关系 3