(计算机网络)网络基础

人类之间需要协作,计算机亦是如此,因此计算机之间需要通信,而网络就用于计算机之间的通信。如果要实现通信,就需要提前做好约定,就像我们平时和别人交流,默认都是讲汉语,否则大概率无法交流。对于计算机而言也是如此。

协议

协议本质是一种约定,用于快速形成共识,可以减少通信成本。计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。

定好协议还不够,比如你用频率表示 01,我用强弱表示 01,就好比我用中国话,你用葡萄牙语一样,虽然大家可能遵守的一套通信规则,但是语言不同,即是订好了基本的协议,也是无法正常通信的。所以完善的协议需要更多更详细的规定,并让参与的人都要遵守。这份所有人共同遵守的协议就是网络协议。

协议分层

所有的软件都是层状、模块化的,而协议本身也是通过软件实现,为了更好地进行模块化、解耦合,也是被设计为层状结构的。我们将从下面的例子中认识协议分层的优势。

在电话通信中,用户的声音会转化为数据,通过电话机、本地交换机、区域交换机等多层次的硬件设备进行传输,不同层次的硬件设备有不同的协议。为了简化,我们只看最上面两层,即用户之间交流的语言层,和电话机之间交流的通信设备层,如下图。数据的传播过程就简化为从用户到电话机,接着从电话机到另一台电话机,最后再到另一位用户。实际情况也与之类似,无非就是多了几层。

用户并不关心自己的数据是如何传输的,他只希望自己传出或接收到的数据是遵守汉语协议的,也就是自己说的是汉语、对方听到的也是汉语,反之亦然。电话机也是如此,它只希望自己传出和接收到的数据遵守电话机协议,让自己和另一台电话机都能"读懂"接收到的数据。

网络通信也是类似的结构和原理。这种分层的通信,使得不同层的设备通信时具有一定的独立性,让我们可以轻松替换任一层的协议或设备。

网络通信与计算机内部的总线通信的本质相同,都是在传输数据。问题在于,通过网络传播数据,如何定位目标主机?其次,就像我们坐火车,如果距离较远,可能需要经过好几站,我们如何知道要先将数据发到哪一站呢,之后又要发到哪里?再者,通过网络不一定能将数据送达,如果数据丢失了怎么办?最后,通过网络传输数据后,另一台计算机如何知道这些数据是什么、怎么处理?总之,通过网络传输数据,只有数据本身还不够,还需要一些额外信息。就像寄快递需要填写快递单一样。

协议解决的就是上述的这些问题,它为通信双方预先制定的一套规则和约定,规定了数据的格式、传输顺序、错误处理方式等"额外信息",确保双方能正确理解彼此。不同层次的协议分别针对不同的种类、不同性质的问题,为数据补充或处理不同的"额外信息"。如下,详细过程后面会提及。

TCP/IP五层(或四层)模型

TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议族。 TCP/IP 通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

协议本身也是通过软件实现的,不同层次的协议实现在不同的计算机系统层次,如下

前面提到,通过网络通信,除了要传输的数据,还需要一些额外信息,我们暂时称其为协议信息。协议信息是通信双方都认识的结构化的数据类型(即结构体)。协议栈是分层的,每层双方都遵循相同的协议,同层之间,互相可以认识对方的协议信息。

网络传输基本流程

局域网通信原理

局域网(Local Area Network, LAN)是指在有限地理范围内(如家庭、办公室、学校或建筑物内),将多台主机连接起来,实现数据通信和资源共享的计算机网络。局域有许多种,如以太网、令牌环网、无线LAN等。计算机进行网络通信时,其实就是将数据从一个局域网发送到相邻的局域网,不断传递,直到传递到目标所在的局域网,让该局域网的路由器将数据发送给目标主机。

两台主机在同一个局域网内可以直接通信,通信的内容会被同一个局域网内的所有主机接收,但只有相关的主机会处理接收到的数据。就像站在教室讲台大喊一声"张三今天值日",所有同学都能听到,但只有张三会处理这个信息,其它同学听完就抛之脑后了,因为这个信息是让张三听的,跟自己没关系。

同时我们也可以发现,每台主机在局域网上也需要类似"名字"的东西来唯一区分不同的主机,它就是MAC地址。MAC地址占6个字节,一般用16进制数字加上冒号的形式来表示,如08:00:27:03:fb:19 。它在网卡出厂时就确定了,一般是全球唯一的。

如果教室里说话的人太多,太嘈杂,我们说的话别人可能听不清楚,局域网通信中也有类似的问题。如果同一时间发送数据的机器太多,这些数据就会互相干扰,我们称之为数据碰撞 ,在没有交换机的情况下,一个局域网就是一个碰撞域

不同局域网解决这个问题的办法有所不同,在没有交换机的以太网中,同一时刻只允许一台机器成功向网络中发送数据,所有发送数据的主机都要进行碰撞检测,即发送数据的同时进行监听,检测到碰撞后,立即停止发送,等待一段时间后再发送。

在无线LAN中,同样是同一时刻只允许一台机器成功向网络中发送数据,由于无线设备难以在发送数据时监听(几乎只能听到自己发送的数据),所以要求发送数据的主机做好碰撞避免,通过发送前的预约和监听来避免与其它主机同时发送数据。令牌环网的机制和我们学习的锁类似,只允许持有"令牌"的机器发送数据,发送完再将"令牌"传给下一个主机。

主机之间的通信本质是两个协议栈在通信,如下。和电话通信一样,每一层都有对应的协议。MAC地址就用于最底下的数据链路层。

网络通信所需要的协议信息就在这一层一层的通信结构中进行添加或提取并解析。这些协议信息,就是对应协议层的结构体,被称为报头 ,不同的协议层有自己的结构体,即自己的报头。添加报头的操作被称为封装 ,提取并解析报头的操作则称为解包。如下。整个过程就像是各种报头入栈后再依次出栈,这也是为什么这种结构被称为协议栈。

可以看到同层之间发送和接收到的数据是相同的,因此可以视作同一层内在直接通信。对于每一层而言,去掉数据在该层使用的报头的部分后剩下的部分就被称为有效载荷 。例如传输层中的数据,去掉传输层报头后,剩下的 应用层报头+原始数据"你好" 就是数据在传输层的有效载荷。报头和有效载荷并在一起就是**报文。**各层的报文有各自的名称,如下

关于报头有几个细节,除应用层协议以外的其它协议的报头,都能和有效载荷分离,且报头中必须包含一个关键信息,即如何将有效载荷交付给上层的哪一个具体协议。其次,收到报文后,如果数据链路层发现不是发送给该主机的,就应该直接丢弃。网卡有一种混杂模式,不对链路报头进行解析,直接将有效载荷交付给网络层,这就是抓包工具的原理。

IP地址

IP协议是网络层的协议,有IP4和IP6两个版本,我们主要谈IP4协议。IP地址是IP协议中,用来在网络中标识不同主机的地址,它可以在全球范围内唯一标识主机。与MAC地址相比,IP地址主要用来标识数据传输的最终地址,而MAC地址则用来标识当前要前往的地址。

就像我们坐动车一样,最终目标是要从福州坐到厦门,那么福州和厦门就是用IP地址来标识。在这途中会经过泉州站,当我们到达泉州站时,如果要去厦门,下一站是晋江站,因此我们需要从泉州站前往晋江站,而这里的泉州站和晋江站就用MAC地址来标识。

回到网络通信,例子中的各地站点就是路由器,它也可以视为主机。我们不难看出,数据在传输过程中需要两份地址信息,一个是表示最终目标的始末IP地址(福州->厦门),另一个是数据当前需要的始末MAC地址信息(如泉州->晋江),即源MAC地址和目的MAC地址,每次传输到新的路由器,都会更新MAC地址信息,将数据发往下一个路由器。

始末IP地址信息在网络报头内,而MAC地址信息则在链路报头内。以下面的网络通信示意图为例,同一个局域网内的主机IP地址的前半部分是相同的,当主机A发现目的IP地址不在当前局域网内时,就会将路由器的MAC地址作为当前的目的MAC地址,填入链路报头,通过网卡发送后,路由器就会提取并解析链路报头,发现是传给自己的,然后通过解析网络报头的IP地址,知道是传向其它局域网的数据,并且正是自己连接的另一个局域网,于是将报文重新封装,IP地址信息不变,将自己的MAC地址作为当前的源MAC地址,目标主机的MAC地址作为当前的目的MAC地址,填入链路报头,如果不是自己连接的局域网,则将要经过的下一个路由器的MAC地址作为当前的目的MAC地址。

纵观整个传输过程,我们可以发现网路层的IP地址信息一直是不变的,虽然底层的局域网可能会一直变化,但不管是哪种局域网,它只需将数据发送到目标MAC地址的路由器或主机,让对方查看IP地址信息。这就是IP网络层存在的意义,提供提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽最底层网络的差异。

相关推荐
tobias.b3 小时前
408真题解析-2010-40-计算机网络-域名解析
网络·计算机网络·计算机考研·408真题解析
EmmaXLZHONG1 天前
分布式系统概念与设计笔记(Notes of Distributed Systems Concepts and Design)
笔记·分布式·网络协议·计算机网络
林姜泽樾1 天前
linux基础第一章,linux的介绍和它和windows的区别
linux·运维·计算机网络·安全·网络安全
wangjialelele1 天前
万字整理计算机网络知识点
linux·c语言·网络·c++·计算机网络·php
REDcker2 天前
FTP协议原理及应用精解
linux·后端·计算机网络·互联网·ftp·服务端开发
8125035332 天前
DNS监控:生产实践
linux·网络·网络协议·tcp/ip·计算机网络
8125035332 天前
第2篇:为什么要有分层?从工程实践到架构设计
linux·网络·网络协议·计算机网络
CS创新实验室4 天前
《计算机网络》深入学:电子邮件
计算机网络·408·电子邮件·计算机考研
CS创新实验室4 天前
《计算机网络》深入学:WWW
计算机网络