【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则提供简单、面向无连接的传输服务,适用于对实时性要求较高,但对数据完整性要求相对较低的场景。在实际应用中,根据不同的需求,选择合适的协议是保证网络通信质量的重要因素。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值