你将学到的
  • OSI 模型和 TCP/IP 模型
  • Linux 的 tun/tap 虚拟网卡介绍
  • 协议栈网卡 IO 和管理
  • arp 协议的处理和实现
  • 路由和路由表
  • 端口的概念
  • 网络层到传输层的数据报分发
  • tcp 协议头部详解
  • 协议栈整体概览
  • 实现 tap 网卡的数据处理
  • 以太网数据帧协议
  • ipv4 协议和实现
  • icmp 协议和实现
  • 协议栈端口管理的实现
  • UDP 协议和实现
  • tcp 原理解析
课程内容
共6个章节
课程介绍

GO 语言模拟实现 TCP/IP 协议

课程介绍

网络协议栈是当今数据信息的搬运工,因为协议栈的存在,让开发者轻松实现上层应用,才有了今日发达的网络,为了更深入的理解协议栈,本项目参考 google 开源的 netstack 项目,用 golang 编写实现一个用户态的协议栈。该协议栈包含了我们常用网络协议,以太网协议、arp 协议、ipv4 协议、icmp 协议、udp 协议和 tcp 协议。结合 linux 的虚拟 tap 网卡,我们可以轻松在机器上实现模拟网络数据报文,进而测试和实验网络协议栈的各个功能。

系统认识协议栈的工作原理

我们每个人的电脑都有操作系统,而每个操作系统几乎都自带了网络协议栈,比如 linux,想要研究协议栈的实现,linux 内核是个很好的研究对象,那为何本项目不讲解 linux 内核协议栈,那是因为内核协议栈其实很庞大,涉及到的知识也很多,想要在内核上修改和做实验也有一定的门槛。而 golang 写的网络协议栈,相对来说是协议栈的简写版,但也包含了协议栈的基本功能,所以了解 netstack 的实现有助于理解协议栈的工作原理,甚至熟悉以后还可以自己实现网络协议的一些功能。

了解 TCP/IP 分层架构

目前的网络协议栈讲的都是 tcp/ip 协议栈,了解 tcp/ip 协议栈就必须要了解 tcp/ip 的分层和架构,了解分层的意义是什么?每层的功能是什么?每层又是怎么实现的?这些问题都会在该项目找到答案。

深入了解网络协议

网络协议是信息传输的载体,网络协议是主机通信之间的语言,了解网络协议相当于就了解了协议栈,所以本项目基本是围绕了网络协议来讲解。本项目不仅讲解网络协议的格式,网络协议实现的机制,还讲解了网络协议在协议栈中的实现。通过编写和分析代码,来深入理解网络协议栈的原理。

实验任务

  • 用 golang 创建虚拟网卡
  • 网卡的 IO 实现
  • arp 协议的实现
  • ipv4 协议的实现
  • icmp 协议的实现
  • 协议栈端口管理的实现
  • UDP 协议的实现
  • TCP 协议的实现

项目架构

+----------------------+
|      application     | application
+----------------------+
|        tcp/udp       | transport
+----------------------+
|    arp/ipv4/ipv6     | network
+----------------------+
|         vnic         | nic_manager
+----------------------+
|       tap,eth        | link
+----------------------+
|         os           | os
+----------------------+

适合人群

  • 熟悉 golang 网络编程,希望深入了解协议栈底层是怎么工作的
  • 对网络接口编程有一定的了解,但想跟进一步理解网络的原理
  • 想编写自定义网络协议,却不知如何设计协议时,可以参考协议栈的实现
  • 了解 tcp 协议,想更深入的理解 tcp 的工作原理
  • 熟悉 tcp 拥塞控制,想自己实现或修改 tcp 拥塞控制来加速网络

课程信息

  • 学习周期:课程有效期 2 个月,2 个月后实验文档一直可以看,但无法进行在线实验。高级会员有效期内可一直查看文档,高级会员到期后课程失效(不能看文档)。

    提醒:每个实验可开启 6 次在线环境(每次 60 分钟)

  • 课程价格:当前优惠价格 69 元。

  • 企业团报:可获得更多支持服务,请点击购买咨询

课程教师

郑宝杨 共发布过 1 门课程

golang高级工程师,四年golang和网络开发经验,独立开发过流媒体服务器,目前从事SDWAN网络开发,负责网络架构和协议的实现。 喜欢编程和研究底层技术,比如: golang的runtime实现和linux内核协议栈。 github id: https://github.com/sheepbao blog: https://sheepbao.github.io

查看老师的所有课程 >
学过本课的同学也学过...
返回旧版