绪论
“一个人在科学探索的道路上,走过弯路,犯过错误,并不是坏事,更不是什么耻辱,要在实践中勇于承认和改正错误。——爱因斯坦”。本章将是网络的第一章,计算机网络是我们计算机行业必须了解并掌握的知识。本章主要讲到网络的基本框架和构成。后续也将持续更新,早关注不迷路喔!
话不多说安全带系好,发车啦(建议电脑观看)。
思维导图:
1.网络的发展
计算机的本质是工具,人们使用这些工具,当有多个人需要协助时也就表示着工具也需要协作!
一开始可以通过软盘将数据进行交换(但对此效率就会十分低下),后面就发展成把所有主机用网线链接起来构成局域网,再使用服务器来对数据进行管理,每个人处理的数据都是从服务器上修改与拿取。
局域网LAN:当主机数目不断的增多,通过交换机和路由器连接起来形成的网络
广域网WAN:将远隔千里的计算机都连接起来形成的网络
- 对于国家来讲,网络的发展,不仅仅是互联网公司在发展,还有给我们提供网络:三大运营商(建立基础设施建设)。
- 随着网络的不断的发展,就会有新的设备的诞生:集线器,网线,光纤,调制解调器,路由器,防火墙,服务器,…(1994年入的公网)
2.协议
在网络通信也是要满足:冯诺依曼体系的!,也就是有输入、输出、存储器、中央处理器来进行对数据的传送和处理,而其中处理这些数据让数据从输入端到达输出端的方法就是协议。
冯诺依曼体系:
2.1协议的意义:
用来解决距离变长的问题:
1. 防止丢包
2. 定位目标机器
3. 让报文经过多个设备后,还能找到准确的远端机器
协议本质就是一种约定
可以理解成以前的电报,一方发出信息另一方通过提前的约定(密码本),来知道对应发来信息的意思。
两台计算机采用的是光电信号,也就是0 1(通过光电信号频率,强弱表示生成0 1),信息其实也就是0 1序列的组合
3.网络 VS 系统
网络一定要保证不同机器,都能无障碍的接入互联网,并且计算机生产厂商、OS、硬件都有很多,对此就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是网络协议。对此约定其实也是需要通过代码来实现的。
3.1网络通信的问题:
当看待从一台主机(A)发送到另一台主机(B),看起来像是直接发送的但本质其实是经过多次路径选择后才到达的!!
对此自底向上就会产生多个问题:
- 怎么保证把数据先交给下一跳主机
- 在转发中,如何进行路径选择。目标主机定位的问题
- 如果报文中间出现错误,或者丢失
- 送达的数据,还要解决如何使用数据的问题
只有解决了上面四个问题,才能将数据可靠的从A送到B
对此1,2,3,4中每一个问题都要通过协议来解决
3.2网络的解决方案----网络的层状结构
例:我们在生活中打电话,逻辑上看起来是直接接通,但的本质其实也是分层的:
在许多软件上,绝大部分都是层状的
每一层都只能在对方对应的层进行沟通,其他层无法理解(每一层能够生成对应的数据,和理解所生成的数据)
层状的好处:完成软件的解耦合,也为了非常方便的进行软件的维护(更新,替换,优化)
所以我们解决网络的通信的方法也是分层的:
从软件上:通过上面网络发送数据时产生的四个问题,也就会有四个层状(四个协议)再加上硬件就是五层(此处我们不考虑物理层(属于硬件),也就形成了计算机网络中最重要的TCP/IP五层模型(有些地方是7层但其实多的几层是将应用层再具体划分形成的))
而下面的四层就是为了解决之前的四个问题而形成的:
OSI定制的网络协议栈定义的是除硬件(物理层)就是6层协议:
但工程实践上无法把应用层、表示层、会话层无法很好的分成三层,所以实际把他们只看成一层 应用层。
物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。 路由器(Router)工作在网路层。
传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。
上述层后续都会逐步的写文章解释,可以暂时看看后续看过后面篇幅再来看就会清晰非常多。
3.2网络中一些常见设备的基本作用:
路由器(有集线器的功能):路由器是一种连接多个网络的设备,它能够根据IP地址进行数据包的转发。路由器可以处理来自不同网络的数据包,并根据路由表决定将这些数据包转发到哪个网络。路由器是实现互联网连接的重要设备之一,它可以连接局域网和广域网(WAN),并确保数据在不同网络之间正确传输(数据报的转发,工作在网络层)。
交换机(有集线器的功能):交换机是一种基于MAC地址识别和交换数据包的设备。它能够将各个端口的数据流量进行快速交换,并按照一定的转发规则将数据包传输到目标端口。交换机广泛应用于局域网(LAN)中,用于连接各个节点,提高网络性能(局域网中主机过多(网络有负载上限)导致通信成本增加(从而导致网卡),用来帮助数据报文的转发,工作在数据链路层)。
集线器:集线器是一种简单的网络设备,它可以将多个节点连接到一个局域网中。集线器的工作原理是将接收到的信号进行放大和再生,并将其发送到所有端口上。集线器适用于连接距离较近的节点,但在现代网络中已经逐渐被交换机所取代。(放大信号(防止传递的信号衰弱),信号在传递过程中会不断的减弱对此就需要不断的维持,工作在物理层)
3.3网络和系统的关系
网络协议栈和系统的关系是非常密切的并且他们相互对应,如下图
其中系统是分着非常多种的(Linux、Windows、macOS),但网络协议是规定好的所有厂商都必须去遵守他,所以即使是不同的系统,网络协议都是大同小异的,这样也才能保证正常进行网络通信:
在计算机中是会不断接收报文的,所以也就需要对这些报文进行管理(也就是先描述,再组织)。
4.网络传输基本流程
4.1重谈协议:
理解协议可以把它想成我们快递上的快递单(这本身就是一种约定,本身就是一种协议),而这个快递单是用来给快递公司进行运输的,快递 = 快递单 + 真正的快递,而协议就能理解成快递单,用来表示要把数据在网络中转发到的地方。
协议通常是用结构化字段表征的,一般用C语言来描述,这个结构化字段定义的对象,我们叫做协议报头。
其中client写的什么serve就会接收到什么:
其中在同一个局域网中,两台主机可以直接通信。同一个局域网中两台主机能直接通信(WiFI中的两台手机),例如下方局域网中A给B发送信息
我们可以和现实中教室举例:老师在教室喊了某同学问他为啥不交作业,对此其他同学也能听到但并不会理会,因为喊的是这个同学是带来名字的(报头)。
但在教室里面可能会因为有很多人在讲话导致老师的话被其他人的话淹没了并没有被该学生接收到。这也就对应着可能在局域网中有多台主机发送信息,但他们的消息可能会发生碰撞(也就是数据碰撞),导致数据丢包(数据链路层会具体写)。
这种网络(局域网)又被称为以太网,所以要正确的发送数据,任何时刻只允许一台主机在局域网中发消息。此时的局域网就是一个共享资源,多个主机同时能使用,就会导致数据不一致。所以就需要对数据进行碰撞的检测、避免和重发策略的,也就像Os中的互斥操作(让一台主机瞬时独占网络)。
查看网络信息(Mac地址(ether)等)
shell指令:ifconfig
在局域网通信的过程,双方的协议栈都是一致通过封装和解包进行正常的通信,所以封装一定要考虑后面解包的过程:
其中每一层都有必须要解决两个问题:
1. 如何将报文中,报头和有效载荷进行分离
2. 任何协议,都要解决如何将自己的有效载荷,交付给上一层的哪一个协议(一层中不止一个协议)
5.网络中的地址管理
- 认识IP地址
IP协议有两个版本, IPv4和IPv6。其中我所写的凡是提到IP协议,没有特殊说明的,默认都是指IPv4。IP地址是在IP协议中,用来标识网络中不同主机的地址;对于IPv4来说,IP地址是一个4字节,32位的整数;
我们通常也使用“点分十进制”的字符串表示IP地址
例如192.168.0.1;用点分割的每一个数字表示一个字节,范围是0-255
[0,255].[0,255].[0,255].[0,255]
总共也就是4byte,也就是32bit,所以4个字节表好似网络IP即可。
所以可以把IP地址可以看成一个结构体(里面包含着4个一字节的成员):
附:在c/c++中ip一般都是字符串形式
点分十进制的ip的地址和字符串表示的ip地址进行互换:
- 若将字符串转整形时:字符串可以以 点为分隔符然后分隔字符串 然后取对应的值给到p1、p2、p3、p4,后在将ip强转成整形
如:172.28.71.17,分隔后把172给到ip.p1、28给到ip.p2、71给到ip.p3、17给到ip.p4,最后把ip强转成整形int32_t *x = (int32_t)&ip; - 若将整形转字符串时:可以通过强转的方式把取出来的p1,p2,p3,p4转换成字符,最后再以点进行分隔拼接。
如:(struct_ip)&ip->p1、…,把它们强转成字符串,最后拼接(strcat)
IP地址的意义,用来表示互联网中唯一的一台主机
IP地址分为:
- 公网IP
- 内网IP(常见),所有的IP地址
- 认识MAC地址
MAC地址用来识别数据链路层中相连的节点;长度为48位, 及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了, 不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。
6.初步理解IP地址和MAC地址
- IP地址相当于是:起始从哪来和目的到哪里(永远不变的)
- Mac地址相当于:上一站从哪来以及下一站到哪里(一直在变的,在局域网中使用的,一个数据报需要不断的跨越局域网最终到达对方)
例:我们要从家去公司(这里的家和公司就代表着IP地址)、在去的途中假设到了加油站(这里上一站可能是车,下一站是某路口这就代表着Mac地址)
IP地址的意义:路径选择!!!(找到最终目的地)
A用户经过网络栈协议发送消息,其中通过路由器进行数据报转发(路由器可能在两种不同的网段上图就是一边是以太网,另一边是令牌环),最终到达B用户的网络栈接收到消息。
其中(了解)
- 令牌环(局域网的一种):网络刚开始是局部的,拥有令牌的主机才能通信权利(类似于谁拥有锁,在数据链路层的一种协议,同样也有令牌环的报头)
- 也能发现当进过路由器后其Mac地址的报头是会发生改变的,但是IP地址的报头及往上的所有报头没变
总结网络通信可以大致的理解成:
从主机A将数据经过五层协议的封装进入局域网到局域网的路由器,路由器通过网络层确定要转发的目标主机和路径选择然后在交给数据链路层和物理层实现真正的转发操作,就这样不断的转发知道达到对方的局域网,才会进入到主机B再不断的通过协议层解包得到数据。
本章完。预知后事如何,暂听下回分解。
如果有任何问题欢迎讨论哈!
如果觉得这篇文章对你有所帮助的话点点赞吧!
持续更新大量计算机网络细致内容,早关注不迷路。