目录
一、数据传输过程
1.1 TCP字节流服务图
1.2 UDP数据报服务图
二、tcp与udp的区别
1.连接方式
2.可靠性
3.传输效率
4.有序性
5.流量控制和拥塞控制
6.应用场景
7.首部长度
三、tcp与udp能不能使用同一个端口号?
四、同一个协议,TCP 和 TCP 能不能使用同一个端口号?
一、数据传输过程
1.1 TCP字节流服务图
发送端
应用层:应用层通过多次调用 `send()` 函数分别发送 “abcdef”、“12345”、“test” 这些数据。`send()` 函数用于将应用层数据传递给传输层。
传输层:TCP 协议将这些数据暂存于 TCP 发送缓冲区。TCP 为了提高传输效率,会根据自身机制(如窗口大小、拥塞控制等 )对发送缓冲区中的数据进行组合和封装。如图中所示,可能会把 “abcdef” 和 “123” 组合在一起封装成一个 TCP 报文段,“45test” 单独封装成一个 TCP 报文段。这种组合并非严格按应用层发送顺序和边界,而是根据 TCP 自身策略。
接收端
传输层:接收端的 TCP 协议从网络中接收 TCP 报文段,先存储在 TCP 接收缓冲区。
应用层:应用层通过 `recv()` 函数从 TCP 接收缓冲区读取数据。由于 TCP 发送时可能对数据进行了组合封装,接收端应用层调用 `recv()` 读取数据时,不一定能按发送端应用层的原始边界和顺序获取数据,可能会一次性读取多个发送端组合封装的数据,也可能分多次读取。
总体而言,该图展示了 TCP 字节流服务中,数据在发送端和接收端的处理过程,突出 TCP 并不保证应用层数据的边界,而是以字节流形式进行传输和处理。
呈现了 TCP 协议的数据传输流程。发送端应用层多次调用 send() 函数发送数据,数据先存于 TCP 发送缓冲区,传输层根据自身机制(如窗口、拥塞控制 )将缓冲区数据封装成 TCP 报文段发送;接收端传输层接收 TCP 报文段存于 TCP 接收缓冲区,应用层通过 recv() 函数读取数据。
1.2 UDP数据报服务图
发送端
应用层:通过 `sendto()` 函数来发起数据发送操作。`sendto()` 是 UDP 编程中用于发送数据报的函数,它可以指定目标地址(IP 地址和端口号 )以及要发送的数据内容。在应用层,可能会有多个不同的操作或请求需要通过 UDP 发送数据,所以会多次调用 `sendto()` 函数 。
传输层:将应用层传递过来的数据封装成 UDP 数据报。UDP 数据报由 UDP 报头和数据部分组成,报头包含源端口号、目的端口号、长度和校验和等信息,完成封装后的数据报会被发送到网络中。
接收端
传输层:从网络中接收 UDP 数据报,检查数据报的目的端口号等信息,将符合条件的数据报传递给应用层 。
应用层:使用 `recvfrom()` 函数接收从传输层传来的 UDP 数据报。`recvfrom()` 函数不仅能接收数据,还能获取发送方的地址信息(源 IP 地址和端口号 ) 。同样,在应用层可能会多次调用 `recvfrom()` 函数来处理不同时刻接收到的数据报。
展示了 UDP 协议数据传输过程。发送端应用层通过 sendto() 函数将数据传递给传输层,传输层封装成 UDP 数据报进行发送;接收端传输层接收 UDP 数据报,应用层通过recvfrom() 函数接收数据。体现了 UDP 无连接、简单的传输特点,发送方直接发送,接收方直接接收,不涉及复杂连接建立与管理。
二、tcp与udp的区别
1.连接方式
TCP:面向连接的协议,在数据传输之前,需要先建立连接,通过三次握手来确保连接的可靠性,数据传输完成后,需要释放连接。
UDP:无连接的协议,发送数据时不需要先建立连接,也不需要在数据传输完成后释放连接,简单地将数据报发送出去即可。
2.可靠性
TCP:提供可靠的传输服务。它通过序列号、确认应答、重传机制等保证数据的有序性和完整性,能够自动纠正传输过程中出现的错误。
UDP:不保证数据传输的可靠性。它只是尽最大努力将数据报发送到目的地,不进行错误检查和重传,可能会出现数据丢失、重复或乱序的情况。
3.传输效率
TCP:由于需要建立连接、进行可靠性检查和流量控制等,会引入一定的开销,传输效率相对较低。
UDP:没有连接建立和复杂的控制机制,头部开销小,传输效率高,适合对实时性要求高、允许一定数据丢失的应用。
4.有序性
TCP:能保证数据按照发送的顺序到达接收端,对数据进行排序和重组,确保应用层接收到的是有序的数据。
UDP:不保证数据的有序性,数据报可能会以不同的顺序到达接收端,应用层需要自己处理数据的顺序问题。
5.流量控制和拥塞控制
TCP:具有完善的流量控制和拥塞控制机制。通过滑动窗口协议进行流量控制,根据网络拥塞情况调整发送速率,避免网络拥塞。
UDP:没有内置的流量控制和拥塞控制机制,需要应用层自行实现相关功能,如果网络出现拥塞,可能导致数据丢失加剧。
6.应用场景
TCP:适用于对数据准确性和完整性要求高的场景,如文件传输、电子邮件、远程登录、网页浏览等。
UDP:适用于对实时性要求高、能容忍一定数据丢失的场景,如视频直播、音频通话、在线游戏、DNS查询等。
7.首部长度
TCP:首部长度一般为20字节,当有选项时,首部长度会增加。
UDP:首部长度固定为8字节,包括源端口、目的端口、长度和校验和字段。
三、tcp与udp能不能使用同一个端口号?
TCP和UDP可以使用相同的端口号,因为它们是独立的传输协议,每种协议有自己的端口空间。在通信过程中,端口号用于标识应用程序或服务,以便正确地将数据包传递到目标应用程序。因此,同一个端口号可以同时被TCP和UDP协议使用,只要它们不在同一个主机上相互冲突即可。这种情况在网络编程或应用程序开发中是很常见的。
四、同一个协议,TCP 和 TCP 能不能使用同一个端口号?
不可以,每个协议都有自己的一组预留端口号。TCP和UDP有各自独立的端口号范围,因此TCP和TCP不能使用相同的端口号。TCP的端口号范围是0到65535,UDP的端口号范围也是0到65535,但它们之间的端口号是相互独立的。