【Linux之·网络编程·TCP和UDP】

系列文章目录


文章目录


前言

TCP(传输控制协议)和UDP(用户数据报协议)是两种常见的网络传输协议。

在实际网络通信中,TCP和UDP通常是同时存在的。例如,在一个网页浏览过程中,TCP用于下载网页内容,确保数据的完整性和顺序性。而在网页中嵌入的视频或音频流则使用UDP进行传输,以保证实时性。


一、概述

  • TCP

TCP(Transmission Control Protocol): 可靠、面向连接的协议 TCP是一种面向连接的协议,它在通信之前需要建立连接。它通过建立连接、数据传输和断开连接的过程来提供可靠性和顺序性。在传输数据时,TCP提供了一种可靠的机制,通过使用确认、重传等技术确保数据的完整性和准确性。当数据包在网络上丢失或损坏时,TCP可以通过重新发送丢失的数据包来保证数据的完整性。具体来说,TCP使用三次握手建立连接,确保数据按照正确的顺序和可靠地到达接收方。TCP还使用滑动窗口和确认机制来确保数据的完整性和可靠性。由于这种可靠性和顺序性,TCP适用于一些对数据完整性和顺序性要求较高的应用,例如文件传输、电子邮件、网页浏览等。

  • UDP

UDP(User Datagram Protocol): 简单、面向无连接的协议 UDP是一种面向无连接的协议,数据传输之前不需要建立连接。直接将数据报发送出去。相比于TCP,UDP提供了一种简单的、不可靠的传输方式,不保证数据的可靠性和顺序。当数据包在传输过程中丢失或损坏,UDP不会重传丢失的数据包。UDP适于对实时性要求较高,但对数据完整性要求相对较低的应用,例如音频和视频流传输、在线游戏等。UDP的优点是传输速度快,占用较少网络带宽,但缺点是无法保证数据的可靠性和顺序性。

二、工作过程

2.1 TCP协议的工作过程

  • TCP(传输控制协议)的工作原理可以简单地概括为以下几个步骤:

建立连接: 在通信双方之间建立连接之前,必须通过三次握手来确立连接。发起连接的一方发送一个 SYN(同步)报文段给接收方,接收方收到后回应一个 SYN+ACK(同步+确认)报文段给发起方,最后发起方再发送一个 ACK(确认)报文段给接收方,连接正式建立。
数据传输: 连接建立后,通信双方可以开始传输数据。发送方将数据分割成称为数据段的较小单元,并添加 TCP 头部信息。接收方接收数据段,检查 TCP 头部信息来保证数据的完整性和顺序。
确认和重传: 接收方在接收到数据段后会发送一个确认(ACK)给发送方来确认接收到的数据。如果发送方没有收到确认,它会重新发送相同的数据段,直到接收到确认为止。这种机制确保了数据的可靠传输。
拥塞控制: TCP 还具有拥塞控制的机制,用于控制传输过程中的网络拥塞。通过动态调整发送数据的速率和控制窗口大小,TCP 可以尽量避免网络拥塞,并确保网络的稳定运行。
连接关闭: 当数据传输完成后,通信双方可以通过四次挥手来关闭连接。发送方先发送一个关闭连接请求(FIN)给接收方,接收方收到后发送一个确认(ACK)给发送方,然后发送方再发送一个关闭连接请求(FIN)给接收方,最后接收方发送一个确认(ACK)给发送方,连接正式关闭。


总结起来,TCP 协议通过建立连接、数据传输、确认和重传、拥塞控制、连接关闭等机制,实现了可靠的数据传输。 通过这些步骤,TCP 可以保证数据的完整性、有序性和可靠性,适用于对数据传输质量要求较高的应用场景。

2.1 UDP协议的工作过程

UDP协议的工作原理,包括数据报的发送和接收,可以通过图表或示例来说明。

TCP协议的优点和缺点:列举TCP协议的优点和缺点,分析其适用性和限制。

UDP协议的优点和缺点:列举UDP协议的优点和缺点,分析其适用性和限制。

TCP与UDP的比较:对比TCP和UDP协议的特点、工作过程、优缺点等方面的差异,帮助读者更好地理解两者之间的区别。

TCP是基于连接的通信,UDP是非连接通信

TCP是可靠传输,数据不丢失,而UDP是不可靠传输,有可能丢失

TCP是在传输层,UDP也在传输层

TCP需要三次握手,而UDP不需要。

UDP传输速度快,发送小尺寸数据,适合做视频等较大数据的传输

TCP是一对一通信,而UDP可以一对多通信。

TCP是基于数据流通信,而UDP是基于数据报通信

三、帧结构

3.1 TCP


TCP头部通常包含以下字段:

源端口(Source Port):发送方进程的端口号。

目的端口(Destination Port):接收方进程的端口号。

序列号(Sequence Number):发送数据的字节序列号。

确认号(Acknowledgment Number):期望收到的下一个序列号。

头部长度(Header Length):表明TCP头部有多少个4字节。

标志位(Flags):包括URG、ACK、PSH、RST、SYN、FIN等,用来控制TCP连接的状态。

窗口大小(Window Size):发送方允许接收方一次性发送的数据量。

校验和(Checksum):对TCP头部和数据进行校验。

紧急指针(Urgent Pointer):当URG标志置位时,指出紧急数据在数据段中的结束。

选项(Options):TCP头部可以包含可选的字段,如最大传输单元(MSS)、窗口扩大(WSCALE)等。


TCP头部结构主要包括以下几个部分:

16位端口号:包括了源端口号和目的端口号,进行TCP通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号或服务器管理员自定义的端口号。1

32位序号:一次TCP通信过程中对一个传输方向上的字节流的每个字节的编号,序号值将会被系统设置为ISN加上该报文段所携带数据的第一个字节在整个数据字节流中的偏移。

32位确认号:用作对另一方发送来的TCP报文段做出相应,其值是收到对方的报文段的序号值加1。

4位头部长度:标识该TCP头部有多少个32bit字,最大能表示TCP头部大小为60字节。

6位标志位:包括URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

URG:表示紧急指针是否有效。

ACK:表示确认号是否有效。

PSH:提示接收端应用程序立即从TCP接受缓冲区读走数据。

RST:表示要求对方重新建立连接。

SYN:表示请求建立一个连接。

FIN:表示通知对方本端将关闭连接。

16位窗口大小:是TCP流量控制的一个手段,它告诉对方本端TCP接收缓冲区还能容纳多少字节的数据,以让对方控制发送数据的速度。

16位校验和:由发送端填充,接收端对TCP报文段执行CRC算法以效验TCP报文段在传输过程中是否损坏。

16位紧急指针:是一个正的偏移量,它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。

此外,TCP头部还包括可变长的可选信息,最多包含40字节。


总结

  总之,TCP和UDP在网络通信中起着不可替代的作用。通过选择适当的传输协议,可以根据应用的需求来平衡数据的可靠性和实时性,从而实现稳定、高效的网络通信。

主要区别:

连接性:TCP是一种面向连接的协议,而UDP是面向无连接的协议。

可靠性:TCP提供可靠的数据传输,可以通过重传机制确保数据的完整性;而UDP无法保证数据的可靠性。

速度和效率:UDP相对于TCP更快,因为它不需要建立连接和维护连接状态的开销。

适用场景:

对数据可靠性有较高要求的场景,如文件传输、网页浏览等,应使用TCP协议。

对传输速度和实时性有较高要求的场景,如音频、视频实时传输,应使用UDP协议。

对资源消耗要求较低,数据丢失也没有太大影响的场景,如DNS查询、流量控制等,也可以使用UDP协议。

结论: TCP和UDP是网络通信中两种常见的协议。TCP提供可靠、面向连接的传输服务,适用于对数据完整性和顺序有较高要求的场景;而UDP则提供简单、面向无连接的传输服务,适用于对实时性要求较高,但对数据完整性要求相对较低的场景。在实际应用中,根据不同的需求,选择合适的协议是保证网络通信质量的重要因素。

相关推荐
AlfredZhao2 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao16 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
网络研究院2 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest2 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全