TCP基础了解

什么是 TCP ?

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

  • 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃

用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。

所以我们可以知道,建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识。

  • Socket:由 IP 地址和端口号组成

  • 序列号:用来解决乱序问题等

  • 窗口大小:用来做流量控制

TCP 头格式有哪些?

我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。

确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。

控制位:

  • ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1

  • RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。

  • SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。

  • FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段

为什么需要 TCP 协议? TCP 工作在哪一层?

IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。

因为 TCP 是一个工作在传输层可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

详细来看

TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层协议,以下是关于它的详细介绍:

主要特点

  • 面向连接:在数据传输之前,需先通过三次握手建立连接,数据传输完成后,再通过四次挥手释放连接,确保数据传输的可靠性和顺序性123.
  • 可靠性:通过序号、确认和重传机制来保证数据可靠传输。发送方发送数据后,接收方会发送确认消息,若发送方在一定时间内未收到确认消息,就会重传数据123.
  • 流量控制:采用滑动窗口机制,发送方根据接收方的处理能力动态调整发送数据的速率,防止数据丢失或拥塞,确保接收方能够处理接收到的数据123.
  • 拥塞控制:利用拥塞窗口和慢启动等机制,避免网络拥塞导致数据丢失和网络性能下降,以维护网络的稳定性123.
  • 全双工通信:允许通信双方同时进行数据的发送和接收,提高了通信效率123.
  • 面向字节流:将数据视为无结构的字节流进行传输,没有消息边界的概念,需要应用层协议来解决消息的边界问题123.

工作原理

  • 三次握手建立连接45 :
    • 第一次握手:客户端向服务器发送一个 SYN(Synchronize)包,请求建立连接,并随机生成一个初始序列号,此时客户端进入 SYN_SEND 状态。
    • 第二次握手:服务器收到 SYN 包后,回应一个 SYN+ACK(Synchronize-Acknowledge)包,确认收到客户端的请求,并也随机生成一个初始序列号,同时将客户端的序列号加 1 作为确认号,此时服务器进入 SYN_RECV 状态。
    • 第三次握手:客户端收到服务器的 SYN+ACK 包后,向服务器发送一个 ACK 包,确认收到服务器的响应,将服务器的序列号加 1 作为确认号,此时客户端进入 ESTABLISHED 状态,服务器收到客户端的 ACK 包后,也进入 ESTABLISHED 状态,连接建立成功。
  • 数据传输:连接建立后,发送方将应用层数据分割成合适大小的数据包,并为每个数据包添加 TCP 报头,其中包含序列号等信息,然后通过网络发送给接收方。接收方收到数据包后,根据序列号对数据进行重组和排序,并检查数据的完整性,若数据无误,则向发送方发送确认消息123.
  • 四次挥手释放连接4 :
    • 第一次挥手:客户端发送一个 FIN(Finish)包给服务器,表示自己没有数据要发送了,请求关闭连接,此时客户端进入 FIN_WAIT_1 状态。
    • 第二次挥手:服务器收到 FIN 包后,向客户端发送一个 ACK 包,确认收到客户端的关闭请求,此时客户端进入 FIN_WAIT_2 状态,服务器进入 CLOSE_WAIT 状态。
    • 第三次挥手:服务器处理完剩余数据后,也发送一个 FIN 包给客户端,请求关闭连接,此时服务器进入 LAST_ACK 状态。
    • 第四次挥手:客户端收到服务器的 FIN 包后,向服务器发送一个 ACK 包,确认收到服务器的关闭请求,此时客户端进入 TIME_WAIT 状态,等待一段时间(2MSL,Maximum Segment Lifetime)后,确保服务器收到了 ACK 包,客户端才正式关闭连接,服务器收到客户端的 ACK 包后,立即关闭连接。

TCP 报文格式

一个 TCP 报文段分为首部和数据两部分,其首部格式如下5 :

源端口(16 位)目的端口(16 位)
序列号(32 位)
确认序列号(32 位)
报头长度(4 位)预留(6 位)代码位(6 位)窗口大小(16 位)
校验和(16 位)紧急指针(16 位)
可选项(0 或 32 位)

应用场景

由于 TCP 具有可靠性高、能保证数据顺序等特点,适用于对数据传输质量要求较高的应用,如:

  • 文件传输:如 FTP 协议,可确保文件在网络传输过程中的完整性和准确性,避免文件损坏或丢失123.
  • 电子邮件:如 SMTP、POP3 等协议,保证邮件内容的可靠传递,确保用户能够准确无误地接收和发送邮件123.
  • 网页浏览:HTTP 协议在传输网页数据时,通常基于 TCP 连接,以保证网页的各个元素(如 HTML、CSS、图片等)能够完整、有序地传输到浏览器,呈现出正确的页面内容13.
  • 远程登录:如 Telnet、SSH 等协议,通过 TCP 连接实现用户与远程主机之间的可靠交互,确保命令和数据的准确传输123.

参考:

小林coding 

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

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

相关文章

Altair: 轻松创建交互式数据可视化

Altair: 轻松创建交互式数据可视化 Altair 是一个基于 Vega-Lite 的 Python 数据可视化库,它旨在简化数据可视化的创建过程,尤其适用于统计图表的生成。Altair 强调声明式编码方式,通过简单的语法,用户能够快速创建复杂的交互式图…

conda-pack迁移虚拟环境

conda-pack打包迁移环境 源机器上: # 创建并激活环境 conda create --name myenv python3.8 conda activate myenv# 安装所需包 conda install numpy pandas# 打包环境 conda install -c conda-forge conda-pack conda pack -n myenv -o myenv.tar.gz 目标机器上&a…

paddle

paddlepaddle 安装环境 查看虚拟环境 创建一个名叫paddle的虚拟环境 conda env list conda create -n paddle python3.8激活 conda activate paddle打开paddlepaddle官网 选择windowcondacpu复制代码 conda install paddlepaddle2.6.2 --channel https://mirrors.tuna.tsi…

如何测量分辨率

一、什么是分辨率? 分辨率指的是分清物体细节的能力。分辨率是一个成像系统还原空间频率的能力。一些人只是简单的用分辨率去描述极限分辨率,但是相机在在不同的对比度的情况下还原低,中和高频率的能力,也可以显示全面综合的信息。…

API开发:Flask VS FastAPI

在当今的Web开发领域,选择合适的框架对于构建高效、稳定且易于维护的API至关重要。Flask和FastAPI是两个备受关注的Python Web框架,它们各自具有独特的特点和优势,适用于不同的开发场景。 文章目录 一、简介二、性能表现三、开发效率&#xf…

HCIA-Access V2.5_4_1_1路由协议基础_IP路由表

大型网络的拓扑结构一般会比较复杂,不同的部门,或者总部和分支可能处在不同的网络中,此时就需要使用路由器来连接不同的网络,实现网络之间的数据转发。 本章将介绍路由协议的基础知识、路由表的分类、静态路由基础与配置、VLAN间…

气象与旅游之间的关系,如果借助高精度预测提高旅游的质量

气象与旅游之间存在密切的关系,天气条件直接影响旅游者的出行决策、旅游体验和安全保障。通过高精度气象预测技术,可以有效提升旅游质量,为游客和旅游行业带来显著的优势。 1. 提高游客出行决策效率 个性化天气服务:基于高精度气象预测,旅游平台可以提供个性化的天气预报服…

【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式,同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向,为读者提供从数据组织、预处理、加载到可视化展示的完整过程,并为后续模型训练打下基础。 前言 在计算机视觉的深…

第一次面试到第一份offer的经历分享

更多大厂面试经验的视频经验分享看主页 目录: 话不多说,进入正题 从去年九月份开始面试 到现在第一份offer中间经历了大概5个月的时间 我会将我面试过的公司跟一些比较经典的问题分享出来 公司: 1.360 2.奇安信: 3.安询 4.安腾信息技术公司 5.深思科技…

数据结构之线性表1

2.1 线性表的定义和基本操作 1.线性结构的特点是:在数据元素的非空有限集中, (1)存在惟一的一个被称做“第一个”的数据元素; (2) 存在惟一的一个被称做“最后一个”的数据元素; &a…

信息安全实训室网络攻防靶场实战核心平台解决方案

一、引言 网络安全靶场,作为一种融合了虚拟与现实环境的综合性平台,专为基础设施、应用程序及物理系统等目标设计,旨在向系统用户提供全方位的安全服务,涵盖教学、研究、训练及测试等多个维度。随着网络空间对抗态势的日益复杂化…

关于分页的样式问题

在最近写网页的时候遇到了一个关于样式的问题,今天我来跟大家来说一下。像是分页中的颜色效果,斑马纹颜色要注意颜色不要过于深。 这种的颜色就有一点深看着很不舒服,应将当前的颜色改为淡一点的,也可以利用rgba调整透明度&#x…

一分钟快速了解什么是AEO海关认证

一分钟快速了解什么是AEO海关认证——这一术语,对于国际贸易领域的从业者而言,无疑是一个充满分量与价值的标签。AEO,即“Authorized Economic Operator”,中文译为“经认证的经营者”,是海关对信用状况、守法程度和安…

在Ubuntu中配置mysql,并允许外部访问数据库

在虚拟机中安装 MySQL 并允许外部访问,可以按照以下步骤操作: 1. 更新系统包 首先,确保你的系统是最新的,使用以下命令更新包列表: sudo apt update sudo apt upgrade2. 安装 MySQL Server 安装 MySQL 服务&#x…

Python图注意力神经网络GAT与蛋白质相互作用数据模型构建、可视化及熵直方图分析...

全文链接:https://tecdat.cn/?p38617 本文聚焦于图注意力网络GAT在蛋白质 - 蛋白质相互作用数据集中的应用。首先介绍了研究背景与目的,阐述了相关概念如归纳设置与转导设置的差异。接着详细描述了数据加载与可视化的过程,包括代码实现与分析…

Java学习笔记(13)——面向对象编程

面向对象基础 目录 面向对象基础 方法重载 练习: 继承 继承树 protected super 阻止继承 向上转型 向下转型 区分继承和组合 练习 小结: 方法重载 如果有一系列方法,功能类似,只是参数有所不同,就可以把…

线性池学习

一、什么是进程?什么是线程? 1. 进程的定义 从操作系统的角度解释: 进程是操作系统分配资源和调度执行的基本单位。每个进程都是操作系统中一个独立的实体,拥有自己的内存空间、文件描述符、代码、数据等资源。进程是程序在执行…

go 自己写序列化函数不转义

以map[int32]string转化为[]byte为例 背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。 原因&a…

Facebook 与数字社交的未来走向

随着数字技术的飞速发展,社交平台的角色和形式也在不断演变。作为全球最大社交平台之一,Facebook(现Meta)在推动数字社交的进程中扮演了至关重要的角色。然而,随着互联网的去中心化趋势和新技术的崛起,Face…

QT:QDEBUG输出重定向和命令行参数QCommandLineParser

qInstallMessageHandler函数简介 QtMessageHandler qInstallMessageHandler(QtMessageHandler handler) qInstallMessageHandler 是 Qt 框架中的一个函数,用于安装一个全局的消息处理函数,以替代默认的消息输出机制。这个函数允许开发者自定义 Qt 应用…