一、计算机网络背景
1.1 网络发展
独立模式:计算机之间相互独立
在早期,计算机之间相互独立,此时若多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据通过光盘等硬件传递给下一台计算机,然后下一台计算机再进行相应的业务处理,效率非常低下
网络互联:多台计算机连接,完成数据共享
这时就有人设法将这些计算机连接在一起,当某个业务需要多台计算机协同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机就都能获取到这些共享的数据,所以各个业务在处理就能随时进行切换了
局域网LAN:通过交换机和路由器将多台计算机连接
后来这样的网络雏形逐渐发展,连入这个网络中的机器越来越多,于是就出现了局域网的概念
在局域网中有一种设备为交换机,交换机主要完成局域网内数据的转发工作,即在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作
广域网WAN:将远隔千里的计算机连接
各个局域网之间通过路由器相互连接在一起,便组成了一个更大的网络结构,被称为广域网。实际局域网和广域网是一种相对的概念,广域网也可以看作一个较大的局域网
还有类似于城域网和校园网的概念,城域网实际就是在一个城市范围内所建立的计算机通信网,而校园网对应的就是校园范围内所建立的计算机通信网。城域网和校园网实际都是一种相对的概念,都可以将其看作一个较大的局域网
1.2 "协议"由来
"协议"本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某种事情。而网络协议是通信计算机双方必须共同遵从的一组约定,只有将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容
如通信计算机双方曾经做过如下约定:
若code的值为1,则表示需要将data的值存储进数据库
若code的值为2,则表示需要将data的值写入日志信息。
若code的值为3,则表示需要将data的值进行打印输出
上图为一个位段结构,可以通过位段来表示某种协议规定的,而实际上计算机网络里面的协议报头就是通过位段来实现的
有了约定后,当甲计算机向乙计算机发送类似于{1, 0x1234}的数据时,乙计算机识别到code的值是1,于是就知道了甲计算机是让自己将data的值存储进数据库(纯软件的约定方案)
计算机之间的传输媒介是光信号和电信号,通过"频率"和"强弱"来表示0和1这样的信息,因此要想传递各种不同的信息,就需要约定好双方的数据格式(纯硬件的约定方案)
二、网络协议初识
2.1 协议分层
网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性
如在打电话时,站在工程师的角度实际这两个人并不是直接进行沟通的,而是甲的电话将甲说的话记录下来,经过一系列编码转码后,通过通信网络将信息从甲的电话传递到了乙的电话,然后信息在乙的电话中再经过对应的编码转码,最后乙才通过话筒听到了甲所说的话
其中,人与人之间通信使用的是汉语,可以将其称为语言层;而电话和电话之间通信使用的是电话系统相关的一些接口,可以将其称之为通信设备层
后来随着科技的发展,开始使用智能手机,此时下层使用的通信设备变化,或是手机卖到了其他国家,此时上层使用的通信语言变了,但仍然可以正常沟通
分层的益处在于"封装",在分层情况下,将某层的协议进行替换后,通信双方之间不会受到影响
实际上,在设计协议栈时也可以不进行分层,将各个层的功能全部写在一起,将这些小模块合并成一个更大的模块。但这样的设计方式对设计人员的要求就非常高了,设计人员必须能够编写从物理层到应用层的整个通信过程的代码,并且最终设计出来的代码的可维护性和可扩展性是很低的
层状结构的本质是软件工程上面的解耦,此时层与层之间只有接口的相互调用关系,此时就可以让研究不同领域的开发人员编写不同层的代码,最后再将各层的代码联调起来,由于每一层的代码都是对应领域的专业人员编写的,因此代码联调后整体的性能也是很高的
并且这样的层状结构可以增加代码的可维护性和可扩展性。比如有一天觉得数据链路层的代码已经无法承担起通信的能力了,那么此时就可以用一个新的协议对它进行替换,而其他各层对应的协议都不用换,即可扩展性。而若协议栈的某一层出现了问题,只要确定了是哪一层出了问题,就可以直接去对应层去找问题,即代码的可维护性
2.2 OSI七层模型
最开始指定的协议为OSI七层协议
OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范
OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,如路由器,交换机
OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,如手机和电视之间数据的传输
OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也较为完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯
OSI七层模型较为复杂,所以后来在具体实现的时候就对其进行了调整,于是就有了后来的TCP/IP四层协议
2.3 TCP/IP五层模型
TCP/IP是一组协议的代名词,还包括许多其他协议,共同组成了TCP/IP协议簇。TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫其下一层所提供的网络来完成自己的需求
物理层:负责光/电信号的传递方式。如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)就是工作在物理层的
数据链路层:负责设备之间的数据帧的传送和识别。如网卡设备的驱动、帧同步、冲突检测(若检测到冲突就自动重发)、数据差错校验等工作。数据链路层底层的网络通信标准有很多,如以太网、令牌环网、无线LAN等。交换机(Switch)就工作在数据链路层
网络层:负责地址管理和路由选择。如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路(路由)。路由器就是工作在网络层的
传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机
应用层:负责应用程序间沟通。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。网络编程主要就是针对应用层的
下面几层几乎没有区别,操作系统对应的是传输层和网络层,数据链路层和物理层都是对应在驱动层的,而TCP/IP协议当中的应用层就对应到OSI七层协议当中的应用层、表示层和会话层
对于一台主机,操作系统内核实现了从传输层到物理层的内容
对于一台路由器,它实现了从网络层到物理层的内容
对于一台交换机,它实现了从数据链路层到物理层的内容
对于集线器,其只实现了物理层的内容
但并不是绝对的,如现在很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)
集线器了解
电磁信号在长距离传输过程中信号是会衰减的,而集线器的主要功能就是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上
集线器属于纯硬件网络底层设备,基本上不具有类似于交换机的“智能记忆”能力和“学习”能力,也不具备交换机所具有的MAC地址表,所以发送数据时是没有针对性的,而是采用广播方式发送,即当集线器要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点