写在前:
这一部分开启网络部分的相关知识,这一弹内容初始网络将主要进行网络相关知识的简单介绍,以及着重介绍协议、协议分层、OSI七层模型、TCP/IP五层模型、封装和分用。
需要认识协议,并知道协议的效果是什么;知道为什么分层,分层的好处?每一层都是干什么的?以及层与层之间是如何进行配合工作的。
目录
1.网络发展史
网络在国外起步比较早,在国内是2000年左右开始起步的。2000年左右,网络开始兴起,越来越多联网游戏出现,这里就有局域网联网、广域网联网。【局域和广域没有一个明确的界限】
2007年,乔布斯发布苹果一代,智能手机登上历史舞台,标志着网络时代,开始往“移动互联网进军”。2008年安卓登场。2011年安卓崛起,2014年左右,移动互联网发展最迅速的一年,资本的风口疯狂涌入这个赛道,掀起全民创业的高潮。
1.1独立模式
计算机之前是相互独立的,每个终端各自持有客户数据。
1.2网络互连
将多台计算机连接在一起,完成数据共享。
数据共享的本质是网络数据传输,即计算机之间通过网络来传输数据,也称网络通信。
1.3局域网LAN
局域网(Local Area NetWork),简称LAN。Local即标识了局域网是本地,局部组建的一种私有网络。
局域网内的主机之间能方便进行通信,又称内网;局域网和局域网之间在没有连接的情况下是不能进行通信的。
1.3.1局域网组建网络的方式:
(1)基于网线直连
(2)基于集线器组建
比较古老的东西,现在比较少见(一根网线岔出来两根)
(3)基于交换机组建
组建局域网,不能跨局域网。【交换机有家用的也有企业用的】
(4)基于交换机和路由器组建
WiFi的本质就是一个无线路由器,路由器的本质上就是把两个局域网给连起来。
现在带有路由功能(三层转发)交换机也是很多很常见的,交换机哥路由器之间的界限越来越模糊。
1.3.2知识拓展--光纤
传输信号的介质。
网络通信信号传递:
电信号(网线)、光信号(光纤-玻璃丝、电磁波)
对于电信号,可以使用低电平表示1,高电平表示0;
对于光信号,可以使用高频光表示1,低频光表示0;
1.4广域网WAN
广域网Wide Area NetWork 简称WAN
通过路由器,将多个局域网连起来,在物理上组成很大范围的网络,就形成广域网,广域网内部的局域网都属于其子网。
2.网络通信基础
网络互联的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机之间的不同进程间基于网络传输数据。
2.1IP地址
2.1.1概念
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单的说,IP地址用于定位主机的网络地址。类似于我们发快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
2.1.2格式
32位二进制数 “点分十进制”。
2.1.3特殊IP
环回IP:用于本机环回(loop back)测试,通常是127.0.0.1
2.2端口号
标识一个具体的应用程序。
2.2.1概念
端口号可以标识主机中发送数据、接收数据的进程。简单说,端口号用于定位主机中的进程。
2.2.2格式
端口号是0-65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
2.2.3注意事项
两个不同的进程,不能绑定同一个端口号,但是一个进程可以绑定多个端口号。
2.2.4了解内容
一个进程启动之后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
此时我们提出一个问题:有了IP和端口号后,可以定位到网络中唯一的一个进程,但是存在问题,网络是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样子的?
网络通信传输的数据类型也是很多种的,同一个数据类型,格式也可能不同,如何识别?
基于网络数据传输,需要使用协议来规定双方的数据格式。
2.3认识协议
2.3.1概念
协议,网络协议的简称,网络协议是网络通信(及网络数据传输)经过所有的网络设备都必须共同遵从的一组约定、规则。如何建立、怎么识别。只有遵循这个约定才能实现计算机之间的相互交流。
协议(protocol)
最终体现为在网络上传输的数据包格式。
2.3.2五元组
(1)源IP
标识源主机。
(2)源端口号
标识源主机中该次通信发送的数据进程。
(3)目的IP
标识目的主机。
(4)目的端口号
标识目的主机中该次通信接收的数据进程。
(5)协议号
标识发送进程和接收进程双方约定的数据格式。
2.3.3协议分层
网络通信是一个比较复杂的事情,需求场景复杂,实现的功能也复杂,如果这个协议复杂,学习成本、使用成本、理解成本、维护成本都非常高。因此,实际采用的做法,都是针对这个复杂的大协议,拆分成若干小的协议。每个协议负责一部分功能。此时就会发现,某些协议之间起到的功能和作用是类似的。就针对这些小的协议继续进行“分类”(分层),这就好比代码拆分为很多类,有些类功能差不多,就可以放到同一个包里。
(1)协议分层的好处
降低了学习和维护的成本(封装)。
灵活的针对这里的某一层协议进行替换。
当前互联网世界,协议分层有两种风格
(2)OSI七层模型
教科书上的,实际上是没有的
物理层 、数据链路层、网络层、传输层、会话层、表示层、应用层。
(3)TCP/IP五层/或四层模型
五层或四层是针对的包不包含物理层来说的。
是OSI简化的实现方式。
TCP/IP是一组协议的代名词,它还包括很多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫他的下一层所提供的网络来完成自己的需求。
层级名称 | 主要负责内容 | 协议举例 | 备注 | |
应用层 | 负责应用程序间沟通 | 如简单的电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。网络编程主要针对的就是应用层。 | 应用程序,用户怎样进行使用。 | 应用程序(程序员自己写的代码) |
传输层 | 负责两台主机之间的数据传输 | 如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目的主机。 | 类比于快递公司的送货,在网上买衣服需要填写收货人地址、姓名;卖家与买家均不需要关心快递传输的过程,只关心起点和终点。 | 操作系统 |
网络层 | 负责地址管理和路由选择 | 例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的路线(路由)。路由器(Router)工作在网络层。 | 路径规划:走那条路划算。 例如快递从上海发往北京选择卡车运输,这时就需要考虑具体从哪条路走,这就是网络层的作用。 | |
数据链路层 | 负责设备之间的数据帧的传送和识别 | 例如网卡设备的驱动、帧同步(就是说从网线上检测到有什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网、无线LAN等标准。交换机(Switch)工作在数据链路层。 | 相邻的两个节点之间具体进行怎么传输。例如将一个快递从上海运到哈尔滨。可以分为上海到北京再到哈尔滨。 第二段北京到哈尔滨选择飞机运输。 这里运输方式的选择就是数据链路层的作用。 | 设备驱动程序与网络接口。(驱动程序和硬件设备关联,每个硬件的厂商会提供对应的驱动软件,操作系统内核通过驱动程序来控制硬件) |
物理层 | 负责光/电信号的传递方式 | 现在的以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、现在的WiFi,无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率,传输距离,抗干扰性。集线器(Hub)工作在物理层。 | 约定了网络通信中基础的硬件设备是啥,类比于现实生活中的修路。 通信使用的网线、网口设备都是相同规格的。 |
以上层级越往下越接近硬件设备,越往上越接近用户。上层协议调用下级协议,下层协议给上层协议提供服务。
2.4封装和分用
不同的协议对数据包有不同的称谓
传输层 | 段 | segment |
网络层 | 数据报 | datagram |
数据链路层 | 帧 | frame |
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中保护你一些类似于首部有多长,载荷(payload)有多长,上层协议时什么等信息。
数据封装成帧后发送到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
2.5内容拓展
(1)数据包
什么是数据包?数据包是计算机网络中传输的基本单位,它是由网络层和传输层协议定义的一组二进制数据。每个数据包都包含了发送方和接收方之间的信息,例如源地址、目标地址、控制信息以及载荷等。
(2)数据包的组成
一个标准的数据包通常由以下几个部分组成:
a.首部:首部是指在数据包最前面的一段二进制数据,它通常用于存储控制信息,例如源地址、目标地址以及其他与传输相关的参数。
b.载荷:载荷是指在数据包中实际要传输的信息,例如文本、图片、音频等等。
c.尾部:尾部是指在数据包最后面的一段二进制数据,它通常用于校验和错误检测等操作。
d.标志位:标志位用于标记当前数据包是否为最后一个分片或者是否需要特殊处理。
e.序号:序号用于保证接收方能够正确地按照顺序接收所有分片,并且不会重复接收。
f.确认号:确认号用于告诉发送方接收方已经成功接收了哪些分片,并且可以继续发送下一个分片。
g.时间戳:时间戳用于记录当前数据包被发送的时间,以便后续的分析和调试。
h.其他:除了以上几个部分之外,数据包还可能包含其他一些与传输相关的信息,例如优先级、负载均衡等等。
(3)载荷
载荷是指在一个通信协议中实际要传输的信息。在计算机网络中,载荷通常被封装在一个或多个数据包中,并通过网络进行传输。
(4)载荷的传输过程
当一个计算机向另一个计算机发送载荷时,它会将载荷封装在一个或多个数据包中,并将每个数据包按照一定的顺序发送出去。接收方则会按照相同的顺序接收所有分片,并在接收完所有分片之后将它们重新组合成原始载荷。