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

有没有什么练手项目可以充分利用到计算机网络相关知识?

  •  2
     
  •   zhao1014 · 2020-11-08 11:44:34 +08:00 · 8003 次点击
    这是一个创建于 1474 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实现一个简易 Tomcat 服务器可以吗?

    第 1 条附言  ·  2020-11-09 11:03:23 +08:00
    敲重点,是“练手”!目的在于帮助理解
    55 条回复    2023-03-25 11:50:49 +08:00
    araaaa
        1
    araaaa  
       2020-11-08 11:58:04 +08:00   ❤️ 3
    写个代理
    oahebky
        2
    oahebky  
       2020-11-08 12:13:04 +08:00 via Android   ❤️ 1
    叫你一声 Nginx, 你敢不敢答应
    DoodleSit
        3
    DoodleSit  
       2020-11-08 12:17:31 +08:00   ❤️ 1
    k8s + docker 配置组网
    oahebky
        4
    oahebky  
       2020-11-08 12:23:12 +08:00 via Android   ❤️ 1
    @DoodleSit

    恕我直言,你说的这个是网管的网络知识,和考一个思科证书差不多。

    当然我只是指出来,说不定别人需要的正是这个。
    zonde306
        5
    zonde306  
       2020-11-08 12:49:45 +08:00   ❤️ 1
    UDP 实现可靠数据传输协议( TCP 、QUIC )、UDP 实现 SSL ( QUIC )
    实现语音流 /视频流协议
    实现 DNS 协议
    Cbdy
        6
    Cbdy  
       2020-11-08 13:02:18 +08:00 via Android
    写个简单的浏览器
    ericgui
        7
    ericgui  
       2020-11-08 13:16:33 +08:00
    @Cbdy 不错,😝
    nightwitch
        8
    nightwitch  
       2020-11-08 13:17:49 +08:00
    https://github.com/skywind3000/kcp
    看懂这个项目在做啥
    lifetimeporn
        9
    lifetimeporn  
       2020-11-08 13:21:26 +08:00
    https://github.com/zhxie/pcap2socks
    看懂这个项目在做啥
    yolee599
        10
    yolee599  
       2020-11-08 13:39:00 +08:00 via Android
    写一个软路由
    jizhihaoSAMA
        11
    jizhihaoSAMA  
       2020-11-08 13:50:11 +08:00
    8 、9 楼的太硬核了吧
    zomco
        12
    zomco  
       2020-11-08 13:57:50 +08:00   ❤️ 2
    做一个软路由效果会好些,从物理层到应用层都有涉及
    zhangfeiwudi
        13
    zhangfeiwudi  
       2020-11-08 14:05:50 +08:00
    我也想问,go 这一块有合适的开源项目参考吗
    yingo
        14
    yingo  
       2020-11-08 14:18:42 +08:00
    这的确是一个好问题.
    unixeno
        15
    unixeno  
       2020-11-08 14:28:15 +08:00 via Android
    写一个 VPN
    laminux29
        16
    laminux29  
       2020-11-08 15:10:27 +08:00
    实现一个简易 Tomcat 服务器,已经不是练手了。你要能实现出来,bat 随便你进了。
    Tianao
        17
    Tianao  
       2020-11-08 16:08:45 +08:00
    @oahebky #9 恕我直言,99% 的企业 /公司网管和 99% 的 CCNP 都不会这个(现学现卖不算,这样的话高中生都会)。
    Tianao
        18
    Tianao  
       2020-11-08 16:09:55 +08:00
    @Tianao #17 不好意思楼上打错了,#17 回复的是 #4.
    zhao1014
        19
    zhao1014  
    OP
       2020-11-08 16:44:59 +08:00
    @yolee599
    @zomco
    有开源项目可供参考吗?
    sxl2000303
        20
    sxl2000303  
       2020-11-08 16:52:50 +08:00
    写一个 shadowsocks
    raaaaaar
        21
    raaaaaar  
       2020-11-08 17:00:50 +08:00 via Android
    一千多点击,这么点回复,这让我想起知乎上一个问题,为什么国外的论坛,如 quora 人们不喜欢评论,但是知乎喜欢评论
    murmur
        22
    murmur  
       2020-11-08 17:05:02 +08:00   ❤️ 1
    自己写一个 qq,不要用 tcp 直接 raw socket 自己开整
    Exin
        23
    Exin  
       2020-11-08 17:36:55 +08:00 via iPhone
    给 openwrt 做点贡献?
    janus77
        24
    janus77  
       2020-11-08 17:48:54 +08:00   ❤️ 2
    内网的实时聊天软件就很不错,包括服务端和客户端,如果想学客户端知识顺便可以自己写客户端,不想的话就用命令行实现吧
    grofis
        25
    grofis  
       2020-11-08 18:26:19 +08:00 via iPhone
    如无必要 勿增实体
    如果有了 Tomcat 为什么还要实现 Tomcat
    wudaye
        26
    wudaye  
       2020-11-08 18:36:36 +08:00 via Android
    裸写个 http 服务器?
    ccsexyz
        27
    ccsexyz  
       2020-11-08 18:41:23 +08:00   ❤️ 1
    代理太简单了,整个复杂点的吧,写个 http server 吧。 比如 https://github.com/zyearn/zaver
    lqw3030
        28
    lqw3030  
       2020-11-08 18:56:06 +08:00 via iPhone   ❤️ 1
    写个内网穿透,很有趣的
    cdlnls
        29
    cdlnls  
       2020-11-08 18:57:28 +08:00 via Android   ❤️ 1
    计算机网络我觉得核心就在路由交换和协议,只是一个应用单独看上去确实少了很多。

    建议整个模拟器实际上手组网,或者上面说的 k8s 的网络配置。
    levelworm
        30
    levelworm  
       2020-11-08 20:04:00 +08:00 via Android
    写个 MUD 算么。。。用 socket
    SpiderXiantang
        31
    SpiderXiantang  
       2020-11-08 20:17:16 +08:00   ❤️ 1
    我感觉自己实现一套 tcp 还行,实现 tomcat 的话其实是在练习 socket 编程,并且里面的容器啥的实现其实对网络水平提升没啥用
    nutting
        32
    nutting  
       2020-11-08 20:29:07 +08:00   ❤️ 1
    去看 gost 这个软件的源码
    XiLingHost
        33
    XiLingHost  
       2020-11-08 22:28:30 +08:00
    dn42
    simonlu9
        34
    simonlu9  
       2020-11-08 23:10:57 +08:00   ❤️ 2
    unix 网络编程 里面有一个是从 0 到 1 的 sokcet 服务器改造的,里面牵涉很多知识点,对着代码敲应该吸收很多,看源码的话你压根不知道为什么参数这么设,比如为什么聊天室都会有心跳包这玩意,本身 tcp 就有 keepalive,这种问题你不遇到过根本不知道为什么要这样做
    xchaoinfo
        35
    xchaoinfo  
       2020-11-08 23:25:32 +08:00 via Android
    mitmproxy 是不是有帮助,最近在啃这个的源码
    msg7086
        36
    msg7086  
       2020-11-09 07:12:11 +08:00
    @laminux29 简易的 tomcat 很难吗?
    分解一下的话,多线程,套接字,然后拿包出来拆一下字段塞进字典里喂给后端的程序不就结了。
    都说是简易的 tomcat 了,当然不需要做到能进 bat 的程度。
    chaleaoch
        37
    chaleaoch  
       2020-11-09 09:17:12 +08:00
    不知道计算机网络知识具体指什么. 我觉得搞一个类似 v2ray 的东西应该挺难的...
    zhao1014
        38
    zhao1014  
    OP
       2020-11-09 09:39:50 +08:00
    @chaleaoch 运用 TCP/HTTP 协议相关知识
    zomco
        39
    zomco  
       2020-11-09 09:40:03 +08:00   ❤️ 2
    @zhao1014 硬件树莓派,软件 OpenWrt,容易上手,社区生态都可以。建议有目的去做,比如做个扶墙的家庭网关
    echoe
        40
    echoe  
       2020-11-09 10:33:44 +08:00
    Mark 我也想学一下
    zarte
        41
    zarte  
       2020-11-09 10:39:00 +08:00
    试着入侵下 v 站
    8bit
        42
    8bit  
       2020-11-09 12:13:02 +08:00
    弄个简单的 ftp 服务器或者客户端
    adminii
        43
    adminii  
       2020-11-09 12:14:25 +08:00 via iPhone   ❤️ 1
    网络协议:ARP 协议攻击,抓包工具,WIFI 密码破解( AES 最早的那种,算出来的),TCP,UDP,ICMP 发包工具,802.1X 认证工具
    应用协议:使用 UDP,ICMP 实现 TCP (丢包重发,滑动窗口算法等)
    chaleaoch
        44
    chaleaoch  
       2020-11-09 12:24:28 +08:00   ❤️ 1
    @zhao1014 撸一个 nginx tomcat guncorn uwsgi 之类的东西. 如果觉得难度大 /不显示,就分析源码,如果还觉得难度大, 网上有 nginx 源码剖析注释版.
    xiaolong620
        45
    xiaolong620  
       2020-11-09 13:39:28 +08:00
    跑 java 来问不合适吧,我也想学,真香!
    PDX
        46
    PDX  
       2020-11-09 13:40:13 +08:00 via iPhone
    玩儿 openwrt
    Jirajine
        47
    Jirajine  
       2020-11-09 13:47:44 +08:00 via Android
    手写一个加密代理。
    zhao1014
        48
    zhao1014  
    OP
       2020-11-09 14:01:07 +08:00 via Android
    @xiaolong620 问的就是 java 实现 XD
    newmlp
        49
    newmlp  
       2020-11-09 14:02:55 +08:00
    写一个代理或猥皮恩
    irytu
        50
    irytu  
       2020-11-10 04:49:17 +08:00
    http://csapp.cs.cmu.edu/3e/labs.html 最后一个 lab 拿走
    fasionchan
        51
    fasionchan  
       2020-11-10 09:32:00 +08:00
    写个 ping 命令,写个 traceroute 命令,写个 VPN,写个 Socks5 代理,写个 HTTP 服务器,写个 FTP 服务器,方法简直不要太多~~~观察常用网络工具、网络服务的行为,然后结合网络协议思考它是怎么实现的,最后将它山寨一遍就可以彻底掌握与之相关的网络知识~

    我当年在腾讯实习时,有一个作业性质的项目就是开发一个高并发 FTP 服务器,很考察网络功底和动手能力,所以学习还是要多实践。

    我最近计划写一个网络协议入门教程:

    https://www.yuque.com/coding-fan/network

    里面的编程实践环节,就是手把手演示如何从零实现一个网络工具,例如:重新发明 ping 命令或许可以参考下。只不过,刚刚起步,更新速度不快,大概是一周一两篇。等不及的话,热烈欢迎一起来写,哈哈~~~
    catsoul
        52
    catsoul  
       2020-11-10 09:55:23 +08:00
    emmmm,感觉最简单的就是搞个 arp 欺骗的工具
    beitayongguo
        53
    beitayongguo  
       2020-12-08 17:06:17 +08:00
    好问题
    xsgaaa
        54
    xsgaaa  
       2020-12-28 21:28:53 +08:00
    网络聊天室程序
    jvv
        55
    jvv  
       2023-03-25 11:50:49 +08:00 via iPhone
    @fasionchan 大佬不更了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1872 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:22 · PVG 00:22 · LAX 08:22 · JFK 11:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.