从物理层开始, 模拟一个广域网, 来讨论啊~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uutoto

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

  •  
  •   uutoto 2016 年 11 月 7 日 2875 次点击
    这是一个创建于 3455 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    @billlee
    Siril
        16
    Siril  
       2016 年 11 月 8 日   1
    楼主不如搞几套便宜的 SDR 设备开发新的通讯协议吧

    --------

    不是虚拟个网卡出来跑 tcp/ip ,
    记得要从物理层到应用层完全定制,别用 tcp/ip 哦。
    crysislinux
        17
    crysislinux  
       2016 年 11 月 8 日   1
    在通信领域是有类似的东西的,印象中有套软件模拟了 4G 通信。可以用家用 PC 跑起来。
    uutoto
        18
    uutoto  
    OP
       2016 年 11 月 8 日
    @Siril 太感谢啦! 真是提供了很不错的思路! 这几天下班先考察下
    uutoto
        19
    uutoto  
    OP
       2016 年 11 月 8 日
    @crysislinux 您说的好像是"4G LTE UE simulator", 翻了些文章, 现在有点 ... @_@, 哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3024 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 69ms UTC 07:18 PVG 15:18 LAX 00:18 JFK 03:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86