TCP协议基础
一: TCP协议是什么?
- TCP协议是基于
面向连接
,可靠传输
,基于字节流
的传输层通信协议
1. 面向连接
TCP协议是一种面向连接的协议,意味着在双方在建立数据传输之前,需要进行一个逻辑上的连接,且是一对一的连接,这种连接的建立和维护使得数据可以在发送和接受中能够进行可靠和有序的传输
UDP协议是无连接协议
,可以进行一对多的连接通信
2. 可靠传输
TCP可靠传输是基于以下几点机制达成的
- 连接的建立和终止:TCP在数据传输之前需要建立逻辑上的连接,在传输完成后会进行连接的断开,这样确保数据在开始时和结束时的完整性
- 流量控制: TCP使用滑动窗口机制来控制发送方的数据流量。接收方可以通知发送方它可以接受的数据量,以防止发送方发送过多的数据导致接收方缓冲区溢出
- 拥塞控制: TCP具有拥塞控制机制,可以在网络出现拥塞时降低数据发送速率,以避免网络拥塞问题进一步加剧
- 确认与重传机制:发送方向接收方发送数据,在一段时间内若为收到接受方的确认,会认为该数据在传输中丢失,会触发数据的重传机制。这确保了数据在丢失后仍会被重新发出
- 序列号与顺序控制:TCP会为每一个发送的数据段分配唯一的序列号,接收方会通过序列号将发送的数据片按重组成正确的顺序,从而避免了数据的乱序
- 校验和:TCP首部有个校验和控制 字段,用于检测数据是否在传输中被损坏或者修改
- 校验和的计算基于发送方的TCP首部内容,包括源端口、目标端口、序列号、确认号、控制位等等。这些字段的数值会被计算成一个校验和值,并附加在TCP首部中。接收方在接收到TCP首部后,会重新计算校验和并与传输过来的校验和值进行比较。如果两者不匹配,接收方可以推断数据在传输过程中发生了错误。
3. 字节流
字节流指的是在数据的传输中,数据被视为连续的字节序列,而不是离散的数据块
- TCP并不关心应用程序中数据的分块结构,它只负责在发送方和接收方之间传输字节数据
- 这种字节流的特性使得TCP适用于各种应用,包括传输文件、网页内容、视频流等。应用程序可以在发送数据时将其分块,但在TCP层面,这些数据将会被重新组织成一个连续的字节流,然后在接收端按照顺序重新分块以供应用程序处理
二:TCP首部格式
- 源端口号(Source Port):16位,指示发送方的应用程序使用的端口号。
- 目的端口号(Destination Port):16位,指示接收方的应用程序期望使用的端口号。
- 序列号(Sequence Number):32位,用于对TCP数据段进行编号,以便接收方按正确的顺序重组数据。
- 确认号(Acknowledgment Number):32位,指示接收方期望下一个接收的数据的序列号,用于确认已经成功接收到的数据。
- 数据偏移(Data Offset):4位,指示TCP头部的长度,以32位字(4字节)为单位计算。
- 控制位(Control Bits):6位,包含了TCP控制信息,如SYN、ACK、FIN等标志位,用于控制连接的建立、数据传输和连接的释放等。
- 窗口大小(Window Size):16位,指示发送方允许接收方缓存的字节数量,用于流量控制。
- 校验和(Checksum):16位,用于检测TCP头部在传输过程中的错误。
- 紧急指针(Urgent Pointer):16位,指示紧急数据的末尾位置,用于通知接收方需要紧急处理的数据。
- 选项和填充(Options and Padding):TCP头部可包含选项字段和填充字段,用于扩展头部功能或填充字节,可变长度。
2.1 如何计算TCP首部长度?
-
通过数据偏移控制字段计算
TCP首部的长度是通过数据偏移控制字段来表示的,其表示TCP数据段部分相较于整个TCP报文起始位置的偏移量大小,这个偏移量是以4字节单位计算的
- 所以 TCP首部的长度 = 数据偏移控制字段的值 * 4字节
注意
尽量避免通过IP首部信息进行计算TCP负载数据长度
- 由于TCP和IP协议是两个独立的协议,在网络通信中各自负责不同的任务
- TCP协议无法直接从IP首部中获取对应的数据
- 在传输过程中,应用程序会在TCP首部中的数据偏移字段和TCP数据段的长度中指示负载数据的实际长度
2.2 TCP目的端口号和IP目的地址
- TCP首部中包含源端口和目的端口号字段,是16位的
- IP首部中包含源地址和目的地址,是32位的
访问一个网址时,IP地址 和 对应端口号显示的并不是32位的和16位的二进制数,例如http: // 127.0.0.1 : 5173 /
- IP地址: 在IPv4协议中,IP地址是32位的,通常用四个8位的数字(0-255的范围)表示,每个数字之间使用点号(.)分隔
- 端口号: 端口号是16位的整数,用来标识应用程序或服务的通信端口。它可以是0到65535之间的值。例如,“:5173” 表示连接的目标端口号是5173。
- 实际的通信过程中,操作系统和网络设备会将IP地址和端口号转化为相应的二进制格式,以进行数据的传输和路由
2.3 什么是TCP连接?
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket、序列号和窗口大小称为连接。
TCP连接是一种虚拟的通信路径,用于在网络上的两台计算机之间传输数据
- Socket: Socket是一种用于网络通信的抽象概念,它可以被看作是一个端点,用于标识网络中的一台计算机上的进程或应用程序。一个Socket由IP地址和端口号组成,形如"IP地址:端口号"。在TCP连接中,客户端和服务器分别使用Socket来识别彼此,建立连接,并进行数据的发送和接收。
- 序列号: TCP协议使用序列号来标识发送和接收的数据段。发送方为每个数据段分配一个唯一的序列号,接收方根据序列号来重新组装数据段,保证数据的顺序性。
- 窗口大小: 窗口大小是TCP流量控制的一部分,用于控制发送方发送数据的速率,以适应接收方的处理能力。窗口大小表示接收方还有多少可用的缓冲区空间来接受更多的数据。通过调整窗口大小,可以防止发送方过快地发送数据,导致接收方的缓冲区溢出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCFMipms-1693303535358)(https://wximg.eefocus.com/forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FEvvXlctHqffXHrJgE6S2okca8DkESvf8kRd7XRyiaRrIjNZpMibWqYtahRNSK2J8g6S8X1ABL40jdD5a97RfgAuA%2F640%3Fwx_fmt%3Djpeg&s=e24da3)]
三:IP协议和TCP协议联合工作
- 在网络传输中,通常同时使用IP协议和TCP协议进行工作的
- IP协议负责将数据包在网络中从一个计算机传输到另一个计算机中
- TCP协议负责在这个传输过程中,建立可靠的连接和可靠的数据传输
3.1 访问网站时的联合工作
IP协议和TCP协议通常是一起使用的,以实现在网络中的可靠数据传输。它们在不同层级上执行不同的任务,共同构成了网络通信的基础。
- DNS解析:当我们键入网址,计算机会向DNS服务器,查询该域名的IP地址,涉及到IP协议的工作,来找到目标的IP地址
- TCP建立连接:直到目标的IP地址,计算机会使用TCP协议与目标网站建立可靠连接。涉及到IP地址和端口连接的过程,确保你的计算机与目标网站可进行数据传输
- 数据传输:TCP建立连接后,要与目标网站进行数据传输,TCP协议负责将数据分割成数据段,并为每个数据段添加确认号,序列号,达成数据的可靠传输
- IP传输:TCP将数据段交给IP协议,然后IP协议负责将数据段从你的计算机发送给目标的服务器,经过多个中间路由和网络设备
- TCP数据重组:目标服务器通过IP协议获得数据段,通过TCP协议将数据段的按照序列号重组数据恢复正确顺序,获得原始的数据流
- 数据响应: 目标服务器通过TCP协议将响应数据发送回您的计算机,经过类似的过程。
四:UDP协议是什么
UDP(User Datagram Protocol)是一种在计算机网络中使用的传输层协议,与TCP一样属于传输层的两个主要协议之一。不同于TCP的面向连接特性,UDP是一种无连接的、简单的协议,它主要用于支持实时性要求高、对数据可靠性要求较低的应用。
- 无连接性: UDP协议不需要在通信开始之前建立连接,通信双方可以直接开始传输数据。这使得UDP的传输过程更加轻量和快速,但也导致了数据传输过程中的不可靠性。
- 不可靠性: UDP不提供数据的可靠传输,这意味着发送的数据包可能会在传输过程中丢失、重复、乱序等。UDP不执行像TCP那样的序列号和确认号机制,也不会进行自动重传。
- 简单: UDP头部相对较短,仅包含源端口、目的端口、长度和校验和等基本信息,这使得UDP在处理速度上更快。
- 实时性: 由于UDP的无连接性和不可靠性,它更适用于那些需要实时性、低延迟的应用,如实时音视频传输、在线游戏等。
- 广播和多播: UDP支持广播和多播,使得一个主机可以向多个目标主机发送相同的数据。
- 应用场景: 由于UDP的特性,它适用于那些对数据完整性和可靠性要求较低的应用,例如音频和视频流传输、DNS查询、实时通信等。
4.1 UDP首部格式
4.2 TCP和UDP的区别
- 连接性:
- TCP:是一种面向连接的协议,它在通信的开始和结束时都需要建立和终止连接。数据传输前需要建立连接,传输结束后需要释放连接。
- UDP:是一种无连接的协议,它不需要事先建立连接或释放连接。每个UDP数据包都是独立的,它们之间没有直接的关系。
- 可靠性:
- TCP:提供可靠的数据传输。它通过确认、重传、序列号等机制确保数据的可靠性和顺序性,但这也导致了一些额外的开销。
- UDP:不提供数据传输的可靠性保证。数据包在传输过程中可能丢失、重复或乱序,因此应用程序需要自行处理这些情况。
- 数据包大小:
- TCP:由于TCP有额外的头部信息用于管理连接、确认等,它的头部开销比较大。因此,对于较小的数据包,TCP的开销可能会相对较高。
- UDP:UDP的头部开销相对较小,适用于传输较小的数据包。
- 流量控制和拥塞控制:
- TCP:具有流量控制和拥塞控制机制,以避免数据过载导致网络拥塞。这使得TCP更适合对网络质量要求较高的应用。
- UDP:不具备流量控制和拥塞控制机制,数据传输的速率受限于应用程序的设计和网络的状况。
- 适用场景:
- TCP:适用于需要可靠传输、数据顺序和错误检测的应用,如网页浏览、文件下载等。
- UDP:适用于实时性要求较高、且能容忍少量数据丢失的应用,如在线游戏、实时视频传输等。
相关文章:

TCP协议基础
一: TCP协议是什么? TCP协议是基于面向连接,可靠传输,基于字节流的传输层通信协议 1. 面向连接 TCP协议是一种面向连接的协议,意味着在双方在建立数据传输之前,需要进行一个逻辑上的连接,且是…...

C# NetTopologySuite+ProjNet 任意图形类型坐标转换
添加引用:NetTopologySuite、ProjNet、ProjNet.SRID Program.cs文件: using ProjNet.CoordinateSystems; using ProjNet.CoordinateSystems.Transformations; using ProjNet.SRID; using System; using System.Collections.Generic; using System.Linq;…...
Windows笔记本电脑开机黑屏
Windows笔记本电脑开机黑屏 最近,我遇到了一件奇怪的事情。我的Windows笔记本电脑在开机时出现了一个黑屏,没有任何反应。我尝试了多种方法,包括重启和恢复出厂设置,但都无济于事。 我开始感到担心,因为这只会影响到…...
Samb共享用户的设置和修改Linux用户的id号,修改Linux组的id号,加入组,删除组成员等
零、samba帐号的设置 为samba共享添加用户,并设定仅能由授权用户进入的共享 #增加没有家目录,也无法登录系统的空用户 useradd -M userA -s /sbin/nologin #-M 选项是--no-create-home的简写形式,即不为该用户配置家目录;-s选项&…...

VBA:对Excel单元格进行合并操作
Sub hb()Dim nn 3For i 3 To 18If Range("b" & i) <> Range("b" & i 1) ThenRange("b" & n & ":b" & i).Mergen i 1End IfNextEnd Sub...
HTML5离线储存
简介 离线存储指的是:在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。 原理:HTML5的离线存储是基于一个新建的 .appcache 文件的缓存机制(不是存储技术)…...

cmd: Union[List[str], str], ^ SyntaxError: invalid syntax
跑项目在调用from easyprocess import EasyProcess 遇到报错: cmd: Union[List[str], str], ^ SyntaxError: invalid syntax猜测是EasyProcess版本与python版本不对应 pip show EasyProcess查证一下: WARNING: pip is being invoked by an old…...

2023高教社杯数学建模思路 - 案例:异常检测
文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…...
FFDNet-pytorch版本代码测试教程
一、FFDNet-pytorch版本代码下载 (1)FFDNet-pytorch下载 https://download.csdn.net/download/qq_41104871/88233742 二、FFDNet-pytorch版本代码运行环境配置 (1)FFDNet-pytorch版本代码运行环境配置 https://blog.csdn.net/q…...
uni-app项目由hbuilder项目转化为cli项目
1.背景 原uni-app项目是通过hbuilder创建的,运行以及打包都要依赖于hbuilder运行;一般在vscode开发,在hbuilder运行比较怪异;后续希望脱离hbuilder运行并能通过构建平台进行打包,因此将hbuilder项目转化为cli项目 2.…...

使用SpaceDesk连接平板作为电脑副屏详细步骤教程
文章目录 下载安装PC端安装安卓端安装 配置步骤PC端安卓端 连接 SpaceDesk官网链接https://www.spacedesk.net/ (应该是需要科学上网才能进入) SpaceDesk它可以连接安卓,苹果的平板,手机等,也可以连接其他可以打开网页(HTML5)的设备。 这里我…...

云备份——第三方库使用介绍(下)
httplib库,一个C11单文件头的跨平台HTTP/HTTPS库。安装起来非常容易。只需包含httplib.h在你的代码中即可。 httplib库实际上是用于搭建一个简单的http服务器或者客户端的库,这种第三方网络库,可以让我们免去搭建服务器或客户端的时间&#x…...

springboot实战(一)之项目搭建
环境准备 ideajdk1.8springboot版本 2.7.15 项目开始 1.打开idea,点击new project 2.选择spring initillizr 核对:Server Url是否是:start.spring.io,然后根据自己依次设置项目名称、存储位置和包名,如下ÿ…...

线性代数的学习和整理16:什么是各种空间(类型),向量空间,距离(类型)?
目录 1 空间相关的群,环,域,集合,空间的预备知识 1.1:群,环,域,集合,空间的定义(表示不懂,只是做个标记) 2 空间 2.1 各种空间概念…...

css实现文字翻转效果
csss实现文字翻转效果 主要实现核心属性 direction: rtl; unicode-bidi: bidi-override; direction: rtl; 这个属性用于指定文本的方向为从右到左(Right-to-Left)。它常用于处理阿拉伯语、希伯来语等从右向左书写的文字样式。当设置了 direction: rtl; …...

19 Linux之Python定制篇-apt软件管理和远程登录
19 Linux之Python定制篇-apt软件管理和远程登录 文章目录 19 Linux之Python定制篇-apt软件管理和远程登录19.1 apt软件管理19.1.1 apt介绍19.1.2 更新软件下载地址-阿里源19.1.3 使用apt完成安装和卸载vim 19.2 远程登录Ubuntu 学习视频来自于B站【小白入门 通俗易懂】2021韩顺…...

WebDAV之π-Disk派盘 + notototo
notototo是一款功能丰富的笔记软件,提供了多种功能,包括载入PDF文件并进行批注和标记的能力。您可以使用Apple Pencil或手指在PDF文件上进行写作和绘图操作。 同时,notototo也提供了与团队合作的功能,您可以连接到服务器并与他人协作。此外,您还可以在notototo中进行绘图,…...
_kbhit() and getch() 在小游戏中用不了。因为控制台函数,仅在控制台程序中可用
太长不看版: _kbhit() and getch() 包含在conio.h中。 conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,…...

dayjs格式转换成日期
目录 方法一: 编辑方法二: 这个项目在筛选订单时间的时候是由前端进行筛选的,用的是adt-design-pro进行二开的,其中在用日期组件的时候遇到了一个问题,组件返回的是: 但是我需要的是年-月-日ÿ…...

mfc140u.dll丢失如何修复?解析mfc140u.dll是什么文件跟修复方法分享
大家好!今天,我将和大家分享一下关于计算机中mfc140u.dll丢失的6种解决方法。希望我的分享能对大家在计算机使用过程中遇到问题时提供一些帮助。 首先,我想请大家了解一下什么是mfc140u.dll文件。mfc140u.dll是一个动态链接库文件࿰…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...