一文搞懂Go语言网络编程【tcp、udp】

      最后更新:4个月前 手机定位技术交流文章

      文章目录

      • 前言
      • 一、互联网的层次结构
        • 1.应用层
        • 2.传输层
        • 3.网络层
        • 4.网络接口层
        • 5.图解
      • 二、tcp协议概述
        • 1.三次握手
          • 第一次握手
          • 第二次握手
          • 第三次握手
        • 2.tcp通常用来做什么?
        • 3.代码实现tcp通信
      • 三、udp协议概述
        • 1.udp通常用来做什么?
        • 2.代码实现
      • 四、粘包问题【及解决方法】
        • 1.为什么会粘包?
        • 2.解决方案
        • 3.编码解码函数
      • 总结
      • GO GO GO !

      前言

      本文介绍的不是http.net包,仅仅介绍传统的网络通信(后期会单独进行http.net包的更新)

      一、互联网的层次结构

      大致分为四层,细分的话可以分为7层

      1.应用层

      应用层、表示层、会话层

      2.传输层

      传输层

      3.网络层

      网络层

      4.网络接口层

      数据链路层、 物理层

      5.图解

      在这里插入图片描述

      二、tcp协议概述

      1.三次握手

      第一次握手

      第二次握手

      第三次握手

      2.tcp通常用来做什么?

      • 由于tcp通信数据包传输精确可以用来传输文件图片,等重要的数据
      • tcp传输准确率高但效率低,不易传数据量大重要程度不高的数据

      3.代码实现tcp通信

      客户端代码如下:

      服务端代码如下:

      三、udp协议概述

      1.udp通常用来做什么?

      • udp传输效率高,但容易丢失数据
      • 可用来进行网络直播,视频通话
      • 保留重要的信息,对可有可无的信息尽力保存

      2.代码实现

      客户端代码如下:

      服务端代码如下:

      四、粘包问题【及解决方法】

      1.为什么会粘包?

      • 由于频繁的进行数据的收发,底层为了提高收发效率,在发送消息前会检查一下是否还有需要发送的其他数据
      • 如果发送过于频繁,上一次数据包将与夏下一次的数据报粘在一起,导致数据非常乱
      • 由Nagle算法造成的发送端的粘包:Nagle算法是一种改善网络传输效率的算法。简单来说就是当我们提交一段数据给TCP发送时,TCP不立刻发送此段数据,而是等待一小段时间看看在等待期间是否还有要发送的数据,若有则会一次把这两段数据发送出去

      2.解决方案

      • 将每一个数据包大小进行保存,数据包写一表头用于存储数据包的大小,每次进行数据的读取时先
      • 进行数据包大小的读取,在进行数据信息实体的读取
      • 降低发送数据的频率

      3.编码解码函数

      编码解码函数代码如下:

      客户端代码如下:

      服务端代码如下:

      总结

      TCP 需要连接,UDP 是无连接的,发送数据之前不需要建立连接, TCP 提供可靠的服务,通过 TCP 连接传送的数据,无差错,不丢失 TCP 逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道,两者各有所长,对他们进行各取所需。

      在这里插入图片描述

      GO GO GO !

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:http://www.wangsu123.cn/news/16779.html

          热门文章

          文章分类