第266章 数字世界的灵魂——TCP/I(1/2)
“什么是通讯协议?”
李卫国没有直接开始写代码,而是先提出了一个问题。
孙教授和钱院士对视一眼,由在软件领域更权威的孙教授来回答。
“协议,就是一种约定,一种规则。”
“比如,我们之前在局域网内传输文件,会约定好,发送方先发一个‘请求’信号,接收方回复一个‘准备就绪’信号,然后发送方再开始传输数据。”
“这就是一种简单的协议。”
“没错。”
李卫公点头,对孙教授的理解表示肯定。
“但这种简单的‘你问我答’式协议,只能用在‘局域网’这种,线路质量极高、几乎不会出错的‘无菌环境’里。”
“而我们现在要面对的,是长途电话线这种,充满了噪音、干扰、甚至会随时中断的‘垃圾场’。”
“在这种环境里,‘你问我答’就没用了。”
李卫国打了个比方。
“这就好比,你隔着一条嘈杂的马路,对另一个人喊话。”
“你喊一句‘你好吗’,他可能只听到了一个‘你’字,或者听成了‘泥嚎吗’。”
“甚至,一辆卡车开过,他什么都没听到。”
“那怎么办?”
“很简单。”
李卫国自问自答。
“首先,我们不能再按‘句子’来喊话了,太长了,容易出错。”
“我们得把一句话,拆成一个个的‘包裹’。”
他在纸上画了一个个的小方块。
“比如,‘你好吗’,就拆成‘你’、‘好’、‘吗’三个包裹。”
“然后,给每个包裹,都编上号。1号包裹是‘你’,2号包裹是‘好’,3号包裹是‘吗’。”
“这样,对方就算收到的顺序是乱的,比如先收到了3号,再收到了1号,他也能根据编号,自己重新排好序。”
钱院士听到这里,眼睛一亮。
“数据包!我明白了,这是数据包拆分和排序!”
“对,但这只是第一步。”
李卫国继续说道。
“光有编号还不够,如果中间有个包裹,因为噪音太大,‘损坏’了,或者干脆‘丢失’了怎么办?”
“比如,2号包裹‘好’,对方收到的,变成了‘孬’,或者干脆没收到。”
“所以,我们要在每个包裹的‘封皮’上,再加一个东西。”
“叫做‘校验码’。”
“这个‘校验码’,是通过一个特殊的算法,根据包裹里的‘内容’计算出来的。比如,‘你’这个字的校验码是A,‘好’这个字的校验码是B。”
“当接收方收到1号包裹时,他自己也用同样的算法,计算一下包裹里的‘你’字,如果算出来的校验码也是A,那就说明这个包裹是完好无损的。”
“如果他收到2号包裹,里面的内容是‘孬’,他一算,校验码不对,就知道这个包裹在路上‘摔坏’了。”
“或者,他收到了1号和3号,就是没收到2号,那他也知道,2号包裹‘寄丢了’。”
“那寄丢了或者摔坏了,怎么办?”
孙教授追问道。
“问得好。”
李卫国笑了。
“这就需要我们的第三个关键机制,也是最重要的机制。”
“‘确认与重传’(Aowledgentaransission)。”
“规则很简单:接收方每成功收到一个完好的包裹,就必须给发送方,回一个‘确认’信息。比如,‘1号我收到了,完好无损’。”
本章未完,点击下一页继续阅读。