
这是对计算机模式结构的一次 overview。
计算机网络课程高中时有平台地学过,但没有太上心,工作发现用的挺多的,比如定位一些网络异常的弊端,做网络层面的改进,都应该对计算机网络模式的一些常见协议有所了解。
但是计算机网络模式庞大复杂,各层有自己的职责,是做不到窥一斑而知全豹的,要对整体构架有一个完整的印象和认识。为此,所以再次翻了翻书,对整个计算机网络模式结构复习了一下,温故知新。这里按照自己的理解,对整个体系结构做个简单的介绍。
要看更全面的,更具体的,还是必须去翻翻书,比如谢希仁的《计算机网络》计算机网络体系结构 pdf,《TCP/IP 协议详解》,《HTTP 权威指南》等计算机网络圣经。
我们来做一个快速的解析。先上个图:

体系结构.png

教科书一般就会把七层体系构架摆上,但划分的层次过多,这里只拿两种模型。
应用层协议的内容,就是我们程序直接应对的,要使用的数据,也是整个网络存储要释放的内容。
如何去理解这种内容和数据呢?协议似乎就是一种规范,有各种各样的数据结构需要通信双方遵守,然后双方都有同样的计算机程序来进行编码和解码。我们把这种应用层协议的内容变成整个体系结构的乘客,他们心里只有目的地,买了票上了车,中间的路如何走,用哪个交通工具走就留给底层的协议了。应用层协议,只应该超过目的地的之后,能够把自己介绍知道就能。
有那么些乘客是常见的:
DNS 协议,Domain Name System,用来把域名转换为 IP。有时会发出这种的问题,为什么有如此一个协议存在?我明白目标主机的 IP,直接填不就好了?这个似乎没问题,但是全世界这么多网址,IP 数量庞大,要真的使用数字记忆的话,那是很困难的。如果又出现了更改了服务器,那 IP 也要跟着换,客户端没有即使更改又会导致长期难题。还有有的时候用 CDN 加速,如果直接填 IP,就直接绕开了 CDN 去源服务器取数据了。所以,DNS 这个协议帮我们完成了这个记忆,有了个域名,想知道对应的 IP,DNS 从本地查。如果本地没有记录,又会去本地的域名服务器查...直到根域名服务器,是一个分布式的过程。如果服务器迁移,IP 地址更改,域名服务商是会帮忙刷新 DNS 服务器的缓存的,一般 2 小时可以完全覆盖。
HTTP 协议,我们经常接触得最多。而且协议的版本也在不断的更新,从原始的 http 1.0,到 http 1.1,再到今后的基于 spdy 完成的 http 2.0。这些版本的更新,最大的颠覆还是传输的精度的提高。在格式各样的计算机网络中,有一个圣地那就是万维网 WWW。在这个网络中行走的乘客就是 HTTP 协议,带着文本,图像、视频等数据,往来于不同的站点。所以也可以把他们看成携带着长期货物的船只,来往于各个城市站点。
运输层是体系结构的调度者,管理着数据的存储的一些策略。

什么时候可以传?要传多少?要不要接收?什么时候结束?
运输层有两个调度者,两种不同的风格,分别为 TCP 和 UDP。
TCP 很严格,一个包都不能有失,完美主义的座,因为纪律严明且规定严厉的 TCP 工作强度并不高,每次发完一阵子都要确定一下是否顺序恰当,不正确的话再发个包。UDP 就非常不拘小节,丢包了乱序了都不管,所以在网络环境好的状况下,UDP 可以做到迅速而且正确率高。他们俩就像美女与野兽中的胖瘦管家。双方都有自己的优缺点,至于哪个状况下发光发热,扬长避短,得看详细的业务场景。比如 DNS 乘客选择不拘小节的 UDP 作为调度者,中途数据出差错就再解读一次。而 HTTP 乘客,因为可靠性要求高,数据不容有失,选择了 TCP。
TCP 调度者的工作内容主要三大块,分别为可靠存储、流量控制和拥塞导致。简单理解,可靠传输就是希望存储过程中有丢包以及出错包的现象,让发送端重传;流量控制就是建了个缓冲池,让接收方和发送方用合适的速度存储,不会因为传输太快造成数据损坏。比如我们有一个仓库大小就这么大,东西都还没喝完,又不停地往旁边存东西,那么直接结果是仓库爆了后里面送回来的货物必须再次送,还不如直接告诉发送端,仓库满了,等等吧。这就是后面会看到的 TCP 首部的窗口大小;拥塞导致就是在网络环境差的状况下,有好的模式增加发包节奏,缓解网络环境。比如在某个城市驾车,出行的人时常提高,那么等个时间再回来。
UDP 调度者因为不需要严格的构建连接,又不需要各种确认模式确保包不乱,所以整个协议比较轻量。如果想要确保数据的完整且接收的排序无误,那么得应用层协议自己来。
网络层的是体系结构的向导,负责找到要前往接收方的模式。
经过了传输层,包大小确认了,传输时间也决定了。然后,手里只有 IP 和 端口号,就像今天厦门,并且了解了目标地点是北京,可是该如何走呢?需不需要中转?中转的地方又在那里?

这时候要看 IP 协议族了。这个大家族都吃这碗饭,提供指路服务。
运输层的包,比如 TCP 或者 UDP,向导会填入目的信息。所以,在这个过程中它做的就是找到下一站,然后前往但是再寻求下一站直到终点。
网络层向导有会去问路,如何才能找到最短路径,或者能最快到达的模式呢?比如从日本到中国,是从太平洋走,还是先去欧洲再走呢?那条路能够更快抵达目的地。于是问路就有了两种不同的思路,有用 RIP 协议去问路,又以及是 OSPF 协议去问路。
但是到达数据到达数据链路层的包只认物理地址如何办?所以此处也有个 ARP 协议,用来找到 IP 对应地址的软件地址,方式而是用广播。像我们经常使用 Wireshark 抓包看见的,经常会有一些向导往整个局域网里问,“who has xxxxx? Tell xxxxx”。目标会给向导答复,到时候把硬件地址记录出来就能。
数据链路层里的协议就是要使用的交通工具了。
不同网络的差异性主要就表现在这一层。对于数据,并不需要我们路上经过了哪些,怎么走。但交通工具要知道。不同的网络计算机网络体系结构 pdf,交通状况是不一样,所以有不同的思路来走。
比如去往 ISP 使用 PPP 协议。

在普通局域网内部使用 CSMA/CD 协议。
数据链路层的协议,无论选取什么样的行走策略,无论是在天上飞的,地上跑的,海里游的,都会遭遇三个基本难题:封装成帧、透明传输和差错检查。解决了这三个问题,那么这个交通工具就可以上路了。
什么时候出发,去哪个地方,用哪些方法走都早已确认好了,转化为二进制信号后,由物理层真实地发送到目标地址去。那这条路物理层存储的带宽如何,就像我们的道路是四车道还是六辅路,是山路还是羊肠小路。传输的速度如何,就像这条路的路况如何,是坑坑洼洼的抑或一马平川。
物理层的特点决定的路况。不同地方的贫富差距不一样,或者环境的限制,修的路也不一样。有的用双绞线,有的用同轴电缆,再不错的就用光纤了。所以,在相似的时间里,在不同的物理层设备环境中,可能你还在厦门岛内堵车,我已经搭火车飞驰 200 公里到另一座城镇。
当我们要发送一个数据,经过这五层协议,为了完成每一层协议的用途,比如可靠存储、确定路由等,这些协议就会添加一些必要的首部来完成功能。这里我们使用 TCP 协议作为传输层协议,所以到达物理层前要发送出来的包在每层协议添加首部后会有这么的结构:

数据包格式.png
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-126708-1.html
说白了预调酒只有新鲜度
抢来
天下太平