- A - B - C - E
- \ /
- - D -
- A向E发送消息,就可以如许:
- A向B和D发消息:给我发到E去
- B和D接到之后发明来源是A,所以就只给C发消息:给我发到E去
- C接到消息之后发明来源是B和D,所以就给E发消息:给我发到E去
- E接到消息之后发明接收方是本身,所以就把消息吞了
- $ telnet www.baidu.com 80
- Trying 183.232.231.173...
- Connected to www.baidu.com.
- Escape character is '^]'.
- GET / HTTP/1.1
- HTTP/1.1 302 Moved Temporarily
- Date: Sat, 12 Aug 2017 10:45:14 GMT
- Content-Type: text/html
- Content-Length: 215
- Connection: Keep-Alive
- Location: http://www.baidu.com/search/error.html
- Server: BWS/1.1
- X-UA-Compatible: IE=Edge,chrome=1
- BDPAGETYPE: 3
- Set-Cookie: BDSVRTM=0; path=/
- <html>
- <head><title>302 Found</title></head>
- <body bgcolor="white">
- <center><h1>302 Found</h1></center>
- <hr><center>pr-nginx_1-0-350_BRANCH Branch
- Time : Tue Aug 8 20:41:04 CST 2017</center>
- </body>
- </html>
- ^]
- telnet>
- Connection closed.
还有一个细节问题,不知道大年夜家发清楚明了么,刚才我们说过,MAC地址是相邻两个节点 通信用的,琅绫擎有来源地址和目标地址,如不雅我们向膳绫擎如许传输的话,每个节点都 只是把琅绫擎的信息传以前,然则来源地址却改要改写成本身的MAC地址,要不然的话, B就不知道信息是A发来的┞氛样C发来的呀,对纰谬?那问题就来了,E要怎么知道信息 其实是大年夜A发过来的呢?
没办法了,我们只好在传输的信息里把真正的来源地址写进去,所以我们又定了一个 协定,我们管它叫做ip:
- MAC携带的信息的开端,是来源的ip地址,32个bit表示
- 然后是目标的ip地址,32个bit表示
- 然后是我要带的信息
那和膳绫擎的数据链路层的协定合一下起来,假设来源地址是 192.168.1.1 ,目标地址是 192.168.1.2 ,发送的信息照样 "hello",全部包就像如许:
- 111(开端)
- 00000000 11001000(长度)
- 01110010 01101111 01110101 01110100 01100101 01110010(来源MAC地址)
- 01110000 01101000 01101111 01101110 01100101 01110010(目标MAC地址)
- 11000000 10101000 00000001 00000001(来源ip地址)
- 11000000 10101000 00000001 00000010(目标ip地址)
- 01101000 01100101 01101100 01101100 01101111(字符串"hello")
- 000(停止)
可是照样有问题,如不雅我想肯定A发的信息必定送达了E怎么办?怎么供给靠得住性?IP这一层 并不供给靠得住性,只是说尽量送达。看来竽暌剐须要再来一层!
如许是不是就很科学?那必须的。哎呀,终于可以跨节点发送消息了,小高兴~
传输层
我们知道,一台计算机上可能有很多个法度榜样在运行,那怎么区分不合的法度榜样呢?所以我们 给法度榜样加上了id,叫做pid。那计算机收集通信的时刻怎么区分呢?又假设n个过程想和别的 一台机械上的某一个过程通信呢?怎么办?
推荐阅读
【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索为什么打开一个 H5 页面会有一长段白屏时光?因为它做了很多工作,大年夜概是: 初始化 webview -> 请求页面 -> 下载数>>>详细阅读
本文标题:从零构建TCP/IP协议
地址:http://www.17bianji.com/lsqh/36746.html
1/2 1