网络基础
- 一.总体概述
- 二.认识Mac地址
- 三.数据跨网络传输
一.总体概述
1.协议是什么
1.从概念上说:为了保证不同厂家生产出来的不同型号的电脑能够互相通信,而制定的标准——协议。
2.从技术上说:简单粗暴的理解——是操作系统里的结构体。
2.OSI模型
为了保证远程传输数据的可靠性,从而提出了OSI模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
3.TCP/IP五层(或四层)模型
实际上可以看出OSI虽然完善但是有些复杂,在实际设计时,人们发现可以把会话层,表示层,应用层统一看成应用层,同时对于程序员而言,最重要的是网络层(IP)和传输层(TCP)。所以又被称为TCP/IP五层模型。而我们一般不关心物理层,所以有时又称为4层模型
4.模型与操作系统的关系
传输层和网络层是内嵌在操作系统里的,这也就意味着无论是哪个操作系统,为了保持通信它的网络部分都必须是一模一样的。
5.网络传输流程
报文=报头+有效载荷。而通信的本质就是对报文进行不断的封装和解包的过程。
例如:发一句“你好”。
6.拓展
- 报头是二进制,有效载荷也是二进制,想要能够解包成有效信息,操作系统必须提供能够分离报头和有效载荷的方法。
- 每一层都有许多协议(虽然上图里只画出了一种,实际上它应该是一棵倒着的多叉树),那么该如何判断到底将本层的有效载荷交给上一层的哪一个协议呢?所以几乎任何层的协议都要在报头里提供决定将自己有效载荷交给特定一个协议的能力。
二.认识Mac地址
当操作系统启动时,会自动读取网卡里的信息,同时就会获取Mac地址。Mac地址在理论上每台主机都是不同的。
在一个局域网内,如果H1要和H10通信怎么办呢?
根据上面所说,H1应该封装一条报文发给H10,其中报头就应该说明发给谁。在整个局域网内,所有主机都能够收到这条报文,如果在分析报头时,发现目标不是自己,会自动将这条报文摈弃;只有判断成功的主机,才会接收这条报文。这里报头里包含的发生着地址和接收者地址就是Mac地址。(判断工作是在数据链路层完成的)
数据碰撞
如果在一个局域网内多台主机同时发送信息,那么它们发送的信息就有可能会撞在一起,造成的结果就是所有的信息都会失效。
那么为了避免碰撞,每台发送主机都要执行避免碰撞的算法。这个算法是由以太网协议规定的,原理非常简单粗暴,就是当有主机在发送信息时,其它主机延时发送。
抓包原理:网卡有两种工作模式,一种是正常模式,一种是混杂模式。混杂模式就是当网卡接收到不是发送给自己的信息后,依然将其接收并发送给上层。这样做自然是存在安全隐患的,但现在也有了许多解决措施,例如:在应用层对数据进行加密,这样即使拿到数据也无法解析。
三.数据跨网络传输
上面所说的都是在一个局域网内,如果是跨网络传输呢?那么就必须得有路由器这一中间设备,路由器就是连接两个局域网的设备。
简单提一下令牌环网:与以太网相似,但不同于以太网的碰撞检测,令牌环网是拿到令牌的主机才有资格进行通信。
重点是该主机如何知道要进行跨网络传输呢?
这里要引入IP地址了,IP地址保证主机的唯一性(上面说到Mac地址也可以保持唯一性,但只在局域网内)。而IP地址就好比你旅游时的目的地,例如:我要从上海到云南旅游,那么我来时的IP是上海,到达的IP是云南;而Mac地址就像是旅行路途中经过的湖北,湖南,贵州…。
当报文经过路由器时,路由器会将它的报头进行解包成IP,然后再封装一个新的报头,变成一个新Mac地址从而交给下一个子网。这样它的Mac地址一直在变化。