首页 > 其他分享 >网络通信协议设计

网络通信协议设计

时间:2023-07-22 10:45:10浏览次数:35  
标签:网络通信 协议 字节 接收端 TCP 设计 数据包

《网络通信协议》

1. 背景

  在计算机体系中,存在着很多的网络通信协议;通信协议的实际上就是一段数据,通信双方按照提前约定的规则去进行编码解码,达到传输数据的目的;例如,TCP/IP是目前计算机设备最常用的通信协议;TCP/IP实际上是一个协议族,包含一组协议,其中靠近应用层且最常用的协议是TCP和UDP。

  TCP是流式协议,即协议的内容是流水一样的字节流,内容与内容之间没有明确的分解标志,需要人为的给这些内容划分边界;例如,A与B进行TCP通讯,A发送两个数据包给B,大小分别为100个字节,200个字节,对于A来说,作为发送方,是知道如何划分这两个数据包的界限的,但是对于B来说,可能一次,或者多次受到A发送的数据包,例如先收到50字节,后受到250字节,或者先收到200字节,后收到100字节,因此B是无法知道应该将受到的多少个字节的数据包作为一个有效的数据包;而规定每次将多少个字节作为有效的数据包,就是协议格式需要定义的内容;

一个简单的例子:

// 发送端发送数据
char buf[] = "the quick brown fox jump over a lazy dog";
int sendBytes = send(socket, buf, strlen(buf), 0);
char recvBuf[50] = {0};
int recvBytes = recv(socket, recvBuf, 50, 0);
printf("recevice content: %s\n", recvBuf);

上述的简单代码在本机上一般会执行的比较好,接收端会如期打印出发送端发送的内容;但是这样的代码在局域网或者公网环境下会出问题,接收端打印出的内容可能不完整,或者出现乱码,不完整是因为发送端可能分多次发送数据,导致接收端接收不完整的情况下进行数据打印;乱码出现的原因为,接收端不仅接收到了完整的字符串内容,还接受到了下一个字符串的部分内容;这就导致接收缓冲区被填满,在printf的时候知道碰到"\0"才结束,导致内存越界

2. 粘包问题

  在进行网络通信时,一般会出现粘包,丢包,和包乱序问题;

标签:网络通信,协议,字节,接收端,TCP,设计,数据包
From: https://www.cnblogs.com/ncepubye/p/17572952.html

相关文章

  • c#怎么开发和设计游戏模块
    ​首先是UnityWebRequest的构建与数据发送:UnityWebRequestwebRequest=newUnityWebRequest(url,"POST");//初始化使用POST的UnityWebRequest,并附上目标地址webRequest.SetRequestHeader("","");//设置HTTP的头信息//初始化UnityWebRequest的downloadHandler与upl......
  • Java Web 程序设计预习提纲
    以下是JavaWeb程序设计的预习提纲的Markdown格式示例:JavaWeb程序设计预习提纲1.Java基础回顾Java语言基础与面向对象Java类与对象的定义与使用常用数据类型与控制流程异常处理与文件I/O操作2.Servlet基础Servlet概述与生命周期Servlet的请求与响应S......
  • OO 设计模式
    面向对象(ObjectOriented-OO)设计模式(DesignPattern)概念、设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结3个大类,23个设计模式、创建型模式:对象实例化的模式单例模式:确保某一个类只有一个实例,并且提供一个全局访问点简单工厂模式:让子类......
  • 南京邮电大学《程序设计(上机)》题目[2023-07-21]
    南京邮电大学《程序设计(上机)》题目[2023-07-21]2022-2023学年第1学期程序设计实验指导书胥备17766106600一、 实验前准备硬件:微型计算机一台(个人笔记本电脑)软件:任一C或C++语言开发工具知识准备:1)复习C或者C++语言知识二、 实验目的与任务目的:本课程是在《高级语言程序......
  • (转)GUI为什么不设计为多线程
    在我们这批新人转正评审的时候,我师父问了我的小伙伴一个问题:为什么一些更新界面的方法只能在主线程中调用?师父没有问我这个问题,让知其然但不知其所以然的我有种侥幸逃过一难的心情。我想如果回答那是因为Android GUI库是单线程消息机制的,更新界面的操作必须放到主线程中执行,那师父......
  • TCP/IP协议模型的五层处理流程简介
    TCP/IP是一种分层模型,它将通信协议分解为五个层次,每个层次都有特定的功能和任务。以下是TCP/IP五层的处理流程:应用层(ApplicationLayer):这是TCP/IP模型的最上层,负责处理应用程序的请求和数据。在该层,应用程序(例如浏览器、电子邮件客户端等)与用户进行交互,并将数据传递给下一层。......
  • Spring框架的设计理念与设计模式(4)-Context组件
    关键词:Context,组件,Spring,BeanFactory,容器,Ioc上一章:[b]Spring框架的设计理念与设计模式(3)-Bean组件[/b][url]http://javapub.iteye.com/blog/751550[/url]下一章:[b]Spring框架的设计理念与设计模式(5)-Core组件[/b][url]http://javapub.iteye.com/......
  • 接口默认方法,接口应用和适配器设计模式
    静态方法只能通过接口名调用!!! 私有方法主要用于提取两个不同方法的相同部分,两个不同方法分别调用私有方法,从而简化代码 ......
  • python导航栏的设计
    Python导航栏的设计简介导航栏是一个常见的网页组件,用于在网页中提供导航链接,使用户能够方便地浏览和访问网站的不同页面。在本文中,我将向您介绍如何使用Python实现一个简单的导航栏。整体流程下面是实现导航栏的整体流程:步骤描述1.创建一个包含导航链接的HTML模板......
  • 2017年全国大学生电子设计竞赛F题方案及制作过程分享
    8月9日,2017年全国大学生电子设计竞赛在全国31个赛区同时开幕。本届比赛有来自全国千余所院校、共4万余名学生报名参加,命题涵盖了从基础到综合应用等多个领域。下面即将分享的是论坛资深网友@RF-刘海石对于本科组F题:调幅信号处理实验电路的制作过程及方案经过2天的时间,我已经尽......