网络 协议与分层结构 的学习心得
(以下纯属虚构)
一、协议栈的划分 与 人类处理沟通事件过程的 对比
前言:
讲道理的人都知道"工具是人类肢体的延伸",那么"计算机",这种二十一世纪人类最伟大的发明也是"工具",对比其他冷冰冰的"工具",他具有
"独特的思维能力!"--简单的逻辑处理能力。因此,正如大脑可以控制躯体一样,他也可以控制其他"工具"。
1.层次结构的划分规律
书上说:"层次结构具有:
(1)人们可以很容易的讨论和学习协议的规范细节。
(2)层间的标准接口方便了工程模块化。
(3)创建了一个更好的互连环境。
(4)降低了复杂度,使程序更容易修改,产品开发的速度更快。
(5)每层利用紧邻的下层服务,更容易记住各层的功能。!"
说的挺好,字都认识,但是很多人学完网络都不知道层次结构的意义!(我学了2遍 还稀里糊涂),就像我认识汉字几千个,也写不出像样的的诗词一般,没有掌握规律,研究内涵,粗浅就是粗浅,读再多也没用!
想想我们要拿一样东西时的操作:
(1)脑子下达指令
(2)臂膀抬起
(3)手臂延伸
(4)用手抓住
人类正因为肢体功能高度具体化,创造力才能如此惊人。那么网络分层也正是为了功能更完备,实现更简洁。
以网络实际中的4层结构为例(只考虑分层作用,不考虑具体细节):
以此看来,分层结构的原理就如我们身体做操作一般。但是,人 不简单,计算机网络也不简单,因为他们各自的功能有很多。在这里不同功能又 高度具体化了
(1)对于 手 有可能面对的东西不同,我们的实际操作不同(苹果用手抓,带刺的团用手抓吗?),同样的,网络接口层要面对 各种各样的局域网,他的具体操作也不同(取决于,网卡类型与驱动类型)
(2)对于 臂膀 他不仅可以控制 手臂的整体方向,他还是 发力 的关键点,能拿多重东西关键靠它。同样的,传输层也有很多功能,是以 "协议" 来区分的。
对于网际层,传输层,应用层,他们不同功能的实现,使用"协议"来控制,
毕竟计算机的"逻辑"体现在判断(false or true),因此同层次多功能 必需要以标示来划分(体现在每层报头的op字段)。
通过以上 我们可以粗滤的得出:
分层让 每一层作用更具体,分协议让功能更完善。(前辈们的天才与伟大)
二、三次握手与四次挥手的设计"猜想"
TCP/IP协议簇中TCP协议报头设计的尤其复杂,但是当你了解每部分的作用后,震惊的发现这简直是模拟了人类的沟通细节,当然他也是通过庞大的条件判断来实现的。
下面是TCP段的格式
16位端口号(TCP与UDP报头中):
假设 你对你妈说 :"我饿了!" 你妈立即得出:"1.你需要吃饭。2.隐含的知道你用嘴吃",因此 ,做出来的饭菜是可口 可下咽 的,而不是生的 饭菜给你。
这种约定是人们共识的,而计算机做不到这点。
同样的,计算机中有各种需要网络通信的软件,为了把特定软件的需求,可区分的传送给对方的具体软件,才引入了端口这一概念。端口号就表示某一确定进程;
1.三次握手与四次挥手与人沟通的类比
先来看看我们是怎么建立沟通的:
(1)小明向小芳发出了约会请求
(2)小芳收到并回复同意
(3)小明得到小芳的同意 后 说 "走",小芳就知道小明知道他同意了
至此,他们就建立了一次沟通;同样的在网络上两台主机(已接入Internet)
使用TCP协议建立连接也需要(发起连接--》对端回复--》对回复的回复)
这三步。但是具体实现却不想人类沟通那么简单,毕竟计算机只会做判断
以下是三次握手的模拟:
SNY=1 :表示这是一个连接请求 或者连接接受 的报文,他不同与人类的沟通,因为人可以根据会话的情景判断会话的内容,而计算机却要明确表示是或不是连接请求,因为在连接请求中的实际的数据内容字段是不做存储的(也就是无效的 含有实际内容也得在建立连接后重新发)。
J 与 k(位于32位序号):这个内容相当于谈话的具体内容,方便对方做出对应的回答,例如 你对别人说:"我们。。。。。。吧!",对方要怎么回答,虽然知道回答的结果依旧是"行或不行",但根本不知道内容,因此无法做出明确的回答。这个字段设计的意义也在于此。
ACK=1:当ACK=1时,32位确认序列才有效。好比 你与别人谈话,并没有询问意见,而对方却一直说:"是的!",这样的回复是没有实际意义的。ACK的效用相同,但是 我们知道"传输的可靠性是建立在合理的请求与应答的基础上!"因此在网络的传输过程中多采用 问答形式,所以ACK 大部分情况为1.
J+1与 K+1 (位于32位确认序号):对接受的数据做出确定回复,表明J 之前的信息收到。同时J+1也表示他需要的这一条数据的序号。