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

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

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

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

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

相关文章

DBCA创建RAC的过程截图

以下错误是由于配置的内存较大,而大页(HugePage)配置较小导致,调整大页后就好了。

Kafka基础理论与常用命令详解(超详细)

文章目录 前言一、Kafka概述1. Kafka简介2. Kafka架构2.1 Broker(代理服务器)2.2 Topic(主题)2.3 Producer(生产者)2.4 Consumer(消费者)2.5 Consumer Group(消费者组&am…

Centos硬盘操作合集

一、硬盘命令说明 lsblk 列出系统上的所有磁盘列表 查看磁盘列表 参数意义 blkid 列出硬盘UUID [rootzs ~]# blkid /dev/sda1: UUID"77dcd110-dad6-45b8-97d4-fa592dc56d07" TYPE"xfs" /dev/sda2: UUID"oDT0oD-LCIJ-Xh7r-lBfd-axLD-DRiN-Twa…

Mybatis详解

MyBatis是什么 MyBatis是一个持久层框架,用于简化数据库操作的开发。它通过将SQL语句和Java方法进行映射,实现了数据库操作的解耦和简化。以下是MyBatis的优点和缺点: 优点: 1. 灵活性:MyBatis允许开发人员编写原生的…

如何正确使用缓存来提升系统性能

文章目录 引言什么时候适合加缓存?示例1示例2:示例3: 缓存应该怎么配置?数据分布**缓存容量大小:**数据淘汰策略 缓存的副作用总结 引言 在上一篇文章IO密集型服务提升性能的三种方法中,我们提到了三种优化…

Kafka-Kafka基本原理与集群快速搭建

一、Kafka介绍 ​ ChatGPT对于Apache Kafka的介绍: Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理…

【基础篇】一,认识STM32

一,什么是STM32? STM32是一款由意法半导体公司开发的32位微控制器;其中ST指意法半导体;M指MCU或MPU,32指32 位。 STM32覆盖了Cortex-M的多种系列,包括M0、M0、M3、M7等。在分类上,STM32有很多…

MyBatisPlus基础入门笔记

MyBatisPlus基础入门笔记,源码可见下载链接 大家阅读时可善用目录功能,可以提高大家的阅读效率 下载地址:MyBatisPlus源码笔记 初识MyBatisPlus 入门案例 SpringBoot整合MyBatis(复习) 创建SpringBoot工程勾选使用的…

56.windows docker 安装ES、Go操作ES(github.com/olivere/elastic/v7库)

文章目录 一、环境准备1、 docker安装ES2、启动容器3、图像化客户端工具ElasticSearch-Head 二、Go ES连接与认证1、 连接ES2、配置ES认证 三、索引的增删改查四、文档的增删改创建单个文档根据文档id删除文档批量删除文档批量创建文档 五、文档查询列表查询精确匹配模糊匹配嵌…

五、Microsoft群集服务(MSCS)环境的搭建

一、【目的】 学会利用Windows Server布置群集环境。 二、【设备】 FreeNAS11.2,Windows Server 2019 三、【要求】 学会利用Windows Server布置群集环境,掌握处理问题的能力。 配置表: 节点公网IP(public)内网IP(private)群集IP(clust…

linux磁盘空间清理

查看磁盘使用情况 查看磁盘分区上可以使用的磁盘空间 $ df -h若要查看文件类型和block,使用下面的命令 $ df -T查看每个文件和目录的磁盘使用空间,也就是文件的大小。 $ sudo du -sh /* $ sudo du -h --max-depth1 /清理旧的 Snap 包版本以释放磁盘空…

华为OD试题六(数据最节约的备份方法、TLV解码)

1. 数据最节约的备份方法 题目描述: 有若干个文件,使用刻录光盘的方式进行备份,假设每张光盘的容量是500MB,求 使用光盘最少的文件分布方式 所有文件的大小都是整数的MB,且不超过500MB;文件不能分割、分卷…

centos-LAMP搭建与配置(论坛网站)

文章目录 LAMP简介搭建LAMP环境安装apache(httpd)安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:Linux操作系统,网页服务器Apache,…

工作遇到问题与解决办法(二)

弹出确认框 this.$confirm(确定删除全部添加的数据吗?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,type: warning}).then(() > {// 确定操作this.addYpslTempList[];this.isSelectfalse;//删除状态this.addMultiple true;this.$message({type: success,mes…

MySQL InnoDB存储引擎中的索引结构解析

目录 常见的几种数据结构1、二叉树2、红黑树3、B树4、B树5、总结 索引结构1、聚簇索引和非聚簇索引2、Hash索引3、总结 常见的几种数据结构 1、二叉树 特点: 每个节点最多有两个子节点,分别称为左子节点和右子节点。通常不是自平衡的,可能…

Mac中nvm切换node版本失败

Mac中使用 nvm 管理 node 版本,在使用指令:nvm use XXX 切换版本之后。 关闭终端,再次打开,输入 node -v 还是得到之前的 node 版本。 原因: 在这里这个 default 中有个 node 的版本号,使用 nvm use 时&a…

spring boot 实现直播聊天室(二)

spring boot 实现直播聊天室(二) 技术方案: spring bootnettyrabbitmq 目录结构 引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.96.Final</version> </dependency>Si…

安装DevEco Studio

下载 首先进入鸿蒙开发者官网&#xff0c;顶部导航栏选择开发->DevEco Studio 根据操作系统下载不同版本&#xff0c;其中Mac(X86)为英特尔芯片&#xff0c;Mac(ARM)为M芯片。 安装 下载完毕后&#xff0c;开始安装。 点击Agree 首次使用&#xff0c;请选择Do not impor…

Vue 详细教程

Vue实战 1. Vue 引言 渐进式 JavaScript 框架 --摘自官网 官网地址&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js # 渐进式 1. 易用 html css javascript 2. 高效 开发前端页面 非常高效 3. 灵活 开发灵活 多样性 # 总结 Vue 是一个javascript 框架 js 简化页面js操作…

Pr自动从视频脚本剪辑视频FirstCut插件免费下载

FirstCut 插件将自动从视频脚本中剪辑视频&#xff0c;在例如新闻、采访、自媒体视频等带有配音或字幕内容的视频制作中提高了粗剪效率。 使用 FirstCut&#xff0c;大大缩短了粗剪的时间&#xff0c;而不是转到每个视频文件并找到 IN 点和 OUT 点&#xff0c;然后将其插入到序…