作者:HerryLo
原文永久链接:https://github.com/AttemptWeb…
TCP/IP 协议 ,你一定常常听到,其中 TCP(Transmission Control Protocol)称为 传输控制协议,IP(Internet Protocol)称为网际协议 。
事实上 TCP/IP 协议,是一个协议族,是一个协议的集合。
TCP/IP 协议,定义了一整套规则。它定义整个互联网如何连接,如何通信,如何协商的最基础规则。
TCP/IP 协议分为五层,分别是应用层、传输层、网络层、数据链路层、物理层。每层都有对应的相关协议,其中 TCP 和 UDP 是传输层的两个协议。
理解 TCP 和 UDP
既然他们是传输层的协议,那么他们的作用当然就是用来负责传输数据了。
我们想象一个场景,网络中随意的两端要通信,会采取什么传输方式呢?
可以先想象一下人类之间的通信。
第一种是打电。我拨通电话你的电话,直到你回答“你好”,我听到声音之后,我们之间才继续进行交谈。
另一个是发短信。我给你的手机号发送一条短信,无法知道你是否收到,然后我就只能等待你的回复了。
其中第一种方式对应 TCP,而第二种对应 UDP。TCP 是需要对方确认的,也就是传输之前需要进行三次握手(传输的两端需要经过三次握手,才开始通信)。UDP 着比较粗暴,不论对方什么情况,直接发送,不需要确认过程。
而上图中的看到的,TCP 是可靠的,UDP 是不可靠的,就是这个意思。
可靠的连接带来的是效率的下降。比如一次网络请求,很大一部分时间其实都是浪费在互相确认的过程当中,资源消耗比较多,保证了数据传输是可靠的,而且传输数据是有序的。不可靠的连接带来的是效率的提升,但可能服务质量有下降。
要摆脱一种人为的误区,不要以为 UDP 不可靠,就没有应用场景。据说 QQ 发送数据就是靠 UDP 发送的,尽管是不可靠的连接,可是还是用了非常多的校验算法保证了数据质量稳定,同也保证了效率。TCP 尽管耗时,可是对于稳定性优先的场景,还是应该有限选用 TCP,比方浏览器中访问网页用的就是 TCP。此外在一些长连接系统里面,比方微信,连接通道应该也是用 TCP 建立的,由于要维持一条稳定的信息传输通道。
协议是怎么控制,数据包是怎么传输,怎么校验数据的正确性,还有重传特性。这些都是协议中重要的控制过程,在这里不做详解,因为对于实际的产品并没有太大的用。至于如何选定传输数据方式,应该依据场景而定。
安全的东西往往不快,反之亦然。而 TCP 和 UCD 之间也是这样:
TCP(传输控制协议)
TCP(传输控制协议) 是基于连接的 。在正式收发数据之前,必须要与对方建立连接。这之间需要经过 ’ 三次握手 ’:
第一步. 首先 A 主机需要和 B 主机之间建立数据收发,A 需要发送一个请求询问 B:’ 我要建立连接 ’;
第二步. B 收到消息后,会给 A 发送一个回应:’ 可以连接 ’;
第三步. A 收到 B 的回应后,A 向 B 再次回应:’ 我要开始发送了 ’,他们之间就可以建立连接了;
第一次握手的结论是:A 的发送能力、B 的接收能力正常。
第二次握手的结论是:B 的发送能力、A 的接收能力正常。
第三次握手的结论是:A 的接收、发送能力,B 的接收、发送能力都是正常的。
‘3 次握手 ’ 的作用就是 双方都能明确自己和对方的收、发能力是正常的.
UDP(用户数据报协议)
UDP(用户数据报协议) 是面向非连接的,不与对方建立连接 ,而直接把数据报 = 包发送出去。UDP 适用于一次传输少量的数据,对于可靠性要求不高的应用环境。日常生活中使用的 ping 命令测试主机是否通信正常,事实上 ’ping’ 命令的原理就是向对方主机发送 UDP 数据包,然后对方主机确认收到数据包,假设数据包是否到达的消息及时反馈回来了,那么网络传输就是正常的。
适用场景
TCP:是全双工、面向连接、可靠的,而且精确控制的协议。主要用于实时性不强,但传输要求高的应用。比方说:网页浏览、文件下载 (不是 BT、电脑下载)、邮件的发送等场合,这些场景需要 TCP 协议进行传输。当然,它在网络方面的开销是昂贵的。
UDP:这是一个不可靠的传输协议。由于它不排序所要发送的数据段,不负责这些数据段到达目标的顺序(说一它才不可靠)。它在网络的开销要比 TCP 小很多,因此 UDP 适合用在那些实时性强、允许出错的场合。比如说:即时通讯 (MSN、QQ),视频、语言等方面。
ps: 顺便推一下自己的个人公众号:Yopai,有兴趣的可以关注,每周不定期更新,分享可以增加世界的快乐