【网络原理的概念】

(点击跳转即可哦)

java学习专栏

LeetCode刷题专栏


网络原理

基础原理

用户态和内核态只是内存上的不同区域 用户态-> 内核态:内存上数据复制的过程

网卡:实现物理信号 <-> 数字信号的转换


两台主机之间的数据传输


用户态-> 内核态:内存上数据复制的过程

这里的内部复制 就是类似这样的代码(只是类似)

byte[] 用户态 = new byte[1024]; //待发送数据

byte[] 内核态 = new byte[1024]; //内核态缓冲区

os.write(用户态);

​ for(int i = 0; i < bytes.length; i++){

​ 内核态[i] = 用户态[i];

​ }

让网卡发送数据怎么处理?

  1. 将数据装入网卡:数据的复制
  2. 进行发送数据:fire()
  3. 发送数据就要将数据信号变为物理信号

数据在传输介质(网线、光纤)上的传播(信号衰退、信号差错等问题)


当数据走到另一台主机上时,此时CPU停止当前执行循环,让CPU执行一段提前准备好的代码(这就是中断处理流程)。把数据从网卡对应的位置 复制到 内核态的内存

此时,两台主机之间只要能用一个网络介质连接,就可以从硬件角度实现数据交换


那多台主机的组网呢?

网络拓扑的基础构造:总线型、星形、环形、树形


协议/分层

要完成整个通信,中间要处理的问题还是非常复杂的。所以采用分工合作是非常有必要的

当有了分层之后,就需要针对每一层,都指定好一些规范,让大家都去遵守,进而更好的完成工作。

这些规范具有一定的权威性,在网络学科下,就将其称为 协议(protocal)


网络标准分层:

  1. 学院派:OSI (Open System Interconnect) 提供了一个 7层的解决方案

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

  1. 实践派:TCP / IP 5层协议(四层,在表述中 省略了物理层)

    应用层 (Application Layer):实现应用自己的业务问题(业务不同,协议不同)

    传输层(Transmission Layer): 实现主机上任意进程 到 另一台主机上任意进程通信的问题

    网络层(NetWork Layer): 实现数据路由的功能基础上,最终实现跨 LAN 的主机 到 主机的通信的问题

    数据链路层(Data Link Layer) : 局域网内部一台主机和另一台主机连接通信的问题(冲突域 / 广播域)

    物理层 (Physical Layer) : 硬件角度保证数据转换 / 在网络介质中如何传播


物理层

LAN内部的通信问题:

  1. 最简单的局域网:就是两台主机直连
  2. 带有一定拓扑的局域网

这些主机在共同使用一个信道而信道一次只能走有限的信号,导致信号在信道上会出现冲突

冲突域:

比如在自习的场景下,人人都可以主动起来讲话,导致互相之间都听不到对方的说法

集线器可以有效的解决网络拓扑中数据传递的问题

集线器工作在 物理层 (1. 复制数据 2. 信号放大)

使用集线器进行组网,天生就处在同一个冲突域,这是集线器的工作原理导致的


数据链路层

已经在同一个冲突域下,怎么解决,通过一定的冲突避免算法,进行冲突避免。——数据链路层去解决

最常见的一种冲突避免算法:发现冲突之后,静默随机时间,再次发送

即便有冲突避免算法,使得同一个冲突域内的数据可以有效传输了,但信号传输效率还是会产生影响

  1. 冲突域内的主机不要太多
  2. 尽可能减少冲突域的出现

交换机(switch) 用来减少冲突域(划分冲突域)

集线器:只做复制,根本不知道数据是什么

交换机:需要理解数据链路层放入的目标地址(需要能解析数据链路层协议),格式数据的目标地址,决定数据给谁不给谁

交换机工作在数据链路层,实现根据数据中的目标地址,将数据只发送给对应的目标

所以,通过交换机也可以进行组建局域网。


地址:数据链路层的地址指的是 MAC 地址(物理地址)

MAC地址的长度为 48位(6个字节),通常表示为 12个 16进制数,如 00-16-EA-AE-3C-40 就是一个MAC地址

网卡在生产的时候已经写死了。全世界的网卡的MAC地址是不会冲突的


不同的路由器之间 分为了不同的广播域


数据链路层协议的职责: 一个LAN内部,无论哪种设备、哪种拓扑,主机和主机都可以正常的通信了


网络层

通过数据路由解决 跨LAN 的主机间通信问题。

路由器至少处在两个局域网(至少有两张网卡)

路由器工作在网络层。

数据只能在同一个LAN传输,路由器横跨 两个LAN,所以跨LAN 的传输是需要经过路由器传递的。

路由(route): 做寻路;

路由器(router): 用于完成寻路功能的一种设备

网络层的协议就是为了完成寻路,实现跨LAN主机到主机

网络层有自己的地址:IP地址

IP地址是一个32位的二进制数,通常被分割为4 个 ”8位二进制数“ (也就是 4 个字节)

通常用”点分十进制“ 的方式来表示,即 a.b.c.d 的形式 (a,b,c,d 都是 0~255 之间的十进制整数)

IP地址是软件地址:同一个网络内部的IP是不应该”重复“ 的。IP地址的随时变化的。


传输层

主机到主机已经全部连接起来。一个进程 要和 另一台主机上的进程进行通信。

端口(port):0~65525 两个字节的无符号数

进程 <-> 端口 :写明端口,对应到具体的进程

人 <-> 手机号 : 写快递:收件人电话

一个进程可以有多个端口(不冲突)

一个端口只能分配给一个人(不能重复)


三个重要的网络设备

集线器

工作在物理层

交换机

工作在数据链路层

路由器

工作在网络层


小结

应用层业务用户态
传输层进程 到进程端口
网络层跨LAN的 主机到主机IP地址/路由路由器
数据链路层LAN内部 主机到主机MAC地址/广播域/冲突域交换机态 OS代码的完成
物理层物理上保证线路畅通集线器硬件

重要协议:

HTTP/HTTPS/DNS 属于应用层

TCP/UDP 属于 传输层

IP 属于 网络层


发送:封装(必须携带分用和解包信息)

接受:解包/分用 (根据本层的控制信息)

封装和分用

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)。

首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。

数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中 的 “上层协议字段” 将数据交给对应的上层协议处理。

各层可以根据各层自己添加的控制信息进行必要的操作

对应层次之间,是完全透明的,完全可以忽略这个过程


要是对大家有所帮助的话,请帮我点个赞吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值