目录
🚩网络的发展史
单机(无需网络)------》局域网------》广域网------》移动互联网
- 局域网:把几个电脑,通过路由器连到一起
- 广域网:把更多更多的局域网连接到一起,构成的网络更加庞大,可能已经覆盖了一个城市/一个国家/全世界
局域和广域之间没有明确的界限。
🎈局域网LAN
局域网,即 Local Area Network ,简称 LAN 。
Local 即标识了局域网是本地,局部组建的一种私有网络。
**局域网内的主机之间能方便的进行网络通信,又称为内网;**局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式有很多种:
1》基于网线直连直接相连,要求你的电脑上有多个网口
错误的网线直连
一般家用电脑,上面只有一个网口(所以下面的图是错误的,这样就是2个网口了)
2》基于路由器组建
所以我们就出现了路由器。让主机连接到路由器网口,一般家用路由器有5个网口,1WAN+4LAN
3》基于路由器组建
要想让这几个电脑能够在同一个局域网中上网,就需要把它们连接到LAN口,WAN口是用来连上级的路由器的。
交换机:可以扩展路由器的端口(路由器的端口少,主机多)
4》基于交换机和路由器组建
在上述设备层层连接之下,就可以构成更加复杂的网络结构了。
🎈广域网WAN
广域网,即 Wide Area Network ,简称 WAN 。
**通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。**广域网内部的局域网都属于其子网。
- 如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为"广域网"。(但是北中南各分工司是局域网)
- 如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。
有时在不严格的环境下说的广域网,其实是指互联网。
所谓 "局域网" 和 "广域网" 只是一个相对的概念。比如,我们有 "天朝特色" 的广域网,也可以看做一个比较大的局域网。
🚩网络通信基础
- 网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。 那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到哪台主机呢?这就需要使用IP地址来标识。(IP地址用于定位主机的网络地址)
🎈IP地址
概念
IP 地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说, IP地址用于定位主机的网络地址 。
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
格式
生活中:安徽省 安庆市 潜山市 xx镇
计算机中: IP地址是一个32位的二进制数 ,通常被分割为 4 个 "8 位二进制数 " (也就是 4 个字节),如: 01100100.00000100.00000101.00000110。
通常用 " 点分十进制 " 的方式来表示,即 a.b.c.d 的形式( a,b,c,d 都是 0~255 之间的十进制整数)。如: 100.4.5.6。
使用一个32位,4字节数字,表示地址,一般来说,会把IP地址给表示成4个0-255之间的十进制数字,并且使用3个点分隔。点分十进制。比如172.20.10.2
IP 地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题, 传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。
🎈端口号
IP地址来确定是哪个主机传输到哪个主机信息,确定哪个主机就需要利用IP地址定位主机的网络地址。确定好传输的来源主机和目的主机,我们需要确定是哪个线程来接收这个数据的,这时候就需要端口号来标识。
概念
在网络通信中, IP 地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说: 端口号用于定位主机中的进程 。(区分一个主机上不同app)
类似发送快递时,不光需要指定收货地址( IP 地址),还需要指定收货人(端口号).
格式
2个字节
端口号是 0~65535 范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
比如3306这个端口号就被mysql服务器绑定了。
知名协议的默认端口
0一般是不使用的
1-1023这个范围的端口号,系统留作特殊用途,咱们写的程序是不应该占用的。
1-1023这个范围内的端口号是知名端口号,留给一些比较常见的服务器程序进行使用的。
比如
就像飞机 分为 头等舱(贵,体验好),经济舱(便宜,体验差)就是这种分区域的提供服务
注意事项
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
比如3306这个端口号就被mysql服务器绑定了,与此同时,mysql还可以绑定别的端口,但是其他程序就不能绑定3306了。(因为3306端口号是唯一的在一个服务器中,如果出现多个端口号是3306,那么就怎么能保证你要执行的是哪个程序呢?但是这个程序可以有多个端口号)
在实际的通信过程中,IP和 端口 往往是一对的
就比如说,我们买个东西:
收件人地址,收件人电话
发件人地址,发件人电话
还比如说,西游记中的唐曾再每次拜访一家户人的时候,都会说一句话
贫憎自东土大唐而来,到西方拜佛求经
🎈协议类型
有了 IP 地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如 发送一个文本字符串" 你好! " :如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
学习网络的时候,很多都在学习协议 (协议就是一种约定,约定了通信双方按照啥样的方式来传递数据)
光/电 信号来传输数据
计算机之间的传输媒介是光信号和电信号。通过 " 频率 " 和 " 强弱 " 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。网络上,本质是通过 光/电 信号来传输数据
- 低电平表示1,高电平表示0 (低/高电平表示电压)
- 高频光信号表示1,低频光信号表示0
二进制数据来进行传递数据的。
举个例子:就比如相亲的时候,我们约定去一个地方见面,和一个女生约好了,在xx天桥上见面xx时间。
那天一个男生B见到天桥上一个女生在那站着,过去问请问你是不是来相亲的,那个女生说是的,然后我们就开始在桥边散步了,当我们边走边聊,男生B发现女生的情况和媒婆说的情况不一样,最后发现确实认错了,然后就和那个女生说抱歉,我们认错了,然后回到那个天桥之后,发现人已经走了。
所以下次男生B再去相亲的时候,可以在约定见面的时候,再约定一点特征,比如约定女生穿一个红色的裙子,男生B胸口插一朵玫瑰花。这样的操作,就相当于约定了一种协议。
协议:就只是单纯的约定,并不一定会很复杂的。由于网络通信的世界中,遇到的场景/问题往往比较棘手,确实有一些网络协议是比较复杂的。
🎈五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
🚩协议分层
对于网络协议来说,往往分成几个层次进行定义。
🎈什么是协议分层
由于网络通信实在太复杂,拆分就拆分出来太多的小的协议,这么多小的协议,也就不好管理了,就需要对协议进行分层。
按照协议的定位/作用分类,并且约定了不同层次之间"调用关系", "上层协议 调用下层协议" "下层协议给上层协议提供支持"。 这样的话,这么多协议就不会混乱了。
举个例子:
有一家公司。有些员工
开始的时候,公司比较小,员工也不多,10个,20个
此时就不需要"团队划分",也不需要"中层领导",直接一个老板就可以管理所有人
随着公司的规模越来越大,员工的数量就变多了,就需要划分出多个部门,每个部门就需要领导了(老板一个人,是管理不过来的)
随着规模的进一步扩大,中层领导也可能有好几层。此时严格按照上述规则进行通信,整个过程就不会混乱。
比如新员工,直接月季去找老板,这样的做法是非常不合适的,越级汇报是非常忌讳的事情,站在老板的角度,提升他的管理成本。
这样,协议分层之后,是有好处的。
🎈协议分层的好处
1》协议分层之后,下层和上层,彼此之间就进行了封装。
使用上层协议,不必过多关注下层。
使用下层协议,也不必过多关注上层。
对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可
大大降低了使用者的成本,我只要会说话,就能打电话,不需要了解电话机(通信设备层)是如何将我的话给对方,又怎么将对方的话让我听见。这样就大大降低了使用者的成本。
对于年龄年长的老年人,他虽然不会玩手机,但是我们只要会说话,不需要处理细节问题,上到90岁的老人,下到3岁的小孩,都是可以打电话。
2》 每一层协议都可以根据需要灵活替换
不管我是用英语还是用汉语交流,我用的是手机无线电的还是电话机有线的,都是可以通话的。
协议分层之后,好处多多,因此现在网络世界都是这种分层的结构的。
🎈OSI七层网络模型
OSI :即 Open System Interconnection ,开放系统互连
- OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
越往下越硬件。
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。
🎈TCP/IP五层网络模型
我们看到OSI模型和TP/IP模型,从网络层到物理层这几层,叫法可能有差别(不同环境下,叫法可能就是有差异的)。
💻物理层
负责光/电信号的传递方式。 比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆( 现在主要用于有线电视 ) 、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理 层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub )工作在物理层。
描述的是网络通信的硬件设备,好比基础设施,公路,铁路.....比如我们使用的网线,光纤都应该是啥规格的。就比如计算机之间的传输媒介是光信号和电信号,通过"频率"和"强弱"来表示0和1这样的信息,要想网络上,本质是通过光/电 信号来传输数据。二进制数据来进行传递数据的。
- 低电平表示1,高电平表示0 (低/高电平表示电压)
- 高频光信号表示1,低频光信号表示0
💻数据链路层
负责设备之间的数据帧的传送和识别(两个相邻节点之间的数据传输情况) 。例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作。 有以太网、令牌环网,无线LAN 等标准。交换机( Switch )工作在数据链路层。
💻网络层
负责地址管理和路由选择。(进行路径规划) 例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router )工作在网络层。
💻传输层
负责两台主机之间的数据传输(关注起点和终点)。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
💻应用层
负责应用程序间沟通 ,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程
访问协议( Telnet )等。我们的网络编程主要就是针对应用层。
举个例子:
传输层: 我在淘宝上买了一件衣服,提供收件人地址和收件人电话,商家也有发件人地址和发件人的电话。(也就是说商家拥有了 源IP和源端口 以及 目的IP和目的端口)------传输层
网络层:
商家发货就需要把衣服送给快递公司 ,快递公司就需要对这个包裹如何传输 ,来进行路径上的规划。
比如我人在安徽安庆,商家在郑州。郑州到安庆就有很多路线
郑州------》周口------》合肥------》安庆
郑州------》武汉------》合肥------》安庆
....
此时快递公司就需要规划出一个合适的路径(考虑传输效率?传输成本?传输时间最短?传输过程最方便?.....)------网络层
数据链路层:
快递公司给路线规划好了,郑州------》周口------》合肥------》安庆
接下来就需要考虑,每一步都该怎么走,相邻节点如何传输。
郑州------》周口 :卡车
周口------》合肥: 货车
合肥------》安庆:货车
应用层:
如何使用这个数据,我买了一个床刷子,我可以使用床刷子来刷鞋,刷衣服,等等。
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。(物理层,偏硬件,咱们程序员搞软件)
🎈网络设备所在分层
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四****层;
- 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
- 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
- 对于集线器,它只实现了物理层;
**交换机的作用:**是针对路由器的端口进行扩展的,路由器上的端口可能是有限,不够的。所以需要交换机连接各个路由器,形成了复杂的网络结构。
上述的这套规则,是针对"传统的""经典的"交换机和路由器来描述的实际上,现在的路由器和交换机的功能越来越强大了(甚至说一些高端的交换机,也有路由功能)另一方面,路由器交换机可能还会支持一些更复杂的操作,甚至可能会工作在传输层或者应用层。
🎈网络分层对应
网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。
以下为同一个网段内的两台主机进行文件传输:
🚩封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报
(datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中
的 "上层协议字段" 将数据交给对应的上层协议处理
描述了网络通信过程中,基本的数据传输流程。
举个例子:考虑A通过QQ把一个hello传递给B
🎈发送方
💻应用层
QQ应用程序,QQ就会把用户输入的"hello",给打包成一个应用层的数据报(这个数据报的格式,得是qq的程序员才能知道的) 假设是按照下面的格式。
四个字段,使用,来分割。这样就构成了一个简单的应用层数据报(字符串拼接)。
上述描述的规则,就是此处我们约定的应用层协议,具体是用几个字段,字段的顺序如何,使用什么字符分隔,都是可以灵活调整的。(应用层协议,往往是根据具体的场景,具体的需要,由程序员自主决定的)
此时就可以把应用层数据报,通过操作系统的api,把数据交给传输层。
💻传输层
就要对刚才的应用层数据,再进行打包,变成传输层的数据报。
这里的打包过程,本质上还是"字符串拼接"。把刚才的应用层数据,基础上拼接上传输层的报头。
UDP报头中最关键的信息,就是"源端口"和"目的端口"。 (我们之前也说传输层主要负责数据的传输[关注起点和终点].
一个数据报=报头+载荷
进行封装的过程,也就是给数据添加更多的"辅助信息"的过程。快递运送的时候也需要打包,而且可能需要包装多层。打包就可以在上面添加标签了,打包也可以保护要传输的内容不被破坏。
传输层数据报搞好了之后,这个数据又会进一步的交给网络层。
💻网络层
网络层最主要的协议,是IP协议。
IP报头包含很多重要的属性,其中最重要的属性是源IP和目的IP。(负责地址管理和路由选择。(进行路径规划)网络层的数据打包好了之后,继续把数据交给"数据链路层"再来进一步的打包。
💻数据链路层
以太网。
以太网数据报,以以太网报头中,包含最重要的信息,就是源mac地址,目的mac地址。
mac地址就是用来描述一个设备在网络上的地址的。
MAC地址是物理地址,用于在数据链路层识别设备。
💻物理层
把上述数据,转换成2进制的0 1序列,通过光信号/电信号进行传输。
从上层协议到下层协议,层层给数据抱添加报头,这个过程称为"封装"。
数据发送出去之后,就会经过一系列的交换机和路由器进行转发。A和B一般来说不是直接网线连接的,中间还要经过很多的交换机/路由器设备进行转发。当数据到达B这边之后,B就要针对上述数据进行"分用" (针对上述数据报进行层层的解析)。
🎈接收方
💻物理层
拿到光电信号------》转换成二进制数据------》得到以太网数据报
这个数据要交给数据链路层对应的协议处理。
💻数据链路层
通过以太网协议,针对以太网数据报进行解析。
这个解析过程就会解析出 报头 和 报尾,以及中间的载荷。
把载荷的部分,进一步交给网络层的协议来处理
💻网络层
IP协议,再进一步的针对网络链路层进行解析,去掉报头,拿到载荷,再进一步把载荷数据交给上层(传输层)
💻传输层
此处使用UDP协议,针对这个数据报进行解析,拿到载荷,去掉报头,把载荷数据进一步的交给上层(应用层)
💻应用层
把上述数据根据端口号,交给QQ这个程序。
QQ这个程序就要进一步解析这里的数据,这个解析过程也就是按照前面程序员自定义的应用层协议来展开的。取出hello,最后显示在显示屏上。
数据报在网络中间还会经历一定的转发过程
- 如果经过路由器:就会封装分用到网络层 路由器解析到网络层,拿到IP地址,决定进一步如何传输,下一步传输的时候,又会重新经过网络层,数据链路层和物理层的封装。
- 如果经过交换机,就会封装分到数据链路层。
日子长长,总会如愿以偿。