文章目录
- 局域网(LAN)
- 广域网(WAN)
- 网络设备
- IP地址
- 格式
- 端口号
- 格式
- 认识网络协议
- 协议分层
- OSI七层模型(只是理论,没有实际运用)
- TCP/IP五层(或四层)模型
- 网络设备所在分层
- 封装和分用
计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
所谓 “局域网” 和 “广域网” 只是⼀个相对的概念。
局域网(LAN)
局域网,即 Local Area Network,简称LAN。
局域网是本地,局部组建的⼀种私有网络,又称为内网。局域网内的主机之间能方便的进行网络通信;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式有很多种:
(1)基于网线直连
(2)基于集线器组建
(3)基于交换机组建
(4)基于交换机和路由器组建
广域网(WAN)
广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
如果有很多分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即可称为“广域网”。
如果属于全球化的公共型广域网,则称为互联网(又称公网,外网)。
有时在不严格的环境下说的广域网,其实是指互联网。
网络设备
主机:上网的设备(电脑,手机…)
组建网络的重要设备:路由器,交换机
- 路由器有WAN口(连接运营商的网线)和LAN口(连接要上网的设备)
- 交换机的接口没有WAN口和LAN口一说
家里的路由器和其连接的上网设备形成一个局域网
而家里的路由器可以连接到运营商的路由器,运营商的路由器又连接到更大的运营商路由器,这样就可以形成一个大的网络
“猫”,专业术语叫做"调制解调器"
以前没有宽带的时候,上网用电话线,通过"猫"把电话线中的模拟信号转成数字信号
后面宽带入户就不用电话线上网了,光猫就是路由器,只不过WAN口是插光纤的,LAN口还是正常插网线的
光纤主要材质是玻璃,通过激光在玻璃里传输信号;网线里面是铜丝,是通过电流来传输信号
虽然路由器有很多网口,但路由器上的口可能不够用,此时就可以使用交换机对网口进行拓展(类似于电脑的扩展坞)
交换机的特点是口特别多,连接到交换机上的设备彼此之间不会相互影响和干扰
IP地址
如何判断哪台主机发出数据,哪台主机接收数据呢?这就需要使用IP地址来标识。
IP地址用于标识网络主机、其他网络设备(如路由器)的网络地址。通过地址找到这个设备,进而进行通信。
就像我们寄快递⼀样,需要知道对方的收货地址,才能将包裹送达。
格式
IP地址是⼀个32位的二进制数(IPv4),通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数),如:100.4.5.6
在控制台输入ipconfig
就可以看到本地IPv4 地址和其他一些信息
端口号
在网络通信中,IP地址用于标识主机的网络地址,端口号可以标识一个主机中发送数据、接收数据的进程。简单说:端口号用于标识主机中的进程(应用程序)。
类似寄快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
格式
端口号是0~65535(2个字节)范围的数字,在网络通信中,进程可以通过绑定⼀个和其他进程不重复的端口号,来发送及接收网络数据。
端口号不会不够用,端口号是区分同一个主机上的不同进程,而不是区分不同主机的不同进程
可能会谈到有的程序是有固定的端口号的,这种说法源自于一个概念,“知名端口号”。很久以前,为了避免当时的一些程序的端口号之间发生冲突,就给一些知名的程序分配了不同的端口号,一共分了1024个。如今,知名端口更多是"建议"而不是约束,也可以使用别的不重复的端口号
认识网络协议
网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的⼀组约定,而且一定是通信双方都认可的。比如怎么样建立连接、互相怎么样识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式
有了IP地址和端口号这样的协议,就可以定位到网络中唯⼀的⼀个进程,但还存在⼀个问题: 网络通信是基于二进制数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同⼀个类型的数据,格式可能也不同,这时就需要使用协议来规定双方的数据格式。
另外:
• 计算机生产厂商有很多;
• 操作系统也有很多;
• 计算机网络硬件设备,还是有很多
如何让这些不同厂商生产的计算机能够相互顺畅的通信?
就需要约定⼀个共同的规则,大家都来遵守。
协议与标准的区别:
协议可以是私下自定义的,而标准需要有一个具有公信力的官方的组织,公开发布并得到大家的支持和拥护。
协议分层
网络通信是一件非常复杂的事情,如果用一个协议来约定上述所有的细节,这个协议就会非常庞大,非常复杂。所以网络协议往往分成几个层次进行定义。
此处谈到的分层,每一层里都有很多协议(对协议进行了分类,就得到了所谓的"层")
把很多协议按照功能分在不同的层级,每个层级都有对应的目标/要解决的问题。上层协议调用下层协议的功能,下层协议给上层协议提高服务。分层而不乱的前提是: 不能跨级交流
网络协议分层的作用:
- 封装的效果
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
⼀方为接口的实现类(提供方,提供服务),⼀方为接口的使用类(使用方, 使用服务)
• 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可,降低学习成本
• 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可
- 任意层的协议,都是可以灵活替换的(解耦合)
OSI七层模型(只是理论,没有实际运用)
OSI:即Open System Interconnection,开放系统互连
• OSI 七层网络模型是⼀个逻辑上的定义和规范:把网络从逻辑上分为了7层。
• OSI 七层模型是⼀种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输
OSI 七层模型既复杂又不实用,所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也就是 TCP/IP 五层(或四层)模型来实现。
TCP/IP五层(或四层)模型
这个就是现在实际采用的网络分层模型。我们目前接触到的电脑上网大部分都是TCP/IP模型。4G/5G通信就是另外一套专门的模型协议(手机流量上网)
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议的5层层级结构:
- 应用层(具体的应用程序):负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
- 传输层(通信双方):负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 网络层(通信路径的规划):负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层
- 数据链路层(两个相邻节点之间的通信):负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层
- 物理层(硬件层面上相关约定):负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。
程序猿打交道最多的就是应用层,写的网络程序都会涉及到应用层。其他的四层的协议都是操作系统内核,硬件和驱动已经实现好了,无需干预。不过我们要重点关注传输层,因为应用层是需要调用传输层提供的接口(API)来进行一些功能的实现的
网络设备所在分层
- 对于主机,它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四
层; - 对于路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层;
- 对于交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层模型的下两层;
- 对于集线器,它只实现了物理层;
注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。现在的路由器和交换机功能越来越多,界限也越来越模糊了。有些交换机的功能,路由器也有;有些路由器的功能,交换机也有。有些路由器和交换机,能工作在应用层。比如通过QQ发消息,路由器/交换机就能感知到发的消息内容是啥
封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发送时,每层协议都要加上⼀个数据首部(header),这个过程称为封装
- 首部信息中包含了⼀些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理,这就是分用
QQ里就有一个应用层网络协议,约定了数据按照什么样的格式来组织。在QQ发消息,QQ应用程序就会把要传递的内容组织成"应用层数据包"
网络传输的数据,本质上是二进制字符串/字符串,所以要把结构化数据(包含很多属性,字段)先转成二进制字符串/字符串(序列化)
现在有应用层数据包了, QQ程序接下来就要调用传输层(操作系统内核)的API(socket API),把数据包交给传输层,传输层拿到应用层数据包之后就会对这个数据包进一步地封装,构造成传输层数据包。在传输层典型的协议有两个:TCP和UDP
此处假设使用UDP来作为传输层协议
传输层构造好数据包之后,就会继续把数据包交给网络层(传输层会调用网络层提供的API,这个调用过程是系统内核自行负责了)
网络层典型的协议是IP协议
IP协议不关心载荷里面是啥,只关心IP报头里的数据
之后调用数据链路层的API,把IP数据包交给数据链路层的协议,同样也是系统内核负责完成的,程序猿感知不到。这里的API往往是网卡的驱动程序提供的
硬件厂商发布硬件的时候提供配套的软件(驱动程序),通过驱动程序可以让操作系统实现对硬件的精细控制
数据链路层典型协议是"以太网"协议
电脑通过有线网传输数据走的就是"以太网"协议,我们电脑上插的网线也叫做"以太网线"
WiFi则是另外一套数据链路层的协议
因特网则指当前世界上最大的、开放的、由众多网络相互连接而成的特定计算机网络
以太网也有自己的数据包格式,会对上述IP数据包进一步封装
上述数据已经进入到网卡驱动中了,接下来就要真正发送出去了
到达物理层,上述的以太网帧本质上还是二进制数据,硬件设备要把上述的二进制数据转换为光信号/电信号才真正进行发射
通过交换机/路由器一系列转发之后最终到达收件人的主机
之后就是上述过程的"逆过程"
物理层收到一系列光电信号,把这些信号转成二进制数据交给数据链路层
数据链路层按照以太网协议对数据进行解析(解析报头中的关键信息,为后续的传输/转发打下基础),解析出来的载荷数据是要交给上层(网络层)
网络层的IP协议拿到了IP数据包,按照协议格式进一步解析,解析报头中的关键信息,取出载荷,把载荷再进一步的交给上层(传输层)
传输层拿着UDP的数据包,按照UDP格式进一步解析,解析出关键的信息(要交给哪个端口号对应的进程),以及解析出载荷数据,再把载荷交给对应的应用程序
在应用层,QQ程序拿到了应用数据包
QQ按照自己的协议格式进行解析,拿到数据包里的二进制字符串/字符串转成结构化数据(反序列化),显示到界面上
上述层层包装数据,不停加数据报头的过程,称为"封装"
"分用"就是上述逐层解析数据包的过程
中间的路由器,交换机也要封装分用,也是上述过程,只不过交换机封装分用到数据链路层,即可知道下一步如何转发(工作在数据链路层),路由器封装分用到网络层即可知道下一步如何转发(工作在网络层)
每个协议报头中,都包含对应的信息,告诉上一层要交给哪个协议来处理
要确保分用使用的协议和封装使用的协议对得上