当前位置: 首页 > news >正文

TCP/UDP 协议

目录

一.TCP协议

1.介绍

2.报文格式

​编辑

确认号

控制位

窗口大小

3.TCP特性

二.TCP协议的三次握手

1.tcp 三次握手的过程

三.四次挥手

2.有限状态机

四.tcp协议和udp协议的区别

五.udp协议

UDP特性

六.telnet协议


一.TCP协议

1.介绍

TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP是互联网中使用最广泛的协议之一,与IP协议一起构成TCP/IP协议族的基础。

2.报文格式

源端口(Source Port)16发送方使用的端口号,标识发送数据的应用程序。
目的端口(Destination Port)16接收方使用的端口号,标识接收数据的应用程序。
序号(Sequence Number)32数据流中的第一个字节的编号,用于确保数据按序到达。
确认号(Acknowledgment Number)32对方需要确认的最后一个已接收字节的编号+1。
首部长度(Heade Length)4表示TCP头部长度,以32位字(4字节)为单位。
保留(Reserved)6必须为0,通常用于将来扩展。
控制位(Control Bit)8包含多个控制位,如URG(紧急)、ACK(确认)、PSH(急切)、RST(重置)、SYN(同步)、FIN(断开)。
窗口大小(Window Size)16接收方期望的下一报文段的最大长度。
校验和(Checksum)16用于检测数据错误的校验和,覆盖头部和数据部分。
紧急指针(Urgent Pointer)16如果设置了URG标志,则指出紧急数据的末尾。

确认号

seq(确认号)=x

A--------------》》B

《《----------------- 确认号x+1 希望A 下次发的数据包序号为x+1

seq=x+1

------------------》》

确认号的作用:告诉对方我收到了你的消息 确认机制

控制位

控制位:描述了AB两台电脑目前处于什么状态

tcp 先要建立连接

A B

1没有建立连接

2已建立连接

3断开连接

URG(紧急位):当该位被置为1时,表示紧急指针有效。紧急指针字段指出紧急数据的末尾。

紧急数据通常用于通知接收方有需要立即处理的信息。

表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效

ACK(确认位):当该位被置为1时,确认号字段有效。这意味着发送方已经收到了之前的数据,并且正在期待接收方的下一个序列号的数据。所有的连接建立、数据传输和连接终止都必须使用ACK标志

表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

PSH(急切位):当该位被置为1时,要求接收方立即将数据提交给上层应用程序,而不是等待缓冲区填满后再进行

提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中

RST(重置位):当该位被置为1时,表示连接出现严重错误或者异常,需要重新初始化连接状态。

RST标志通常在网络故障、非法数据包或连接超时等情况下使用

如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段

SYN(同步位):当该位被置为1时,表示这是一个连接请求或连接接受报文。在三次握手过程中,SYN标志用于同步序列号

在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段

FIN(断开位):当该位被置为1时,表示发送方已经没有更多的数据要发送,希望关闭连接。

在四次挥手过程中,FIN标志用于结束数据传输

表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段

  • syn=1 请求建立连接
  • syn=1 ack=1 同一和你连接
  • fin=1 请求断开
  • fin=1 ack 同一和你断开

窗口大小

窗口大小: 调节每次发送的数据包量

服务端和客户端之间会根据实际情况 自动调节数据包的个数

3.TCP特性

  • 工作在传输层

  • 面向连接协议

  • 全双工协议

  • 半关闭

  • 错误检查(校验)

  • 将数据打包成段,排序 (给数据排序,确定数据来源于哪一台主机)

  • 确认机制,对面每发一个包,我会告诉对面我收到了

  • 数据恢复,重传

  • 流量控制,滑动窗口

二.TCP协议的三次握手

TCP建立连接的过程称为三次握手

为什么要是三次?

确保数据能够到达,2次不够,4次多余,三次正好

1.tcp 三次握手的过程

客户端主动发起请求报文,其中报文序号是随机产生的x,并且报文中的控制位SYN=1,代表请求建立连接

当服务端收到请求建立连接的报文会回复一个报文会产生是随机序号y,生成一个确认号值为客户端请求报文的序号+1(x+1),然后控制位SYN=1,ACK=1代表同意建立连接

当客户端收同一建立连接的报文时,会回复一个确认报文,会按照对方要求 产生序号为x+1,再生成一个确认号值为对方报文的序号+1(y+1),最后控制位的ACK=1,代表收到对方同意连接的请求

pc1 pc2

1发送SYN报文(seq=x,SYN=1)

2发送SYN+ACK报文(seq=y,ack=x+1,SYN=1,ACK=1)

3发送ACK报文(seq=x+1,ack=y+1,ACK=1)

当pc1想和pc2建立起连接 将 连接信息写入报文

第一步 :pc1会发送一个 建立连接的请求报文 : 这个报文中 有

  1. 报文的序号(seq=x)

  2. 同步位(请求建立连接关系: SYN=1 ACK=0 控制位:当前两台机器处于什么状态? 建立连接 处于连接 断开连接 )

第二步: 当pc2 收到消息以后 是不是要回复一个报文

  1. 报文的序号 (seq=y)

  2. ack确认号( 我希望你下一次发送 x+1 序号的报文给你 )

  3. 控制位 SYN=1 ACK=1 请求建立连接 pc2 同意建立连接

第三步:收到 pc2 同意建立连接的报文后

1.会发送一个x+1报文

2.会告诉对方 我希望你下次 发送y+1的序号报文给我

3.最后 将ACK=1 封装进去 告诉我收到你的同意请求

三.四次挥手

四次挥手(Four-way Handshake)是TCP(Transmission Control Protocol)协议用于终止连接的过程。这个过程确保了双方都知道对方已经准备好关闭连接,防止数据丢失和资源浪费。

挥手为什么需要四次?
因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。

(一)主动关闭方发送FIN:

主动关闭方(通常是客户端或发起断开请求的一方)向被动关闭方(通常是服务器端或接收到断开请求的一方)发送一个FIN=1的报文段。这个报文段表明主动关闭方没有更多的数据要发送,并进入FIN-WAIT-1状态。

(二)被动关闭方回复ACK:被动关闭方接收到FIN报文段后,返回一个带有ACK=1的报文段,确认收到了主动关闭方的断开请求。此时,被动关闭方会将未完成的数据发送给主动关闭方,然后进入CLOSE-WAIT状态。

(三)被动关闭方发送FIN:当被动关闭方完成了所有数据的发送后,它也会向主动关闭方发送一个FIN=1的报文段,表示自己也准备好关闭连接。这时,被动关闭方进入LAST-ACK状态。

(四)主动关闭方回复ACK:主动关闭方接收到被动关闭方的FIN报文段后,返回一个带有ACK=1的报文段,确认收到了被动关闭方的断开请求。这时,主动关闭方进入TIME-WAIT状态,等待一段时间以确保最后一个ACK能够到达被动关闭方。

(五)被动关闭方关闭连接:被动关闭方接收到主动关闭方的ACK报文段后,可以安全地关闭连接。

(六)主动关闭方关闭连接:在TIME-WAIT状态等待一段时间后,如果主动关闭方没有收到任何数据包,则认为最后一个ACK已经成功送达,可以安全地关闭连接。

通过这个四次挥手的过程,TCP能够确保双方都已准备好关闭连接,避免了因一方错误关闭连接而引发的问题

2.有限状态机

  • CLOSED 没有任何连接状态
  • LISTEN 监听状态,等待来自远方TCP端口的连接请求 
  • SYN-SENT 在发送连接请求后,等待对方确认
  • SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
  • ESTABLISHED 代表传输连接建立,双方进入数据传送状态
  • FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
  • FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
  • TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
  • CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
  • LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
  • CLOSING 双方同时尝试关闭传输连接,等待对方确认

四.tcp协议和udp协议的区别

tcpudp
是否连接面向连接不连接
是否可靠可靠,传输使用流量控制和拥塞控制不可靠,不使用流量控制和拥塞控制
传输方式面向字节流面向报文
传输效率
使用场景适用于要求可靠传输的应用,例女文件传输适用于实时应用 (IP电话、视频会议、直播等)

五.udp协议

UDP(User Datagram Protocol)用户数据报协议是一种无连接的传输层通信协议,它不保证数据包的顺序、可靠性和完整性。

  • 简单快速:UDP没有复杂的握手和确认机制,数据包可以直接发送到目标主机。
  • 无连接:在使用UDP之前,不需要建立连接。只需知道接收方的IP地址和端口号,就可以直接发送数据包。这也意味着当网络条件变化时,UDP无法自动调整发送速率或重新发送丢失的数据包。
  • 不可靠:UDP不提供任何保证数据包到达目的地的机制。如果数据包在网络中丢失、损坏或延迟,UDP不会进行重传或修复。
     

UDP特性

  • 工作在传输层
  • 提供不可靠的网络访问
  • 非面向连接协议
  • 有限的错误检查
  • 传输性能高
  • 无数据恢复特性

udp 69 tftp 简易文件传输协议

111 rpc 远程过程调用

123 ntp 网络时间协议

六.telnet协议

远程连接协议(远程管理协议)

作用:探测远端服务器端口是否打开

相关文章:

TCP/UDP 协议

目录 一.TCP协议 1.介绍 2.报文格式 ​编辑 确认号 控制位 窗口大小 3.TCP特性 二.TCP协议的三次握手 1.tcp 三次握手的过程 三.四次挥手 2.有限状态机 四.tcp协议和udp协议的区别 五.udp协议 UDP特性 六.telnet协议 一.TCP协议 1.介绍 TCP(Transm…...

如何正确理解和使用 Golang 中 nil ?

目录 指针中的 nil 切片中的 nil map 中的 nil 通道中的 nil 函数中的 nil 接口中的 nil 避免 nil 相关问题的最佳实践 小结 在 Golang 中,nil 是一个预定义的标识符,在不同的上下文环境中有不同的含义,但通常表示“无”、“空”或“…...

IDEA新建jdk8 spring boot项目

今天新建spring boot项目发现JDK版本最低可选17。 但是目前用的最多的还是JDK8啊。 解决办法 Server URL中设置: https://start.aliyun.com/设置完成后,又可以愉快的用jdk8创建项目了。 参考 https://blog.csdn.net/imbzz/article/details/13469117…...

Qt/C++音视频开发59-使用mdk-sdk组件/原qtav作者力作/性能凶残/超级跨平台

一、前言 最近一个月一直在研究mdk-sdk音视频组件,这个组件是原qtav作者的最新力作,提供了各种各样的示例demo,不仅限于支持C,其他各种比如java/flutter/web/android等全部支持,性能上也是杠杠的,目前大概…...

智安网络|企业网络安全工具对比:云桌面与堡垒机,哪个更适合您的需求

随着云计算技术的快速发展,越来越多的企业开始采用云计算解决方案来提高效率和灵活性。在云计算环境下,云桌面和堡垒机被广泛应用于企业网络安全和办公环境中。尽管它们都有助于提升企业的安全和效率,但云桌面和堡垒机在功能和应用方面存在着…...

Git忽略已经提交的文件

原理类似于 Android修改submodule的lib包名...

MVVM和MVC以及MVP的原理以及它们的区别

MVVM、MVC 和 MVP 都是前端架构模式,它们各自有不同的原理和特点。 MVC(Model-View-Controller) 原理:MVC 将应用程序分为三个部分:模型(Model)、视图(View)和控制器&a…...

WeChatMsg: 导出微信聊天记录 | 开源日报 No.108

Mozilla-Ocho/llamafile Stars: 3.5k License: NOASSERTION llamafile 是一个开源项目,旨在通过将 lama.cpp 与 Cosmopolitan Libc 结合成一个框架,将 LLM (Large Language Models) 的复杂性折叠到单个文件可执行程序中,并使其能够在大多数…...

Python学习之复习MySQL-Day3(DQL)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧!DQL简介基本查询查询多个/全部字段设置别名去除重复记录 条件查询条件查询介绍实例演示 聚合函数什么是聚合函数?常见的聚合函数实例演示 分组查询分组查询语法where 和 having 的区别实例演示 排序查询语法实…...

AI超级个体:ChatGPT与AIGC实战指南

目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…...

SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍)

SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍) 文章目录 SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍)[TOC] 前言一、初始…...

Kafka-Kafka基本原理与集群快速搭建(实践)

Kafka单机搭建 下载Kafka Apache Download Mirrors 解压 tar -zxvf kafka_2.12-3.4.0.tgz -C /usr/local/src/software/kafkakafka内部bin目录下有个内置的zookeeper(用于单机) 启动zookeeper(在后台启动) nohup bin/zookeeper-server-start.sh conf…...

Elasticsearch 进阶(索引、类型、字段、分片、副本、集群等详细说明)-06

笔记来源:Elasticsearch Elasticsearch进阶 进阶-核心概念 索引Index 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字…...

hive的分区表和分桶表详解

分区表 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。 静态分区表基本语法 创建分区表 create table dept_p…...

verilog语法进阶-分布式ram

概述: FPGA的LUT查找表是用RAM设计的,所以LUT可以当成ram来使用,也并不是所有的LUT都可以当成ram来使用,sliceM的ram可以当成分布式ram来使用,而sliceL的ram只能当成rom来使用,也就是只能读,不能写&#x…...

HarmonyOS使用HTTP访问网络

HTTP数据请求 1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。 那么要实现这样一种…...

GZ015 机器人系统集成应用技术样题1-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书(学生赛) 样题1 选手须知: 本任务书共 25页,如出现任务书缺页、字迹不清等问题,请及时向裁判示意,并进行任务书的更换。参赛队…...

计算机毕业设计 基于SpringBoot的日常办公用品直售推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

uniapp:使用fixed定位,iOS平台的安全区域问题解决

manifest.json > 添加节点 "safearea": { //iOS平台的安全区域"background": "#1C1E22","backgroundDark": "#1C1E22", // HX 3.1.19支持"bottom": {"offset": "auto"} },已解决&#xff…...

三层交换机原理与配置

文章目录 三层交换机原理与配置一、三层交换技术概述二、传统的 MLS三、基于CEF 的MLS1、转发信息库(FIB)2、邻接关系表3、工作原理: 四、三层交换机的配置1、三层交换机配置命令2、三层交换机配置步骤 三层交换机原理与配置 一、三层交换技…...

Linux-----5、文件系统

# 文件系统 # 终端的基本操作 ㈠ 打开多个终端 ㈡ 快速清屏 新建标签:command T 新建窗口:command N 关闭标签:command Q 关闭窗口:command W 放大:command 缩小:command - 清屏&#xff…...

电脑自动关机怎么设置?

电脑自动关机怎么设置?如果你是一名上班族,工作忙起来很多事情都会忘记做,有时候忙到很晚后紧急下班,就会忘记给电脑关机,电脑如果经常不关机,那么电脑就会超负荷的运转,大家都知道电脑的寿命是…...

MS5602视频 8 位数模转换器,可替代TLC5602

MS5602 是低功率、超高速视频数模转换器。 MS5602 以 DC 至 20MHz 的采样速率,将数字信号转换成模拟信号。由于高速工作 的特性, MS5602 适合于数字电视、电脑视频处理及雷达信号处 理等数字视频应用。 MS5602 工作在 -40C 至 85C 的温度范围内 …...

Logistic Regression——逻辑回归

1. 为什么需要逻辑回归 在前面学习的线性回归中,我们的预测值都是任意的连续值,例如预测房价。除此之外,还有一个常见的问题就是分类问题,而逻辑回归是一个解决分类问题的模型,其预测值是离散的。 分类问题又包括…...

跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

本文为转载 原文链接: 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发) 内容如下 QCustomPlot是一个开源的基于Qt的第三方绘图库,能…...

Todesk、向日葵等访问“无显示器”主机黑屏问题解决

我的环境是 ubuntu 22.04 安装 要安装 video dummy,请在终端中运行以下命令: sudo apt install xserver-xorg-video-dummy配置 video dummy 的配置文件请自行搜索 使用任何文本编辑器打开此文件。 我的是 /etc/X11/xorg.conf 默认配置文件包含以下内…...

maven打包插件maven-jar-plugin与spring-boot-maven-plugin

maven几种打包插件介绍 文章目录 &#x1f50a;1.spring-boot-maven-plugin打包后效果 &#x1f4d5;2.maven-jar-plugin打包后效果&#x1f58a;️最后总结 &#x1f50a;1.spring-boot-maven-plugin <plugins><plugin><groupId>org.springframework.boot&…...

uniapp微信小程序下载base64图片流或https图片

常规https的图片下载是这样的 const urlPath https://test/logo.png uni.downloadFile({url: urlPath,success(res){// 这时会产生一个临时路径&#xff0c;在应用本次启动期间可以正常使用。if (res.statusCode 200) {// 需要将图片保存到相册uni.saveImageToPhotosAlbum({…...

数据结构 | Log-Structured Merge Tree (LSM Tree)

今天介绍LSM Tree这个数据结构&#xff0c;严格意义上来说&#xff0c;他并不像他的名字一样是一棵树型的数据结构&#xff0c;而更多是一种设计思想。 LSM Tree最先在1996年被提出&#xff0c;后来被广泛运用于现代NoSQL&#xff08;非关系型数据库&#xff09;系统中&#xf…...

QEMU源码全解析 —— virtio(9)

接前一篇文章&#xff1a; 上两回讲解了virtio balloon相关类所涉及的realize函数以及大致流程&#xff0c;如下表所示&#xff1a; realize函数parent_dc_realize函数DeviceClassvirtio_pci_dc_realizePCIDeviceClassvirtio_pci_realizeVirtioPCIClassvirtio_balloon_pci_rea…...

wordpress后台在哪里设置段落间距/seo技术推广

当jvm进程退出的时候&#xff0c;或者受到了系统的中断信号&#xff0c;hook线程就会启动&#xff0c;一个线程可以注入多个钩子&#xff0c;这是一个实例&#xff1a; import java.io.IOException; import java.util.concurrent.TimeUnit;public class HookTest {public stat…...

制作网站开发/电脑培训班零基础网课

知名企业家、同时也是 NBA 小牛队的老板马克库班&#xff08;Mark Cuban&#xff09;曾说过一句话&#xff1a;人工智能&#xff0c;深度学习和机器学习&#xff0c;不论你现在是否能够理解这些概念&#xff0c;你都应该学习。否则三年内&#xff0c;你就会像灭绝的恐龙一样被社…...

动态网站后台怎么做/江苏网站建站系统哪家好

1.规范&#xff1a;html规范、css规范、javascript规范、ECMA规范&#xff08;ECMA262&#xff1a;js相关的标准ECMA404&#xff1a;json规范&#xff09;、DOM规范、BOM没有规范2. target 代表一个特殊的元素&#xff0c;它的id是URI的片段标识符&#xff0c;是作用于链接元素…...

如何做网站推广方案/宜兴网站建设

感谢百度上各位IT界朋友的帮助&#xff0c;由于某个软件安装失败&#xff0c;导致ubuntu软件中心软件消失的解决办法&#xff1a; 找百度&#xff0c;有人说&#xff0c; 使用命令:sudo apt-get install software-center输入命令后&#xff0c;提示&#xff1a;software-center…...

网站开发形式/公司怎么建立自己的网站

just type open . 转载于:https://www.cnblogs.com/maozhige/p/3804525.html...

建设部中国建造师网查询/网站怎么优化关键词排名

查看垃圾回收情况并对内存进行转储查询JAVA线程#ps -ef | grep java或#jps2.查看垃圾回收总体统计情况# jstat -gcutil pidS0&#xff1a;幸存1区当前使用比例S1&#xff1a;幸存2区当前使用比例E&#xff1a;伊甸园区使用比例O&#xff1a;老年代使用比例M&#xff1a;元数据区…...