首先这两种协议是传输层的两种协议,有各自的特点,因这些特点也被应用在不同的场景中。 说一说他们的特点。 首先是tcp协议,使用tcp协议进行通信的时候,一端需要发起连接请求(这一端一般被称为客户端),另一端需要响应其请求,这是两次握手了。为了保证双方都知道对方和自己有收发信息的能力(当然,这里不止这个原因,但我觉得这个原因最根本),需要第三次握手。之后会进行信息传输。此协议会将数据以数据流的方式传送。流式方法之下发送数据和接受数据的的次数是可以不对等的,意思就是你可以发1000字节的数据,对方可以分10次接受,也可以一次接受完全。(这取决于发送和接受的时机)。这种流式方法的实现方式是通过tcp接受和发送缓冲区来实现的。详细内容这里不赘述。 而udp协议提供的服务就不一样了,数据可以不经过双方的连接,就可以直接发送。也可以进行一对多的服务。发送数据的方式也很不一样,通过数据报的方式发送的,像电报一样,一次接受和发送都是一封完整的电报,接受次数与发送次数一致。(当然,发送的数据包丢失的话就另说了)。 其次tcp为了提供可靠的传输,在数据传输时会有不少额外的处理,比如需要对数据编号(这是为了使数据按序到达提供可能。),在收到前面数据的确认收到之前,才会继续发送。(这样听起来就太慢了,但这就是其原理。另外,为了加快收发数据的速度,引入了滑动窗口的概念。这也间接的可以通过控制窗口的大小来进行流量控制。)。还有提供了检验数据是否出错的检验和等操作。 这些特点造就了其不同的应用场景: tcp应用在对数据可靠性较高且对实时性要求不高的场景。比如:电子邮件,文件传输等。而udp的强项则是那些需要快速传送,一对多,且实时性较高的场景。比如视频,语音,广播等。
|