HCIA---TCP/UDP协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

通过上一篇对OSI七层参考模型的了解,我们清楚了OSI七层模型中各层的作用以及数据是如何传输的,在现实生活中,人们无时无刻不在通过电话等工具进行会话从而进行信息交流,同理,在计算机网络的世界中,设备与设备之间是如何建立连接进行数据传输的呢?接下来,让我们详细了解一下设备与设备之间是如何建立连接关系的。

一.UDP协议简介

UDP(User Datagram Protocol,用户数据报协议)是一种轻量级的传输层协议,在计算机网络中使用。与TCP协议不同,UDP协议不保证数据传输的可靠性和顺序性,但它具有较低的延迟和较少的网络开销。UDP协议通常被用于需要实时性较高的应用程序,如音频、视频、游戏等。

UDP协议的数据传输采用数据包的形式,每个数据包包含源端口号、目的端口号、数据长度和数据内容等信息。UDP协议没有连接的概念,因此在数据传输过程中,源端和目的端之间没有建立任何状态由于UDP协议不需要维护连接状态和各种控制信息,因此在网络中的开销比TCP协议小 。但是,这也意味着UDP协议没有对数据传输的可靠性和顺序性进行保障,因此需要应用程序自行实现相关处理机制。

UDP协议的优点是速度快、网络开销小 ,适用于对数据传输实时性要求较高的应用场景;缺点是不保证数据传输的可靠性和顺序性,需要应用程序自行处理相关问题。因此,在选择使用UDP协议时需要根据具体应用场景的需求进行权衡。

UDP协议的特点:

  1. 面向无连接:UDP协议是一种非面向连接的协议发送数据之前不需要建立连接,也不需要维护连接的状态 。因此,UDP协议的速度比TCP协议更快,但可靠性较低

  2. 简单、轻量级:UDP协议的头部较短,只有8个字节 ,相比之下TCP协议的头部有20个字节,因此UDP协议的数据包更小,传输效率更高

  3. 不可靠:UDP协议不提供可靠的数据传输机制,数据包可能会丢失、重复、乱序等,因此应用程序需要自己进行错误检测和重传等操作。

  4. 支持广播和多播:UDP协议可以将数据包传输给多个主机,支持广播和多播功能。

  5. 适用于实时应用:由于UDP协议传输数据速度快,数据包较小,因此适用于实时应用,如视频流、音频流等。

  6. 不支持拥塞控制:UDP协议不支持拥塞控制,当网络拥塞时,UDP协议可能会导致数据包丢失或网络负载过高。

二.TCP协议简介

TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的、可靠的、基于字节流的传输协议。TCP协议被广泛用于Internet上的通信,它在应用层和IP层之间提供可靠的数据传输服务。

TCP协议特点

1.面向连接:为了确保可靠性和有序性,TCP协议在数据传输之前需要建立连接,数据传输完成后需要断开连接。

2.可靠性:TCP协议可以确保数据的可靠性,它使用确认应答机制,如果发送方的数据没有被接收方正确接收,TCP协议会重新发送数据,直到接收方正确接收为止。

3.流式传输:TCP协议以字节流的方式传输数据,没有数据记录的界限,可以根据需要动态地调整数据传输的大小。

4.拥塞控制:TCP协议可以根据网络情况动态地调整数据传输的速率,避免网络拥塞。

5.数据传输有序:TCP协议可以确保数据按照发送的顺序传输,不会出现乱序的情况。

6.面向字节流:TCP协议以字节流的方式传输数据,没有数据记录的界限,可以根据需要动态地调整数据传输的大小。

三.TCP和UDP的区别

|-------------|-------------|
| TCP协议 | UDP协议 |
| 面向连接协议 | 无连接协议 |
| 传输可靠 | 传输不可靠 |
| 可以进行流控 | 不可进行流控 |
| 可以分段 | 不可分段 |
| 传输速度慢,占用资源大 | 传输速度快,占用资源小 |
[TCP和UDP的区别]

四.TCP/IP结构详解

源端口号和目的端口号(寻址): 与udp中类似,用于寻找发端和收端应用进程这两个值加上IP 首部中的源端IP地址和目的端IP地址唯一确定一个 ,在网络编程 中,一般一个IP地址和一个端口号组合称为一个套节字

序号(seq):用来标识从TCP发端向TCP收端发送 的数据字节流,它表示在这个报文段中的第 一个数据字节。在tcp中tcp用序号对每个字节进行计数(这个值与发送的帧数没有 关系,而是与发送的数据字节数有关系

确认序号(seq+1):包含发送确认的一端所期望收到的下一个序号 。因此,确认序号应当是上 次已成功收到数据字节序号加 1(不是单纯的序号加1,还包括数据字节 数)。

首部长度:用于记录tcp数据报首部的长度,一般为20字节,实际值为首部长度除以4。

|---------|--------------------------|
| URG | 紧急指针( urgent pointer)有效。 |
| ACK | 确认序号有效。 |
| PSH | 接收方应该尽快将这个报文段交给应用层。 |
| RST | 重建连接。 |
| SYN | 同步序号用来发起一个连接 |
| FIN | 发端完成发送任务。 |

**窗口大小:**用于流量控制。

**检验和:**检验和覆盖了整个的 TCP报文段: TCP首部和TCP数据,与udp相似需要计算伪首部。

五.TCP运输连接的阶段

TCP运输连接有以下三个阶段:

  • 建立TCP连接,也就是通过三报文握手来建立TCP连接。
  • 数据传送,也就是基于已建立的TCP连接进行可靠的数据传输。
  • 释放连接,也就是在数据传输结束后,还要通过四报文挥手来释放TCP连接。


TCP连接建立过程---TCP三次握手

TCP的连接建立要解决以下三个问题:

  • 1、使TCP双方能够确知对方的存在 。

  • 2、使TCP双方能够协商一些参数( 最大窗口值是否使用窗口扩大选项和时间戳选项,以及服务质量等)

  • 3、使TCP双方能够对运输实体资源(例如缓存大小连接表中的项目等)进行分配

这是两台要基于TCP进行通信的主机:

  • 主动发起TCP连接建立称为TCP客户(client)。

  • 被动等待TCP连接建立的应用进程称为TCP服务器(server)。

我们可以将TCP建立连接的过程比喻为"握手","握手"需要在TCP客户端和服务器之间交换三个TCP报文段。

最初两端的TCP进程都处于关闭状态。

一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息。 例如TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针,当前的发送和接收序号等。之后就准备接受TCP客户进程的连接请求, 此时TCP服务器进程就要进入监听状态等待TCP客户进程的连接请求。

TCP客户进程也是首先创建传输控制块,然后再打算建立。 TCP服务器进程是被动等待来自TCP客户端进程的连接请求,因此称为被动打开连接。

TCP连接时向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态**。**

TCP 连接请求报文段首部中的同步位SYN被设置为1,,表明这是一个tcp连接请求报文段。

序号字段seq被设置了一个初始值x作为TCP客户进程所选择的初始序号。

由于TCP连接建立是由TCP客户进程主动发起的,因此称为主动打开连接 。 请注意TCP规定SYN被设置为1的报文段不能携带数据但要消耗掉一个序号。

TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态。

1.该报文段首部中的同步位SYN和确认位ACK 都设置为1,表明这是一个TCP连接请求。

2.序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号。

3.确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号seq的确认。

请注意这个报文段也不能携带数据,因为它是SYN被设置为一的报文段但同样要消耗掉一个序号。

TCP服务器进程收到该确认报文段后也进入连接已建立状态,现在TCP双方都进入了连接已建立状态,他们可以基于已建立好的TCP连接进行可靠的数据传输了

TCP三次握手总结:

三次握手是 TCP 连接的建立过程。在握手之前,主动打开连接的客户端结束 CLOSE 阶段,被动打开的服务器也结束 CLOSE 阶段,并进入 LISTEN 阶段。随后进入三次握手阶段:

① 首先客户端向服务器发送一个 SYN 包,并等待服务器确认,其中

1.标志位为 SYN,表示请求建立连接;
2.序号为 Seq = x(x 一般取随机数);
3.随后客户端进入 SYN-SENT 阶段。

② 服务器接收到客户端发来的 SYN 包后,对该包进行确认后结束 LISTEN 阶段,并返回一段 TCP 报文,其中:

1.标志位为 SYN 和 ACK,表示确认客户端的报文 Seq 序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接;
2.序号为 Seq = y;
3.确认号为 Ack = x + 1,表示收到客户端的序号 Seq 并将其值加 1 作为自己确认号 Ack 的值,随后服务器端进入 SYN-RECV 阶段。

③ 客户端接收到发送的 SYN + ACK 包后,明确了从客户端到服务器的数据传输是正常的,从而结束 SYN-SENT 阶段。并返回最后一段报文。其中:

1.标志位为 ACK,表示确认收到服务器端同意连接的信号;
2.序号为 Seq = x + 1,表示收到服务器端的确认号 Ack,并将其值作为自己的序号值;
3.确认号为 Ack= y + 1,表示收到服务器端序号 seq,并将其值加 1 作为自己的确认号 Ack 的值。
4'随后客户端进入 ESTABLISHED。

当服务器端收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束 SYN-RECV 阶段,进入 ESTABLISHED 阶段,从而完成三次握手。

TCP四次挥手:

你可以看到,每个方向都需要一个 FIN 和一个 ACK ,因此通常被称为四次挥手

为什么挥手需要四次?

再来回顾下四次挥手双方发 FIN包的过程,就能理解为什么需要四次了。

关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。

服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送FIN 报文给客户端来表示同意现在关闭连接。

从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。

思维导图

相关推荐
、我是男生。5 分钟前
巴法云平台-TCP设备云-微信小程序实时接收显示数据-原理
网络协议·tcp/ip·微信小程序
川穹冬菱草1 小时前
Ubuntu 20.04.6编译安装COMFAST CF-AX90无线网卡驱动
网络·编译安装·comfast cf-ax90·无线网卡驱动·linux网卡驱动·ubuntu网卡驱动·aic8800驱动
Sunlight_7771 小时前
第五章 SQLite数据库:1、SQLite 基础语法及使用案例
java·linux·服务器·jvm·数据库·tcp/ip·sqlite
sky.fly2 小时前
多路由器通过三层交换机互相通讯(单臂路由+静态路由+默认路由版),通过三层交换机让pc端相互通讯
网络·tcp/ip·计算机网络·智能路由器
云达闲人3 小时前
Proxmox VE 用户与权限管理命令大全
运维·网络·云原生·容器·proxmox·用户权限管理·命令大全
长流小哥4 小时前
Linux网络编程实战:从字节序到UDP协议栈的深度解析与开发指南
linux·c语言·开发语言·网络·udp
00后程序员张4 小时前
iPhone相册导出到电脑的完整指南
websocket·网络协议·tcp/ip·http·网络安全·https·udp
jinan8865 小时前
加密软件的发展:从古典密码到量子安全
大数据·运维·服务器·网络·安全·web安全
您8135 小时前
二十、FTP云盘
linux·服务器·网络
August_._6 小时前
【JavaWeb】详细讲解 HTTP 协议
java·网络·网络协议·http