{"id":13440426,"url":"https://github.com/brewlin/net-protocol","last_synced_at":"2025-03-20T09:33:08.634Z","repository":{"id":50472580,"uuid":"202079905","full_name":"brewlin/net-protocol","owner":"brewlin","description":"golang模拟内核协议栈 实现链路层、网络层、传输层、应用层 用户态协议栈 ,基于虚拟网卡TUN/TAP","archived":false,"fork":false,"pushed_at":"2022-10-13T15:58:57.000Z","size":3399,"stargazers_count":195,"open_issues_count":0,"forks_count":45,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-28T02:20:58.371Z","etag":null,"topics":["arp","ethernet-protocol","golang","http","http-protocol","icmp","ipv4","ipv6","protocol","tap","tcp","tun","udp","websocket","websocket-protocol"],"latest_commit_sha":null,"homepage":"https://wiki.brewlin.com/wiki/github/net-protocol/index/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brewlin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-13T06:33:28.000Z","updated_at":"2024-10-26T03:27:26.000Z","dependencies_parsed_at":"2023-01-20T00:19:53.591Z","dependency_job_id":null,"html_url":"https://github.com/brewlin/net-protocol","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brewlin%2Fnet-protocol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brewlin%2Fnet-protocol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brewlin%2Fnet-protocol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brewlin%2Fnet-protocol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brewlin","download_url":"https://codeload.github.com/brewlin/net-protocol/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244586038,"owners_count":20476864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arp","ethernet-protocol","golang","http","http-protocol","icmp","ipv4","ipv6","protocol","tap","tcp","tun","udp","websocket","websocket-protocol"],"created_at":"2024-07-31T03:01:22.673Z","updated_at":"2025-03-20T09:33:07.688Z","avatar_url":"https://github.com/brewlin.png","language":"Go","readme":"# net-protocol\r\n\u003cp\u003e\r\n\u003cimg alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/brewlin/net-protocol\"\u003e\r\n\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/brewlin/net-protocol\"\u003e\r\n\u003cimg alt=\"GitHub code size in bytes\" src=\"https://img.shields.io/github/languages/code-size/brewlin/net-protocol\"\u003e\r\n  \u003cimg alt=\"GitHub release (latest by date)\" src=\"https://img.shields.io/github/v/release/brewlin/net-protocol\"\u003e\r\n  \u003c/p\u003e\r\n\r\n\r\n基于go 实现链路层、网络层、传输层、应用层 网络协议栈 ，使用虚拟网卡实现 docs: https://wiki.brewlin.com/wiki/github/net-protocol/index/\r\n## @demo \u0026\u0026 test\r\n相关demo以及协议测试在cmd目录下,`cd ./cmd*`\r\n\r\ndocker\r\n```\r\n\u003e docker run -d --device /dev/net/tun:/dev/net/tun --privileged brewlin/net-protocol\r\n\u003e docker exec -it containerid /bin/bash\r\n\u003e go run cmd/transport/udp/server/main.go\r\n\u003e go run cmd/transport/udp/net_client.go\r\n\r\n```\r\n## @application 应用层\r\n- [x] [http](https://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [websocket](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [dns](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n\r\n\r\n## @transport 传输层\r\n- [x] [tcp](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [udp](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [port](http://wiki.brewlin.com/wiki/github/net-protocol/index/) 端口机制 \r\n\r\n## @network 网络层\r\n- [x] [icmp](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [ipv4](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [ipv6](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n\r\n## @link 链路层\r\n- [x] [arp](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [ethernet](http://wiki.brewlin.com/wiki/github/net-protocol/index/) \r\n\r\n## @物理层\r\n- [x] tun [tap](http://wiki.brewlin.com/wiki/github/net-protocol/index/) 虚拟网卡的实现\r\n\r\n## @客户端\r\n发起客户端请求\r\n- [x] [http client](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [websocket client](http://wiki.brewlin.com/github/wiki/net-protocol/index/)\r\n- [x] [tcp client](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [udp client](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n- [x] [dns client](http://wiki.brewlin.com/wiki/github/net-protocol/index/)\r\n## 协议相关构体\r\n具体细节文档:http://wiki.brewlin.com/wiki/github/net-protocol/index/\r\n### 1.应用层相关协议\r\n应用层暂时只实现了`http`、`websocket`、`dns`协议。都基于tcp、udp等进行二次封装\r\n\r\nhttp protocol:\r\n```\r\nhttp 协议报文\r\nGET /chat HTTP/1.1\r\nHost: server.example.com\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://example.com\r\nSec-WebSocket-Protcol: chat, superchat\r\nSec-WebSocket-Version: 13\r\n```\r\nwebsocket protocol:\r\n```\r\n  websocket 数据帧报文\r\n\r\n0               1               2               3               4\r\n0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8\r\n+-+-+-+-+-------+-+-------------+-------------------------------+\r\n|F|R|R|R| opcode|M| Payload len |    Extended payload length    |\r\n|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |\r\n|N|V|V|V|       |S|             |   (if payload len==126/127)   |\r\n| |1|2|3|       |K|             |                               |\r\n+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +\r\n|     Extended payload length continued, if payload len == 127  |\r\n+ - - - - - - - - - - - - - - - +-------------------------------+\r\n|                               |Masking-key, if MASK set to 1  |\r\n+-------------------------------+-------------------------------+\r\n| Masking-key (continued)       |          Payload Data         |\r\n+-------------------------------- - - - - - - - - - - - - - - - +\r\n:                     Payload Data continued ...                :\r\n+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +\r\n|                     Payload Data continued ...                |\r\n+---------------------------------------------------------------+\r\n\r\n```\r\n### 2.传输层相关协议\r\n传输层实现了`upd`、`tcp`、等协议，实现了主要接口\r\n\r\ntcp protocol:\r\n\r\n```\r\n\t\t     tcp 首部协议报文\r\n0               1               2               3               4\r\n0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|          Source Port          |       Destination Port        |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|                        Sequence Number                        |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|                    Acknowledgment Number                      |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|  Data |           |U|A|P|R|S|F|                               |\r\n| Offset| Reserved  |R|C|S|S|Y|I|            Window             |\r\n|       |           |G|K|H|T|N|N|                               |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|           Checksum            |         Urgent Pointer        |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|                    Options                    |    Padding    |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|                             data                              |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n```\r\n\r\nudp-protocol:\r\n```\r\nudp 协议报文\r\n```\r\n\r\n\r\n端口机制\r\n\r\n### 3.网络层相关协议\r\n\r\nip protocol:\r\n```\r\n              ip头部协议报文\r\n0               1               2               3               4\r\n0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|Version|  LHL  | Type of Service |        Total Length         |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|  Identification(fragment Id)    |Flags|  Fragment Offset      |\r\n|           16 bits               |R|D|M|       13 bits         |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n| Time-To-Live  |   Protocol      |      Header Checksum        |\r\n| ttl(8 bits)   |    8 bits       |          16 bits            |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|               Source IP Address (32 bits)                     |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|              Destination Ip Address (32 bits)                 |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n|                    Options (*** bits)          |  Padding     |\r\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n```\r\n","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrewlin%2Fnet-protocol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrewlin%2Fnet-protocol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrewlin%2Fnet-protocol/lists"}