⽹络基础概念
⽹络发展
独⽴模式: 计算机之间相互独⽴;(在此阶段下:资源无法共享、协作效率低下、运维成本高)
⽹络互联:多台计算机连接在⼀起, 完成数据共享;(网络互联实现数据共享优势是打破资源孤岛,但是也带来了安全性、稳定性、运维成本的缺点)
局域⽹LAN: 计算机数量更多了, 通过交换机和路由器连接在⼀起;(也存在规模限制、安全隐患、运维复杂度等缺点)
广域网 WAN: 将远隔千里的计算机都连在一起;(广域网实现了跨地域、跨城市甚至跨国的设备互联,但也存在延迟高、稳定性差、成本高昂、安全风险突出等短板)
所谓 “局域网” 和 “广域网” 只是一个相对的概念. 比如, 我们有 “天朝特色” 的广域网, 也可以看做一个比较大的局域网.
计算机是⼈的⼯具,⼈要协同⼯作,注定了⽹络的产⽣是必然的.
初识协议
- "协议" 是⼀种约定.
打电话约定电话铃响的次数的约定.
如下例子:在以前打电话用电话机的年代,由于高昂的电话费,父母为了避免给住校的孩子打电话,于是制定了如下这样的约定。(这就是一种”协议“)
- 铃响2 声就挂断= 家里一切安好,不用回电;
- 铃响4 声挂断= 家里有小事,方便时回个电话;
- 铃响1 声就挂断= 紧急情况,立刻回电。
而计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.
- 但是就算制定好协议,也会因为协议的不同造成歧义。就像英国人与中国人交流就算有协议,他们也是无法正常通信的。
所以,完善的协议,需要更多更细致的规定,并让参与的⼈都要遵守
- 计算机⽣产⼚商有很多;
- 计算机操作系统, 也有很多;
- 计算机⽹络硬件设备, 还是有很多;
- 如何让这些不同⼚商之间⽣产的计算机能够相互顺畅的通信? 就需要有⼈站出来, 约定⼀个共同的标准, ⼤家都来遵守, 这就是 ⽹络协议;
⼀般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司。
协议分层
• 协议本质也是软件,在设计上为了更好的进⾏模块化,解耦合,也是被设计成为层状结构的
软件分层的好处
在图中表示了简单的两层协议:语⾔层、通信设备层。
同层之间:我们可以认为两者之间直接进行通信。
- 但是实际的⽹络通信协议,设计的会更加复杂, 需要分更多的层
- 但是通过上⾯的简单例⼦,我们是能理解,分层可以实现解耦合,让软件维护的成本更低
OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层⽹络模型称为开放式系统互联参考模型,是⼀个逻辑上的定义和规范;
- 把⽹络从逻辑上分为了7层.每⼀层都有相关、相对应的物理设备,⽐如路由器,交换机;
- OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最⼤优点是将服务、接⼝和协议这三个概念明确地区分开来,概念清楚,理论也⽐较完整.通过七个层次化的结构模型使不同的系统不同的⽹络之间实现可靠的通讯;
- 但是, 它既复杂⼜不实⽤; 所以后面讲解我们按照TCP/IP五层模型来讲解.
- 其实在⽹络⻆度,OSI定的协议7层模型其实⾮常完善,但是在实际操作的过程中,会话层、表⽰层是不可能接⼊到操作系统中的,所以在⼯程实践中,最终落地的是5层协议。
- 现在看这些可能难以理解,不过在学完网络之后,就会很清晰了。
TCP/IP五层(或四层)模型
- 其中TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求.
- 物理层: 负责光/电信号的传递⽅式.⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等.集线器(Hub)⼯作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别.例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作.有以太⽹、令牌环⽹, ⽆线LAN等标准.交换机(Switch)⼯作在数据链路层.
- ⽹络层: 负责地址管理和路由选择.例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由).路由器(Router)⼯作在⽹路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机.
- 应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等.之后所写的⽹络编程主要就是针对应⽤层.
物理层我们考虑的⽐较少,我们只考虑软件相关的内容. 因此很多时候我们直接称为 TCP/IP四层模型.
⼀般⽽⾔
- 对于⼀台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于⼀台路由器, 它实现了从⽹络层到物理层;
- 对于⼀台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了⽹络层的转发; 很多路由器也实现了部分传输层的内容(⽐如端⼝转发);
再识协议
上⾯的内容,我们只是懂了⼀些基本概念,还是达不到⽬标,下⾯我更细致讲解协议和协议分层。
为什么要有TCP/IP协议?
- ⾸先,即便是单机,你的计算机内部,其实都是存在协议的,⽐如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,⽐如:SATA,IDE,SCSI等。只不过我们感知不到罢了。⽽且这些协议都在本地主机各⾃的硬件中,通信的成本、问题⽐较少。
- 其次,⽹络通信最⼤的特点就是主机之间变远了。任何通信特征的变化,⼀定会带来新的问题,有问题就得解决问题,所以需要新的协议咯
所以,为什么要有TCP/IP协议?本质就是通信主机距离变远了
什么是TCP/IP协议?
- TCP/IP协议的本质是⼀种解决⽅案
- TCP/IP协议能分层,前提是因为问题们本⾝能分层
所以究竟什么是协议?
OS源代码⼀般都是⽤C/C++语⾔写的。
下⾯,仔细看看下⾯的图
主机B能识别data,并且准确提取a=10,b=20,c=30吗?
回答:答案是肯定的!因为双⽅都有同样的结构体类型struct protocol。也就是说,⽤同样的代码实现协议,⽤同样的⾃定义数据类型,天然就具有”共识“,能够识别对⽅发来的数据,这不就是约定吗? 关于协议的朴素理解:所谓协议,就是通信双⽅都认识的结构化的数据类型因为协议栈是分层的,所以,每层都有双⽅都有协议,同层之间,互相可以认识对⽅的协议。
⽹络传输基本流程
局域⽹(以太⽹为例)通信原理
• ⾸先回答,两台主机在同⼀个局域⽹,能够直接通信,原理类似上课:
教室里的每个学生都有名字(对应主机的IP 地址),同时还有一个独一无二的座位号(对应主机的MAC 地址)。IP 地址是给人看的 “逻辑标识”,比如 “小明”“小红”;MAC 地址是网卡的 “物理标识”,是出厂时固化的,相当于座位号 “第 3 排第 2 座”,永远不变。同一个局域网里的主机,IP 地址必须在同一个网段(比如都是192.168.1.X),就像学生都在同一个教室里,不在一个网段的主机相当于在别的教室,没法直接传纸条。
• 每台主机在局域⽹上,要有唯⼀的标识来保证主机的唯⼀性:mac地址
认识MAC地址
- MAC地址⽤来识别数据链路层中相连的节点;⻓度为 48 ⽐特位, 即 6 个字节. ⼀般⽤ 16 进制数字加上冒号的形式来表⽰(例如:08:00:27:03:fb:19)
- 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址).
查看mac地址:windows>ipconfig /all Linux$ ifconfig
- 以太⽹中,任何时刻,只允许⼀台机器向⽹络中发送数据
- 如果有多台同时发送,会发⽣数据⼲扰,我们称之为数据碰撞
- 所有发送数据的主机要进⾏碰撞检测和碰撞避免
- 没有交换机的情况下,一个以太网就是一个碰撞域
- 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac 地址判定
- 这里可以试着从系统角度来理解局域网通信原理
初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程
⽽其中每层都有协议,所以当我进⾏进⾏上述传输流程的时候,要进⾏封装和解包
在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃定向下将数据交付给下层协议。
报头部分,就是对应协议层的结构体字段,我们⼀般叫做报头
- 除了报头,剩下的叫做有效载荷
- 故,报⽂ = 报头 + 有效载荷
我们在明确一下不同层的完整报文的叫法:
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame).
- 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation).
- ⾸部信息中包含了⼀些类似于⾸部有多⻓, 载荷(payload)有多⻓, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部, 根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理.
在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃定向下将数据交付给下层协议,最后由底层发送,然后由对⽅主机的底层来进⾏接受,在⾃底向上进⾏向上交付。
数据包封装:
数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部, 根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理.
数据包的分用:
从现在开始,我们学习任何协议,都要先宏观上建⽴这样的认识:
- 要学习的协议,是如何做到解包的?只有明确了解包,封包也就能理解
- 要学习的协议,是如何做到将⾃⼰的有效载荷,交付给上层协议的?
跨⽹络传输流程图
⽹络中的地址管理 - 认识IP地址
IP 协议有两个版本, IPv4 和 IPv6 . 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指 IPv4
- IP 地址是在 IP 协议中, ⽤来标识⽹络中不同主机的地址;
- 对于 IPv4 来说, IP 地址是⼀个 4 字节, 32 位的整数;
- 我们通常也使⽤ "点分⼗进制" 的字符串表⽰ IP 地址, 例如 192.168.0.1 ; ⽤点分割的每⼀个数字表⽰⼀个字节, 范围是 0 - 255 ;
跨⽹段的主机的数据传输. 数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器. 下⾯是⼀张⽰意图
路由器可以看作是一台拥有至少两个网卡的专用主机,而且它的核心能力就是工作在网络层,通过转发数据包来连接不同的局域网(或网段),同时它也必须依赖数据链路层来完成网卡与局域网的对接。如何理解呢:
路由器的 “双网卡” 本质:连接两个教室的 “走廊管理员”。网卡 1 接入教室 A(局域网 1:192.168.1.0/24),IP 是192.168.1.1;网卡 2 接入教室 B(局域网 2:192.168.2.0/24),IP 是192.168.2.1。普通主机一般只有 1 块网卡(连一个教室),而路由器是 “多网卡主机”,专门用来做 “教室之间的连接桥梁”。
我们通过下面两方面理解⼀下IP地址的:
- 为什么要去⽬标主机,先要⾛路由器?
- ⽬的IP的意义
然后结合封装与解包,体现路由器解包和重新封装的特点
对比 IP 地址和 Mac 地址的区别
- IP 地址在整个路由过程中,一直不变(目前,后面在修正)
- Mac 地址一直在变
- 目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依
据,mac 地址是局域网转发的重要依据
IP⽹络的意义和⽹络通信的宏观流程
- IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异
还有不理解的,小助手奉上:https://www.doubao.com/