计算机网络——(概述篇)
一、TCP/IP协议族概述
由于要满足“ 互联网 ”这个题中应有之义,就需要克服不同设备,不同系统,不同地域之间的网络传输问题。
例如,如何探测到通信,哪边先开始通信,如何接受信息,怎样结束;是你直接发消息过来给我,还是先确认我是谁再发;是传一次消息之后就结束,还是等我确认结束通讯再结束;如果信息太大怎么办,要发送消息的人太多怎么办,别人收不到怎么办等等。这些都是网络协议需要解决的问题。人与人之间交流需要同一种语言才能够明白,计算机也需要遵循相同的方法才能知道传送过来的信息如何解读。所以才需要通过制定一套完整的通讯协议来实现计算机之间的通信。
TCP/IP协议中最重要一点就是协议族分层:应用层、传输层、网络层、数据链路层。
关于分层
Q:为什么要分层?怎么分层?
A:那样庞大一个网络,拿简单的访问一个网页来说,从发出请求的那一刻起,需要把你输入的网址(也就是你要请求的资源)包装起来,让接下来处理的人知道你要向哪个服务器请求资源(如果说每台服务器都有名字的话就可以加上名字);再然后,这些包装好的请求还需要传送到千里之外的服务器上,怎么把这些包装好的请求转换成数字信号、电流信号,以确保这些信息能够传送出去,再然后接受到这些信号之后能够用相同的协议解析出来,让相应的程序能够了解。
由于过程很复杂,如果不进行层次划分,那么可能很难实现这些基本的功能,工程师要了发送请求的软件知识,还要掌握传送信号的硬件知识。通过分层就可以很好地细分问题,化解问题。
关于报文、数据包、数据报
(以下是我的个人理解,电路交换——报文交换——分组交换)
首先,通过在链路上发送一系列的高低电平信号来实现通信是完全可以的,但是这样做的效率可能极低。想想是否有一根专用的线路连接到你想要通信的人的家里,这样做肯定是不太现实的,成本太高,效果或许不错。但是如果有人能够把这些私人链接的线整合起来(电话交换机),效率肯定会高很多,因为你也不用去专门跑到别人家去接一根通信线路,只要大家都把线路接到一个地方去,想要通讯时告诉接线员把线链接上就可以了。但是随着人数越来越多,大家都想要把线接过去,接线员肯定忙不过来,这时就有了一种新的办法,报文交换。可以想象现在大家都处在一个由链路链接的网络上,我只要告诉一个类似快递员的网络设备我需要给谁发送一个消息,这个网络设备就会自动在网络中寻找路径,把消息准确的送到那个人手中。这就好比我送快递,只要把目的地写清楚,快递公司就会自己选择他们最熟悉的路完成这次消息的传输。所以这就是我们要将发送的数据转化成数据包的过程。至于具体数据包的名字,在不同的层次中有不同的名字。
数据链路层:链路层主要分为LLC子层(Logical Link Control,逻辑控制)和MAC子层(Media Access Control,媒体访问控制)。网络层负责的是转发报文,路由控制,而链路层就主要负责两个节点、两个网络设备之间的转发工作。通过将网络层的数据报文成帧,转换成电流等物理形式的信号;再通过接受这些信号,并将其重新组合成数据报并交付给网络层。其中LLC层主要完成分包、拆包、流量控制等(停止等待、GBN、SR,后两个也是简单的滑动窗口机制);而MAC层主要完成介质访问的操作,通过CSMA/CD等协议(多点接入载波监听/冲突检测)冲突检测等的操作。(可以理解为在同一条车道上不能有相向而行的车车辆)
网络层:网络层主要完成转发报文,路由控制的工作。网络层是面向无连接的、灵活的、尽最大努力交付的数据服务。而一般的路由器,就工作在这个层次。通过IP地址来标识一个设备在网络中的ID,封装传输层的数据报,通过一定的转发机制和报文协议来完成在整个网络上转发报文的工作。
传输层:由于网络层尽最大努力交付还是不能够满足可靠性的要求,传输层通过一系列的协议完成了在整个网络中保证可靠性的工作。要完成可靠性工作,必须要从包的丢失,重复,损坏甚至失序等几个方面解决。
应用层:应用层主要面向用户,对用户隐藏底层实现细节,同时还有部分协议是用过应用层来实现的。