• TCP/UDP/Socket 通俗讲解


    1.封包和拆包

    封包,就是发送数据前把自己本地需要发送的数据包装一下,即把要发送的原始数据附加上接受者可以辨识到自己身份等一些额外信息。有点像寄一封信,信封上填写的寄件人和收件人以及地址。
    拆包,是接收到对方封包后发送来的数据后,拆出原始信息和对方的附加信息,以得知对方的来源。
    像是拆信封。

    2.TCP/UDP与socket

    2.1 TCP 和UDP
    1. TCP 是面向连接的传输,需要通信双方完成三次握手成功后,才能正常通信,四次挥手后断开
      三次握手的目的是为了 通信双方的设备都没有问题,
      四次挥手是为了确保断开的双方本次通信连接时占用的内存全部释放掉。
    2. TCP 是基于字节流的传输,是按字节进行封装和发送的
    3. TCP 是可靠的传输,不允许有丢包,重复发送(对包后重发时),接收顺序出现错误等
    4. UDP 是面向无连接的,不需要握手
    5. UDP 是继续数据报文的,不是一个字节一个字节封装和发送的,是分块发送的
    6. UDP 是不可靠的传输,不负责接收方能够可靠的接收到消息,丢包后不会再做重发等弥补操作
    7. UDP 相比于TCP 来说比较快,效率更高,但它是不可靠的
    2.2 socket介绍
    1. 一个端口号只允许一个进程占用,所以我们通过这个端口号就能找到特定的应用程序进程
    2. 两台主机之间通过网络通信需要知道 对方ip(最终解析成的ip)
    3. 想要两台主机的两个进程之间通信,就必须知道对方的 ip和端口号,
      人们把ip加端口号抽象成了套接字,用来完成两台主机之前的进程通信,
      套接字也叫Socket,人们实现了Socket的一些细节,并暴露出一些API接口,
      供开发人员开发,我们叫它Socket API,SocketAPI 是提供开发者调用TCP 和UDP的api,
      开发者不需要了解太底层,直接使用这些Api 就能实现TCP点对点通信,以及UDP的点播,多播和光播通信。

    3.TCP/IP 协议族 示意图

    在这里插入图片描述

    3.主机A 向主机B 通信时 各层数据的流向

    应用层(封包) ---->传输层(封包)---->网络层(封包)---->对方网络接口层(封包并发送数据)---->对方网络接口层(拆包)---->对方网络层(拆包)---->对方传输层(拆包)
    如下图箭头1,2,3,4,5,6,7,8流向
    主机B 向主机A 发送也是类似
    在这里插入图片描述

  • 相关阅读:
    Java流程结构
    C# 问题记录
    GPTCache:革新大模型缓存,降低成本,提升效率
    JavaWeb评论功能实现步骤及代码
    聊聊Spring中最常用的11个扩展点
    自己动手从零写桌面操作系统GrapeOS系列教程——10.NASM汇编语言
    最高月薪18K,再努力一下,再前进一下,也许成功离你只有一步之遥~
    stable-diffusion-webui sdxl模型代码分析
    ROBOGUIDE教程:三维模型创建功能介绍与操作方法
    桥接模式:解耦抽象与实现,实现灵活多变的扩展结构
  • 原文地址:https://blog.csdn.net/weixin_43225966/article/details/127950050