TCP/UDP 协议

news/2024/5/18 13:38:28 标签: tcp/ip, udp, 网络

目录

一.TCP协议

1.介绍

2.报文格式

​编辑

确认号

控制位

窗口大小

3.TCP特性

二.TCP协议的三次握手

1.tcp 三次握手的过程

三.四次挥手

2.有限状态机

udp%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%8C%BA%E5%88%AB-toc" style="margin-left:0px;">四.tcp协议和udp协议的区别

udp%E5%8D%8F%E8%AE%AE-toc" style="margin-left:0px;">五.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 双方同时尝试关闭传输连接,等待对方确认

udp%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%8C%BA%E5%88%AB">四.tcp协议和udp协议的区别

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

udp%E5%8D%8F%E8%AE%AE">五.udp协议

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

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

UDP特性

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

udp 69 tftp 简易文件传输协议

111 rpc 远程过程调用

123 ntp 网络时间协议

六.telnet协议

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

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


http://www.niftyadmin.cn/n/5264193.html

相关文章

【算法与数据结构】51、LeetCode N 皇后

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:N皇后问题也算是一个难题,难点在于构建棋盘,以及处理节点、递归回溯等操作的写…

【强化学习-读书笔记】动态规划(策略评估、价值迭代、策略迭代算法)

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto动态规划 (Dynamic Programming, DP) 是一类优化方法,在给定一个用马尔可夫决策过程 (MDP) 描述的完备环境模型的情况下,其可以计算最优的策…

12.4~12.14概率论复习与相应理解(学习、复习、备考概率论,这一篇就够了)

未分配的题目 概率计算(一些转换公式与全概率公式)与实际概率 ,贝叶斯 一些转换公式 相关性质计算 常规,公式的COV与P 复习相关公式 计算出新表达式的均值,方差,再套正态分布的公式 COV的运算性质 如…

STC8模板代码

目录 STC8依赖文件库 程序结构 GPIO操作 初始化所有 使用宏配置IO口 使用函数配置IO口 UART操作 头文件 初始化 UART1 UART2 UART3 UART4 接收逻辑 UART1 UART2 UART3 UART4 发送 UART1 UART2 UART3 UART4 配置printf Timer操作 导入依赖 初始化 Time…

C#科学绘图之scottPlot绘制多个图像

文章目录 示例移除图像图例信号图 scott系列:绘图初步 示例 从名字就能看出,ScottPlot的绘图函数AddScatter的作用是为图窗添加数据点,换言之,每调用一次AddScatter,就可以在图窗中添加一组图像。下面添加两个按钮&a…

Qt图像处理-亮度、对比度、灰度、锐化、负片的实现

本文演示Qt中图像的亮度、对比度、灰度、锐化、负片处理实现 一、概述 亮度和对比度原理 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越高。而且我们也要把亮度和对比…

swagger的ApiModelProperty设置字段的顺序

需求 让前端可以直接通过swagger就能知道各个字段是什么意思 如何配置 比如,我们设置了ApiModelProperty ApiModelProperty("用户主键")private Long userId;在swagger页面能直接看到注释 但是这个顺序是按照字母排序的,明显不符合我们的要…

什么是JWT(JSON Web Token)?如何在PHP中使用它?

JSON Web Token(JWT)是一种用于在各方之间安全传输信息的开放标准(RFC 7519)。它以紧凑且独立的方式在各方之间传输信息,可通过数字签名进行验证,确保信息的完整性和可靠性。JWT 可以在两个系统之间安全地传…