【计算机网络】初识Tcp协议

在这里插入图片描述

💻文章目录

  • 📄前言
  • Tcp基础
    • 概念
    • Tcp 的报文格式
    • 三次握手
    • 四次挥手
  • Tcp的滑动窗口机制
    • 概念
    • 超时重传机制
      • 高速重传
  • TCP传输控制机制
    • 流量控制
    • 拥堵控制
      • 慢启动
  • Tcp的性能优化机制
    • 延迟应答
    • 捎带应答
  • 📓总结


📄前言

TCP三次握手、四次挥手,相信许多计算机网络初学者们都对这些问题感到困扰,TCP协议作为考试、面试的大常客,如果不真正了解它们的原理,那么等待你的很可能是挂科、回去等通知吧(大悲)。为了避免悲剧的再度发生,学习TCP协议不容刻缓,从现在开始!!!

Tcp基础

概念

TCP(Transfer Control Protocol) ,是一种可靠的、面向连接的网络通信协议,常用与那些对数据完整性有严格要求的场景,如聊天、文件传输、Web浏览等场景。

Tcp能够实现对数据的流量控制、重发控制、拥塞控制等功能,如果只是在应用层中使用TCP协议,那么肯定是无法体会得到其内部机制的精细,让我们从理论开始入手Tcp协议吧。

Tcp的优缺点:

  • 优点

    • 保障数据传输的可靠性
    • 拥有流量控制功能
    • 拥有拥塞控制功能
  • 缺点

    • 实现复杂,性能较低(相比UDP)
    • 延迟较高,Tcp偏重于数据的可靠传输

Tcp 的报文格式

要了解Tcp的工作机制,就得先从它的报文格式开始谈起,下图为Tcp的报文格式。

		 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|          源端口号            |          目的端口号              |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                        序列号                                 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                        确认号                                 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   4| 保留  |     |U|A|P|R|S|F|   |                     ||   首部    | (6) |     |R|C|S|S|Y|I|   |      16位窗口大小     ||   大小    |       |     |G|K|H|T|N|N|   |                     |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|           16位校验和         |           16位紧急指针            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                       选项及填充(若有)                         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                          数据                                 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 端口号:Tcp使用4字节(32bit)来表示源端口和目的端口号,系统会根据端口号的不同来区分连接。
  • 序列号:数据的序列号,因为接收的数据顺序可能不一致,所以需要序列号来进行排序。
  • 确认号:用于告知发送端已经下一次要收的数据序列。
  • 首部大小:用于确定Tcp的报头长度,计算方式为 首部大小 * 4,也就是说报文头部大小最大为60字节。
  • 标志位:类似于一种信号,使用bit位来标志使用到的标志位。
    • URG (Urgent):确定紧急指针是否有效,一般很少用紧急指针的内容。
    • ACK (Acknowledge):表明数据已经收到。
    • PSH (Push): 告诉系统赶紧把数据取走
    • RST (Rest): 用于重置连接,在服务器客户端连接认知不一致的情况使用。
    • FIN (Finish):用于4次挥手,表明要结束连接。
  • 窗口大小:流量控制机制,用于表明接受方的缓冲区大小。
  • 校验和:用于校验数据是否完整。
  • 紧急指针:用于标识一个字节的紧急数据的地址(很少用到)。
  • 选项:常见的选项有MSS(Maximum Segment Size)——拥塞窗口大小。

三次握手

三次握手是TCP协议进行网络通信时必须要做的一件事情,所有的连接都的要进行三次握手后才能开始传输数据。这是为了确定通信双方能够建立可靠的连接,并且交换双方的信息。

三次握手的过程

  1. 第一次握手由客户端开始发起,用于确定服务器是否存在。
  2. 第二次握手是服务器应答请求并发起连接请求,当客户端收到后则客户端对服务器的连接就已经建立完毕。
  3. 第三次握手是客户端通知服务器建立连接。

请添加图片描述

连接丢失的情况:

  • 第一、二次握手连接丢失:客户端因为没有收到服务器的消息,所以会重新发送报文给服务器。
  • 第三次握手连接丢失:这种情况便是双方连接认知不一致,因为客户端会认为服务器端已经收到了报文并且建立了连接。客户端在这种情况下发送数据给服务器端的话,服务器会发送一个带有RESET标志的报文给客户端,重新进行三次握手。

请添加图片描述

四次挥手

四次挥手是用于安全断开连接的措施。当客户端选择断开连接的时候,服务器端可能还有数据没有传输完毕,所以需要将连接稍微延长,直到数据被完全传输完毕。

  1. 第一次挥手:表明本地已经没有需要发送的数据,告诉远端准备好断开连接。
  2. 第二次挥手:远端已经收到FIN信号,返回应答,并继续处理未处理完的数据。
  3. 第三次挥手:远端已经处理完所有数据,告诉本地已经关闭连接(FIN)。
  4. 第四次挥手:本地进行应答,然后进入TIME_WAIT状态,一段时间后结束(CLOSED)。

请添加图片描述

四次挥手的小细节:

  • 四次挥手不像三次握手一样,会造成认知不一致状态。
  • 四次挥手有极小概率会变成三次挥手(即当FIN信号到了的时候,数据早已经处理完毕)。
  • TIME_WAIT状态的时间是2 * MSL(最大报文生存时间),而这个时间也是Tcp报文在网络的最大生存时间,从而确保网络的延迟报文能够正确接收,避免影响下次复用该端口号时收到未知的报文。

Tcp的滑动窗口机制

概念

Tcp的三次握手中报文的交换是一个接一个的,但如果数据的传输也是如此,势必会让传输的效率遭到大幅度地下降,于是Tcp协议使用了滑动窗口这种机制来让数据高效传输。

请添加图片描述

滑动窗口传输的细节:

  1. 滑动窗口通过序列号来将收到的报文规范排列。
  2. 滑动窗口使用确定序列号来通知远端下一个要接收到报文。
  3. 确定序列号代表该序列号之前的报文已经全部接收。
  4. 滑动窗口允许一定的确定报文丢失,因为确定序列号代表之前的报文已经全部接收,只要最后到确定报文到达即可。

超时重传机制

当Tcp发送报文长时间没有得到应答,则会进行超时重连,没有收到应答的原因可能是发送的报文数据在网络传输过程中丢失了,也可能是对端发送的ACK消失了。无论是哪一种情况,发送方都会重新发送数据给接受端,接受端再根据Tcp报文中的序列号来确定该数据是否已经接收过

请添加图片描述

高速重传

我们已经知道滑动窗口是用于提高数据传输的效率的,如果有任意一个报文没收到都要等待这么长时间才能重新接受,那么不就是本末倒置了吗?于是TCP又设置了高速重传机制——当连续三个ACK报文的确认序列号都相同时,发送端将重发该序列段的数据。

请添加图片描述

TCP传输控制机制

流量控制

设想一下,如果你正在下载某个文件,下载速度非常地快,以至于你的硬盘都来不及去读取你下载的内容,而服务器又不停地高速给你发送数据,那么你的系统也只能丢弃这些数据,但这样会造成非常大的网络资源浪费。有没有什么办法能够阻止这种浪费呢?

你是否还记得Tcp报头中有一个窗口大小呢?其实Tcp在进行三次握手和传输数据期间,都会根据双方缓冲区的大小动态更新窗口大小,从而实现流量的控制。

请添加图片描述

流量控制的小细节:

  1. 接收端通过接收缓冲区的大小更新滑动窗口大小,然后通过ACK报文通知发送端。

  2. 窗口大小也是反映网络吞吐量的标准。

  3. 当接收端窗口大小为0,发送端将停止发送数据一段时间并定时发送窗口探测,直到接收端有能力接受数据。

拥堵控制

慢启动

我们已经知道TCP拥有流量控制功能,滑动窗口能够根据对方的缓冲区(窗口大小)动态调整,但网络环境是复杂的,我们还需要考虑客户端与服务器之间的网络情况。如果一次发送大量的数据给对方,可能会对网络造成瘫痪。为了防止这种情况的发生,TCP使用了慢启动算法。

请添加图片描述

  1. 慢启动:其实在Tcp协议的内部,还定义了一个叫做拥塞窗口的变量(非窗口),当数据开始进行传输时,这个值被设为1,发送端每收到一个来至接收端的ACK时,拥塞窗口都会呈指数增长

  2. 拥堵避免:一旦拥堵窗口达到一定大小(阈值)时便会进入线性增长模式,即每接受一个ACK,拥塞窗口就+1。

  3. 动态调整: 因为网络的状态总是不稳定的,所以拥塞窗口的阈值会随着网络的丢包/持续传输而动态变化。

滑动窗口大小实际为:min( 窗口大小,拥塞窗口 )。

Tcp的性能优化机制

延迟应答

在文章上方的介绍中,我们都是以发送端每发送一个报文,接收端就返回一个报文来进行通信的,但实际的通信过程中,接收端并不会立刻应答,而是选择等待一段时间,接受多个报文后再回复对方,从而减少网络的压力。

请添加图片描述

延迟应答的小细节:

  1. 根据操作系统的不同,可能会在接受到两个报文后直接回复。
  2. 根据操作系统的不同,延迟发送的时间也会不同,时间越长触发超时重传的概率也就越高,一般操作系统将延迟应答时间设置为0.2秒。

捎带应答

捎带应答其实我们在三次握手中已经见到过了,其实也就是在发送其他数据的时候同时带着应答报文,从而减少应答报文在网络的传输,降低网络压力。

📓总结

TCP协议的设计不仅考虑了连接的可靠性,还考虑到了流量控制、拥堵控制、性能优化等各种方法,相信学习了本文了你,被问到TCP协议的特点时,肯定能侃侃而谈,给对方一个好影响吧。

参考书籍:《图解TCP/IP》

📜博客主页:主页
📫我的专栏:C++
📱我的github:github

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

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

相关文章

Java刷题总结(面试)

1、String类 String不可变 java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的。 也就是说,String str “aa”;str“bb”;第二句不是改变“aa”所存储地址的内容&#xf…

Overleaf是什么?如何升级到标准版OR专业版?

1. Overleaf介绍 Overleaf是一个使用LaTeX进行多人协同编辑的平台,可以免费注册和使用,不用下载LaTeX软件,是最为著名的LaTeX在线协作系统。 主要特色是有LaTeX插件,编辑功能十分完善,有实时预览(即编即看…

Java 使用继承和重写父类方法写一个商品入库案例

package 练习.商品入库;import java.util.Scanner; // 抽象手机类 public abstract class Phone {//测试方法public static void main(String[] args){// 华为手机huawei h new huawei();h.setName("华为P40");h.setPrice(1999.99);h.setConfiguration("8128GB…

【排名公布】绵阳男科医院排名发布,绵阳高水男科医院究竟咋样啊?

【排名公布】绵阳男科医院排名发布,绵阳高水男科医院究竟咋样啊? 绵阳高水医院,是一家医保定点单位,地址位于绵阳市涪城区长虹大道北段113号。一所与国际接轨的现代化男子医院,有良好地就医环境,拥有多名有经验的专家…

基于Tensorflow实现了三个模型对MNIST数据集的识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 MNIST手写数字数据集是计算机视觉和机器学习领域的一个经典数据集,常用于评估图像…

攻防世界-mobile-easy-app详解

序言 这道题网上很多分析,但是分析的都是arm版本的,我选了arm64的来分析,arm64相比arm难度高一些,因为arm64编译器搞了inline优化,看起来略抽象 分析 这道题逻辑很简单,输入flag然后一个check函数验证&a…

改进rust代码的35种具体方法-类型(十八)-不要惊慌

上一篇文章 它看起来非常复杂,这就是为什么它贴合的塑料盖上用大号友好字母印上“不要恐慌”的原因之一。——道格拉斯亚当斯 此项目的标题将更准确地描述为更喜欢返回Result而不是使用panic!(但不要惊慌更吸引人)。 Rust的panic机制主要是为…

算法入门----小话算法(1)

下面就首先从一些数学问题入手。 Q1&#xff1a; 如何证明时间复杂度O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!) < O(NN)? A&#xff1a; 如果一个以整数为参数的不等式不能很容易看出不等的关系&#xff0c;那么最好用图示或者数学归纳法。 很显…

Python3 笔记:sort() 和 sorted() 的区别

1、sort() 可以对列表中的元素进行排序&#xff0c;会改变原列表&#xff0c;之前的顺序不复存在。 list.sort&#xff08;key&#xff0c; reverse None&#xff09; key&#xff1a;默认值是None&#xff0c;可指定项目进行排序&#xff0c;此参数可省略。 reverse&#…

rmxprt转换的3D模型只有一半?---模大狮模型网

在3D建模和渲染的工作流程中&#xff0c;我们经常需要用到各种转换工具来兼容不同平台或软件之间的模型格式。rmxprt(或其他类似的模型转换工具)就是其中的一种&#xff0c;它能够将模型从一种格式转换为另一种格式。然而&#xff0c;有时在转换过程中可能会遇到一些问题&#…

微服务雪崩问题、Sentinel(请求限流、线程隔离、服务熔断)、Seata分布式事务

文章目录 前言一、微服务保护二、Sentinel2.1 微服务整合2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务熔断 三、分布式事务3.1 Seata3.1.1 Seata架构3.1.2 部署TC服务3.1.3 微服务集成Seata 3.2 XA模式3.3 AT模式 前言 微服务之间为什么会雪崩&#xff1f;怎么解决雪崩问题&…

Oracle体系结构初探:数据库启动与停止

往期内容 参数管理 控制文件添加 启动 在启动Oracle数据库时&#xff0c;我们一般会使用如下命令&#xff1a; startup 虽然命令只有一个&#xff0c;但其中却是经历了3个阶段&#xff0c;从下面执行 startup 命令返回也可以看出来。 总结为3个阶段&#xff1a; nomount&…

ubuntu下python导入.so库

ubuntu下python导入.so库 文章目录 ubuntu下python导入.so库1. 什么是.so文件&#xff1f;2. 使用python脚本编译.so库文件Reference 最近遇到了python导入c编译的 .so库的问题&#xff0c;发觉挺有意思&#xff0c;于是写下这篇blog以作记录。 1. 什么是.so文件&#xff1f; …

【简单介绍下深度神经网络】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

句柄降权绕过CallBacks检查

看到前辈们相关的文章&#xff0c;不太明白什么是句柄降权&#xff0c;于是专门去学习一下&#xff0c;过程有一点波折。 句柄降权 什么是句柄 当一个进程利用名称来创建或打开一个对象时&#xff0c;将获得一个句柄&#xff0c;该句柄指向所创建或打开的对象。以后&#xf…

什么是DNS缓存投毒攻击,有什么防护措施

随着企业组织数字化步伐的加快&#xff0c;域名系统&#xff08;DNS&#xff09;作为互联网基础设施的关键组成部分&#xff0c;其安全性愈发受到重视。然而&#xff0c;近年来频繁发生的针对DNS的攻击事件&#xff0c;已经成为企业组织数字化发展中的一个严重问题。而在目前各…

在 Visual Studio 2022 (VS2022) 中删除 Git 分支的步骤如下

git branch -r PS \MauiApp1> git push origin --delete “20240523备份” git push origin --delete “20240523备份”

若依 ruoyi-vue 用户账号前后端参数校验密码 手机号 邮箱

前端 <el-dialog :title"title" :visible.sync"open" width"800px" append-to-body><el-form ref"form" :model"form" :rules"rules" label-width"120px"><el-row><el-col :span…

Vue3骨架屏(Skeleton)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传animated是否展示动画效果booleantruefalsebutton是否使用按钮占位图boolean | SkeletonButtonPropsfalsefalseavatar是否显示头像占位图boolean | SkeletonAvatarPropsfalsefalseinput是否使用输入框占位图boolea…

SOLIDWORKS二次开发服务商 慧德敏学

SOLIDWORKS是一套三维设计软件, 采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图。SOLIDWORKS软件本身所具有的交互方式, 可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改, 而不需要编程。但要实现设计意义上的变量化绘图和系列化设计, 需…