V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
magicZ
V2EX  ›  奇思妙想

如何自己实现简单实现 tcp 协议,需要那些前置知识呢?

  •  1
     
  •   magicZ · 2023-08-09 21:47:49 +08:00 · 2385 次点击
    这是一个创建于 477 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做了一个 websocket 相关的项目,发现自己的网络编程水平比较差,目前想要重新学习一下, 最后希望用 java 实现一下 tcp 协议,希望大家能给一点指导建议。

    19 条回复    2023-08-11 16:47:16 +08:00
    kljsandjb
        1
    kljsandjb  
       2023-08-09 21:53:07 +08:00 via Android   ❤️ 1
    参考参考 lwIP
    pagxir
        2
    pagxir  
       2023-08-09 21:53:38 +08:00
    Web socket 不需要实现 tcp 协议吧。难道你 Java 是跑在裸板上,连个操作系统没有?
    aminobody
        3
    aminobody  
       2023-08-09 22:23:34 +08:00 via Android
    cs144
    opengps
        4
    opengps  
       2023-08-09 23:29:39 +08:00 via Android
    tcp 协议你只需要知道怎么收发,怎么异步收发。处理好稳定性,自动断线重建。再就是知道怎么定义自己的数据通信协议解析规则,也可以说通信规约,这就足够了
    Pony69
        5
    Pony69  
       2023-08-09 23:37:56 +08:00 via Android
    Java 的话,要不尝试一下 netty 。
    Znemo
        6
    Znemo  
       2023-08-10 01:04:47 +08:00
    普遍意义上说的 TCP 协议是操作系统实现的。
    vsyf
        7
    vsyf  
       2023-08-10 03:43:18 +08:00 via Android
    @pagxir 有这样的 JVM 吗?没见过诶。
    这个节点选得不错。
    vsyf
        8
    vsyf  
       2023-08-10 03:46:37 +08:00 via Android
    @vsyf 还真有,JX & JavaOS ,孤陋寡闻了。
    Rehtt
        9
    Rehtt  
       2023-08-10 08:29:28 +08:00
    tcp 是操作系统内核实现的,java 只是调用系统提供的 socket 接口
    selca
        10
    selca  
       2023-08-10 08:39:08 +08:00 via Android
    要不要试试用 kotlin+netty 实现 trojan 代理协议,跟 Java 差不多。
    https://github.com/selcarpa/surfer
    这是仓库地址,当前完整的介绍文档正在筹划中,里面也有很多坑没填,比如 kcp ,比如 UDP 代理。
    Nazz
        11
    Nazz  
       2023-08-10 08:53:12 +08:00 via Android
    实现个可靠 UDP 得了
    ybz
        12
    ybz  
       2023-08-10 09:34:12 +08:00
    好家伙,手撸 tcp 协议,很复杂的兄弟,可靠传输、流量控制、拥塞控制、连接建立。。。。光一个可靠传输就让人头皮发麻。
    wanguorui123
        13
    wanguorui123  
       2023-08-10 10:37:57 +08:00
    quic
    iOCZ
        14
    iOCZ  
       2023-08-10 11:44:21 +08:00
    会用 socket 就行了,想自己实现 TCPIP 协议栈的话。。。。想屁吃
    mmdsun
        15
    mmdsun  
       2023-08-10 13:23:59 +08:00 via iPhone
    tcp ip 详解卷 2 ,就是讲实现的照着撸一遍。再试着用 Java 写吧
    Saturn72
        16
    Saturn72  
       2023-08-11 09:09:45 +08:00
    可以看下中国大学慕课上哈工大的计网课程,讲的还是很全面的,当年上大学没认真学计网,上半年在 MOOC 上补的课,讲的真的很好
    smirkcat
        17
    smirkcat  
       2023-08-11 11:51:43 +08:00
    java 就别了 别给自己找没用事做。。。
    xmt328
        18
    xmt328  
       2023-08-11 13:58:35 +08:00
    从问题来看,我觉得 OP 先要了解下 websocket 和 Tcp 的关系
    xsen
        19
    xsen  
       2023-08-11 16:47:16 +08:00
    1. 实现 tcp server ,可支持多客户端连接及一定并发量
    2. 实现 tcp client ,可实现多客户端(如数百、数千),支持重传、重连
    3. 实现 request/reply 、主动推送消息模型
    4. 设计 binary protocol 并实现( magic 、header-cmd/subcmd 、crc 、seqno 等)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:21 · PVG 00:21 · LAX 08:21 · JFK 11:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.