TCP/UDP 协议

news2024/11/25 7:03:15

目录

一.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协议

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

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

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

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

相关文章

深入学习 C++编程,数据结构与算法关系

数据结构是计算机科学中非常重要的概念之一。它是一种组织和存储数据的方式,能够有效地操作和管理数据,以便提高算法的效率。 以下是一些为什么要有数据结构的原因: (1) 数据组织:数据结构可以帮助我们组织和管理大量的数据。通过…

SOLIDWORKS PDM—邮件信息系统

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据,并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional,您的团队能够:1. 安全地存储和索引设计数据以实现快速检索;2. 打消关于…

java项目 出现同名不同类的解决方法(万能)

目录 前言1. 问题所示2. 原理分析3. 解决方法4. 补充前言 该问题尤为复杂,特别是对现成项目进行编辑,环境尤为繁琐!(不过新手也常见) 下面以自身bug为例,困惑了几天~ 主要讲解排查的方式以及根源! 1. 问题所示 先以看故事的形式看这篇文章,会对你有感而发 在A类中…

mysql 与mssql 命令有那些区别

use databasename 进入指定数据库名 命令一致 select databse() 查询当前进入数据库的名 mssql无法使用,mysql正常 mssql 暂无 C知道介绍 以下是MySQL和MSSQL命令的一些区别: 1. 连接数据库的命令不同: - MySQL:…

docker 安装keepalived

docker 安装keepalived 1.Keepalived 简介 Keepalived 是 Linux 下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管&…

56.微服务面试篇

目录 一、SpringCloud常见组件有哪些? 二、Nacos源码分析和Sentinel源码分析。 三、Nacos的服务注册表结构是怎样的? 四、Nacos如何支撑数十万服务注册压力? 五、Nacos如何避免并发读写冲突问题? 六、Nacos与Eureka的区别有…

Redis核心知识小结

基础 redis为什么快呢? 单线程基于io多路复用底层C语言对数据结构做了优化完全内存的操作 Redis6.0使用多线程是怎么回事? Redis不是说用单线程的吗?怎么6.0成了多线程的? Redis6.0的多线程是用多线程来处理数据的读写和协议解析&#x…

段错误详细解读

一、摘要 段错误(Segmentation Fault)是在编程中常见的错误之一,通常会导致程序崩溃。常出现在Linux系统当中,而且目前关于这方面的解决教程较少。 什么人会使用Linux?Linux 是世界上最受欢迎的操作系统之一&#xf…

产品入门第四讲:Axure动态面板

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​​​ 🌟在这里,我要推荐给大家我的专栏《Axure》。🎯🎯 🚀无论你是编程小白,还…

TrustZone之强制隔离

TrustZone有时被称为一个强制执行的保护系统。请求者表示其访问的安全性,而内存系统决定是否允许该访问。内存系统基于何种方式进行检查呢? 在大多数现代系统中,内存系统的检查是由互连完成的。例如,Arm NIC-400允许系统设计人员为每个连接的完成者指定以下内容: • 安全…

ShenYu网关Http服务探活解析

文章目录 网关端服务探活admin端服务探活 Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时,将服务从可用列表中移除。 网关端服务探活 以divide插件为例,看下divide插件是如何获…

实现进程间的通信

本例程是开发一款能实现进程通信的DLL。本例程以Visual Studio 2015为例。在Visual Studio 2013,Visual Studio 2017都是可以。 第一步:在Visual Studio 2015中,创建DLL工程。如何创建DL,在这里就不作具体说明了。百度都有许多创建…

【九】python模板方法模式

9.1 模板方法模式概述 模板方法模式是一种行为设计模式,它使用一个抽象的基类定义了一个操作中的算法的骨架,而将一些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法中的某些步骤。 9.2 代码示例 在Python中使用…

SpringBoot接口开发

一、springboot官方demo开发 依赖包和父:pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version></dependency&g…

windows禁用系统更新

1.在winr运行框中输入services.msc&#xff0c;打开windows服务窗口。 services.msc 2.在服务窗口中&#xff0c;我们找到Windows update选项&#xff0c;如下图所示&#xff1a; 3.双击windows update服务&#xff0c;我们把启动类型改为禁用&#xff0c;如下图所示&#xff…

翻译: ChatGPT Token消耗粗略计算英文就是除以四分之三

在这个视频中&#xff0c;我想带你快速浏览一些例子&#xff0c;以建立对在软件应用中使用大型语言模型的实际成本的直观感受。让我们来看看。这是一些示例价格&#xff0c;用于从不同的大型语言模型获取提示和回应&#xff0c;这些模型对开发者可用。即&#xff0c;如果你在你…

page_title is not translated into en_US(American English)

提示&#xff1a;page_title is not translated into en_US(American English) 修改&#xff1a;三个string.json文件都需要出现相同的name和value才行&#xff0c;如果根据提示进行修改

JS获取当前系统电量情况

在前端浏览器中我们可以通过使用JavaScript的navigator.getBattery()方法来获取当前系统的电池情况。 这个API可以监测设备的电池状态&#xff0c;包括是否在充电、当前电量以及放电或充电所需的时间。本文将介绍如何使用这个API以及它在实际应用中的使用。 API使用 首先让我…

双指针算法(一)

目录 移动零 复写零 快乐数 盛水最多的容器 双指针与单调性结合 有效三角形的个数 查找总价格为目标值的两个商品 两数之和 Ⅱ - 输入有序数组 双指针算法是通过定义两个指针不断单向移动来解决问题的一种算法。但双指针算法&#xff0c;是一个抽象的思想概念&#xf…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前&#xff0c;就想用纯FPGA做一套控制系统。可…