今天简单记录一下计算机网络的入门内容,记录的是计算机五层架构,从底层到应用,简述一下计算机网络的整个框架,和每一部分的的主要内容。
整个计算机网络大致就是下图这样:
我们从下往上来总结。
·物理层
我们先来考虑一个问题,一个电脑和另一个电脑之间是怎么连接的?最简单的方法,拿一根网线直接一连就行了呗,那如果这里有很多很多的电脑想要实现两两之间进行连接呢?这个时候就会发现直接连线是不行的,因为要连的线太多了,这个时候就出现了一个集线器的器件,我们可以把所有想要连接在一起的电脑都连接到这个集线器上,让这个集线器作为中间器件,发送数据时通过集线器来进行数据的转发,这下所需的接线数量就会大大减少。这些内容就对应了上图中的物理层。
但集线器这里又会带来几个问题,首先,集线器是不能识别连在自身上的设备的,所以集线器会把数据转发到接在自己身上的所有其他设备上,其次,集线器不能通过处理两个电脑同时传来的信息,这会导致数据混乱,最终谁都无法获取有效的信息。
·数据链路层
为了解决这些问题,这时候就引出了交换机这个器件,交换机和集线器的接线方法是一样的,不同的是,它可以通过MAC地址识别每一个接在它上的设备,MAC地址是相当是机器的身份证号,每一个都是独一无二的,在厂家生产设备的时候会给每一台设备一个MAC地址,交换机中有一个对应表,记录了每个端口对应的设备的MAC地址,但在最初期,交换机中的表是空的,假设交换机上有一个设备想给另一个设备发数据,刚开始的时候交换机也是不知道每个设备的MAC地址的,这个时候A设备要给B设备发数据,发出的信息中需要包括自身的MAC地址和目标的MAC地址,然后发到交换机后,交换机对这个数据进行广播,就是发给其他所有的设备,然后每个设备根据自身的MAC地址去对应,对上的就是给自己发的数据。这个时候交换机就会记录这两个设备的MAC地址,经过一段时间后,交换机就会记录完整所有接着自身上的设备的MAC地址,发数据时也就可以直接点对点发送,就不需要再广播了。这些内容就对应了上图的数据链路层。
·网络层
这时候又有了一个问题,交换机上的地址端口对应表不是一个无限大小的表,假设我们现在要搭建一个互联网这么大的网络,那么可能交换机内的对应表就需要非常非常大才行,这个在实际中是不可取的。怎么办呢,这时候又引出了IP的概念。简单来说,就是我们通过交换机搭建起了一个一个的局域网后,网络中的每一台设备,赋值其一个虚拟的ip地址,然后我们通过一台叫做路由器的设备将这些局域网进行连接,这样每个局域网中的设备数量就可以保持在交换机的正常工作范围内。然后举个网络间通讯的例子,假设现在我们有两个网络A和B,A中有一台设备的IP为100.100.0.100,B中有一台设备的IP为100.100.1.100,这两台设备现在想要通讯,要怎么弄?我们让A向B发数据,这时A其实是先把数据发送到路由器的,路由器上会根据自身连接的局域网,对应相应的IP地址,假设A网络接着路由器上的IP地址为100.100.0.1,B网络接着路由器上的IP地址为100.100.1.1,那么此时数据就会先从100.100.0.100发送到100.100.0.1,再从100.100.0.1发送到100.100.1.1,再从100.100.1.1发送到100.100.1.1,这样来完成数据的跨网络传输。这里其实有个问题,ip地址其实是个虚拟的地址,所以实际去接设备的时候其实用的都是MAC地址,所以上面虽然是通过IP去传的数据,但其实是通过IP寻找相应的MAC地址,再进行数据传输的,这个通过IP去找MAC地址的协议,叫做ARP协议,感兴趣的可以了解了解。
·传输层
然后这会我们设备都找到了,就可以正式传输我们的数据了,这就是传输层的主要功能,但我们不能直传输到电脑就完了,电脑里面有很多进程,到底传给哪个进程,这是需要考虑的问题。处理方法即给每个应用程序一个端口号,通过这个端口号,查找具体的应用程序。这里面最重要的有两个协议,TCP、UDP,这两个协议是最常用的传输层协议,用来通过一定的格式,来将数据打包发出去,这里需要包括端口号的内容,以便通讯双方都能识别。这两个协议最主要的区别就是一个是直接发数据,不管对方接收的情况,另一个需要确认连接以及数据发送的情况。TCP需要先用三次握手进行连接,传输数据时需要对方返回ACK以确认数据的接收状况,数据传输结束后还需要四次挥手来进行连接的中断,而UDP就没有这些内容,UDP只管将数据发出去,没有这些应答机制,所以TCP一般会比UDP更可靠一点,但不同的应用有不同的要求,这个都要视具体情况而定。
然后这里还有一个中间层,大家应该都听过socket,我对这个的理解是:找个保姆帮你解析内容。简单来说,就是每个应用程序创建一个socket对象,然后这个对象来接收传输层传来的数据,也是相当于一个统一的接口标准。
·应用层
最后就是应用层了,这里就需要具体问题具体考虑了,这层的协议非常多,HTTP、DNS、SMTP......,需要哪种协议就用哪种协议就行。即不同的应用需要不同的协议。
最后画一下最终传来的数据是啥样的,其实就是一个一层一层套娃的结构。