Python网络编程之初识

引言

Internet和internet

Internet:(因特网)是一个专用名词,指当前全球最大的、开放的、由众多网络相互连接而成的特定的计算机网络。

internet:(互联网或互连网)是一个通用名词,泛指由多个计算机网络互联而成的虚拟网络。

本页博客主要会介绍一些计算机网络的基本定义,网络的体系结构等,旨在学习计算机网络的基本概念,为接下来的网络编程打下良好的基础。之前在大三大四考研期间学过计算机网络,但是时间太久了很多已经都忘了,因此这篇博客也是对我自己知识的一次梳理,主要参考用书是谢希仁的《计算机网络》与961计算机考研相关复习资料,简单总结,不足之处,请各位看官指正。

计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。

计算机网络是用通信线路和通信设备将分布在不同地点的多台自治计算机系统互相连接起来,按照共同的网络协议,共享硬件、软件,最终实现资源共享的系统。

早期计算机

Python网络编程之初识_第1张图片

一条网线实现了简单的数据共享。

局域网交换机

Python网络编程之初识_第2张图片

交换机:一种工作于底层(数据链路层)且简单的能够将光电信号转发的网络设备,能够满足局域范围内信息传输和资源共享的需要的设备。

局域网:指在某一区域内由多台计算机互联成的计算机组。

网络结构

Python网络编程之初识_第3张图片

不同主机之间通过交换机和路由器组成局域网,然后层层往上组成越来越大的网络群,每一台主机都有对应的地址,以确保他在网络体系中的身份,这就是互联网的基本组成。

路由器:(Router)是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。

网络传输

视频基带传输

概念:通过同轴电缆非平衡地对0-6MHz的视频基带信号不做任何处理的传输,是传统电视的传输方式。

特点:短距离信号损失小,价格便宜,稳定;信号随着距离增加衰减较大,受环境影响大,不能长距离传输。

光纤传输

概念:通过光导纤维利用光学传输原理中的不同频率可携带信号传输光信号,一般用做局域网之间长距离传输。

特点:传输距离远,衰减小,抗干扰性好,传输信号量大;造价高,难扩容,维修成本高,即使是2018年的8月,家庭运用也很少。

网络传输

概念:采用MPEG2/4、H.264音视频压缩格式传输监控信号,是解决城域间远距离、点位极其分散的监控传输方式。

特点:只要有Internet网络的地方,安装上远程监控软件就可监看和控制:受网络带宽和速度的限制,动画有延迟。

微波传输

概念:采用调频调制或调幅调制的办法,将信息搭载到高频载波上以高频电波在空中传输。

特点:综合成本低,性能更稳定,成本低;受干扰大,信号衰弱块。

双绞线传输

概念:由两根具有绝缘保护层的铜导线组成,通过绞合之以增加抗干扰性来传输信号。也就是我们家庭中常用的网线。

特点:布线方便,抗干扰性强,价格低廉,实时传输。不能远距离传输,不宜野外传输。

网络广播方式

单播

概念:主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。就好像是两人之间的对话一样。

优点:

  • 及时响应客户机的请求。
  • 对每个客户不通的请求发送不通的数据,容易实现个性化服务。

缺点:

  • 数据流量大,传输时间慢。
  • 网络主干负荷大,容易阻塞。

广播

概念:主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息的一种方式。就像你小学的广播指导做体操一样。

优点:

  • 网络设备简单,维护简单,布网成本低廉
  • 服务器流量负载极低。

缺点:

  • 无法针对用户提供更多个性化服务。
  • 不能再Internet上传输

组播

主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。

优点:

  • 具备广播所具备的优点,节省了服务器的负载。
  • 所以其提供的服务可以非常丰富。
  • 能在Internet上传输。

缺点:

  • 没有纠错机制,丢包错包后难以弥补。
  • 在客户认证、QOS等方面还需要完善。

网络性能指标

1. 速率(网速):主机在数字通信上传送数据的速率(bit(比特:数据量的单位,二进制数据,一个比特是一个二进制数字,0或者1)/s)。

1 Byte(B) = 8 bit    1 KB = 1024 B    1MB = 1024 KB    1GB = 1024 MB    1 TB = 1024 GB    1 PB = 1024 TB    1 EB = 1024 PB...

2. 带宽:本意是指某个信号具有的频带宽度,在计算机网络中,带宽指网络的通信线路传送数据的能力(单位时间内从网络中的某一个点到另外一个点所能通过的“最高数据率”,带宽的单位为bit/s),一条通信链路,带宽越宽,最高数据率也越高。

3. 吞吐量:单位时间内通过某个网络(通信线路、接口)的数据量,吞吐量受制于带宽或者网络的额定速率。

4. 时延:数据从网络的一端发送数据帧(所谓数据帧(Data frame),就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。)到另一端所需要的时间。

  • 发送时延:(主机或者路由器发送数据帧所需要的时间,公式:发送时延=数据帧长度/发送速率)。
  • 传播时延:(电磁波在信道中传播一定的距离需要花费的时间,公式:传播时延:信道长度/电磁波在信道上的传播速率)。
  • 处理时延:主机或者路由器接受到分组时要花费一定的时间去处理。 
  • 排队时延:分组在网络传输时,进入路由器后要在输入队列中排队等待处理,路由器确定转发接口后,还要在输出队列中排队等待转发,这就是排队时延。

总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延

5. 利用率:信道利用率(某信道有百分之几的时间是被利用的即有数据通过)。网络利用率(全网络的信道利用率的加权平均值)。信道或者网络利用率过高会产生非常大的时延。

6. 往返时间RTT:从数据的发送开始,到发送方接收到来自接收方的一种的性能指标。

7. 时延带宽:传播时延*带宽,表示一条链路上传播的所有比特(以比特为单位)。

IP地址

IP地址:指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),IPV4就是有4段数字,每一段最大不超过255,对于全球的网络地址来说,分配肯定是不够的,所以全球IPv4位址在2011年2月3日IPv4位地址分配完毕。为了解决IPV4分配完这个问题,国际组织拟通过IPv6重新定义地址空间。IPv6采用128位地址长度。

如:

IPV4地址:192.168.1.1 转化为二进制数为:

IPV4:11000000 10101000 00000001 00000001

IPV6地址:21DA:0000:0000:0000:02AA:000F:FE08:9C5A

  • 02AA可以简写成2AA,叫做前导零压缩法。
  • 如果连续几个位段都是0,可以简写为::,叫做双冒号表示法。

简约IPV6:21DA::2AA:F:FE08:9C5A

二进制IPV6表示为:0010000111011010 0000000000000000 0000000000000000 0000000000000000 0000001010101010 0000000000001111 1111111000001000 1001110001011010

IPV6号称能为全球每一粒沙子标上记号,再也不用担心不够使用的问题。

端口

我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么问题来了,主机是怎样区分不同的网络服务呢?举个栗子,For Example,当你和你的朋友聊QQ的时候,你把一条信息发送给对方,为什么那条消息能显示到对方电脑上的QQ对话框,而不是显示到微信的对话框??显然不只有一个ip地址是不行的,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。ip找到对应主机,端口找到主机中某一个服务。

子网掩码

所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。 

如题:已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?

172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

结果:它们在同一子网络。

计算机网络模型

Python网络编程之初识_第4张图片

物理层

主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

数据链路层

定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。

网络层

在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。

运输层

定义了一些传输数据的协议和端口号(WWW端口80等),如: 
TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据) 。
UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

会话层

通过运输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。

表示层

可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。

应用层

是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

五层模型常见物理设备

Python网络编程之初识_第5张图片

TCP与UDP协议

在引入这个问题之前,我们先研究以下通信方式:

单工通信:是指消息只能单方向传输的工作方式。发送端与接收端也是固定的,即发送端只能发送信息,不能接收信息。信号是单方向的。

半双工通信:可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。发送端和接收端可以相互转化,但是同一时刻,信息只能往一个方向传输。

全双工通信:在通信的任意时刻,线路上存在A到B和B到A的双向信号传输,允许数据同时在两个方向上传输,又称为双向同时通信,即通信的双方可以同时发送和接收数据。

TCP---传输控制协议

提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 ,TCP协议提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议,TCP 将在两个应用程序之间建立一个全双工的通信。

TCP协议特点:

  • 建立连接通道。
  • 数据大小不限制。
  • 速度慢,但是可靠性高。

TCP协议三次握手与四次挥手

Python网络编程之初识_第6张图片

TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接。
TCP码位(标志位)
标志 说明
SYN(synchronous) 建立联机
PSH(push) 传送
ACK(acknowledgement) 确认
FIN(finish) 结束
RST(reset) 重置
URG(urgent) 紧急
seq(sequence number) 顺序号码

TCP三次握手过程:

专业版:

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机。
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包。
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

逗比版:

Step1 高富帅发信息给女神:约吗?

Step2 女神发信息回复高富帅:可以约。然后准备资源。

Step3 高富帅确认女神发来可以约,回复:我准备好了,老地方。并准备资源。

  • 三次握手只能是客户机发出请求

TCP四次挥手过程:

专业版

第一次挥手:当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段。

第二次挥手:主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。

第三次挥手:主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。

第四次挥手:主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。

逗比版:

高富帅想换女朋友了:

Step1 高富帅发信息给女神:我们分手吧!

Step2 女神听后,觉得很伤心,于是发了一个:哦,给我点时间我缓一下。

Step3 女神难受,尽量处理和高富帅的点点滴滴,但是最后不得不接受这个现实,最后回信息:我同意分手。

Step4 高富帅收到信息后,迅速忘记了女神,丢掉关于她的一切。

  • 当然,四次挥手可以是服务器或者主机A先发出请求,和三次握手不一样。

UDP---用户数据报协议

是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

UDP协议特点:

  • 面向无连接,可靠性较低。
  • 不保证数据的安全性。
  • 传播速度很快。

参考

  1. http://www.cnblogs.com/Eva-J/articles/8244551.html
  2. https://www.cnblogs.com/maybe2030/p/4781555.html
  3. http://www.cnblogs.com/Eva-J/articles/8066842.html
  4. https://zhidao.baidu.com/question/2120824.html
  5. https://www.cnblogs.com/wxd0108/p/7597216.html
  6. https://blog.csdn.net/qq_29817411/article/details/51800451
  7. https://blog.csdn.net/yulyu/article/details/69062288
  8. https://baike.baidu.com/item/%E9%80%9A%E4%BF%A1%E6%96%B9%E5%BC%8F/4535155
  9. https://blog.csdn.net/u011774517/article/details/67631439
  10. https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C/143243?fr=aladdin
  11. https://zhidao.baidu.com/question/411080153.html
  12. https://blog.csdn.net/u014507230/article/details/45310847
  13. https://zhidao.baidu.com/question/9813431.html
  14. https://blog.csdn.net/xy913741894/article/details/73334239
  15. https://www.cnblogs.com/LY-C/p/9095864.html
  16. https://baike.baidu.com/item/%E5%8F%8C%E7%BB%9E%E7%BA%BF%E4%BC%A0%E8%BE%93/10894236
  17. https://baike.baidu.com/item/IP%E5%9C%B0%E5%9D%80/150859?fr=aladdin
  18. https://zhidao.baidu.com/question/95188117.html

你可能感兴趣的:(Python)