tcp和udp的数据传输过程以及区别
目录
一、数据传输过程
1.1 UDP 数据报服务图
这张图展示了 UDP 数据报服务的工作流程:
发送端
应用层:通过 `sendto()` 函数来发起数据发送操作。`sendto()` 是 UDP 编程中用于发送数据报的函数,它可以指定目标地址(IP 地址和端口号 )以及要发送的数据内容。在应用层,可能会有多个不同的操作或请求需要通过 UDP 发送数据,所以会多次调用 `sendto()` 函数 。
传输层:将应用层传递过来的数据封装成 UDP 数据报。UDP 数据报由 UDP 报头和数据部分组成,报头包含源端口号、目的端口号、长度和校验和等信息,完成封装后的数据报会被发送到网络中。
接收端
传输层:从网络中接收 UDP 数据报,检查数据报的目的端口号等信息,将符合条件的数据报传递给应用层 。
应用层:使用 `recvfrom()` 函数接收从传输层传来的 UDP 数据报。`recvfrom()` 函数不仅能接收数据,还能获取发送方的地址信息(源 IP 地址和端口号 ) 。同样,在应用层可能会多次调用 `recvfrom()` 函数来处理不同时刻接收到的数据报。
展示了 UDP 协议数据传输过程。发送端应用层通过
sendto()
函数将数据传递给传输层,传输层封装成 UDP 数据报进行发送;接收端传输层接收 UDP 数据报,应用层通过recvfrom() 函数接收数据。体现了 UDP 无连接、简单的传输特点,发送方直接发送,接收方直接接收,不涉及复杂连接建立与管理 。
1.2 TCP 字节流服务图
这张图展示了 TCP 字节流服务的特性
发送端
应用层:应用层通过多次调用 `send()` 函数分别发送 “hello”、“abc”、“test” 这些数据。`send()` 函数用于将应用层数据传递给传输层。
传输层:TCP 协议将这些数据暂存于 TCP 发送缓冲区。TCP 为了提高传输效率,会根据自身机制(如窗口大小、拥塞控制等 )对发送缓冲区中的数据进行组合和封装。如图中所示,可能会把 “hello” 和 “abc” 组合在一起封装成一个 TCP 报文段,“test” 单独封装成一个 TCP 报文段。这种组合并非严格按应用层发送顺序和边界,而是根据 TCP 自身策略。
接收端
传输层:接收端的 TCP 协议从网络中接收 TCP 报文段,先存储在 TCP 接收缓冲区。
应用层:应用层通过 `recv()` 函数从 TCP 接收缓冲区读取数据。由于 TCP 发送时可能对数据进行了组合封装,接收端应用层调用 `recv()` 读取数据时,不一定能按发送端应用层的原始边界和顺序获取数据,可能会一次性读取多个发送端组合封装的数据,也可能分多次读取。 总体而言,该图展示了 TCP 字节流服务中,数据在发送端和接收端的处理过程,突出 TCP 并不保证应用层数据的边界,而是以字节流形式进行传输和处理。
呈现了 TCP 协议的数据传输流程。发送端应用层多次调用
send()
函数发送数据,数据先存于 TCP 发送缓冲区,传输层根据自身机制(如窗口、拥塞控制 )将缓冲区数据封装成 TCP 报文段发送;接收端传输层接收 TCP 报文段存于 TCP 接收缓冲区,应用层通过recv()
函数读取数据。展示了 TCP 面向连接、可靠传输,且不保证应用层数据边界的特性 。
1.3 tcp和udp的区别
1.3.1 连接特性
- TCP:面向连接协议。数据传输前,客户端和服务器需通过 “三次握手” 建立连接,就像打电话先拨号接通 。建立连接能确保双方准备就绪,为可靠传输奠定基础,数据传输完毕后还需 “四次挥手” 断开连接 。
- UDP:无连接协议。传输数据无需建立连接,如同直接寄信,知道对方地址(IP 和端口 )即可发送,减少连接建立与拆除开销,传输更高效,但缺乏连接保障 。
1.3.2 可靠性
- TCP:可靠传输协议。具备确认机制(ACK ),发送数据包后等待接收方确认,未收到确认在一定时间后重传 ;有重传机制,数据包丢失或超时未确认时自动重发 ;通过序列号确保数据包按序到达,乱序时可重新排序 ;还有流量控制和拥塞控制机制,避免网络拥塞和数据丢失 。
- UDP:不可靠传输协议。不保证数据包可靠到达,可能出现丢失、重复、乱序情况 ,无确认、重传等机制,检测到错误直接丢弃分组,不做纠错 。不过部分应用层可自行实现可靠性机制来弥补 。
1.3.3 数据传输形式
- TCP:面向字节流。将应用层数据视为无结构字节流,不保留报文边界,根据自身机制(如窗口大小、拥塞控制 )对数据进行拆分、组合后传输 ,可能出现 “粘包”“拆包” 现象 。
- UDP:面向报文。对应用层交来的报文不拆分、不合并,添加首部后直接交付给 IP 层 ,保留报文边界,一个 UDP 数据报对应一个报文 。
1.3.4 传输效率与开销
- TCP:因连接建立、可靠性保障(确认、重传等 )及流量、拥塞控制机制,传输效率相对低 ;首部开销大,固定 20 字节(无选项时 ),含序列号、确认号、窗口大小等控制信息 。
- UDP:无连接建立和复杂控制机制,传输效率高、速度快 ;首部开销小,仅 8 字节 ,包含源端口号、目的端口号、长度和校验和 。
应用场景
- TCP:适用于对数据可靠性要求极高场景,如文件传输(FTP 等 )、电子邮件(SMTP、POP3 等 )、网页浏览(HTTP ) 、远程登录(Telnet )等 ,这些场景不容许数据丢失或错误 。
- UDP:适用于实时性要求高、能容忍少量数据丢失场景,如网络视频会议、在线游戏、流媒体播放(如 RTSP 协议常用 UDP )、DNS 查询等 。