运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

    • 前言

    • Go基础知识

    • Go基本语法

    • 实战项目:简单web服务

    • 基本数据类型

    • 内置运算符

    • 分支和循环

    • 函数 function

    • 结构体 struct

    • 方法 method

    • 实战项目:跟踪函数调用链

    • 接口 interface

    • 并发 concurrency

    • 指针

    • 实战项目:实现轻量级线程池

    • 实战项目:实现TCP服务器

      • 什么是网络编程
      • 理解问题
        • 2. 理解问题
      • 技术预研与储备
      • 设计与实现
      • 优化
    • go常用包

    • Gin框架

    • go随记

  • Python

  • Shell

  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Go
  • 实战项目:实现TCP服务器
lyndon
2022-06-07
目录

理解问题

# 2. 理解问题

项目实现:实现一个基于 TCP 的自定义应用层协议的通信服务端。

输入是一个基于传输层自定义的应用层协议规范。由于 TCP 是面向连接的流协议传输机制,数据流本身没有明显的边界,这样定义协议时,就需要自行定义确定边界的方法,因此,基于 TCP 的自定义应用层协议通常有两种常见的定义模式:

  • **二进制模式:**采用长度字段标识独立数据包的边界。采用这种方式定义的常见协议包括 MQTT(物联网最常用的应用层协议之一)、SMPP(短信网关点对点接口协议)等;
  • **文本模式:**采用特定分隔符标识流中的数据包的边界,常见的包括 HTTP 协议等。

相比之下,二进制模式要比文本模式编码更紧凑也更高效,所以这个问题中的自定义协议也采用了二进制模式,协议规范内容如下图:

img

自定义协议的通信两端的通信流程:

img

这是一个典型的“请求 / 响应”通信模型。连接由客户端发起,建立连接后,客户端发起请求,服务端收到请求后处理并返回响应,就这样一个请求一个响应的进行下去,直到客户端主动断开连接为止。

上次更新: 2022/06/12, 15:48:09
什么是网络编程
技术预研与储备

← 什么是网络编程 技术预研与储备→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式