V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uutoto
V2EX  ›  分享发现

从物理层开始, 模拟一个广域网, 来讨论啊~

  •  
  •   uutoto · 2016-11-07 18:34:35 +08:00 · 2200 次点击
    这是一个创建于 2735 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在成都某网络公司实习,今年做了些 CDN 和宽带接入网,对网络方面越来越有兴趣

    那么多的协议,很复杂啊,不过那可是这么多年的进化,还有历史遗留造成的

    看书学还不够刺激,所以我想啊,能不能自己模拟个广域网出来玩玩,

    剧情大概是这样的:

    1. 实现两个主机的通信; 两个主机同时改变线路电压,会遇到冲突,得想方法解决了;
    2. 实现多个主机的通信; 这时我可能会考虑模拟台交换机出来了;
    3. 实现多个网络间的通信; 路由问题来啦;
    4. 实现更多配套协议; 比如啊:DHCP,动态路由;
    5. 用 CDN 等技术优化网络;
    6. 搞个 ip 协议,对上互联网;(我能想到的最浪漫的事)

    可模拟个两个主机通信,最基础的是模拟这个网线,让我头疼啊,

    一开始,想到纯软件来搞,先基于 udp 写个"导线 class"出来,内含信号随机抖动,丢失一部分,导线接头等等,后来纸上理了理,真麻烦;

    现在想的是用树莓派,不过这方面我目前只了解 GPIO 能输入 /输出,想和宝宝们探讨下可行性:

    1. GPIO 有 Python 接口,写着爽啊,性能上,看国外网站测试结果,有几千赫兹了(C 能上 Mhz);
    2. 两台树莓派的 GPIO 互联,用杜邦线模拟网线相连.
    3. 模拟冲突域;GPIO 只有 1/0 两个状态啊,如果一个树莓派发 1,另一个树莓派同时发 0 呢?我希望它最好丢掉这个包,或者给我个随机的结果,这样好模拟下冲突域;或者,用模拟信号来发,更逼真啊,1 和 0 遇到了,信号抵消;说不定我还能试试用 8 种电压同时发信呢...
    4. 不管是用 GPIO,还是搞出个模拟信号模块,树莓派上得能模拟多个"网口",不然多口交换机就生不出来啦(至少 3 个口吧);
    5. 再弄个电磁铁,随机影响"网线(杜邦线)",让信号摇摆一下,检测下重传或者校正的协议;

    暂时想到这么多,目前我还是网络菜鸟,正在补充大量理论知识,同求书籍推荐啊,<计算机网络 自顶向下>和 CCNA 已经刷了,后面排着队刷 CCNP,<TCP/IP 卷一><卷二>

    等物理层方案可行,立刻开搞,我会分享出折腾日记的!

    欢迎拍砖!

    19 条回复    2016-11-08 23:39:32 +08:00
    xenme
        1
    xenme  
       2016-11-07 18:44:52 +08:00 via iPhone
    你这有点跑偏了
    我感觉你是要学做饭,结果现在开始研究怎么种麦子和水稻了
    uutoto
        2
    uutoto  
    OP
       2016-11-07 18:59:54 +08:00
    @xenme 没偏哈,目标就是从底层做起.
    chenxuhua
        3
    chenxuhua  
       2016-11-07 19:27:35 +08:00 via Android
    软件模拟硬件😳
    sennes
        4
    sennes  
       2016-11-07 21:05:01 +08:00
    对你来说太难了 看你的描述似乎 GPIO 的性质和基础的电路知识都不足以支撑你完成这些实验。
    JohnLou
        5
    JohnLou  
       2016-11-07 21:06:06 +08:00
    为什么要再造轮子啊你们,你有人家厉害吗。
    sennes
        6
    sennes  
       2016-11-07 21:11:17 +08:00
    就说一个吧: 就算用 FPGA 来模拟 PHY 芯片都是一件困难的事情了,你还想着用树莓派来完成。
    uutoto
        7
    uutoto  
    OP
       2016-11-07 22:37:29 +08:00 via iPad
    @JohnLou 轮子也分很多类啊,我造个拖拉机的轮子来学习。为什么不能重复造呢?
    uutoto
        8
    uutoto  
    OP
       2016-11-07 22:40:20 +08:00 via iPad
    @sennes 谢谢关注啊,关于 gpio 的理解偏差还请指正,我这网络性能不是很重要,先存在后完善。
    billlee
        9
    billlee  
       2016-11-07 22:55:26 +08:00
    你的数电知识基本为 0. 除了 OC 门 /OD 门,一根线在同一时间只能由一个门驱动,否则会烧电路。一个输出高电平, 另一个输出低电平,接到一根线上就和把电源正负极直接接起来没什么区别。
    uutoto
        10
    uutoto  
    OP
       2016-11-07 23:14:44 +08:00 via iPad
    @billlee 谢谢关注啊。数电完全为 0 啊。用 Gpio 能有啥法子么,或者其他方法。请指点一二
    MartinWu
        11
    MartinWu  
       2016-11-07 23:30:45 +08:00 via iPhone   ❤️ 1
    你有兴趣就有动力,不用管别人怎么说。找志同道合的人即可。
    billlee
        12
    billlee  
       2016-11-07 23:45:13 +08:00   ❤️ 1
    @uutoto 找本数电的书来看啊。就算我现在告诉你 GPIO 怎么做总线,你后面还会遇到各种各样的问题,比如发送和接收双方怎么同步。
    另外你知不知道现在的双绞线以太网都是星型架构,总线型的只用在同轴电缆上。以太网双绞线是 full duplex 的,两台主机通信根本不会有冲突问题。
    uutoto
        13
    uutoto  
    OP
       2016-11-08 00:11:11 +08:00 via iPad
    @billlee 书肯定看的,发出来找专业的剧透下可行性,多点套路,少点弯路嘛
    uutoto
        14
    uutoto  
    OP
       2016-11-08 00:11:39 +08:00 via iPad
    @MartinWu 谢谢鼓励啊😄
    Siril
        15
    Siril  
       2016-11-08 10:27:12 +08:00
    歪楼: 似乎 wifi 天生是总线型的。

    @billlee
    Siril
        16
    Siril  
       2016-11-08 10:30:26 +08:00   ❤️ 1
    楼主不如搞几套便宜的 SDR 设备开发新的通讯协议吧

    --------

    不是虚拟个网卡出来跑 tcp/ip ,
    记得要从物理层到应用层完全定制,别用 tcp/ip 哦。
    crysislinux
        17
    crysislinux  
       2016-11-08 20:11:15 +08:00   ❤️ 1
    在通信领域是有类似的东西的,印象中有套软件模拟了 4G 通信。可以用家用 PC 跑起来。
    uutoto
        18
    uutoto  
    OP
       2016-11-08 23:35:32 +08:00
    @Siril 太感谢啦! 真是提供了很不错的思路! 这几天下班先考察下
    uutoto
        19
    uutoto  
    OP
       2016-11-08 23:39:32 +08:00
    @crysislinux 您说的好像是"4G LTE UE simulator", 翻了些文章, 现在有点 ... @_@, 哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   876 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.