计算机网络-入门版-持续更新

        在刚开始学习计算机网络时,发现国内教材的切入点十分奇怪,上手十分困难,对初学者极不友好。因此在这里整理一下对计算机网络的整体框架做一下梳理,希望可以对后来者有一些帮助。

总述:

        我们可以用一个简单的做菜的例子来类比计算机网络。

        计算机网络说白了就是从一台计算机向另外一台计算机发送消息的流程。消息从计算机中发出就好比一个顾客在点菜,顾客是计算机,点菜这个操作就是发送消息。

        只不过由于参与通信的设备多,设备之间通信次数多,设备之间物理距离远等原因导致这个流程变得比较复杂。因此考虑将整个流程分为几个相对独立的模块,每个模块做一些事情。就好像在准备一个100人午餐时,就需要进行分工,有人备菜有人炒菜。需要为越多的人准备就需要更加细致地分工。

        常说的五层协议实际上就对应于整体流程的五个模块,每个模块分别做一些事情。并且在每个模块中,我们只在乎他的输入输出,而不在乎他具体怎么做。就好像在做饭的时候,炒菜的师傅只要求切菜的师傅把菜切好给他,并不在乎是用中式刀切还是用西式刀切。

        所谓协议就是不同的切菜方式罢了。

        此外还需要再提一嘴的是各种资料上经常提到一个名词叫做协议栈,我们可以把它类比成厨房。做菜的具体步骤至少大部分应该在厨房中完成,协议栈就是这样的地方(如果你希望得到相对具体一点的理解的话也可以把它理解成)。


整体流程:

        首先由一个应用程序,比如浏览器,决定要向外发送消息。那么他首先要对将要发出的消息进行包装。需要指明他要向哪里发送消息,发送什么消息等一系列重要信息,这些信息都在被包装时加进消息中。包装的方式需要遵守一定的规则,其中最常用的就是HTTP协议。这一步就是所谓的应用层。

        然后这个包装好的消息被发给协议栈,协议栈开始对消息进行处理。

        处理的第一步是为这个包装消息加上一个TCP头部,加这个东西的目的是为了和要通信的计算机建立联系。之所以叫TCP头部是因为这部分内容的格式是由TCP协议规定的、并且被加在了整个消息的最前面。TCP(transmission control protocol)这一步就是所谓的传输层。

        第二步是这个包装消息加上一个IP头部。计算机成千上万,这一步的目的就是要找到我们要和哪一个计算机沟通,大致走什么路径沟通。和TCP头部一样,这一部分叫IP头部的原因是他的内容格式由IP协议规定,并且加载整个消息的最前(甚至在TCP头部之前)。这一步就是所谓的网络层。

        处理好之后将这些消息一起发给网卡。网卡是我们计算机上都带的一种硬件

        交给网卡之后网卡首先会在这个消息前再加一个MAC头部。加这个头部的目的是告诉设备信息具体要通过什么路径传播。这里他和IP的作用并不冲突,反而相辅相成。举个例子来说,我现在要去图图的家。IP头部告诉我图图家在翻斗大街翻斗花园二号楼1001室。但现在我只知道了地址并不知道怎么走。MAC头部则告诉我说,去这里要先走二仙桥再到成华大道等等等。之所以只用MAC头部不行是因为路径实在太多,通过了了几个数就表明全部的路程不太现实。实际中是先告诉我到翻斗大街怎么走,到了之后MAC地址改变,告诉我到翻斗花园怎么走。这一步就是所谓的链路层。

        下一步被添加好MAC头部的信息会再被添加报头、起始帧分解符和FCS。前两个东西的作用是帮助信息从数字信号转化为可以被物理传输的物理信号。第三个东西的作用则是帮助判断转化内容是否出错。这一步就是所谓的物理层。

        至此在计算机中的内容全部完成。剩下的就是将我们得到的物理信号发给目标计算机了。


具体细节:

一: 应用层。

        这一层的任务又浏览器完成,负责将URL信息转为更具体的内容,我们把这个内容叫做请求消息。

        请求消息包括请求行,消息头,和消息体。

        浏览器将URL拆分。所谓URL就是所谓的网址,比如https://cn.bing.com/search?q=%E8%AF%B7%E6%B1%82%E6%B6%88%E6%81%AF&cvid=f46eb09d76f54b2daaf0b5d690b6f1e2&gs_lcrp=EgZjaHJvbWUyBggAEEUYOdIBCDQ5NjZqMGo4qAIAsAIA&FORM=ANNTA0&PC=HCTS。URL的规则是协议类型 + // + 服务器名称 + 所请求内容在服务器中的位置。上面的例子中,所使用的协议是https,服务器名称是cn.bing.con,后面的一大长串是这个请求在服务器中的位置。根据这个规则浏览器可以拆分出请求消息的URI。在请求行中,浏览器首先判断这个请求是那种类型的,比如是想从服务器获取一个文档,还是说想修改服务器文档中的内容等等。每种请求都有对应的字串。然后再向请求头中添加URI,所谓URI就是服务器中文档的位置以及端口号等一系列内容。最后添加上这个URL所使用的协议。总的来说,请求消息的请求行张这样:

        

        然后是消息头,这里面会包含请求的一系列具体内容,比如发送方的IP地址等内容。具体来说,消息头中内容的格式一行一个内容,先写内容是什么类型的,然后写具体内容,具体如图

        最后是消息体,这一部分有可能是空的,比如说如果是客户端向服务器请求一个文档的话,那么消息体就是空的。如果是客户端想要修改服务器中文档内容的话,那么会有一系列相应的内容

二:传输层

        就像网址有很多不同的协议一样,传输层也有很多不同的协议。最常用的是TCP协议与UDP协议。浏览器请求一个网址的时候用的更多的是TCP协议。

        TCP是先建立链接,再进行通信;而UDP则是跳过建立链接的步骤直接进行通信。建立链接链接的好处是传输更稳定,而坏处则是比较慢、会增加延迟。因此我们可以很容易地发现这两种协议适用的场景。比如TCP适合传输网页内容:稍微慢一点可以,但缺少什么内容的话带来的错误是影响很大的。而UDP则比较适合传输视频或音频等内容:要求实时性高一点,频繁的卡顿让人难以接受,但偶尔的模糊或缺少一帧数据甚至可能无法被察觉。

        下面我们首先介绍一个TCP头部都包含哪些内容,然后介绍TCP是如何建立链接,进行通信并关闭链接的。这一段内容会比较长。

        TCP头部:TCP包含很多内容,具体内容可以参考下面的图片。这之中比较重要的是序号、ACK号、控制位和窗口大小。TCP头部内容

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值