快速理解网络通信协议总结

原文地址 :

一、在四层网络模型的基础上,可以将实体(各种硬件设备)归为最下面一层,抽象出实体层。

 

越往上的层越靠近用户, 我们做 web 开发主要关注的是应用层(http协议), 底下的各层直接接触的比较少,可以大概的了解下各层是负责什么的就行了, 出问题的时候知道怎么排查。

1、实体层:

两台电脑要相互通信, 这个通信就必须有一个介质, 这个介质将电脑连起来的光缆、电缆、双绞线、无线电波等方式。 这个就叫“实体层”, 他是把电脑连起来的物理手段, 主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

 

2、链接层:

定义 :

物理层中单纯提供高低电平表示的0101没有任何意义,必须规定一个解读方式, 多少个电信号算一组, 每个信号位有什么意义? 而这个就是链路层的功能,统一规定这些0101的解读方式。

以太网协议:

以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。

 

"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。

MAC地址 :

以太网数据包的"标头",包含了发送者和接受者的信息。发送者和接受者是如何标识呢?

以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

 

广播 :

定义地址只是第一步,当有多台设备的时候,怎么确定要把消息发给哪台设备呢?就是采用广播的方式, 让所有设备都收到消息,然后自己判断消息是不是给自己的, 不是则丢弃,是则处理。

有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。

3、网络层:

由来:

按照上面的模式, 确实可以做到通过广播的方式找到全世界任何一台机器,但是想象一下, 全世界这么多机器全部使用广播的方式通信, 结果可能收到的一亿个包里面都没有我们需要的一个包,这样设计是灾难性的,所以不能做得太大,只能局限在发送者所在的子网络使用。

而互联网是无数这样的子网络共同组成的一个巨型网络,很像想象上海和洛杉矶的电脑会在同一个子网络,这几乎是不可能的。

 

链路层解决了子网内机器通信的问题(广播), 那么各个子网之间的通信就在网络层解决。

它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。 网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

而我们常说的 ip 其实就是网络层的ip协议, 目前使用最广泛的是 ipv4(第四版)

IP数据包:

遵守ip协议发出的数据包就是ip数据包, IP数据包也分为"标头"和"数据"两个部分:

"标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样:

 

4、传输层:

有了前面的 mac 地址 和 ip, 机器通信的问题解决了,但是同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

而传输层就是这个用途的,他引入“端口”的概念, 一个端口只能被一个进程占用,那么你知道这个包是哪个端口传过来的, 你也就知道这个包应该给哪个进程了。

传输层说的最多的是 TCP/UDP 协议。需要实现上述功能,最简单的方式就是 udp 协议,它的格式几乎就是在数据前面,加上端口号。

"标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:

 

5、应用层:

实现上面几层之后,两个程序相互通信的条件就有了,但是这不等于两个程序就可以进行沟通协作了(比如埃及人和中国人相遇, 他们鞥听见彼此说话,但是却无法沟通、合作,因为理解不了对方表达的意思)。

程序同样也是这样, 这就需要大家有一个彼此都能理解的语言(约定), 大家都遵循这个约定,就能彼此沟通了。

所以就有了各种应用层协议,比如 http、 FTP 等。

因此,现在的以太网的数据包就变成下面这样:

 

整体回顾下,我们现在的互联网几层协议的分工和定位如下 :

1、实体层 : 各种厂家生产的各种硬件。

2、链路层:负责个机器的物理连接, 以广播的方式通信,保障子网内机器能相互通信,靠 mac 地址定位。

3、网络层:负责让各个子网对彼此进行定位,靠IP地址定位子网,靠路由器实现子网的路径查找。

4、传输层:负责定位机器上的程序,靠端口定位程序,实现程序与程序之间的通信。

5、应用层:负责各个程序之间通信时候的“翻译”,规定了通信的格式等。

 

举例 :

比如我访问浏览器的时候, 在浏览器敲下问网址, 先通过应用层 http 协议对我发送的内容进行封装,然后交给下面传输层的TCP协议对http包进行封装(头部接了端口等信息),下面的网络层对TCP包进行封装(加入ip地址等)得到ip包,再下面的链路层再对ip包进行封装(加了mac地址等)得到以太网包【当然其中还包括数据格式的转化等】。

 

传输的时候先根据子网掩码等排到对方与自己是否在同一个子网, 如果在,则直接通过广播的方式发送给对方,如果不在,则先把包发送给网关,网关再通过路由的方式将包发送对应ip地址的子网中, 另一个子网的网关再沟通广播的方式将包发送给目标地址(用mac定位)。

 

上图中,1号电脑要向4号电脑发送一个数据包。它先判断4号电脑是否在同一个子网络,结果发现不是(后文介绍判断方法),于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值