背景介绍

但凡世界上牛逼的人物,都会有一个非常离奇的经历。比如说乞丐出身的皇帝朱元璋,出生时家中红光大作,映红了半边天;再比如说无良皇帝刘邦,简直不要太牛逼,说自己是老妈和一条白龙交合生出的自己,而老爹是目击证人(笑哭)。

而我,作为网络世界的扛把子,自然也不能在经历上矮人一头。

我,就是大名鼎鼎的HTTP,我的老爹是CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士,而我被制造出来的直接原因就是为了方便世界各地的学者交流信息

话说在我诞生的时候,天空中电闪雷鸣,狂风大作……,我一出生,就是身高百尺,手摘星辰。

不过你要是想知道我到底有多厉害,那我就得介绍一下我们这个世界的背景以及实力等级的划分了。

我所在的世界,叫做网络星球。我的家族,是这个世界上数一数二的家族:TCP/IP协议族。以后你就会了解到TCP/IP协议族到底是多么无敌的存在。

我的家族是上古修炼家族,传承源远流长。共有四大分部:应用层,传输层,网络层,数据链路层,而我,就是应用层中最年轻的长老,也是我的家族中数一数二的存在。又要回到我的背景介绍上了,在这个世界,修炼者的等级分为100级,而我在出生的时候,就是45级,可以说是前无古人,后无来者,不行,让我先飘一会。

几十年过去了,我也已经80级了,我越来越成熟,也越来越强大,现在啊已经成为了这个世界上的中流砥柱。

为了吸引更多的优秀人才来到我的家族,我想向大家详细的介绍一下我家族的情况。

四大分部,各司其职

像我们这么大的一个家族,想要保证整个家族的正常运转,就需要让每个人各司其职,高速流通。为了让人才的能力得到最大程度的发挥,当年家族最具前瞻性的族老,将家族分成了四个部分,就是上面说的:应用层,传输层,网络层,数据链路层。

我们的世界,一直和人类的世界有着频繁的交流。不但如此,为了历练我们家族中的成员,总会接受人类世界的发布的任务,赚取我们世界上的货币—–流量来维系家族成长。所以,这些发布任务的人类,被我们称作用户。

下面我就来介绍一下各司其职的四大分部,在家族中的作用。

应用层:

也就是我所在的分部,这个部门决定了向用户提供服务的通讯活动,每一种服务对应的通讯活动,都由一个家族成员来承担。比如说承担文件传输服务的专门人才,也是我的小弟:FTP。再比如说能对域名进行解析的(将域名[www.roobtyan.com]换为[202.206.xxx.xx])DNS,也就是我的二叔。而我,也就是网络世界的扛把子,我的任务是将用户的请求和服务器的各种响应打包,传递给下一层的专门人员。

简单的说,我们这个部门举足轻重,每一种用户想要的执行的操作,比如上面的传输文件,域名解析等,就会有一专门的人负责这个功能。当然,域名解析并不需要用户亲历亲为,浏览器小兄弟会自动完成这个任务。

传输层:

传输层是和我们关系最近的一层,这一层的作用是用来在两台机器之间进行数据传输的。事情是这样的,因为用户网络状况等的一些原因,是无法保证传输的可靠性,也就是说,传输的数据可能会在传输的过程中出现错误。导致数据到达另一台机器的时候不是用户想要的内容。这时,就会发现,我家族中的这个部门是举足轻重的。

传输层的一大功能就是提供了可靠的数据传输,这也是使得我的家族在网络世界上的地位越来越高的另外一个原因。

在这一层,最具有代表性的人物是TCP和UDP这俩货,他们俩其实是一对双胞胎,和我是死党。虽然他们俩看起来差不多,提供的功能又都是可靠的数据传输。但是这俩货的思路可不是那么的一样,以后如果有机会,我会好好的给大家介绍一下这对兄弟的。不过,在后面的说明中,我还是会简单介绍一下这个TCP的。

总的来讲,为了实现可靠的数据传输,TCP和UDP都会将我(HTTP)封装的请求数据和响应数据切割后打包,再进行传输。他们的打包方式简单粗暴,他们将数据切割成一小段一小段的,然后再加上自己的内容,也就是给这些小段的数据加上标号,到达另一台计算机的时候,再用这个标号的顺序把我的数据重新给原回去。看得我是一阵心疼,好不容易打包好的数据,万一让他们给弄丢了,我岂不是还得重新打包?可惜目前他们这两个传输专家也没有什么好的办法。

网络层:

在我的世界中,网络线路四通八达,主机的数量也是非常多,看的我胆战心惊。我总在想,网络层究竟是如何将这些数据准确的送到目的机器的呢?

直到有一次我问了问IP小兄弟,我才弄明白,原来,IP小兄弟的任务就是将数据准确的送到目的主机。(这里的是IP协议,而非ip地址)

IP小兄弟会给每一个数据包划分一个传输线路,开始发送后,一边寻找下一个规划线路中的节点,一边向节点转发,最终到达目的地。

数据链路层:

数据链路层的一帮家伙都是硬梆梆的,他们都是实体的。也就是人类说的网络相关硬件,什么网线啊,什么交换机了,什么服务器主机等等,反正是处理网络的硬件部分都属于数据链路层。

不过,我不太喜欢和这帮家伙打交道,脾气又臭又硬。

好了,讲到这里,我最后补充一下整个网络传输过程:

我(HTTP)的作用是将用户请求数据和服务器相应数据封装,加上自己的头信息,也就是做个标记。我将数据封装完后,交给传输层中的我的死党TCP或者UDP,他们两个会将我的数据切割,然后加上标志,开始传输。传输的过程交给的是网络层,IP小兄弟会规划传输路线,一边寻找节点一边向节点转发,最后到达目的地,再由链路层中的硬件接收;硬件接收后,再由TCP或者UDP还原数据包,最后再交给我,去掉我的头信息,还原回真正的请求数据。同样的,当请求被服务器识别之后,会将响应数据交给我HTTP,以同样的路径返回客户端。注意,发送时,每次经过一个层次,就会封装一次数据,而接收数据的时候恰恰相反,是一层层的去封装。

代表人物简介

下面,让我来用比较简洁的语言介绍一下这几个代表人物(TCP,IP,DNS),(不会太过于深入,毕竟这只是入门的文章,以后的文章会写的更加深入)

TCP:看看是不是法对了

前面说过,我的死党TCP这个家伙,会将我封装的大块数据分割成一个个小的数据段,这个小的数据段还被这货起了名字:报文段,每个报文段会有一个唯一标识,而最终在接收的时候,TCP也是通过这个唯一标识来判断是否有数据丢失,如果有数据丢失,这货会重新发送一遍的(客户端或者服务端),这让我们很不爽,因为貌似效率低了些(实际上还不错),但是也没有办法。

我的死党TCP有一独门绝技,名曰TCP的三次握手。

  • 第一次握手(发送端–>接收端):发送端的TCP发送带有SYN标志的数据包。
  • 第二次握手(接收端–>发送端):如果握手成功(收到第一次握手时候的数据),接收端发送带有SYN/ACK的标志数据包表示已经收到,就是确认信息。
  • 第三次握手(发送端—>接收端):发送端发送带有ACK的数据包,表示握手结束,确认数据已经成功到达,完成握手。
  • 如果其中有某次握手意外结束,则会重新发送丢失的数据包。

其实上面TCP的绝技三次握手的作用,就是确定报文段是否成功被接收端接收了。这就是TCP的独门秘诀。

IP:看看数据包应该去哪

(刚才我在备注中已经说明,这个IP指的是网络层的IP协议,并非是IP地址,这一点要注意。)IP小兄弟的任务就是给报文段规划一个正确的路线,然后一边中转一边发送。

对了,IP小兄弟高速我,他的能力完全是因为MAC地址,他向我解释说,每一台硬件的MAC地址是唯一的,在这个世界上找不到两个相同的MAC地址,所以,它能够准确的找到中转的位置。

他还说了一个有意思的事情,就是在传输的过程中,上一台主机只知道下一台主机在哪,而不知到其他的路线中的主机在哪,这就是传说中的“没有人能够全面掌握互联网中的传输状况”的由来。

DNS:别装了,我知道你是谁

当你看见一个网站的时候,你不借助工具,你是不知道这个网站的ip的。比如说我的博客(http://roobtyan.con),光看这个网址,你肯定不知道ip地址。但是,计算机的能力是处理数字,它是不会识别文字的,即便可以识别,那也是因为有字码表的存在。

为了方便各个层次的功能开展,我们应用层的大家庭中,就有了这个DNS,他的作用是将域名解析成ip地址。

只要资源在互联网上,都能被DNS解析到,所以,DNS经常说的一句话就是:“别装了,我知道你是谁。”。

对了,DNS服务在你向浏览器中输入域名,然后回车后就启动了,这时返回给浏览器的就是IP地址。

嗯,说了这么多,好像完全忽视了我的存在,其实我也很不爽,没办法,无良作者非要介绍完整个的大背景。好吧,若你想知道我为何能成为TCP/IP协议族的扛把子,那么就请看下一期的“我是传奇之HTTP”了!

欢迎关注我的专栏呦!

结语

感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

微信公众号:进击的程序狗

邮箱:roobtyan@outlook.com

个人博客:http://roobtyan.cn

也非常欢迎你关注我的微信公众号,谢谢支持!

HTTP协议(一):概述的更多相关文章

  1. 运输层3——传输控制协议TCP概述

    目录 1. TCP最主要的特点 2. TCP的连接 3. socket在不同场景中的含义 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户 ...

  2. HTTP协议图--概述

    1.计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信.发送端从应用层往下走,接收端则从链路层往上走.如下:   3.TCP/ ...

  3. 传输控制层协议TCP概述---抄书

    1.TCP的主要特点 TCP是TCP/IP体系中非常复杂的一个协议.下面介绍TCP的最主要的特点. (1)TCP是面向连接的运输层协议.也就是说,应用程序在使用TCP协议之前,必须先建立TCP连接.在 ...

  4. [转】LTE整体架构和协议架构概述

    1.1 LTE整体架构 LTE(Long Term Evolution,长期演进)是由3GPP(The 3rd Generation Partnership Project,第三代合作伙伴计划)组织制 ...

  5. 《TCP/IP详解卷一:协议》 概述

    分层           TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统.   链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算 ...

  6. 【COSMOS】跨链协议IBC概述

    一.什么是IBC? IBC是链间通信协议的缩写(Inter-Blockchain Communication Protocol).通过数据包交换在多个不同的区块链网络之间转移数据和状态信息.最初的用途 ...

  7. 【协议逆向工程】Part 1 概述

    1 协议逆向工程概述 1.1 协议 协议是计算机网络与分布式系统中各种通信实体键相互交互信息时必须遵守的一组规则和约定,这些规则明确规定了所交换的数据格式以及有段的同步问题,从而保证了双方通信有条不紊 ...

  8. RTMP协议

    Real Time Messaging Protocol(实时消息传送协议协议)概述   实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频.视频和数据传输开发的私有协 ...

  9. WCF 采用net.tcp协议

    WCF 采用net.tcp协议实践   概述 与Socket相比,WCF真是爽得不得了,其基本指导思想为SOA——面向服务. 其基本配置在于ABC(Address,Binding,Contract), ...

  10. 广播,多播,IGMP:网际组管理协议

    广播,多播,IGMP:网际组管理协议 1.概述      IP有三种地址:单播地址, 广播地址,多播地址.      广播和多播仅应用于UDP.      每个以太网帧包含源主机和目的主机的以太网地址 ...

随机推荐

  1. hadoop-mapreduce的官方示例的测试执行方法

    1.根据给出的精度参数计算 pi : hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-m ...

  2. C# Chart 点击获取当前点击坐标和Series

    C# Chart 点击获取当前点击坐标和Series https://blog.csdn.net/wumuzhizi/article/details/47168989 2015年07月31日 13:5 ...

  3. Oracle修改密码

    1. 登陆oracle sqlplus '/as sysdba' 2. 修改密码 ALTER USER 用户名IDENTIFIED BY 要修改的密码 ; 3.解锁 alter user 用户名 ac ...

  4. JDK8~JDK11的新特性

    #JDK 1.8 新特性接口中的静态方法 只能由接口自己调用 接口中的默认方法 可以不被覆盖 #JDK 1.9 新特性(可能在JDK8中被忽略了,没来得及加)接口可以定义私有方法,但是只能让自己调用, ...

  5. 【LOJ6498】「雅礼集训 2018 Day2」农民

    题面 solution 直接暴力模拟,原数据可获得满分的成绩. 对于每个点,其父亲对其都有一个限制.故我们只需要判断当前点到根的路径上的限制是否都能满足即可. 考虑用树剖+线段树维护这个限制.考虑到翻 ...

  6. SpringBoot-集成通用mapper

    SpringBoot-集成通用mapper SpringBoot-集成通用mapper ​ 我们在SpringBoot中整合了MyBatis,但是大量重复的增删改查还是很头疼的问题,MyBatis也给 ...

  7. 吴裕雄--天生自然java开发常用类库学习笔记:多对多关系范例

    import java.util.List ; import java.util.ArrayList ; public class Course{ private String name ; priv ...

  8. 载域和运行域的理解(ARM程序是怎么运行的)

    对ARM加载域和运行域的理解 一般而言,一个程序包括只读的代码段和可读写的数据段.在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly):可读写的全局变量和静态变量被称作RW段( ...

  9. springmv返回JSON数据格式

    1.先导入依赖 <!-- springmvc使用@responseBody start--> <dependency> <groupId>com.fasterxml ...

  10. writeObiect与序列化反序列化

    在写仿QQ聊天工具中,客户端与服务端之间的通信一开始是采用的是InputStream和OutputStream,这导致在数据传输过程中,登录信息,注册信息等难以区分,这时我给传输的数据加了标识来分辨信 ...