关于后端:互联网协议知多少

[TOC]

互联网协议知多少

互联网协议是啥呢?

在解释这个问题前,咱们来理解一下,什么是网络通信,没有网络通信,这个协定都没得玩了

  • 网络

用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目标

  • 通信

人与人之间通过某种媒体进行的信息交换与传递

那么网络通信就不难理解了吧

网络通信 就是 通过网络将各个孤立的设施进行连贯,通过信息替换实现人与人,人与计算机,计算机与计算机之间的通信。

局域网中最罕用的有三个网络协议,咱们在应用协定的时候,应依据须要来抉择适合的网络协议

  • NETBEUI协定

NetBios Enhanced User InterfaceNetBios加强用户接口,它是NetBIOS协定的加强版本

它不须要附加的网络地址和网络层头尾,能够很快无效且实用于只有单个网络或整个环境都桥接起来的小工作组环境

  • IPX/SPX

Internetwork Packet Exchange/Sequences Packet Exchange

具备弱小的路由性能,在简单环境下具备很强的适应性,合于大型网络应用

  • TCP/IP协定

Transmission Control Protocol/Internet Protocol,

网络层的IP协定和传输层的TCP协定组成,他是可能在多个不同网络间实现信息传输的协定簇,是Internet最根本的协定

什么叫做协定?

字面上了解,协定,就是我和你约定好规定,咱们依照规定办事件,互联网协议是啥意思呢

互联网协议又是个啥

互联网协议(Internet Protocol)是用于分组替换数据网络的一种协定,其工作仅仅是依据源主机和目标主机的地址来传送数据。互联网协议定义了寻址办法和数据报的封装构造。第一个架构的次要版本为IPv4,目前依然是宽泛应用的互联网协议。

一言蔽之互联网协议就是在互联网上传输数据的规定

有没有发现,当初各大互联网厂商的APP,曾经是反对IPv6了

互联网协议,有一系列的协定组成,咱们了解了这些协定,就了解了互联网的原理。互联网协议太过宏大和简单,一下子讲清楚我的功力还达不到,在此分享一些咱们开发中罕用的一些协定

互联网协议就是定义了大家共用的规范,咱们都依照规范来开发和应用,这大大提高了咱们的开发效率和沟通老本

在网络的各层中存在着许多协定,接管方和发送方同层的协定必须统一否则一方将无奈辨认另一方收回的信息,那么这就乱套了是不。网络协议使网络上各种设施可能相互交换信息。

例如,小A自定义了一个A协定,小B自定义了一个B协定,这个时候,如果要将A协定和B协定做对接,那么就须要将2个协定做一个交融和取舍,甚至是其余的形式 , 且这大大的减少了沟通老本和危险因素

那么若小A和小B都恪守通用的共有协定,例如传输层的TCP协定,是不是只须要依照规范来开发就好了呢

这也是为什么每一个行业都须要相应的规范的起因之一,对立了规范,大家行事就不便多了

互联网协议无能啥?

网络协议是网络上所有设施(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规定的汇合

它定义了通信时信息必须采纳的格局和这些格局的意义。

大多数网络都采纳分层的体系结构,每一层都建设在它的上层之上,向它的上一层提供肯定的服务,而把如何实现这一服务的细节对上一层加以屏蔽

平时咱们说的,二层交换机协定,三层协定等等都是啥意思呢?

例如一台设施上的第 X 层与另一台设施上的第 X层 进行通信的规定就是第 X层 协定。

说到层级,咱们分享一下互联网的分层模型

分层模型

互联网的逻辑实现被分成了很多层,每一层都有本人特有的性能,就像建房子,或者搭积木一样

须要一层一层的搭建,万丈高楼平地起,每一层都靠下一层反对。

平时作为用户,基本上接触到的只是最下面的那一层,也就是应用层,不晓得或者是基本感触不到还有其余的档次

然而作为一个开发,咱们还是要尽可能多的去具体理解每一层的原理,这样能力无效的领导咱们的具体实际

开始放图~

就上图而言,互联网依照不同的模型划分会有不同的分层

然而不管依照什么模型去划分,咱们都要明确,越往上的层越凑近用户,越往下的层越凑近硬件。

在软件开发中咱们应用最多的是这张图中将互联网划分为五个分层的模型,也就是这张图中的两头这一列

  • 物理层
  • 数据链路层
  • 网络层
  • 传输层
  • 应用层

那咱们就从下往上来一一看一看,每一层都是

  • 做些啥
  • 次要作用是啥
  • 数据包又是如何封装和传输的吧

物理层

简略来看,这一层基本上是用双绞线、光纤、无线电波的形式来实现物理层,也叫做 实物理层

再简略来看,这一层就是把各个网络设备连接起来,让其能够传输0 1 0 1的电信号

数据链路层

这一层处于”物理层”的上方,确定了物理层传输的0和1的分组形式及代表的意义

该层次要是以太网

以太网规定,一组 电信号形成一个数据包,叫做”帧”(Frame)。

每一帧分成两个局部:包头(Head)和数据(Data)。其中”包头”蕴含数据包的一些阐明项,比方发送者、接受者、数据类型等等;”数据”则是数据包的具体内容。”包头”的长度,固定为18字节。”数据”的长度,最短为46字节,最长为1500字节。因而,整个”帧”最短为64字节,最长为1518字节。如果数据很长,就必须宰割成多个帧进行发送。

有没有想过,咱们咋标识是谁发的,或者该数据包是要发给谁,如何指定?在哪里指定?如何实现?

以太网规定,连入网络的所有设施都必须具备网卡接口

数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接管地址,这叫做MAC地址。

每块网卡出厂的时候,都有一个全世界举世无双的MAC地址,因而,很多软件校验设施唯一性的时候,大多会通过校验MAC地址来判断

MAC地址是啥样子的?

如上图,MAC地址通常用12个十六进制数示意,也就是说长度是48个二进制位

  • 前6个十六进制数是厂商编号
  • 后6个是该厂商的网卡流水号

有了MAC地址,你就能够入地了吗?到底咋传输?

咱们个别会应用 ARP协定来获取接受方的MAC地址,向本网络内所有计算机都发送(以播送的形式),让每台计算机读取这个包的”包头”,找到接管方的MAC地址,每台计算机读取包头中接管方MAC地址后,与本身的MAC地址相比拟,如果两者雷同,就承受这个包,做进一步解决,否则就抛弃这个包。

如图,一个包源MAC是AA:BB:CC:DD:EE:FF,目标MAC是FF:EE:DD:CC:BB:AA,那么,这个包会发到同局域网的所有敌人,每一个敌人都会读取这个包的数据,判断目标MAC地址和本人的MAC地址是否统一,

  • 若统一则解决
  • 若不统一,则抛弃

ARP协定来获取接受方的MAC地址,有了MAC地址之后,如何把数据精确的发送给接管方呢?其实这里以太网采纳了一种很”原始”的形式,它不是把数据包精确送到接管方,而是向本网络内所有计算机都发送,让每台计算机读取这个包的”标头”,找到接管方的MAC地址,而后与本身的MAC地址相比拟,如果两者雷同,就承受这个包,做进一步解决,否则就抛弃这个包。这种发送形式就叫做”播送”(broadcasting)。

网络层

下面讲到包数据中写好源MAC,目标MAC,就能够在同一个局域网中找到接受方,可是如果是源机器和目标机器不在同一个网段的话咋整?

实践上依附MAC地址,你电脑的网卡就能够找到身在世界另一个角落的某台电脑的网卡了,然而这种做法有一个重大缺点就是以太网采纳播送形式发送数据包,所有小伙伴都要去读你的这个包,效率低,且发送的数据只能局限在发送者所在的子网络

如果两台计算机不在同一个子网络,播送是传不过来的。

用咱们的小脑袋想一下,如果你发送的一个音讯,世界上的每一个机器都能收到,那么网络得多拥挤啊

还是有方法解决滴

那就判断是不是在同一个子网嘛,

  • 如果是同一个子网络,就采纳播送形式发送
  • 不是在同一个子网 , 那就采纳路由形式发送

这个时候,就有了网络层

网络层引进一套新的地址,使得咱们可能辨别不同的计算机是否属于同一个子网络

这套地址就叫做网络地址,简称网址

那么网络层具体是咋传输数据的咧?

咱们要晓得如下几个点

  • 每台计算机有了两种地址,一种是MAC地址,另一种是网络地址
  • 两种地址之间没有任何分割,MAC地址是绑定在网卡上的,网络地址则是网络管理员调配的
  • 网络地址帮忙咱们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的指标网卡

因而,咱们从上述形容就能够晓得,咱们在解决网络数据包的时候,必定要先解决网络地址,再解决MAC地址,这也就是前面会说到的数据包的传输流程

数据链路层,用MAC地址,协定用ARP协定

那么,网络层,当初我晓得了用网络地址,那么是用啥协定?

应用网络地址协定,叫做IP协定

协定所它所定义的地址,就被称为IP地址

当初宽泛采纳IPv4IPv4这个版本规定,

  • 网络地址由32个二进制位组成
  • 通常用分成四段的十进制数示意IP地址,从0.0.0.0始终到255.255.255.255

通过IP协定发送的数据,就叫做IP数据包

IP数据包也分为”包头”和”数据”两个局部:

  • ”包头”局部次要包含版本、长度、IP地址等信息,
  • ”数据”局部则是IP数据包的具体内容
  • IP数据包的”包头”局部的长度为20到60字节,整个数据包的总长度最大为65535字节

顺带提一下IPv6

随着互联网的倒退,当初IPv6也逐步应用的缓缓变多,

IPv6不仅能解决网络地址资源数量的问题,而且还解决了多种接入设施连入互联网的阻碍问题,并且具备更大的地址空间和更高的安全性。

IPv6有3种示意办法:

  • 冒分十六进制表示法

X:X:X:X:X:X:X:X , 每一个X代表着一个4位的十六进制数 , 如 EBCD:CF01:2345:1789:ABCD:EF01:2385:3789

  • 0位压缩表示法

一个IPv6地址两头可能蕴含很长的一段0,能够把间断的一段0压缩为:: , 但为保障地址解析的唯一性,地址中::只能呈现一次

例如:

0:0:0:0:0:0:0:1 → 示意为 ::1
0:0:0:0:0:0:0:0 → 示意为 ::
  • 内嵌IPv4地址表示法

IPv4地址会嵌入IPv6地址中,X:X:X:X:X:X:a.a.a.a,前96bit位采纳冒分十六进制示意,而最初32bit位地址则应用IPv4的点分十进制示意

例如:

::192.168.0.1
::FFFF:192.168.0.1   // :: 代表多个0

传输层

看到这里,小伙伴必定晓得,数据包传送的过程中,必定不止MAC地址和网络地址那么简略,要不然就不会有传输层和应用层了。

通过下面说到的 网络地址MAC 地址 咱们曾经能够在互联网上任意两台主机上建设通信

可是基于网络和利用的复杂性,问题又来了

同一个设施上的多个应用程序都须要收发信息,咱们咋辨别哪一个数据包是给哪个程序的,又咋辨别哪个数据包是哪个程序收回去的?这个咋整?

比如说,同样是数据包,咱们电脑上的 WX数据包,和QQ数据包,是咋辨别进去的?

想一想,基于现有的协定必定不够玩了,那就加码吧

增加一个参数,示意这个数据包到底供哪个程序(过程)应用。

此时,端口Port就呈现了,

  • 它就是每一个应用网卡的程序的编号
  • 每一个端口号,标记一个可执行程序
  • 端口号是,0到65535之间的一个整数,正好16个二进制位
  • 0 – 1023的端口被零碎占用,用户只能选用大于1023的端口

当初,万事俱备了,用IP + 端口,咱们就能实现惟一确定互联网上一个程序,进而实现网络间的程序通信了

那么把这个端口号退出到数据包中,又催生出了一些协定,那就是传输层的协定

  • TCP协定
  • UDP协定

UDP协定,就是在数据后面加上端口号

UDP数据包,也是由”包头”和”数据”两局部组成:

  • ”包头”局部次要定义了收回端口和接管端口,一共只有8个字节
  • ”数据”局部就是具体的内容。总长度不超过65,535字节,正好放进一个IP数据包。

UDP协定的长处

  • 比较简单,容易实现

毛病

  • 可靠性较差,一旦数据包收回,无奈晓得对方是否收到

基于以上毛病,就有了TCP协定,来进步网络的可靠性

TCP协定长处

  • 可能确保数据不会遗失
  • 平安,牢靠的传输

毛病

  • 过程简单
  • 实现艰难
  • 耗费较多的资源

TCP数据包没有长度限度,实践上能够有限长,可是为了保障网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,也就是小于65,535字节,这也确保单个TCP数据包不用再宰割。

对于TCP为什么牢靠,什么措施来保障牢靠的,TCP会波及到哪些原理,咱们后续的文章再具体分享

应用层

来到了应用层,万里长征缓缓的看到了心愿

应用层的作用就是规定应用程序应用的用语标准,应用层的协定包含哪些呢?举个例子

  • 用于Web浏览的HTTP协定
  • 用于传输文件的FTP协定
  • 用于邮件的的SMTP
  • … 等等

这些协定就组成了互联网协议的应用层

如下图所示,发送方的HTTP申请的源数据通过互联网的传输过程中会顺次增加各个层级对应协定包头信息

接管方收到数据包之后再顺次依据层级协定顺次解包失去源数据

总结

  • 简略介绍了网络通信,互联网协议
  • 介绍了网络五层模型的每个层级的产生起因,每一层对应的协定是如何呈现的
  • 数据包在每个层级的封装过程

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里,下一次 分享GO的网络编程

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是小魔童哪吒,欢送点赞关注珍藏,下次见~

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理