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