在每台计算机独立的情况下:假设现在有三台计算机,每台计算机各持有一个业务。那么现在有个程序员处理业务时,如果想要处理业务1就要操作计算机1,处理业务2就要操作计算机2,这样的效率明显不高
那么如果能将三台计算机都连接到一台服务器中,那么三台计算机就可以通过将业务发送到服务器,服务器再发送到指定的计算机中,就可以实现只操作一台计算机就可以处理三个业务。这就是网络互联的基本原理
那么假如现在有不同地方的多台计算机想要互联怎么办呢。同样的网络连接原理,将同个地方的多台计算机的数据上传到一台可以称为“交换机”的机器,交换机在将数据发送到中间的一系列实现网络连接的机器上,再发送到另一个地方的交换机最后传入另一个地方的多台计算机中。像这样的在一个区域内可以通过中间的桥梁实现互联的就可以称为局域网
事实上中间的这块桥梁在现实中就是各运营商为用户实现的,这是一个非常庞大的工程量。
相对于局域网和广域网而言,这两个只是一个相对的概念,并不能具体化。一个家庭;一个学校;一个国家都可以被看作是一个局域网
本篇文章首先对协议有一个初步的认识
协议就是一种‘约定’,而协议存在的本质:是为了减少通信成本。为什么这么说呢?
举个例子:现在有两个人在近距离的进行交流,一个人向另一个人提问一个是否问题,这个人可以根据另一个人回答的语言进行判断。但如果这两个人相距了1公里双方都可以看到对方肢体动作进行交流的情况下,因为距离较远所以想要让对方听到所讲的话就得需要很大声,这样双方的通信成本就提高了。所以这种情况下,双方就可以通过提前约定好另一种的回答方式,例如点头表示肯定,摇头表示否定。这样子通过对方的肢体动作就可以判断出答案。
像上述的例子就是在两人约定好某种规则后,可以在一定程度上减少了通信的成本。
对于网络而言亦是如此,现实生活上网络是可以在很大的范围内进行通信的,所以距离肯定也会有较长的情况,因此通信的问题和成本就会随着距离的变长而提高。因此网络问题的本质就是传输的距离变长了
同时在计算机之间会存在着多种的计算机产商,多种的操作系统,多种的网络设备型号。因此为了实现这些有不同的操作系统不同的产商组成的计算机之间的通信,所有的产商或者操作系统之间就必须要指定一个协议,然后大家共同遵守这个协议,这就是网络协议
假如现在有两个人在打电话,那么为了防止两个人各说一门语言导致通信出现障碍,那么两人就约定好都说普通话,这就是语言层面的协议。然后两个可能用的是不同品牌的电话,为了这部电话能够接收到对方传来了语音,所以电话之间也需要制定好协议。那么像这种打电话之间就会出现两层的协议,这就是协议分层
对于网络而言肯定不止就两层协议这么少,网络通信是一个更加复杂的过程,因此会有很多层的协议。
分层的特点:
- 把软件进行模块化,可以很好的进行解耦,解耦以后如果把通信设备进行更换,上层不用改变,而如果上层语言改变,底层不需要改变。所以对任何一层做任何修改并不影响其他层
- 功能比较集中,耦合度比较高的模块放在一层,也就是高内聚,每一层解决特定的问题,功能解耦
分层名称 | 功能 | 功能概览 | |
---|---|---|---|
7 | 应用层 | 针对特定应用的协议 | 针对每个应用的协议 |
6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 | 接受不同表现的信息 |
5 | 会话层 | 通信管理,负责建立和断开网络连接 | 何时建立、断开连接,保持多久连接 |
4 | 传输层 | 管理两个节点之间的数据传输,负责可靠传输 | 是否有数据丢失 |
3 | 网络层 | 地址管理和路由选择 | 经过那个路由器传递到目的地址 |
2 | 数据链路层 | 互联设备之间传送和识别数据帧 | 数据帧和比特流之间的转换 |
1 | 物理层 | 以0 1 代表电压的高低,界定连接器和网线的规格 | 比特流和电子信号之间的转换 |
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
物理层 | 负责光/电信号的传递方式,物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层 |
数据链路层 | 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步、数据差错校验等工作 |
网络层 | 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由) |
传输层 | 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机 |
应用层 | 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。网络编程主要就是针对应用层 |
因为物理层考虑较少,所以通常会叫作TCP/IP四层模型
数据传输条件:
数据包交付能力:如果两台很远的主机之间要传递数据,首先要先有把数据交付给另一台主机的能力
路径选择的能力:要明确数据传输到哪台主机。
容错纠错的能力:如果出错了就要重新传递一份。
数据解析能力:数据传递过去主机要识别这是什么,然后才能使用这个数据。而这里的每一层都有自己的协议,每一层协议都解决当前层的问题。
协议每一层都有,而每个协议都要有报头
报头:
例如快递,除了买的商品还有快递单,这个快递单就是快递的报头。快递小哥通过快递单找到买家,快递单就是快递公司自己定的协议
因此传输数据时总会有多一点的数据,多出来的就叫报头
协议通常是通过协议报头来表达的。每一份数据最终在被发送或者在不同的协议层中,都要有自己的报头
同一个局域网里的不同主机是可以直接连接的
每一台主机都有网卡,每一张网卡都有自己的地址,叫做MAC地址用来标识网卡的唯一性。MAC地址虽然全球唯一,但是不应用于全球,只是在局域网中标识自己的唯一性。云服务器的MAC地址是个虚拟地址
在操作系统中输入指令— ifconfig 就可以看到MAC地址
一个局域网中会有很多的主机,如果主机1想要跟主机2发送消息的时候其他所有主机也都能收到,但是其他主机在内部做协议判断后发现并不是发给自己的就会自动丢弃。最终只有主机2收到
以太网发送消息的原则是任意一个时刻只允许一个主机在局域网中发消息。否则就会发生碰撞,类似于系统中的临界资源
令牌环网:谁持有令牌环谁发送数据没有令牌的主机就不能发送消息,类似于系统中的锁
两台计算机之间通过TCP/IP协议通讯的过程:
跨网段的主句进行传输需要通过一个或者多个路由器:
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
数据包封装:
- 向下交付的时候每一层都会添加自己的报头,报文=报头+有效载,再把报文向下交付
- 向上解包的时候,因为同一层有相同的协议,所以能识别报头,它会解开报头,把有效载荷在向上解包。这样就形成了对称的结构
一个设备至少要横跨两个网络才能实现数据报跨网络转发,路由器也必须至少横跨两个网络,所以路由器必须有两个网络接口。在路由器部分传递给令牌环驱动程序的时候,加上的报头是令牌环协议(重新封装报头),虽然这样跟左边不一样了,但是并不影响对称性