个人主页:Lei宝啊
愿所有美好如期而遇
目录
网络发展
人与人之间需要进行通信和合作,之前人们使用计算机算出数据后,将数据拷贝到另一台电脑上,逐渐的,人们希望计算机之间也能够进行通信,特别是类似于贝尔实验室,他们是第一批搭建局域网进行通信的,使得多台计算机连接在一起,完成数据共享。
局域网
局域网(Local Area Network,简称LAN)是指在某一区域内由多台计算机互联成的计算机组。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
类型:以太网,令牌环网等。
网络协议初识
认识协议
协议是什么?协议就是一种计算机之间的约定。怎么理解这种约定?类似于互相通信的两个人,约定好交流的一种方式,对于计算机来说,就是约定好一种数据格式。
网络分层结构
软件分层
软件分层,类似于main函数中调用一个个面向过程实现的函数,这样他们就是分层的。对于面向对象的语言来说,类之间的继承,也是一种分层。
为什么软件需要分层?层和层之间是松耦合的,可以随时替换和方便维护,例如主函数中调用一个函数,函数返回结果出了错误,我们不需要在主函数中找问题,直接去调用的函数中找。
网络分层
首先提出问题,为什么需要网络协议?他主要解决了什么问题?
在两台计算机进行通信时,会存在这样的几个问题:
- 传输的数据如何识别和使用
- 可靠性问题,传输的数据对吗?有丢失吗?顺序对吗?
- 主机定位问题,如何确保通信的计算机是我想要通信的那一台?
- 数据报局域网转发的问题
而网络协议就是解决这些问题的一种方案,既然是方案,那么就有好方案,也有不好的方案,我们希望的好方案是可扩展,方便维护,所以网络协议就是层状结构的了!层与层之间是松耦合的,可扩展,易于维护。
OSI七层模型
OSI七层模型就是由一个组织提出的网络协议,称为开放式系统互联参考模型,所有操作系统必须遵守这个模型,只有遵守这个网络协议的OS,才能够联网。
网络和OS之间的关系
根据上图我们做进一步解释:物理层在网络中对应着网卡,数据链路层的功能和实现集成在网卡驱动程序中,网络层中的IP协议和传输层中的TCP协议是实现在OS系统内部的,也就是说,网络其实是OS源代码的一部分。
协议有很多,不止TCP和IP,为什么我们单独拿他出来说,并且说网络是OS源代码的一部分?因为TCP协议和IP协议是网络最重要的核心部分,并且他是实现在OS内部的。所以我们说起网络,就是以他们为代表的网络协议栈!
双方必须使用相同的数据结构,这样在经过网络传输,对方一定认识每个字段的大小和含义,这就是约定!
局域网通信
假设在一个局域网内,有5台主机,中间那条线就是物理线路,通过他将五台主机进行连接。当A主机想要向F主机发送信息,那么数据就会通过物理线路变成光电信号发送给F主机,可是,五台主机都连着这条线,其他主机会收到这些光电信号吗?答案是会的,但是B,C,D主机没有收到这些数据啊?
我们来介绍一个东西:Mac地址。
每一个网卡在出厂时,Mac地址就确定了,不能修改,他通常是唯一的,用来识别数据链路层中相连的节点。
(ether:以太网)
当BCDF主机收到A主机发送的光电信号时,通过数据链路层网卡驱动识别,当前主机的Mac地址是不是MacF,是就保留并向上解包和分用,不是则丢弃。
如果A和B同时向D发送消息呢?只有一条物理线路连接,也就是说,他们的数据会发生碰撞,导致谁也收不到,那么以太网是如何处理的呢?采用碰撞避免,如果数据发生碰撞,则发送数据的主机不会再立即发送数据,而是休眠一会,再发送。也就是说,在任何时刻,只允许一台主机在局域网中发送消息。
在OS层面来看,局域网就是一个临界资源。
那么在一个局域网中,主机越多越好,还是越少越好呢?当然是越少越好,这样发生碰撞避免的可能性就越小,网速也就越快。
TCP/IP通信过程
同一局域网内
用户数据在向下交付时每一层都会封装每一层的协议报头,剩下的部分就是这一层的有效载荷,当报文通过以太网到达另一台主机的网卡时,因为他们处于同一个局域网,所以在链路层是可以识别的,又因为他们的网络协议栈相同,所以每一层都可以识别他们每一层的协议报头,并将这个报文进行解包,做到协议报头和有效载荷分离,另外一个问题就是,每一层都有许多协议,并不是我们上面简单写出的那样,报文向上交付的时候,应该选择交给哪个协议呢?报文在封装时,已经将上一层协议是谁封装在协议报头中,因此在解包后向上交付时能够找到对应的协议进行交付,这个过程叫做分用。
不在同一局域网内
上面是两台不在一个局域网内的主机进行网络通信。
在数据链路层,报文要添加以太网协议报头,包含这源mac地址,以及目的mac地址。
因为两台主机不在一个局域网内,没有办法直接进行通信,所以就需要路由器,这个场景下,两个不同局域网下的主机进行通信,也就是说,这个路由器至少需要两个网卡,也就有两个mac地址,这个路由器同时处于两个局域网下,作为一个软件层,很好的屏蔽了IP层以下的差异,在IP层及以上看来,网络没有任何差别,在IP层以下,由路由器来处理不同局域网的差异,这样,在用户看来,实际上只有IP网络!
我们通过上图也可以看到,IP地址是不变的,Mac地址会发生变化;首先,IP地址是互联网中唯一标识一台主机的,Mac地址是网卡的地址,在报文不断转发的过程中,网卡不是源网卡,因为已经变成了路由器的网卡,而IP地址是标识主机的,用户就是想向指定主机发送信息,所以IP地址在报文发送过程中是不会改变的。