网络编程启蒙

文章目录

  • 局域网、广域网
    • WAN口
    • LAN口
    • 那么什么是局域网和广域网呢?
  • IP地址
    • IPV4
      • 动态规划ip
      • NAT
    • IPV6
    • IPV6的普及
    • IPV6的应用
  • 端口号
  • 协议
    • 协议分层
    • 协议分层的好处
  • OSI
    • 物理层
    • 数据链路层
    • 网络层(全局)
    • 传输层负责
    • 应用层
    • 网络设备所在分层
    • 网络分层中的一组重要概念\封装 和分用(重点)

作者主页:Java冰激凌
专栏链接:JavaEE

局域网、广域网

首先我们来了解一下路由器 在当前的网络时代 路由器已经成为了我们家庭中不可缺少的一部分了 当然不仅仅应用于家庭 我们在大部分情况下 连接wifi都是连接到路由器覆盖出来的网络中的 当然我们基本都认识路由器 那么这次我们来简单的介绍一下路由器 路由器主要有两类端口 一类是WAN口 一类是LAN口 而我们经常使用到的一般是我们的WAN口 我们家中入户的宽带一般就是插这个口 那么我们是否会有一个疑惑 为何已经有了光猫我们还需要有路由器呢?其实我们的光猫的功能是非常的少的 并且也不支持网络拓展 而路由器功能强大 就被广泛的应用到了我们的wifi组件中

WAN口

我们一般在家中入户的宽带就是插这个口

LAN口

其中插在LAN口上的设备 在一个局域网里通过WAN口链接到另外一个局域网


所以路由器是连接了两个局域网 (LAN口一个 WAN口一个)


那么什么是局域网和广域网呢?

其实我们对于局域网和广域网的认知只是一个浅度的概念 我们可以简单的理解为 你家庭中的无线 这个就是局域网 而覆盖一整个小区 甚至更大的 我们可以认为他是一个广域网 两者的区别就是 广域网覆盖的比局域网大


IP地址

ip地址相信我们也是很熟系的 ip地址是我们主机在网络中的位置 也就是说 它描述了网络上一个主机的位置 我们可以来简单的看一下如何查询自己主机当前的ip地址
我们只需打开cmd窗口输入ipconfig即可看到自己的ip地址
网络编程启蒙_第1张图片但是 这个并不代表这个ip地址是外网 其实在我们的路由器中 路由器接收的网络才是外网 也就是外部可以直接访问的网络 我们这个属于内部网路 也就是路由器根据规划ip地址分配给我们单个设备使用网络的ip地址 外界并不能根据此ip地址来找到我的主机

IPV4

IPV4使用点分十进制来表示的 为了方便人们读取 就类似于192.168.0.1 这个ip地址就是我们经常见到的ip地址 他本身是一串很长的二进制表示的(32位)那么我们为了更好的记住这个ip规定了格式 每8位为一个 划分为 00.00.00.00这样的地址 其中也有一个特殊的IP地址 就是我们的127.0.0.1 这个是环回IP用于我们访问自己主机中的内容的时候来访问
为什么说我们当前主机是内部网络ip呢?这个就要讲解到我们的IPV4 我们的IPV4是由32位的二进制构成的 所以说 IPV4可以表示的地址为 2^32 也就是大概42亿个ip地址 我们也可知 如果我们的一个设备需要上网 是必须要分配到一个ip地址才可以上网的 但是在网络时代的今天 全球六十亿人口的引导下 我们的IPV4地址明显已经不够用了 更别说我们现在推广的智能家居 手机 电脑各种 都是需要到IP地址的 所以我们IPV4提出了对应的优化

动态规划ip

这是我们的IPV4的第一个优化机制 这个机制将所有的IP地址进行统一管理 当一个设备需要上网的时候 才会给这个设备分配ip地址 这个简单的优化虽然还能够解决一部分的ip地址匮乏 但是远远也是满足不了高速发展的今天的

NAT

NAT机制是90年代提出的 这个NAT机制将一个路由器分配到了一个IP地址 这个IP地址又可以进行划分子网 在子网中可以分配对应多少个数的ip 但是这个也带来了一个很严重的问题 网络分化 也就是我们刚开始提到的外网和内网 这样分配出的网络 我们只能在同一个局域网下进行互相访问 而外界是无法对于我们的主机进行访问的 (这样解决 也有一定的好处 首先是暂时解决了ip地址不够用的问题 也一定程度的保护了我们的网络安全 比较外界无法访问咱们嘛)但是我们只能这么一直迁就它吗?不 ! 我们还有IPV6的提出

IPV6

在IPV4快要枯竭的时候 IPV6协议已经被提出 IPV6由我们的128位二进制组成 跟IPV4相比 32位 你感觉只是大了四倍吗 ?漏!大漏特漏! 我们这边要这么计算 2^128 = 2 ^ 32 * 2 ^ 32 * 2 ^ 32 * 2^32 可不是简单的四倍 而IPV6可以大到什么地步 ?我们都知道我们的CPU都是由我们的沙子提取硅来制作的 IPV6大到可以给地球上每一粒沙子都分配一个IP地址 恐怖吧 并且 如果我们使用了IPV6 我们的生活质量会有大大的提高 可以实现万物互联 这个万物互联可不是我们现在简单的万物互联 简单举例:当夜幕降临的时候 车路过路灯就会亮 并且当车走了之后 这个路灯会降低亮度 大大的省电

IPV6的普及

其实我们当今世界上的国家中 我们中国是当今全球中IPV6普及最高的国家 我们国家在当初IPV6提出的时候 是最先一批做出响应的 在IPV6研制成功之后 并且也在实际中得到的应用

IPV6的应用

很多童鞋可能不知道 其实我们国家在2008年的时候 在2008年奥运会的时候 已经全面使用了IPV6 通讯 传播 甚至出租车都是使用到了IPV6 并且也是国际首例的使用IPV6的应用 并且我们的奥运会也是成功的使用IPv6举办下来的 并且不出意外的话 这个将作为国际典范的使用 可惜NAT机制的问世 IPV6也很快的被石沉大海了 但是我们要明确 IPV4的IP分配权是掌握在m国手里的 要想避免被鹰酱又威胁 这个威胁还是很大的 如果鹰酱停止给中国分配IP地址 那么中国的所有设备都无法访问互联网 我们国家也在大力的推荐着IPV6的应用 现在 我们国家的IPV6覆盖率已经达到了80%以上


端口号

端口号描述了一个主机上的某个应用程序 端口号本质上是一个2个字节(16byte )的无符号数 0-65535
并且 在一个程序启动的时候 都需要绑定上一个端口号以便客户端程序来访问


协议

进行有效通信 前提就是能够明确通信协议 本质上就是约定发出来的数据时啥样的格式 接收方按照对应的格式来进行解析网络通信的时候 本质上 传输的是光信号和电信号 通过光信号的频率(高频率/低频率) 电信号的电平(高电平/低电平) 来表示0和1

协议分层

因为我们的网络通信这个过程是非常的复杂的 所以将一个大的并且复杂的协议 拆分成很多个小的简单的协议 每个协议负责一部分的工作

协议分层的好处

  1. 每层协议不需要理解其他层的协议(更好的做到了封装)
  2. 把对应层的协议替换成其他协议(更好的做到了解耦合)(众所周知 我们写代码最好的方式就是高内聚 低耦合)

OSI

OSI由七层模型构成
网络编程启蒙_第2张图片
但是 我们在实际使用中 一般只会使用五层协议 分别是应用层 传输层 网络层 数据链路层 物理层

物理层

网络通信中的硬件设备 网线/网卡针对硬件设备的约定 就是物理层协议锁负责的范畴 需要保证所有的主机和网络设备之间 都是相互匹配的

数据链路层

负责完成相邻(一根网线相连的两个设备)的两个设备之间的通信的

网络层(全局)

负责点到点之间的通信 网络中的任意节点到任意节点之间的通信 (不一定是相邻了 更多的是不相邻的)
网络层就负责在这两个点之间 规划出一条合适路线(实际的网络环境结构非常复杂 两个点之间的路线不止一条 就需要规划出最合适的一条合适的路线 就例如 我们没有导航的话 如果要去到一个地址 我们就需要摸索这方向 但是我们又不知道具体的路该怎么走 所有我们需要边走边问路 根据一直问路 就可以招到我们要去的地址 网络层采用的也是如此 投石问路的过程 会一层一层的询问 越询问越近

传输层负责

端到端之间的通信 起点和终点
只是关注结果 不关注过程

应用层

和应用程序相关的 你传输的这个数据时干啥的 不同程序又有不同的用处 这一层 就好比我淘宝买了快递 然后商家包装给快递 快递负责我的运输 路线规划 然后交到我手上 我不需要关心他路上是怎么走的 我只需要下单 然后使用即可 这也类似于我们当初说过的 面向对象和面向过程


网络设备所在分层

一台主机 其实就对应了物理层到应用层 五层(把这五层都给实现了)
一台路由器 主要就是物理层到网络层(主要是实现了物理层 数据链路层 网络层)
一台交换机 主要就是物理层到数据链路层(主要是实现了物理层 数据链路层)

网络分层中的一组重要概念\封装 和分用(重点)

我们来简单的绘制一下 不同的分层协议之间是如何配合的
假设我们现在为QQ的协议 (当然协议的实现是不同的 这是程序员约定的)
假设我们约定协议格式是这样的 当前状态为 A同学给B同学发送了一条hello的QQ消息
网络编程启蒙_第3张图片
首先这个封装会在应用层完成 之后应用层调用socket api 把应用层的数据交给传输层
传输层会在应用层打包出来的内容进一步封装一个TCP报头(这个后期会讲TCP报头)
封装为一个TCP数据报 所以也可以简单理解为 TCP数据报 = TCP协议报头 + 数据载荷
这个TCP数据报头中有很多信息 其中 最重要的就是源端口和目的端口
在这里插入图片描述
接下来就会把传输层的数据报交给网络层
网络层会把接收而来的数据继续打伤IP的协议报头 继续封装为IP数据报
IP数据报 = IP 协议 + 载荷(完整的TCP数据报)
这个IP数据协议报头中也有很多信息 最重要的是源IP和目的IP
在这里插入图片描述
紧接着 网络层会将IP数据报交给数据链路层 典型的数据链路层协议 叫做以太网 就会构造一个以太网数据帧
在数据链路层中 会给IP数据报打上帧头和帧尾 其中 帧头中包含的是接下来要到达的地址是什么 帧尾中主要包含的是校验和 这个校验和是因为网络传输中会有很多情况会发生“比特反转”事件 用来检验是否发生了比特反转 如果发生了比特反转 就证明这个数据报是错误的
在这里插入图片描述
完成此工作之后 会讲以太网数据帧交给物理层
物理层拿到之后 会根据刚才的以太网数据帧(一组0和1)
把这里的0 和1 编程高低电平 通过网线传输出去
或者将这里的0 和1 编程高频/低频 的电磁波 通过光纤 无线的方式传播出去


以上的过程是发送 我来尝试着解析一下 其实解析就是反向的来 我们画一个其中的过程(简图 实际情况比这个复杂的很)
网络编程启蒙_第4张图片
当B收到这个消息后 是物理层先收到进行解析 之后物理层会将这个交给数据链路层
在这里插入图片描述
数据链路层接收到以太网数据帧之后 会将其进行解析 将帧头和帧尾卸下在这里插入图片描述
将其解析为IP数据报 之后再交给网络层
网络层收到这个IP数据报之后 会进行解析 将IP的协议报头卸下
在这里插入图片描述
之后再交给传输层
传输层接收到这个TCP数据报之后 会进行解析将TCP数据报头卸下 然后将数据载荷交给引用层
网络编程启蒙_第5张图片
当应用层接收到数据载荷后 直接进行解析


以上的操作 也正是顺应了每一层完成每一层的任务 也不会管其他层的东西
这也是一个简单的网络传输的模型 因为在实际的网络传输中 中间会经过多个路由器 交换机 服务器 之后才会发给到B客户端

你可能感兴趣的:(JavaEE,网络,javaee)