传输控制协议(TCP)知识点总结

news2024/9/29 5:36:31

文章目录

  • 传输控制协议(TCP)知识点总结
    • 介绍
    • 数据包格式
    • TCP连接的建立和关闭
      • 三次握手
      • 四次挥手
      • 一张图展示这些过程
    • 其他知识

传输控制协议(TCP)知识点总结

维基百科:

传输控制协议(TCP)是Internet协议套件中的主要协议之一。它起源于最初的网络实现中,它补充了Internet协议(IP)。因此,整个套件通常称为TCP/IP。TCP在通过IP网络通信的主机之间提供可靠的、有序的、经过检查的字节流传输。主要的互联网应用程序,如万维网、电子邮件、远程管理和文件传输,都依赖于TCP,它是TCP/IP套件的传输层的一部分。SSL/TLS通常运行在TCP之上。

TCP是面向连接的,客户端和服务器之间必须建立连接后才能发送数据。在建立连接之前,服务器必须在等待(被动打开)来自客户端的连接请求。三次握手(主动打开)、重传和错误检测增加了可靠性,但也延长了延迟时间。不需要可靠数据流服务的应用程序可以使用用户数据报协议(UDP),它提供了一个无连接的数据报服务,优先考虑时间而非可靠性。TCP采用网络拥塞避免。但是,TCP存在漏洞,包括拒绝服务攻击、连接劫持、TCP否决和重置攻击。

数据在TCP层称为流(Stream),数据分组称为分段(Segment)。作为比较,数据在IP层称为Datagram,数据分组称为分片(Fragment)。 UDP 中分组称为Message。

介绍

传输控制协议(TCP)是一种在IP之上使用的传输协议,用于确保数据包的可靠传输。

TCP拥有一些机制,可以解决数据包传输的传递中出现的许多问题,例如数据包丢失、数据包乱序、数据包重复和数据包损坏。

由于TCPIP之上最常用的协议,因此Internet协议栈有时也称为TCP/IP

数据包格式

使用TCP/IP发送数据包时,每个IP数据包的数据部分被格式化为TCP段。

在这里插入图片描述

TCP连接的建立和关闭

三次握手

任何TCP连接在建立之前都需要经过三次握手,确保通信双方都能正确的接收和发送数据,这也是TCP可靠性的保障之一。
让我们来研究一下TCP三次握手的过程:

下图是使用wireshark捕获到的三次握手的过程(服务端监听的端口为8888):

wireshark三次握手

  1. 首先客户端(图中端口14243)先向服务端(图中端口8888)发送一个同步位SYN被设置为1的TCP报文段,用来表明这是一个TCP连接请求报文段,并将Seq需要字段设置为x(上图中的连接的x是0),表明客户端选择x作为这个连接的初始序号。发送该报文段后,客户端进入同步发送状态(SYN-SENT)。
  2. 然后服务端收到客户端的TCP连接请求报文段后,服务端同意连接后会向请求的客户端回复一个请求确认报文,这个报文的同步位SYN和确认位ACK都被置为1,序号Seq设置为y(上图是y=0),确认号字段ack被设置为x+1(对于图中连接来说就是x+1=0+1=1)。发送该报文段后,服务端进入同步接收状态(SYN-RECEIVED)。
  3. 最后,在客户端收到服务端发送的请求确认报文段后会回复一个确认报文段,该报文的确认位ACK置1,序号seq置为x+1,确认号字段ack置为y+1。发送该报文段后,客户端进入已建立连接状态(ESTABLISHED)
  4. 服务端接收到客户端发出的确认报文段后也进入已建立连接状态(ESTABLISHED)。

注意:TCP规定SYN被设置为1的报文段不能携带数据而且会消耗掉一个序号。在三次握手的第三次回复中,该报文段没有设置SYN为1,所以它是可以携带数据的。但如果不携带数据则不消耗序号,这时下一次发送的报文段的Seq还是x+1。

下图展示了三次握手的过程:
TCP三次握手

四次挥手

TCP在关闭连接时会进行四次挥手,这确保了数据能够完整地传输并且双方都能正常关闭连接。

下图是wireshark捕获的一次TCP连接的四次挥手记录

wireshark四次挥手

  1. 首先假设挥手的发起者是客户端(图中端口4676),则客户端会发送一个终止位FIN和确认位ACK置为1的报文段,表示客户端想要释放该TCP连接,并将序号Seq设置为u(即该连接请求断开之前已传送过的数据的最后一个字节的序号加1,图中Seq为6),ack置为v(即该连接请求断开之前已收到的数据的最后一个字节的序号加1,图中ack为14)。发送该报文段后,客户端进入终止等待1状态(FIN-WAIT-1)。
  2. 之后,服务端收到该连接终止请求的报文段,服务端会立即回复一个确认报文段,该报文段的确认位ACK置为1,序号Seq置为v,确认号字段ack置为u+1。发送该确认报文段后,服务端进入关闭等待状态(CLOSE-WAIT)。
  3. 在服务端发送确认报文段后,表明客户端到服务端的连接就被释放了,现在该连接处于半关闭状态,客户端不再向服务端发送数据,但是服务端如果还有数据要发送,客户端仍然会接收,这个状态会持续到服务端确认没有数据传输后,主动发出终止连接的报文段。
  4. 在客户端收到服务端发来的确认报文段后,会进入终止等待2状态(FIN-WAIT-2)。该状态会一直等待服务端发出的终止连接的报文段。
  5. 在服务端确认没有数据要发送时,会通知终止连接,并发出一个终止连接的报文段。该报文段的终止位FIN和确认位ACK置为1,序号Seq置为w(如果服务端在半关闭状态下发送了数据那么Seq就会变化,如果没有发送数据,那么Seq=v),确认号字段ack还是置为u+1。发送该报文段后,服务端进入最后确认状态(LAST-ACK)。
  6. 客户端在接收到服务端发来的终止连接的报文段后,会回复一个确认报文段,该报文段确认位ACK置为1,序号Seq置为u+1,确认号字段ack置为w+1。该报文段发送后,客户端进入时间等待状态(TIME-WAIT)。
  7. 服务端在收到客户端发来的确认报文段后,会进入已关闭状态(CLOSED)。而客户端需要等待2MSL的时间后才会从时间等待状态(TIME-WAIT)进入已关闭状态(CLOSED)。(MSL(Maximum Segment Lifetime)即报文段最大生存时间,RFC793建议为2分钟)。

注意:TCP规定终止位FIN置为1的报文段即使不携带数据,也要消耗掉一个序号

下图展示了四次挥手的过程:
TCP四次挥手

一张图展示这些过程

其他知识

  1. 在TCP连接中,服务端使用一个五元组(源IP地址,源端口,目的IP地址,目的端口,协议类型)来唯一标识客户端的连接。当服务端监听一个端口时,它会接受来自任何源IP地址和源端口号的连接请求,但是每个连接都必须具有唯一的目的IP地址、目的端口号和协议类型。

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

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

相关文章

五种最危险的新兴网络攻击技术

SANS研究所的网络专家揭示了包括网络罪犯和民族国家行为者在内的网络攻击者正在使用的五种最危险的新兴网络攻击技术。在旧金山举行的RSA网络安全会议上,由SANS研究所的几位分析师组成的讨论组讨论了新兴的网络攻击战术、技术和程序,并提供了如何为企业做…

使用GLSL来实现实时滤镜的效果

1. 先来明确几个概念 1.1 OpenGL OpenGL 全称为 Open Graphics Library(开放图形库)。 是用于渲染 2D 或 3D 图像的跨语言跨平台的应用程序编程接口,用于CPU控制GPU做图像渲染,是一套API。 提供设计人员一个共同的硬件驱动标准…

虚函数、静态绑定和动态绑定

静态绑定 class Base { public:Base(int data) :ma(data) {}void show() { cout << "Base::show()" << endl; }void show(int) { cout << "Base::show(int)" << endl; }protected:int ma; };class Derive : public Base { public…

Go | 一分钟掌握Go | 10 - 反射

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 反射你以为只在Java中有吗&#xff1f;Go也有反射机制&#xff0c;很多…

【JavaEE】应用层自定义协议及UDP协议

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章将为大家介绍应用层中UDP协议~~ 在应用层这里&#xff0c;虽然存在一些现有的协议&#xff08;HTTP&#xff09;&#xff0c;但是也有很多情况&#xff0c;需要程序猿自定制协议&a…

OJ 功能介绍 使用手册

目录 服务器配置 OJ界面展示 用户管理 一、批量导入&#xff08;从方便管理角度建议以 学生姓名 作为 用户名 &#xff09; 二、批量生成临时用户 后期修改成需要的用户名和密码 &#xff08;学生登录后修改密码&#xff09; 三、用户自行注册&#xff08;填写邮箱获取验证码…

Nmap入门到高级【第九章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…

【致敬未来的攻城狮计划】— 连续打卡第二十天:RA2E1_UART —— 串口通信例程

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

Docker consul服务注册与发现

目录 一、服务注册与发现 1、什么是服务注册与发现 2、什么是consul 3、consul提供的一些关键特性 4、容器更新与发现 二、基于nginx与consul构建自动发现即高可用的Docker服务架构 consul服务器部署 1、建立consul 2、查看集群信息 3、通过http获取集群信息 regist…

SpringBoot+vue文件上传下载预览分片上传

学习链接 Blob & File 上传文件 前台 整个过程&#xff0c;就是在使用FormData 添加 上File&#xff08;这个Blob&#xff09;&#xff0c;并且key要和后台的名字对应上在点击上传按钮开始上传之前&#xff0c;使用了URL.createObjectURL(File)创建blobUrl&#xff0c;…

MySQL数据库之库表管理

一、常用的数据类型&#xff1a; 类型含义tinyint(n)1个字节&#xff0c;范围(-128~127)smallint(n)2个字节&#xff0c;范围(-32768~32767)mediumint(n)3个字节&#xff0c;范围(-8388608~8388607)int(n)4个字节(32个比特位)&#xff0c;整数型&#xff0c;范围(-2147483648~…

JavaEE - 网络编程

一、网络编程基础 为什么需要网络编程&#xff1f; 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff0c;实质是通过网络&#xff0c;获取到网络上的一个视频资源。 与本地打开视频文件类似&#xff0c;只是视频文件这个资源的来源是网络。 相比本…

KALI入门到高级【第五章】

预计更新第一章 入门 1.1 什么是Kali Linux&#xff1f; 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…

模糊PID(模糊规则表)

模糊PID的模糊化相关内容,请参看下面的博客文章: PLC模糊控制模糊PID(梯形图实现+算法分析)_RXXW_Dor的博客-CSDN博客博途PLC的模糊PID控制详细内容请查看下面的博客文章:Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_…

后端程序员的前端必备【Vue】 - 05 class与style绑定、表单输入绑定、Vue生命周期

class与style绑定、表单输入绑定、Vue生命周期 1 class与style绑定1.1 绑定class1.2 绑定style1.3 练习 2 表单输入绑定3 Vue生命周期3.1 vue生命周期3.2 组件的生命周期钩子 1 class与style绑定 操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attri…

【操作系统】操作系统内核

图灵机 当系统中有一个CPU的时候 &#xff0c;MR就是它的状态 当系统中有n个CPU的时候&#xff0c;MR1,MR2…MRn 是它的状态 IRQ和NMI是低电平有效信号 NMI不可屏蔽中断 6502的CPU一共40个引脚 eflags寄存器里的 IF 表示 interrupt enable 1表示可以响应中断&#xff0c;0表示…

破解马赛克有多「容易」?

刷短视频时&#xff0c;估计大家都看过下面这类视频&#xff0c;各家营销号争相曝光「一分钟解码苹果笔刷背后内容」的秘密。换汤不换药&#xff0c;自媒体们戏称其为「破解马赛克」&#xff0c;殊不知让多少不明真相的用户建立起了错误的认知&#xff0c;也让苹果笔刷第 10086…

【网络编程】demo版UDP网络服务器实现

文章目录 一、引入二、服务端实现2.1 创建套接字socket2.2 绑定bind2.3 启动服务器2.4 IP的绑定2.5 读取数据recvfrom 三、用户端实现3.1 绑定问题3.2 发送数据sendto 四、源码 一、引入 在上一章【网络编程】socket套接字中我们讲述了TCP/UDP协议&#xff0c;这一篇就是简单实…

保护移动设备免受恶意软件侵害优秀方法

几天前&#xff0c;移动恶意软件攻击增加了500%显然&#xff0c;我们大多数人都不知道不能很好地保护我们的手机下面小编揭秘有效保护移动设备免受恶意软件侵害的最佳方法。 1、使用移动反恶意软件 恶意软件很容易感染智能手机和平板电脑&#xff0c;因此在设备上安装可靠的…

douyin 之xgorgon0404参数

如果我们想要看抖音的数据&#xff0c;在抓包的时候&#xff0c;会发现有一个xgorgon参数,在请求接口的时候&#xff0c;只需要在请求头携带xgorgon参数&#xff0c;就能获得响应后的数据。 目前抖音的xgorgon0404算法已经还原了&#xff0c; 下面是一个请求的demo。代码如下:…