网络通信技术基础知识-山东德成智能技术有限公司
Website Home

免费学习推荐:python教程(视频)python实现网络通信数据传输(基础知识(一))前言基础知识学习一、同步异步二、什么是socket三、socket套接字的分类1、流格式套接字SOCK_STREAM2、数据报格式套接字(SOCK_DGRAM)四、IP地址、MAC地址、端口地址结束语前言我不是通信信息专业的,但是最近接触了一些这方面的知识感觉挺有意思就学习了一下,并将学习结果记录在这里,以便给更多人学习,要是能得到大佬的指点就美滋滋啦。
基础知识学习一、同步异步同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果!
是一种线性执行的方式,执行的流程不能跨越?
一般用于流程性比较强的程序,比如用户登录,需要对用户验证完成后才能登录系统!
(发送方发一个,接收方接收一个,是同步的?
)异步则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕!
而是继续执行下面的流程;
是一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务,比如页面数据加载过程,不需要等所有数据获取后再显示页面;
(发送方发送数据,接收方有一个缓存区,可以按照自己的规律去接受,当然发送方也可按照自己的规律去发送,两者是异步的)二、什么是socketsocket的原意是“插座”,在计算机通信领域,socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式!
通过socket这种约定,计算机之间建立网络连接;

为了方便理解,我们可以类比插座,我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而socket就是用来连接到因特网的工具。

与UNIX/Linux不同的是,Windows会区分socket和文件,Windows就把socket当做一个网络连接来对待,因此需要调用专门针对socket而设计的数据传输函数,针对普通文件的输入输出函数就无效了。
三、socket套接字的分类主要常用两种是流格式套接字(SOCK_STREAM)和数据报格式套接字(SOCK_DGRAM)!
1、流格式套接字SOCK_STREAM有以下几个特征:数据在传输过程中不会消失?
数据是按照顺序传输的;
数据的发送和接收是异步的!
它使用了TCP协议(TheTransmissionControlProtocol,传输控制协议),TCP协议会控制你的数据按照顺序到达并且没有错误!
强调高质量?
2、数据报格式套接字(SOCK_DGRAM)计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的;
也就是说,数据错了就错了,无法重传;
因为数据报套接字所做的校验工作少,所以在传输效率方面比流格式套接字要高;

它有以下特征:强调快速传输而非传输顺序。
传输的数据可能丢失也可能损毁。
限制每次传输的数据大小。
数据的发送和接收是同步的?
数据报套接字也使用IP协议作路由,使用UDP协议(UserDatagramProtocol,用户数据报协议)。

注意:SOCK_DGRAM没有想象中的糟糕,不会频繁的丢失数据,数据错误只是小概率事件。

四、IP地址、MAC地址、端口地址IP地址:是InternetProtocolAddress的缩写,译为“网际协议地址”。

目前大部分软件使用IPv4地址,但IPv6也正在被人们接受,尤其是在教育网中,已经大量使用。
对于IPV4,一个计算机一个IP地址是不现实的,所以一般是一个局域网一个IP地址;
路由器会根据IP地址找到对方的地里位置,路由器有非常高效和智能的算法,很快就会找到目标局域网!

MAC地址:是物理地址,一个局域网地址有多个计算机的MAC地址,数据包中除了会附带对方的IP地址,还会附带对方的MAC地址,当数据包达到局域网以后,路由器/交换机会根据数据包中的MAC地址找到对应的计算机端口地址:一台计算机可以同时提供多种网络服务,例如Web服务(网站)、FTP服务(文件传输服务)、SMTP服务(邮箱服务)等,仅有IP地址和MAC地址,计算机虽然可以正确接收到数据包,但是却不知道要将数据包交给哪个网络程序来处理,所以通信失败。

为了区分不同的网络程序,计算机会为每个网络程序分配一个独一无二的端口号(PortNumber)。

端口(Port)是一个虚拟的、逻辑上的概念。
可以将端口理解为一道门,数据通过这道门流入流出,每道门有不同的编号,就是端口号。
如下图所示:补充:今天刚刚看了下串口和端口的概念:串口是I/O通讯的接口,是硬件范畴,因为使用了串行的信号通讯而简称串口!

端口(指一般的PC机操作系统中,单片机不算)只是一个16位的数字标识,用来在网络通讯中标识不同的通讯进程,是操作系统定义的,就是说没有操作系统的话也没有端口的概念结束语最近学习了挺多有关通信的东西,希望拿出来和大家分享一下,本文只是接下来几篇中的开头,做些基础准备,接下来还准备发些相关知识最后会准备几个例子供大家参考。

欲知后事如何,请听下回分解。
免费学习推荐:python视频教程1、网络通讯技术(NCT:NetworkCommunicationTechnology)是指通过计算机和网络通讯设备对图形和文字等形式的资料进行采集、存储、处理和传输等;
2、使信息资源达到充分共享的技术?

本文关于网络通信技术的基本详情介绍就讲解完毕,希望对大家有所帮助。
python实现网络通信数据传输(基础知识(二))免费学习推荐:python视频教程前言基础知识学习一、OSI模型二、TCP、IP协议族:三、python中字符串的编码方式结束语前言第二弹来了。

今天还是上些基础知识吧,扎实的基础才是深入学习的不二法门。
基础知识学习一、OSI模型OSI模型把网络通信的工作分为7层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层;
OSI只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用?
后来人们对OSI进行了简化,合并了一些层,最终只保留了4层,从下到上分别是接口层、网络层、传输层和应用层,这就是大名鼎鼎的TCP/IP模型;

这个网络模型究竟是干什么呢。
简而言之就是进行数据封装的!
数据封装原理:我们平常使用的程序(软件)一般都是通过应用层来访问网络的,程序产生的数据会一层一层地往下传输,直到最后的网络接口层,就通过网线发送到互联网上去了!

数据每往下走一层,就会被这一层的协议增加一层包装,等到发送到互联网上时,已经比原始数据多了四层包装。
整个数据封装的过程就像俄罗斯套娃!

当另一台计算机接收到数据包时,会从网络接口层再一层一层往上传输,每传输一层就拆开一层包装,直到最后的应用层,就得到了最原始的数据,这才是程序要使用的数据。
给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这一层,我已经处理过了;
给数据拆包装的过程正好相反,就是去掉数据头部的标志,让它逐渐现出原形?
(OSI七层网络模型和TCP/IP四层网络模型的对比)两台计算机进行通信时,必须遵守以下原则:(1)必须是同一层次进行通信,比如,A计算机的应用层和B计算机的传输层就不能通信,因为它们不在一个层次,数据的拆包会遇到问题。
(2)每一层的功能都必须相同,也就是拥有完全相同的网络模型!

如果网络模型都不同,那不就乱套了,谁都不认识谁。
数据只能逐层传输,不能跃层;

(3)每一层可以使用下层提供的服务,并向上层提供服务。
二、TCP、IP协议族:常用到的socket编程是基于TCP和UDP协议的,它们的层级关系如下图所示:三、python中字符串的编码方式python中要把字符串的编码方式转换为utf-8的形式。
同样一个数,你可以选不同的方式来表示它,选用什么方案,就是对Unicode的一种编码方法(utf-8是Unicode编码方式的一种具体实现)?
Python内部使用Unicode来表示字符串,所以想要print什么汉字(英文字母和数字的Unicode和utf-8的编码是一样的)的就要保证是Unicode的编码方式,如果是“utf-8”的编码方式(输出就是一堆二进制代码,一个汉字的utf-8编码为三个字节,也就是三段二进制表示,如下图),可以用.decode(“utf-8”)来解码!
而在保存到硬盘或者发送到网上(用到socket等和通信有关的),需要转成UTF-8!

(utf-8编码在python里的输出结果)为什么在内部不继续使用UTF-8,那样不就不用转换了吗。
这个就涉及到UTF-8的一个缺点:计算字符串长度和查找子字符串非常没效率?
在使用UCS2的时候,要想知道这个字符串有多长,只要看一下它占了几个字节,然后除个2就可以了,而UTF-8的话,就需要一个字符一个字符的数出来;
在做子字符串搜索的时候,因为不知道下一个字符占几个字节,所以那些高效的搜索算法也都不灵了;
结束语下次我会拿出一些简单的例子,以帮助大家理解和实际操作。
最后希望大家看完,顺手点一个小小的赞,给点鼓励吧,一篇写出来两个多小时过去了,没有任何利益的行为,只是为了知识共享,共同学习,一起成长?

(偷偷说,我看完别人的文章也不点赞,这不是好习惯,我马上改的,呜呜呜)相关免费学习推荐:python教程(视频)。