HTTP协议

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

FTP协议

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

SMTP协议

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

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

  • 浏览网页

  • 下载文件

  • 发送邮件

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

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

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

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

问题来了,

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

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

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

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

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

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

IP协议

在应用数据块的外层写上目的地IP地址,使得应用数据块可以找到目的地,这样就解决问题1。

还会在应用数据块的外层写上源IP地址,使得服务器回应数据块返回源主机,这样就解决问题2。

抬杠的同学会说,应用数据块外层写上目的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)

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

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

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

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

但老王使用的浏览器、邮件客户端却一直和UDP协议直接打交道。老王要下载文件,首先要域名解析获得服务器的IP地址,而完成域名解析任务的是DNS协议

DNS协议

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

ftp用的是tcp还是udp_如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别的更多相关文章

  1. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

  2. 【图解】给面试官解释TCP的三次握手与四次挥手-Web运用原理及网络基础

    作者 | Jeskson 来源 | 达达前端小酒馆 轻松了解HTTP协议 为什么要学习网络协议呢?为什么要学习计算机完了呢?显然这很重要,至少能够帮助你找到工作的原因之一,学习网络知识点太多太多,没有 ...

  3. HTTP、TCP、UDP以及SOCKET之间的区别/联系

    一.TCP/IP代表传输控制协议/网际协议,指的是一系列协组. 可分为四个层次:数据链路层.网络层.传输层和应用层. 在网络层:有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在 ...

  4. TCP、UDP、HTTP、SOCKET之间的区别

    IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...

  5. TCP和UDP之间的区别

    TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等 ...

  6. TCP/IP协议栈与数据包封装+TCP与UDP区别

    ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. T ...

  7. TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流

    目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...

  8. http、TCP/IP协议与socket之间的区别

    http.TCP/IP协议与socket之间的区别     网络由下往上分为:  www.2cto.com   物理层--                       数据链路层-- 网络层--   ...

  9. TCP/IP详细解释--TCP/IP可靠的原则 推拉窗 拥塞窗口

    TCP和UDP在同一水平---传输层.但TCP和UDP最不一样的地方.TCP它提供了一个可靠的数据传输服务,TCP是面向连接的,那.使用TCP两台主机通过第一通信"拨打电话"这个过 ...

随机推荐

  1. java之类的抽取与对象的创建

    Java语言之类的抽取 前言:世界由什么组成?This is a question.有人说是原子.分子,有人说是山川草木. 诚然,一千个人眼中有一千个哈姆雷特.而在程序员眼中,万物皆对象. 定义: 在 ...

  2. Python 根据id生成唯一码

    Python 根据id生成唯一码 最近业务中遇到需要分享某个文案,复制文案打开APP需要提取文案中包含的id,但又不想明文暴露id,所以需要对id进行加密,很想让前端来做,可惜多个前端协调起来不方便( ...

  3. elasticsearch启动流程

    本文基于ES2.3.2来描述.通过结合源码梳理出ES实例的启动过程. elasticsearch的启动过程是根据配置和环境组装需要的模块并启动的过程.这一过程就是通过guice注入各个功能模块并启动这 ...

  4. Android系统编程入门系列之硬件交互——通信硬件Bluetooth

    通信硬件NFC的文章,虽然可以在Android系统中通过非直接接触的形式与支持NFC硬件的设备通信,但是也只能交互一些简短的标签内容,对大量的持续性数据,却并不能很好的支持.因此针对这个弊端,可以考虑 ...

  5. ApacheCN Linux 译文集(二) 20211206 更新

    CentOS7 Linux 服务器秘籍 零.前言 一.安装 CentOS 二.配置系统 三.管理系统 四.用 YUM 管理包 五.管理文件系统 六.提供安全性 七.构建网络 八.使用文件传输协议 九. ...

  6. 「SHOI2006」有色图

    首先发现这题虽然是边的置换,但是是由点的置换所造成的,并且发现点置换对应的所有边置换和置换操作构成置换群. 由于颜色可以全选,那么根据 Polya 定理,答案为: \[|X / G| = \frac{ ...

  7. 300iq Contest 1 C Cool Pairs

    为了构造时恰好取到 \(k\) 对时的方便,可以考虑将 \(a\) 设为互不相同的 \(n\) 个数,这样对每个 \(b\) 的取值对答案的贡献就是可以通过调整变成任意值的. 因为要尽可能造成贡献,因 ...

  8. Linux之shell入门

    一.编写规范 代码规范: #!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器] shell相关指令 文件命名规范: 文件名.sh .sh是linux下bash shell 的默 ...

  9. SpringBoot 自定义配置

    有时候需要自己定义一些配置,比如SpringBoot没有提供Druid连接池的配置,需要我们自己写配置. 以在springboot中使用Druid为例. 依赖 <dependency> & ...

  10. Java数组问题:Array constants can only be used in initializers

    感谢大佬:https://www.cnblogs.com/fanerwei222/p/11491571.html 感谢大佬:https://blog.csdn.net/weixin_42591732/ ...