[Java] 网络

目录

网络的起源

局域网 与 广域网

IP地址 和 端口号

什么是协议?

网络中的协议

协议的好处

OSI 七层网络模型

TCP / IP 五层网络模型

数据是如何通过网络传输的?

封装

分用


网络的起源

网络的前身是美国国防部用于军事(20世纪60年代末,美苏冷战时期,为了确保通信,保证第一时间能够发射导弹,组建出来的一个军用网,叫做"阿帕网"),到了70年代,慢慢发展,最终形成了现在的"互联网",简称"Internet".

局域网 与 广域网

用两根线把3个主机连接起来 , 形成了局域网. 这样三个主机之间就可以进行通信.

如下连接就是太废网线了.也废网口.

现如今组建局域网, 使用交换机 与路由器 , 交换机就是把若干个设备给组建到一个局域网中,

这个局域网内部的各个主机之间就可以相互访问.

 

互联网发展到如今 , 路由器和交换机功能也近乎一样了.

通过交换机和路由器,组建起来的在这些都叫做局域网.

更大的局域网就是广域网.

IP地址 和 端口号

IP地址 : 描述了网络上的每个主机的位置.

例如 : 127.0.0.1  IP地址本质上是一个32个bit位.为了方便记忆, 将8个bit位设为一个字节.分为四个部分,用 . 分开, 称为"点分十进制".

端口号 : 描述了一个主机上的某个应用程序.

端口号本质上是2个字节(16位) 的无符号整数. 范围是 0 ~ 65535

例如 : 3306 这是MySQL的默认端口号.

什么是协议?

协议 : 可以理解为是一种"约定"

让发送方与接收方约定好我们以什么样的格式来通信.发送方发出来的数据是啥样的格式,接收方按照对应的格式来进行解析.

网络通信的时候 , 本质上, 传输的是 光信号和电信号 , 通过(光纤)光信号的频率(高频率/低频率)或者(网线)电信号的电平(高电平/低电平) 来表示 0 和 1 . 具体的这一串0 1 表示的是什么意思, 取决于是什么约定的.也就是协议.因此在传输前 , 就需要让发送方和接收方都约定好,每01都是什么意思.

例如 :  像 摩斯密码 , 还有电视剧中的发电报操作 . 就算你给情报截获了, 要是你不了解其中的协议, 就没办法翻译.

网络中的协议

网络通信是非常复杂的, 也就导致协议很庞大.里面有非常多的细节.

在面对一些比较特殊的环境 , 就需要更复杂的协议, 但协议太复杂,使用起来过于困难.

一个很好的方法就是 : 将一个庞大的协议拆分成多个协议. 拆分为更简单的协议 , 每个协议,负责一部分工作.

例如 : 像平常我们写代码一样 , 我们不会让一个main方法实现全部功能 , 而是创建一些辅助方法来帮我们实现其中的一些功能.

拆分出来的这些小协议 , 进行"分类" (功能类似的,放到一个组里)

同时再针对这些不同的类别, 进行分层. (约定了层级和层级之间的调用关系)

要求上层协议调用下层协议,下层协议给上层协议提供支持.不能跨层调用.

协议的好处

 1 . 分层之后 , 层次之间,耦合程度比较低.

      上层协议不必了解下层的细节, 下层协议也不必了解上层的细节.

2. 方便对某一层的协议进行替换 .

    站在语言的双方 , 我们不在意使用的是什么通信设备来交流.

    站在通信设备的角度 , 不在意交流的两个人说的是什么语言.

OSI 七层网络模型

从上往下 : 应用层 , 表示层 , 会话层 , 传输层 , 网络层 , 数据链路层 , 物理层

七层模型现如今已经很少使用. 

TCP / IP 五层网络模型

当下最广泛使用的网络模型TCP/IP 

五层 : 应用层 , 传输层 , 网络层 , 数据链路层 , 物理层

四层 : 应用层 , 传输层 , 网络层 , 数据链路层. (对于程序猿来说主要考虑的是软件上的事情,物理层是纯硬件, 和软件的关系不大)

应用层 : 主要关注的是传输过来的数据是干什么用的.

传输层 : 不考虑中间路径 , 只关注起点与终点.

网络层 : 主要负责起点节点和终点节点之间的路径规划.[全局考虑]

数据链路层 : 主要关注的是相邻的两个节点之间的传输.[局部考虑]

物理层 : 网络通信的基础设施 , 网线, 光纤, 网络接口等等.

举个栗子 : 好比是在淘宝上买东西 .

站在卖家和买家的角度 , 他只关心这个货物能不能送到 , 这就是传输层 .  

而中间的快递公司, 它关注的就是这个送货的路径,好比从北京 - 西安 - 太原 - 朔州.快递公司做的就是规划路线. 这就是网络层.

而从北京到西安是通过火车还是货车还是飞机. 这就是数据链路层考虑的问题.相邻的两个节点如何传输. 这就是数据链路层.

物理层 : 就是中间使用的介质 , 高速公路 , 汽车.....

最后站在我们用户的角度来说 : 我们只关心这个买回来的东西能不能用.怎么用.

对于我们程序猿来说 : 打交道最多的就是应用层. 

传输层和网络层 由操作系统实现.

数据链路层和物理层 是由设备的驱动程序及硬件实现的.

对于一台主机来说 : 它就实现了这5层协议.

而传统的路由器, 主要就是物理层到网络层(主要是实现了物理层,数据链路层,网络层).

传统的交换机, 主要就是物理层到数据链路层(主要是实现了物理层,数据链路层).

数据是如何通过网络传输的?

答案是 : 封装分用.

发送方发送数据 , 把数据从应用层到物理层依次进行封装.

接收方接收数据 , 把数据从物理层到应用层依次进行解析.

封装

举个栗子 :  Guo祥 要给 ting婷发一个微信说 : 吃不吃zaotan.

应用层调用传输层提供的api (api : 应用程序的编程接口)

将应用层的数据 , 交给传输层. (交给传输层以为着进入了操作系统内核)

 传输层再把数据传给网络层

网络层交给数据链路层 

mac 地址 与 IP 地址的区别

IP地址指站在网络层的角度 的 起始地址 和 目的地址

而mac地址是站在数据链路层的角度上的 起始地址 和 目的地址  , 也就是相邻两个节点的起始地址和目的地址.

并且 mac地址是唯一的 , 而 IP地址是不唯一的.

最后将数据链路层传输给物理层

5 . 物理层就会把上述数据链路层传输过来的二进制数据 (一组010101011010 的数据)

转换为光信号或者电信号或者电磁波信号, 进行传输.

以上就是从应用层到物理层的大致封装过程 , 简单来说就是发送出的消息, 经过每一层的封装(其实就类似于字符串拼接) 最后由物理层以电磁波或者光信号或者电信号 发送出去.

分用

封装是从应用层到物理层.

把发送方的消息进行封装好通过电磁波或光信号或电信号 发送到接收方.

接收方的物理层的网卡收到高低电平二进制数据. 就会对这里的信号进行解析 , 还原成010101这样的二进制序列.

由物理层交给数据链路层

 

网络层 也是去掉IP报头 , 取出载荷交给传输层.

 

传输层 去掉 UDP报头后 , 取出载荷 , 把数据交给应用层.

 最后由微信这个应用程序来进行解析. 取出下列字段,放到程序的界面中.

 

总结 : 封装就是打包快递. (由应用层到物理层 , 层层进行封装).

          分用就是拆快递 . (由物理层到应用层 , 层层进行分用).

 

在发送和接收双方它们之间还有多个节点进行转发.

A 将消息发给B , 它们之间需要将过多个路由器和交换机来负责数据的转发.

路由器要做的事情就是先分用到网络层 , 将IP地址进行更新 , 进行下一阶段的路径规划.

然后重新往下封装 , 并进行转发.

交换机会先分用到数据链路层 , 更新以太网数据帧的mac地址然后再重新封装 , 并进行转发.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值