搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 车小胖谈网络 > 如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别?

如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别?

车小胖谈网络 2019-04-04
举报

HTTP协议

老王喜欢看岛国小片,时常泡在论坛上和网友交流最新资讯,老王是通过浏览器浏览网页的,而浏览器是借助HTTP协议与论坛服务器沟通交流。

 

FTP协议

老王购买了该网站的会员,可以无限制下载高清小片,老王是通过浏览器下载影音文件的,浏览器是借助FTP协议与文件下载服务器沟通交流。

 

SMTP协议

10G的高清文件,老王心潮澎湃打开文件,傻了,“孙悟空大战白骨精”映入眼帘。。。老王怒了,打开电子邮件客户端写投诉邮件,怒斥不良网站的欺诈行为!电子邮件客户端是借助SMTP协议与邮件服务器沟通交流。

 


 

 

 

通常称与人类直接打交道的协议,叫应用层(Application)协议,或者业务层协议。上文的三个协议对应三种业务:

 

  • 浏览网页

  • 下载文件

  • 发送邮件

 

通俗地说,应用层协议,如同人类的小秘书兼翻译,用服务器可以听得懂的语言与服务器沟通。

 

假设服务器只会SMTP语言,老王使用只会FTP语言的小翻译来和服务器唠嗑,就会呈现一幅“鸡同鸭讲”的滑稽画面。而老王使用会SMTP语言的小翻译就可以顺畅地沟通。

 

但应用层协议,不过是人类的小翻译,只擅长翻译工作,其它的啥也不会!

 

HTTPFTPSMTP三个小翻译,能把老王的需求翻译成由“0”、“1”组成的小串串,简称应用数据块。



 

问题来了,

 

  1. 应用数据块如何在浩瀚的互联网准确无误找到目的地?

  2. 服务器回应数据块如何在浩瀚的互联网准确无误地返回?

  3. 应用数据块在到达目的地之前丢失了,如何处理?

  4. 服务器回应数据块旅途中丢失了,如何处理?

 

 

这些问题在TCP/IP协议面前,都不再是问题!

 

TCP/IP协议就是为了解决这些问题而诞生的!!!

 

 

IP协议

 

 

 

 

 

把老王的网线拔了、无线关了、移动网络4G也关了,把老王的所有访问互联网的通道全关闭了,应用数据块还能到达目的地哇?

 

那肯定不能到达,神仙来了也爱莫能助!

 

所以在这里这种强调两点:

 

  • 底层物理网络的连通性是IP能否正常工作的前提

  • IP路由表在全球路由器里完成了同步

 

即使有了这两个前提条件,也不能100%保证IP报文能够到达目的地!

 

信号传输过程失真造成丢包、网络发生拥堵而丢包。。。

 

 

我们还需要一个协议,这个协议需要有以下特质:

 

  • 当丢包发生时,能够自动修复丢包,而无需人的手动干预

  • 能够智能感知网络的拥堵情况,网络空闲时,尽最大速率发包;网络拥堵时,降低速率发包,不给互联网添堵

 

 

满足这个特质的协议,它的名字叫TCP协议

 


 

TCP协议

 

TCP协议也不是什么大神,不过是一个任劳任怨的流量调度员。说到底它就有一个本事:


确认机制!

 

凭着这个看家本领,TCP可以保证应用数据的可靠传输。

 

也正是这个确认机制,让千千万万个学习TCP协议的同学,苦苦挣扎痛不欲生!

 

但愿有同学读完这篇文章,快速脱离苦海。。。

 

 

TCP确认机制

通俗地说,TCP会对发出的数据包(以下简称包裹)进行编号,如同快递的快递单号一样。对方TCP收到包裹,会回复一个确认消息,确认收到了该编号的包裹了。

 

这非常好理解,生活里这样的故事每天都在发生。男生给异地的女友快递一个包裹,记下快递单号123456,过两天女友回复一个消息,快递单号123456已收到!

 

 

有同学会说,确认机制可以理解,TCP发数据就发数据,但为何TCP发数据之前需要连接?

 

在互联网上可以找到各种各样的解释,而我的观点是:

 

双方通过TCP连接,分享彼此的应用数据块第一个字节的原点序号。

 

如果TCP没有提前分享,接收方不知道接收的数据是否是第一个包。

 

如果不是第一个包,接收方的TCP却将该数据包提交给应用程序,应用程序压根无法理解。

 

 

为何无法理解?

应用程序以为是第一个包,其实并不是,应用程序的小翻译(HTTP/FTP/SMTP)瞬间懵逼,风雨中瑟瑟发抖。。。

 

 

分享了原点序列号,即使第二个、第三个数据包先到达目的地,而第一个数据包姗姗来迟的情况,接收方的TCP可以耐心等待第一个数据包的到来,然后按序将数据包提交给应用程序。这样应用程序的小翻译就会秒懂。。。

 

 

有了TCP协议的帮助,即使老王的网线拔掉了一段时间,稍后再插入,恢复了网络连通性,老王中断的文件下载任务可以继续工作,而无需老王重新下载。

 

 

UDP协议

UDP有点像街头的邮筒,应用程序的数据包扔进邮筒就好了,就耐心地等待数据包到达目的地。但扔进邮筒之前,需要写好以下信息:

 

  • 收件人的姓名(目的端口号)

  • 寄件人姓名(源端口号)

 

IP司机会瞬间地将邮筒里的信件,运往世界各个角落。

 

比较奢侈的是,一个IP司机运一件信件。

 

 

文章开头的老王,其实一直在使用UDP协议,只是UDP协议不和老王直接打交道,老王觉察不到而已。

 

 

DNS协议

DNS协议将自己的域名解析请求报文扔到UDP邮筒里,被IP司机运输到域名服务器家中,服务器返回域名解析应答,同样通过UDP邮筒邮寄服务。

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别?》的版权归原作者「车小胖谈网络」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报