Python学习日记(二十九) 网络编程
早期的计算机通信需要有一个中间件,A要给B传东西,A必须要把信息传给中间件,B再把从中间件中拿到信息
由于不同机器之间需要通信就产生了网络
软件开发的架构
1.C/S架构
服务器-客户机,即Client-Server架构,C/S架构通常采取两层结构.Sever负责数据的管理,Client负责完成与用户的交互任务
这里来说Client主要是某个应用软件的exe文件,程序要在安装后,才能运行在用户电脑上。
例如:QQ、微信、网易云音乐等
2.B/S架构
浏览器端-服务器,即Browser-Sever,B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件.这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用.客户机上只要安装一个Browser,服务器安装Oracle、SQL Sever等数据库.浏览器通过Web Sever同数据库进行数据交互,这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
例如:百度、知乎、豆瓣、博客园等
3.B/S架构和C/S架构之间的关系
B/S架构是C/S架构的一种
计算机网络的发展及基础网络概念
早期:联机
想要实现通信就必须要网卡和网线,每个网卡上都有一个全球唯一的MAC地址
MAC地址:英文名为Media Access Control Address,即媒体存取控制位址,也称为局域网地址(LAN Adress),MAC位址,以太网网址(Ethenet Address)或物理地址(Physical Address),它是用来确认网络设备位置的地址。
MAC地址的长度为48位(6个字节),通常表示12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前6位十六进制数00-16-EA代表网络硬件制造商的编号,后6位十六进制数AE-3C-40代表该制造商所制造的某个网络产品的系列号。每个MAC地址都如身份证号一样具有唯一性。
IP地址:Internet Protocol,全称互联网协议地址,常见分为IPv4和IPv6。IP地址是IP协议提供的一种统一的地址格式,它为互联网的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它是一台机器在一个网络内的唯一标识。
IP地址的表示范围:0.0.0.0-255.255.255.255(四个点分十进制表示)
通常我们使用的都是IPv4的地址,如果使用IPv6的表示方式:0.0.0.0.0.0-255.255.255.255.255.255
以太网:局域网和交换机
交换机的出现解决了多台电脑之间的通信问题,网络拓扑就是将各个机器都通过网线连到交换机
广播:比如服务器4想找到服务器1,那么它就会通过向交换机让它告诉所有的服务器我要找服务器1,然后只有服务器1会回复我收到了信息
ARP协议:Address Resolution Protocol,即地址解析协议,它是根据IP地址去获取物理地址(MAC地址)的一个TCP/IP协议。主机发送消息时将包含目标IP地址的ARP请求广播到局域网网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源
简单来说就是:A机器要找B机器,A机器把请求发给交换机,然后再由交换机把这个请求广播出去,告诉所有机器我现在要找这个机器,所有的机器都会收到这一条消息,但是他们会先看要找这个IP地址是不是和我相同,不是的话就会把这个数据包给丢掉,如果IP地址和我要找的这个机器的IP地址相同,那么这台机器就会把自己的MAC地址交给交换机,然后再由交换机再把信息单播给A机器。
广域网与路由器
路由器:Router,连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性网络设备。
网关:Gateway,即网间连接器、协议转换器。网关在网络层以上实现网络互联,是最复杂的网络互联设备,仅用两个高层协议不同的网络互联。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。
网关IP:局域网内的机器访问公网IP,就通过网关访问
局域网:Local Area Network,局域网的覆盖范围一般是方圆几千里之内,其具备的安装便捷、成本节约、扩展方便等特点使其在各个办公室内运用广泛。局域网可以实现文件管理、应用软件共享、打印机共享等功能,在使用过程当中,通过维护局域网网络安全,能够有效地保护资料安全,保证局域网网络能够正常稳定的运行。
子网掩码:Subnet mask,即网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。
IP地址和子网掩码做按位与运算,得到的结果是网段
那如何判断两台机器它们是在同一个网段呢?
IP1:192.168.43.2
IP2:192.168.43.1
IP3:192.168.45.20
子网掩码:255.255.255.0
我们需要看子网掩码和IP地址,再将它们按位AND
IP1: 192.168. 43.2 = 11000000.10101000.00101011.00000010
子网掩码:255.255.255.0 = 11111111.11111111.11111111.00000000
按位AND运算结果: 11000000.10101000.00101011.00000000 ->192.168.43.0
IP2: 192.168. 43.1 = 11000000.10101000.00101011.00000001
子网掩码:255.255.255.0 = 11111111.11111111.11111111.00000000
按位AND运算结果: 11000000.10101000.00101011.00000001 ->192.168.43.0
IP3: 192.168.45.20 = 11000000.10101000.00101101.00010100
子网掩码:255.255.255.0 = 11111111.11111111.11111111.00000000
按位AND运算结果: 11000000.10101000.00101101.00000000 ->192.168.45.0
结果只看前三位十进制数,最后一位数不同没关系,所以IP1和IP2在同一网段,IP3和其他不属于同一个网段
IP协议的主要作用有两个,一个是为每台计算机分配IP地址,另一个是确定哪些地址在同一个自网络。
TCP协议和UDP协议
端口:Port,可以认为是设备与外界通讯交流的出口。端口可以分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器的端口,不可见,例如计算机中的80端口、21端口等。物理端口又称为接口,是可见端口,例如计算机背板的RJ45网口,交换机路由器集线器等RJ45端口,电话使用RJ11端口也属于物理端口的范畴。
通过端口来找到程序
在计算机上每一个需要网络的程序都会开一个端口,在同一时间只会有一个程序占用一个端口,不可能在同一时间有两个程序占用一个端口
端口的范围:0-65535(2^16-1),一般使用8000以后的端口
总结:如果有IP那么我就能确认唯一一台机器、如果有端口那么我就能确认唯一一个程序、如果我有IP和端口那么我就能找到唯一一台机器上的唯一一个程序
内网IP地址:127.0.0.1(本地的回环地址),它不能提供对外服务
TCP协议
Transmisssion Control Protocol,即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
SYN:Synchronize Sequence Numbers,是TCP/IP建立连接时使用的握手信号。在客户机和服务机之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACN应答表示接收到了这个消息,最后客户机再以ACK消息回应。这样在客户机和服务机之间才能建立起可靠的TCP协议,数据才可以在客户机和服务机之间传递。
ACK:Acknowledge character,即确认字符,在数据通信中,接收站发给发送站的一种传输类控制符,表示发来的数据无误。在TCP/IP协议中,如果对方成功的接收到数据,那么会回复一个ACK数据。通常ACK有自己固定的格式,长度大小,由接收方回复给发射方。
三次握手过程
第一次握手:建立连接时,客户端发送syn包(syn = j)到服务器,并进入SYN_SENT状态,等待服务器确认
第二次握手:服务器收到syn包,必须确认客户的syn(ack = j + 1),同时自己也发送一个syn(seq = k),即syn + ack包,此时服务器进入SYN_RECV
第三次握手:客户端收到服务器的syn + ack包,向服务器发送确认包ack(ack = k +1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
完成三次握手,客户端与服务端开始传送数据
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
UDP协议
User Datagram Protocol,UDP为应用程序提供了一种无需建立连接就可以发送封装的IP数据报的方法。当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
QQ它的消息传输用的就是UDP协议
对比
TCP特点:面向连接、可靠传输、面向字节流、流量控制、阻塞控制
UDP特点:无连接、尽最大努力交付、面向报文
互联网协议和OSI模型
每层运行常见物理设备
每层运行常见的协议
两台机器间的传递模式
就是一个包快递->拆快递的过程