传输协议TCP-原理部分

news2025/1/15 7:59:19

传输控制协议TCP(Transmission Control Protocol)一种基于连接可靠稳定无重复的传输协议。

1、TCP头部信息

TCP协议头部信息如下:

一共占用20个字节

  • 16位源端口号:发送进程的主机端口
  • 16位目的端口号:接收主机中进程的端口号
  • 32为的序列号:每个包中都包含序列号,序列号被系统初始化为某个随机值ISN。后续的TCP报文段中的序列号应该加上改报文段所携带数据的第一个字节在整个字节流中的偏移。此处的报文段可以理解为字节流的一段数据包
  • 32位的确认号:目的主机返回确认号,使源主机知道某个或者几个报文段已被接收
  • 四位首部长度:由于TCP内包含一个长度可变的选项部分所以需要一个值来指定这个TCP报文段到底多长
  • URG标志:
  • ACK标志:表示确认号是否有效,携带ACK标识的TCP报文段位确认报文段
  • PSH标志:
  • RET标志:
  • SYN标志:表示建立请求连接。携带SYN标识的TCP报文段位同步报文段
  • FIN标志:标识通知对方本端要关闭连接了。携带FIN标识的TCP报文段位结束报文段
  • 16位窗口大小:是TCP流量控制的一个手段。这里说的窗口指的是接受通告窗口。他告诉对方本端的TCP接收缓冲区还能容纳多少个字节的数据,这样对方就可以控制发送数据的速度。
  • 16位校验和:
  • 16位紧急指针:
  • TCP头部选项:

2、TCP传输连接阶段

  • 建立TCP连接(三次握手)
  • 数据转送
  • 释放TCP连接

概念区分:

三报文握手 == 三次握手/三路握手

四报文挥手 == 四次挥手/四路握手

3、TCP连接的建立

        TCP建立连接需要解决三个问题:

  1. 双方能够知道对方的存在
  2. 双方能够协商一些参数(最大窗口值、是否使用窗口扩大选项、时间戳、服务质量等等)
  3. 双方能够对运输实体资源(例如:缓存大小、连接表中的项目等)进行分配

三次握手过程:

  • 最初两端的TCP进程都处于关闭状态,客户端的某个进程主动发起TCP连接建立
  • TCP服务其被动等待客户进程的TCP请求,所以TCP进入监听状态
  • TCP客户端向TCP服务器进程发送TCP连接请求报文,并且进入同步已发送状态
  • 请求报文的首部中的同步SYN被设置为1,表明这是一个TCP连接请求报文段,32位序列字段seq被设置了初始值,作为TCP客户端所选择的初始序号。
  • TCP服务器进程接收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并且进入同步已接收状态,该报文段首部中的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段。序号字段seq被设置了一个初始值y,作为TCP服务器进进程选择的初始序号,确认号字段ack的值被设置成x+1,表明接收到了TCP客户进程序号为x的报文。
  • TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并且进入连接已建立状态,报文段首部中的确认位ACK设置为1,表明这是一个普通的TCP确认报文段。序列号字段seq设置为x+1,确认号字段ack的值被设置成y+1,表明接收到了TCP服务进程序号为y的报文,TCP服务器进程收到该确认报文段后也进入连接已建立状态

上述文字如此繁琐,可以看下图:

常见面试题:假如TCP连接的监视使用的是两次握手而不是三次可以吗?

  • 假设TCP客户进程发送了一个TCP请求报文段,但是可报文段在网络结点中被长时间滞留,TCP客户采用超时重传机制重发TCP请求报文段并被TCP服务进程接收,TCP服务进程,发送一个TCP连接请求报文段确认报文段,然后TCP服务进程和客户可以进行信息传递,当数据转送完成的时候双方都处于关闭状态。
  • 随后滞留在网络结点中的哪个失效的TCP请求文段,被TCP服务进程接收,TCP服务进程又发送一个TCP服务进程又发送一个TCP连接请求确认报文段,并且进入连接已建立状态,由于TCP客户进程并没有发起新的TCP连接请求,并且已经处于关闭状态了,因此不会理会TCP服务器发送的报文段,但是TCP服务器进程已经进入了连接已建立状态,他认为新的TCP连接已经建立好了,就会一直等待TCP客户进程发来数据,将会浪费TCP服务器主机的很多资源。

所以要TCP连接的建立采用三次握手:

四次挥手过程:

TCP通过四次挥手来释放连接,数据通信传输完成之后TCP双方都可以释放连接

  • 假设由客户主动关闭TCP连接,
  • 客户进程发送连接释放报文段 ,并且进入终止等待1状态 ,该报文段中的首部终止位FIN设置位1,ACK设置为1,表明这是一个连接释放报文段,同时也对之前接收的报文段进行确认, seq=u表示TCP客户进程之前已发送过的数据的最后一个字节的序号+1,ack=v表示客户进程之前已收到的数据的最后一个字节的序号+1。
  • 服务器进程接收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并且进入关闭等待状态,此时TCP客户进程到服务器进程这个方向的连接就释放了,这时的TCP连接属于半关闭状态, 也就是TCP客户进程已经没有数据要发送了,但是TCP服务器进程如果还有数据需要发送,客户进程则还需要接收,这个状态可能会持续一段时间,直到TCP服务器进程将数据发送完毕。
  • TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段。
  • 当TCP服务器进程的没有数据要发送了后,释放连接(被动关闭), FIN=1,ACK=1表明这是一个连接释放报文段,seq=w,ack=u+1同时也对之前收到的报文段进行确认。
  • TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态。
  • TCP服务器进程收到该报文段后就进入关闭状态。

  • 而TCP客户进程还需要经过2MSL后才能进入关闭状态。MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟

这个等待2MSL是为了保证普通的TCP确认报文段能够被TCP服务端接收到。

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

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

相关文章

ComfyUI 完全入门:AI抠图/去除背景/更换图片背景/更换视频背景

本文继续给大家分享ComfyUI的基本使用技巧:抠图,或者说去除背景。抠图是处理图片的一项常见工作,是设计师们的基本能力,现在有了AI,抠图的效率也得到了极大的提升。最近看到有小伙伴通过AI抠图赚了外国人1000美刀&…

中职电子应用技术专业教学解决方案

前言 在21世纪的信息时代,电子技术作为科技进步的基石,其重要性不言而喻。随着产业的快速发展,对中职电子应用技术专业人才的需求日益增长,不仅要求学生掌握扎实的专业技能,还强调其实践能力与创新能力的培养。为应对这…

Spring-Security(一)-源码分析及认证流程

Spring Security & Oauth2系列: Spring Security(一) 源码分析及认证流程 Spring Security(二)OAuth2认证详解及自定义异常处理 文章目录 1、Spring Security 概述1.1 Spring Security项目核心模块 1.2 Spring S…

小猪APP分发:高效的APP托管服务分发平台

有没有遇到过这样的尴尬?辛辛苦苦开发了一个APP,却在托管和分发环节卡壳。想想看,花了那么多时间精力开发的APP,却因为分发不顺利而影响用户体验,实在是让人抓狂。而小猪APP分发就成了你最好的选择。 APP封装分发www.…

LabVIEW如何确保步进电机的长期稳定运行

步进电机因其良好的定位精度和控制性,在自动化设备中得到了广泛应用。然而,长期稳定运行对于任何电机系统都是一个重要的挑战。LabVIEW作为一款强大的图形化编程语言,通过其灵活的控制算法和实时监控能力,为步进电机的稳定运行提供…

探索Adobe XD:高效UI设计软件的中文入门教程

在这个数字化世界里,创意设计不仅是为了吸引观众的注意,也是用户体验的核心部分。强大的设计工具可以帮助设计师创造出明亮的视觉效果,从而提高用户体验。 一、Adobe XD是什么? Adobe XD是一家知名软件公司 Adobe Systems 用户体…

数据加密验签机的工作原理

数据加密验签机,作为网络安全领域的关键设备,其重要性不言而喻。以下是对数据加密验签机的详细介绍: 一、引言 在数字化时代,数据的机密性、完整性和真实性是企业和个人都极为关注的问题。数据加密验签机,正是为了解决…

17.1 命令行-输入与输出、命令行参数、命令行标志

1. 输入与输出 命令行程序被设计为在终端运行。在图形用户界面(GUI)问世以前的年代,命令行程序是与计算机交互的唯一方式。 即便是在图形用户界面大行其道的当今,对程序员和系统管理员来说,命令行程序依然是一种流行而实用的与底层操作系统…

Amazon云计算AWS(二)

目录 三、简单存储服务S3(一)S3的基本概念和操作(二)S3的数据一致性模型(三)S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB(一)非关系型数据库与传统关系数据库的比较&…

【WPF编程宝典】第8讲:形状、画刷和变换

本讲介绍了WPF中的基本形状,包括矩形、椭圆形、直线、折线、多边形、点划线等。还介绍四类画刷的使用。介绍了形状的旋转及移动等变化,元素的旋转及移动等。最后介绍了透明。 1.形状 WPF支持的形状有:Rectangle,Ellipse&#xff…

代码签名证书申请流程

在当今的软件开发与分发过程中,确保代码的安全性和可信度变得至关重要。代码签名证书作为这一安全机制的重要组成部分,不仅帮助开发者保护其软件免遭恶意篡改,也为用户提供了验证软件来源和完整性的手段。 一、什么是代码签名证书 代码签名…

【MySQL】数据库的增删查改

文章目录 前言1. 新增1.1 全插入1.2 指定某些列名插入1.3 多行插入1.4 边查询边插入 2. 约束2.1 非空约束2.2 唯一性约束2.3 默认值约束2.4 主键约束2.5 外键约束2.6 check 约束2.7 外键的逻辑删除 3. 查询 - 初阶3.1 全列查询3.2 指定列查询3.3 指定表达式查询3.4 别名查询3.5…

基于不确定性的相互学习 用于联合医学图像分类和分割

文章目录 Uncertainty-Informed Mutual Learning for Joint Medical Image Classification and Segmentation摘要方法实验结果 Uncertainty-Informed Mutual Learning for Joint Medical Image Classification and Segmentation 摘要 该论文提出了一种基于不确定性的相互学习…

互联网轻量级框架整合之SpringMVC初始化及各组件工作原理

Spring MVC的初始化和流程 MVC理念的发展 SpringMVC是Spring提供给Web应用领域的框架设计,MVC分别是Model-View-Controller的缩写,它是一个设计理念,不仅仅存在于Java中,各类语言及开发均可用,其运转流程和各组件的应…

华为机考入门python3--(33)牛客33-图片整理

分类:排序 知识点: 对字符串中的字符ASCII码排序 sorted(my_str) 题目来自【牛客】 def sort_images(s):# 可以使用ord(A)求A的ASCII值,需要注意的是A的值(65)比a的值小(97)sorted_images …

QT4-QT5升级(3)GBK-UTF-8-乱码“常量中有换行符”

乱码有两种:我命名为汉字乱码菱形乱码如下: 1.文件编码为: GB2312 打开编码: GB2312 编译后: QString 部分字符串 常量中有换行符 char * …

【WEEK15】 【DAY3】定时任务【中文版】

2024.6.5 Wednesday 接上文【WEEK15】 【DAY2】【DAY3】邮件任务【中文版】 目录 17.异步、定时、邮件任务17.3.定时任务17.3.1.两个注解:17.3.2.Cron表达式17.3.3.修改Springboot09TestApplication.java开启定时功能的注解17.3.4.新建ScheduledService.java17.3.5.…

操作系统教材第6版——个人笔记5

3.2 单连续分区存储管理 3.2.1 单连续分区存储管理 单连续分区存储管理 每个进程占用一个物理上完全连续的存储空间(区域) 单用户连续分区存储管理固定分区存储管理可变分区存储管理 单用户连续分区存储管理 主存区域划分为系统区与用户区设置一个栅栏寄存器界分两个区域…

搜索与图论:有向图的拓扑序列

搜索与图论&#xff1a;有向图的拓扑序列 题目描述参考代码 题目描述 输入样例 3 3 1 2 2 3 1 3输出样例 1 2 3 参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e…

城镇污水处理设施运维服务认证

初次申请认证时需提交的文件/资料 1、通用文件/资料(证明文件复印件需签字盖公章) ☐ 营业执照复印件、统一社会信用代码/组织机构代码证复印件 ☐ 增值税一般纳税人资格证复印件&#xff0c;或其他增值税一般纳税人资格认定文件复印件 ☐ 资质 或 许可证 复印件&#x…