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

3次阅读

共计 5351 个字符,预计需要花费 14 分钟才能阅读完成。

[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 的网络编程

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

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

正文完
 0