欢迎关注个人主页:逸狼
创造不易,可以点点赞吗~
如有错误,欢迎指出~
目录
⽹络互连
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完 成业务,就有了⽹络互连。
⽹络互连:将多台计算机连接在⼀起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据⽹络互连的规模不同,可以划分为局域⽹和⼴域⽹。
局域网:把几台电脑连接在一起,就构成了局域网
路由器上面的口,数目比较有限,就引入了交换机(对路由器的端口进行了扩展)
广域网:通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部 的局域⽹都属于其⼦⽹。
IP地址
IP地址描述了一台主机,在互联网上所处的位置,使用32位整数("点分十进制",为了方便人阅读)来表示
端口号
区分当前主机上的指定的应用程序(进程)
一个主机上,使用网络的程序有很多个,通过端口号区分当前主机收到的数据是 交给那个程序来处理使用, 端口号同样也是一个整数,是一个2个字节的整数(范围:0->65535,但是0->1023这些端口都是有特殊含义的,我们自己写代码时,一般使用剩下的)
协议
网络中最核心的概念.
协议是进行一切通信的基础
通信至少要有两个主机,让发送方发的数据,接收方能够理解,双方需要按照同样的规则来构造/解析数据,协议 就是在约定通信双方交互数据的规则
如何进行网络通信问题 转为了 如何设计网络通信协议
协议分层
如果使用一个协议约定所有的网络通信细节,这个协议就会非常庞大,复杂.所以把这个协议拆分成了多个小协议,每个小协议专注解决一个/一类问题,再让这些协议相互配合.
并且约定好协议之间不能相互交互(只有相邻层之间才行),上层协议调用下层协议,下层协议给上层提供服务
优势
- 降低了使用成本,使用某个协议时,不需要关注其他协议的实现细节
- 降低整个体系的耦合性,灵活的变更某个层次的协议
TCP/IP 五层网络模型
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求
分为应用层 ,传输层 ,网络层 ,数据链路层 ,物理层
- 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远 程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。(程序员能够干预到的)
- 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发 送到⽬标主机。
- ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表 的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
- 数据链路层:负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。 有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
- 物理层:负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理 层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。
- 应用层:关注传输的数据用来干啥
- 传输层:主要关注网络通信中"起点和终点",并不关心通信的中间细节
- 网络层:进行网络通信的路径规划,网络层还需要负责地址管理
- 数据链路层:在针对上述规划好的路径,进行具体的实施
- 物理层:描述了硬件设备(网线这样的设备)需要满足什么条件(传输数据的硬件基础设施),相当于"公路","铁路","航线"
OSI七层网络协议(这种划分只是存在于教科书里,并没有真正的被采用)
物理层我们考虑的⽐较少。因此很多时候也可以称为TCP/IP四层模型。
驱动程序是硬件厂商配套提供的
网络设备所在的分层(站在经典的模型上讨论的)
- 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四 层;
- 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层;
- 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
- 对于集线器(将网线进行分叉,现在几乎见不到了),它只实现了物理层;
真实情况下,交换机,也可能是工作在网络层,甚至是 传输层/应用层
路由器,也可能是工作在数据链路层,也可能在传输层或应用层
数据在网络通信中的整体流程 封装和分用
封装
计算机网络中的封装 其实就是 字符串拼接
- 假设通过QQ发送一个hello给另一个人,hello这个内容从输入框读取到,构造成一个"应用数据包"(应用层的网络协议就描述了这个数据包的构造,此协议往往是开发该程序的程序员 自行定义的)
- QQ就会调用操作系统提供的API(传输层给应用层 提供的类似于"发送数据"的API), 然后应用程序就会把已准备好的 应用层数据包 作为参数传进来,此时应用层数据包就到了系统内核里(进入了传输层的代码部分)
- 再将该应用层数据包进一步 封装成一个传输层数据包,由于传输层有多种协议(最主流的是TCP和UDP,这两个协议给应用层提供了两种不同的API,应用层代码使用哪组API,就使用哪个协议)
- 继续调用 网络层 提供给传输层的api,把数据进一步交给网络层(传输层和网络层都是系统内核里已经实现好的),网络层也有多种协议(其中最主要的就是IPv4协议,简称IP协议),IP协议会把上述 传输层数据包 构造成 网络层数据包
- 网络层 继续调用数据链路层的api,把数据交给数据链路层进一步包装,数据链路层的常见协议,以太网
- 上述得到的数据进一步交给物理层(硬件设备),网卡会针对上述的二进制数据进行真正的传输操作,把0101这样的序列转为光信号/电信号/电磁波.....
- 序列化:把结构化的数据 => 二进制字符串
- 反序列化: 把二进制字符串 => 结构化数据
分用
分用其实是 封装的"逆向工作"
- 接收方的 物理层 收到光电信号 并还原成二进制字符串
- 将该数据交给 数据链路层,以太网拿到这个数据包并进行解析(拿出这里的报头 和载荷,根据报头中的信息决定这个数据包是 丢弃,转发还是 自己保留(向上解析))
- 网络层拿到解析好的数据包,IP协议对这个数据包进行解析(取出IP报头 和载荷,同样根据报头信息确认丢弃,转发或保留)
- 传输层的UDP协议也要针对数据包进行解析(取出UDP报头和载荷,此处需要把载荷进一步交给应用层协议(应用程序),并且依赖UDP报头中的"端口号"来区分不同的进程)
- 数据到达应用程序,程序对上述数据进行反序列化,针对这里的数据进行进一步的逻辑(将消息显示在界面上,播放提示音,显示弹窗等等)
中间过程的交换机和路由器也会涉及到 封装和分用
- 交换机 封装分用到数据链路层就可以决定数据是丢弃还是继续转发,不再继续分用
- 路由器 封装分用到网络层 同样可以决定数据是丢弃还是继续转发,不再继续分用
通常认为网络通信的速度比 硬盘的更慢,但比人的反应更快