1.TCP和UDP之间的区别
1.TCP 是面向连接的传输层协议,应用程序在使用 TCP 协议之前,必须先建立 TCP 连接,传输数据完后,需要释放 TCP 连接。UDP 是无连接的,发送数据之前不需要建立连接,因此减少了开销和发送数据的时延。
2.每一条 TCP 连接只能有两个端点,所以 TCP 连接是点对点的。UDP 支持一对一,一对多,多对一和多对多的相互通信。
3.TCP 提供可靠交互的服务,通过 TCP 连接传送的数据,无差错,不丢失,不重复,按序到达。UDP 使用尽最大努力交付,即不保证交付可靠。
4.TCP 是面向字节流的,TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流,TCP 不关心把多长的报文发送到缓存中,而是根据对方给出的窗口和网络拥塞程度来决定一个报文段应包含多少个字节。UDP 是面向报文的,UDP 对应用层交下来的报文既不合并也不拆分,一次交付一个完整的报文。
5.TCP 有拥塞控制,UDP 没有拥塞控制,很多实时应用(IP电话,视频会议等),要求主机恒定速率发送数据,并且允许在拥塞的时候丢失数据,所以很适合 UDP。
6.UDP 首部开销小,只有8个字节。TCP 首部 20 个字节。
7.TCP 提供全双工通信,允许通信双方在任何时候发送数据,TCP 连接两端都有发送缓存和接收缓存。
2.TCP的可靠传输的工作原理
a.停止等待协议/超时重传:
停止等待就是每发完一个分组,就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
如果超过一段时间没有收到确认,就认为刚才发送的分组丢失了,因而重传刚发发送的分组,这就叫做超时重传。
超时重传时间应当比数据在分组传输的平均往返时间更长一点。
使用停止等待协议的信道利用率很低。
上述这种可靠传输协议被称为自动重传请求 ARQ(Automatic Repeat-reQuest)。
ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议,拥有错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和 负面确认及重传(Negative Acknowledgment and Retransmission)等机制。
b.流水线传输
停止等待协议的优点是简单,但是信道利用率太低了。解决方法是采用连续ARQ协议,流水线传输使用的就是连续 ARQ 协议和滑动窗口协议。