TCP vs UDP 谁更可靠 TCP存在之于”互联网“的意义
扫描二维码
随时随地手机看文章
本文只是为了便于理解,做非常宽泛的描述,措辞不甚严谨,不当之处还望指正,感谢。 看本文章之前,建议对OSI模型已经TCP/IP不太了解的同学们,看看我之前写的 白话解释 OSI模型,TLS/SSL 及 HTTPS
一切为了传输 UDP vs TCP
互联网之所以伟大的原因之一是解决了远距离可靠传输信息的问题,既然要进行“互相”传输数据那么肯定是有一定的规则和协议的,TCP和UDP就是两种广泛应用的传输协议,在这里做一个简单的比较:
UDP (你把它想象成平邮信件),往往邮递员会集中把信件放在邮局,比如一个学校的邮政,但是这种方式不可靠啊,因为这种平邮的信件老是容易“丢包”,也就是说,这种传输方式没法确保收件人一定能收到信件。
这不行啊,所以,人们就想到了一种更为可靠的传输方式: TCP(你把它想象成快递),快递员可以直接送货上门,即使不送货上门,可要给你打电话,检查你的身份证,让你签字等等,确保你的包裹不会被丢失。所以,这种方式更“可靠”。
TCP vs UDP 谁更可靠
上面的例子也已经很清楚的看到,TCP(快递)之所以可靠,是因为有种种的“检查”机制,当快递的“包裹”真正到达收件人手里的时候,这个”传输“过程才算完成,否则快递小哥就“重新投递“。那么”UDP“(平邮信件)就不管这一套,反正根据信件上的地址把”传输的信件包“扔在最近的邮件或者上面所写的信箱中就完事,至于随后包裹到底到没到收件人手中,这个UDP不管了。
所以,到现在,我们知道了,TCP传输数据比udp更加“可靠”!
TCP存在之于”互联网“的意义
我们现在能在互联网上看文章,直播,视频,娱乐,购物,甚至网上转账,当然,看直播的话,UDP协议还是不错滴,但是,如果涉及到金钱或者敏感数据,如果都像没有一套“可靠”的传输协议,谁还敢在网上“转账”,“存储信息”呢?
我们已经知道了,TCP存在的意义之一就是: ”可靠的传输“ ,但同时要进行远程通信, ”高效的传输“ 是必不可少的,最后,数据包在混沌险恶的互联网中穿梭, ”安全的传输“ 是必须的。
所以,小结一下,TCP存在之于”互联网“的意义有三点(重要的事情说三遍): - 让数据进行”可靠“,”高效“,”安全“的传输 - 让数据进行”可靠“,”高效“,”安全“的传输 - 让数据进行”可靠“,”高效“,”安全“的传输
请注意:这里所说的”高效”只是相对TCP自己而言,因为这个”高效“会和后面我们会说到三次握手其中的第二步合并的握手相关,所以我在这里提一下,其实,UDP会因为没有了一些检测机制会比TCP更加高效,快速。
一定的代价
都说”鱼和熊掌不能兼得“,对于TCP来说更是如此,既然选择了”可靠“,”高效“和”安全“作为己任,那么就必然要想一些办法让自己满足这些特征,那么TCP怎么办的呢?
可靠
数据的可靠性意味着接收方接收到了准确无误的信息,如果中间有丢包,要有一定的机制让发送方重新发送。TCP怎么办的呢?它是这么办的:
发送方通过一定方式告诉接收方,所传输的数据包有多大,然后分几次,比如:数据包总共100kb,然后分10次发送,这时候接收方就知道总共有10个数据包,同时发送方会在每个数据包上标记上号码,然后TCP从数据包1开始接受,逐次加一,知道接收到第十个结束,只有这10个全部确认收到了,接收方才确认这个通信完成,所以确保了数据的可靠性。
那么问题来了,接收方怎么知道数据包共100kb,然后又怎么知道什么时候开始算是接受这个包?什么时候接受完成呢?这个时候就是第一次握手的开始,也可以说是第一次交流的开始。
比如:张三(发送方)要发信息给李四(接收方)。
1. 张三:hi,李四,我想发送一个100kb的数据包,打算分10次发送,你那边能接一下么?
2. 李四:好的,收到,你发吧。
3. 张三:ok, 太棒了!
4. 张三:数据包1..2..3..4.。.5..6..7..8..9..10