作家
登录

从零构建TCP/IP协议

作者: 来源: 2017-08-16 14:03:39 阅读 我要评论

不如我们再分派一个id吧,他们合营持有这个id就好了。我们把这个id叫做端口(port)。 如许子的话,经由过程ip地址我们可以肯定计算机,经由过程端口我们可以肯定一个或多个过程。

持续,我们要在ip带的信息里规定好我们如许发:

  • 起首是来源地址的端标语,8个bit来表示,因为ip琅绫擎已经待了ip地址,我这里就不反复带了
  • 然后是目标地址的端标语,8个bit来表示

如许,简单的PCT协定就做好了。

还有一个问题,就是我们要包管发出去的信息是有序的,因为可能有的信息走光纤, 有的信息走Wi-Fi,他们传输速度不一样嘛。

然则我们说好了要把这个协定打造成一个靠得住的协定,可不克不及食言。我想想,怎么让他 靠得住呢,无非就是我发一个信息,你告诉我你收到了,如果你不告诉我,我就发到你告诉我 为止。差不多就是这么个意思。然则呢,又不想构造多个不合的协定,你知道,编程的时刻 如果写一堆的if-else树那可就很蛋疼了。再改改协定:

  • 起首是来源地址的端标语,8个bit来表示,因为ip琅绫擎已经待了ip地址,我这里就不反复带了
  • 然后是目标地址的端标语,8个bit来表示
  • 然后是这个包的序号,8个bit来表示
  • 然后是想确认的包的序号,8个bit来表示

咦,点睛之笔耶,这个确认的包的序号,因为我们是双向通信,我发他信息的时刻还可以趁便 确认我收到了他的包啊,真是一箭双雕。

TCP是一个面向流的协定,什么叫流?车流,水流,车流比较形象。车和车之间是分开的, 然则速度一快起来,就可以把它们算作连起来的。TCP也是如许,单个包之间是分开的, 然则却可以看作是连起来,为什么呢?因为每个包里都带了ip地址和端标语,ip地址和端口 号一样的,就可以看作是连起来的 :)

所以我们可以想象一下,我们的ip地址是 192.168.1.1 , 端标语是 1, 目标的ip地址是 192.168.1.2 , 端标语是 2。那我们发送如许的包:

  1. 111(开端) 
  2. 00000000 11101000(长度) 
  3. 01110010 01101111 01110101 01110100 01100101 01110010(来源MAC地址) 
  4. 01110000 01101000 01101111 01101110 01100101 01110010(目标MAC地址) 
  5. 11000000 10101000 00000001 00000001(来源ip地址) 
  6. 11000000 10101000 00000001 00000010(目标ip地址) 
  7. 00000001(来源的端标语) 
  8. 00000010(目标的端标语) 
  9. 00000001(发送的包的序号是1) 
  10. 00000000(已经确认的包的序号是0,表示啥都没有嘛) 
  11. 01101000 01100101 01101100 01101100 01101111(字符串"hello"
  12. 000(停止) 

duang,就如许,我们构建起了属于本身的靠得住的基于流的双工的协定 :)

  1. +------------+-----------------------+ 
  2. | 层         | 例如                  | 
  3. +------------+-----------------------+ 
  4. | 应用层     | HTTP协定              | 
  5. +------------+-----------------------+ 
  6. | 传输层     | TCP                   | 
  7. +------------+-----------------------+ 
  8. | 收集互连层 | IP                    | 
  9. +------------+-----------------------+ 
  10. | 收集接口层 | 如网线,双绞线,Wi-Fi | 
  11. +------------+-----------------------+ 

趁便我们还完成了膳绫擎的TODO,经由过程序号我们就可以断定这个包是不是反复了,哈哈哈, 一箭n雕~

TCP三次握手四次挥手滑动窗口拥塞控制等就不匠了棘照样去看《TCP/IP协定详解卷一》吧 :)

应用层

这下我们终于可以宁神大年夜胆的发送消息了,PCT协定是个负义务的协定,如不雅能送到,他就必定 会送到,并且是有序的,如果收集坏掉落了,实袈溱连不上,他就会告诉我收集连不上。

如许子来编程便利多了呀。

如今我想知道浏览器和办事器是怎么通信的。我们来看看百度。

输入 GET / HTTP/1.1 之后回车,百度就给我返回了下面的一长串,然后浏览器再根据 返回的内容进行衬着,这又是一个大年夜话题了,不讲了不匠了棘收工 :)


  推荐阅读

  移动H5首屏秒开优化方案探讨

【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索为什么打开一个 H5 页面会有一长段白屏时光?因为它做了很多工作,大年夜概是: 初始化 webview -> 请求页面 -> 下载数>>>详细阅读


本文标题:从零构建TCP/IP协议

地址:http://www.17bianji.com/lsqh/36746.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)