通信网络基础pdf_通信网络系统基础

通信网络基础pdf_通信网络系统基础目录TCP通信概述服务端架构客户端架构应用层协议客户端连接服务端(错误示范)UDP通信概述程序结构通信数据处理TCP通信概述TCP通信双方在进行数据交换之前,先要建立连接,连接建立后,通信双方之间相当于有一条隧道,数据按顺序在该隧道中传输,数据传输完毕后,双方可以选择关闭隧道,连接结束。TCP通信编程中,“请求方”主动连接“被请求方”,该过…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目录

TCP通信

概述

服务端架构

客户端架构

应用层协议

客户端连接服务端(错误示范)

UDP通信

概述

程序结构

通信数据处理


TCP通信

概述

TCP通信双方在进行数据交换之前,先要建立连接,连接建立后,通信双方之间相当于有一条隧道,数据按顺序在该隧道中传输,数据传输完毕后,双方可以选择关闭隧道,连接结束。

TCP 通信编程中,“请求方”主动连接“被请求方”,该过程称为“连接”(Connect),被请求方收到“连接”的请求后,接受Accept)并创建一个Socket 代理与请求方进行数据交互,该过程如下图:

通信网络基础pdf_通信网络系统基础

通信双方中主动请求方称为“客户端(Client)”,被请求方称为“服务端(Server)”,图中经过connect、accept 之后,服务端与客户端之间的数据交换发生在客户端Socket 和服务端代理Socket 之间。由于TCP 通信中,数据以“流”的形式传输,数据之间没有边界,如下图所示:

通信网络基础pdf_通信网络系统基础

虽然接收到的数据无法确认边界,但是将每次接收到的数据拼接在一起,它们的字节顺序跟发送方发送数据的顺序一致,这就是TCP通信中数据的“顺序性”。

服务端架构

 

通信网络基础pdf_通信网络系统基础

 

客户端架构

通信网络基础pdf_通信网络系统基础

应用层协议

一般TCP的应用层协议中帧头、帧长度、数据区、校验码必不可少:

  • 帧头:用于TCP通信数据的界定,一般取4byte(如:0xABE5),太长会增加帧头的寻找难道,太短会增加误识别的概率;
  • 帧长度:“数据区+校验码”的byte长度,推荐使用4byte的32位无符号数,数据量不大的可以取2byte的16位无符号数;
  • 数据区:要传输的数据,如果要对帧进行识别可以在数据区的前4个byte加帧标志(32位无符号数);
  • 校验码:数据区(不包括帧头、帧长度)的数据校验码,可以是16位、32位,校验算法可使用ACC(小规模通信使用)、CRC(推荐)校验。

推荐使用的完整通信帧:帧头(4byte)+帧长度(4byte-32位无符号数)+数据区(帧标志可选+传输数据)+校验码(CRC32)

帧标志由客户端提供,服务端对请求帧的回复使用客户端请求帧的帧标志,客户端把服务端发送过来的应答帧的帧标志与客户端已经发送的请求帧的帧标志进行对比,通过对比结果就可知道该帧标志所在的请求帧有没有得到服务端回复。

注:大规模企业级应用建议加帧标志检查请求帧是否得到服务端的回复。

客户端连接服务端(错误示范)

客户端连入服务端之后通信结构如下:

通信网络基础pdf_通信网络系统基础

每个客户端都对应一个通信线程,这种结构便于理解编程但不支持高并发的服务器,尽量少用这种编程方式,网络通信一般使用异步编程方式达到循环接受、发送的目的。如异步连接的回调函数启动异步接受,异步接受的回调函数中启动下一个异步接受,中间发生异常则视为通信断开,以此达到循环接受数据的目的。

UDP通信

概述

UDP 通信之前不需要建立连接,它仅仅是单方面的一个操作。

UDP 通信编程中,没有TCP 通信中所谓的“服务端”,只存在“客户端”,每个客户端之间是平等的,发送数据之前不需要进行“连接”请求。客户端跟客户端发送数据时直接进行,如下图所示:

通信网络基础pdf_通信网络系统基础

由于UDP 通信中,数据以“数据报”的形式传输,数据以一个整体发送、以一个整体接收,存在数据边界。但是接收到的数据是无序的,先发送的可能后接收,后发送的可能先接收,甚至有的接收不到。数据传输如下图所示:

通信网络基础pdf_通信网络系统基础UDP 通信中虽然数据报的传输是无序的,但是对于每一次发送的数据而言,接收方接收到的数据顺序跟发送时的顺序相同。

程序结构

通信网络基础pdf_通信网络系统基础

 

 

通信数据处理

通信数据的循环处理可分为顺序执行的循环和非顺序执行的循环,二者的区别在于是否将数据的处理解析放在数据接收循环中处理,如下图所示:

通信网络基础pdf_通信网络系统基础

通信网络基础pdf_通信网络系统基础

顺序执行的循环易于理解和编程,非顺序执行的循环通信效率最高(数据处理不影响接收)。网络编程中,TCP通讯尽量使用非顺序执行的循环少使用顺序执行的循环处理数据,只有对数据处理顺序有特殊要求且通讯频率较低的TCP通讯才建议使用顺序执行的循环处理数据(能避免则避免)。

在UDP 通信中,没有必要保证先接收到的数据先处理,而后接收到的数据后处理,所以在UDP 通信中统一使用非顺序执行的循环处理数据。

 

注:本文所有图片来自《修炼之道:.NET开发要点精讲V5.1》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191060.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2020,最新手机号码手机验证正则表达式,持续更新

    2020,最新手机号码手机验证正则表达式,持续更新最近在跟一个别人写好上线的项目,今天出了一个bug,部分正常的手机号验证格式不通,查看了代码发现正则表达式有较大的错误,如图:存在的问题:1.存在逗号2.不够全面,部分正常的手机号验证不通过所以决定自己写,百度一下手机号的格式,下面应该是比较全面,所以就自己根据下面的写验证的正则表达式,如有小伙伴发现下图仍有遗漏请在评论指出,我看到会马上更新最后写出来的正则表达式:Patternp=Pattern.compile(“^1(3([1-35-9]\\d|4[1-..

    2022年6月13日
  • Random函数用法

    Random函数用法一、random模块简介Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。二、random模块重要函数1)、random()返回0<=n<1之间的随机实数n;2)、choice(seq)从序列seq中返回随机的元素;importrandoma=rand…

    2022年4月28日
  • Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

    Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

    2021年11月28日
  • java bean的作用_java bean的作用是什么[通俗易懂]

    java bean的作用_java bean的作用是什么[通俗易懂]JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java类可以通过自省机制(反射机制)发现和操作这些JavaBean的属性。javabean的作用JavaBean的一些具体的主要设计…

    2022年7月7日
  • oracle sysdate毫秒,Oracle sysdate常用「建议收藏」

    oracle sysdate毫秒,Oracle sysdate常用「建议收藏」SELECT*FROM(SELECT*FROMcalenderDetailAORDERBYa.calenderdesc)WHERErownum<3;//计算时间大于当前时间的最近2条记录取当前小时,以及相隔一小时v_begin_date:=to_date(to_char(sysdate,‘yyyy-mm-ddhh24‘),‘yyyy-mm-ddhh24‘);…

    2022年10月24日
  • 什么是数据安全,为什么需要数据安全,怎么才能实现数据安全?

    什么是数据安全,为什么需要数据安全,怎么才能实现数据安全?WHAT何为数据安全?数据安全指的是用技术手段识别网络上的文件、数据库、帐户信息等各类数据集的相对重要性、敏感性、合规性等,并采取适当的安全控制措施对其实施保护等过程。与边界安全、文件安全、用户行为安全等其他安全问题相同,数据安全并非是唯一一种能提升信息系统安全性的技术手段,也不是一种能全面保障信息系统安全的技术手段。它就是一种能够合理评估及减少由数据存储所带来的安全风险的技术方式。数据安全…

    2022年5月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号