3月27日课后总结

发布时间 2023-03-27 21:33:52作者: 橘子熊何妨

3/27课后总结

软件开发架构

"""
	网络编程就是基于网络编程,之前学的都是单机版的
	网络编程的目的:就是让我们开发出一款C/S架构或者B/S架构的软件,我们还是以ATM为例,客户需要把ATM客户端下载到自己的本地电脑上,以登录为例,用户把用户名和密码在客户端输入完成之后,传到服务端,在服务端进行密码的验证、这就是基于网络传输的软件.
"""
C/S架构
	client(客户端)-------------------网络------------------->server(服务端)
B/S架构
	browser(浏览器)------------------网络------------------->server(服务端)
# 客户端的问题:用户想用就得下载,下载多了就会受影响,用户想用更多就得下载更多
# 由于客户端的问题,随着互联网的兴起,然后就被开发出一款浏览器,浏览器就是万能客户端,或者超级客户端
"""目前,我们使用的软件是两者兼有"""

1. C/S架构
	c:client:客户端(用户)
    s:server:服务端(饭店中的工作人员)
    '''客户端可以有多个!!!'''
2. B/S架构
	b:browser:浏览器 ------> 客户端
    s:server:服务端(饭店中的工作人员)
 '''本质上B/S架构也是C/S架构!!!'''

服务端所具备的特征:	
	1. 24小时不间断对外提供服务
    2. 服务端要有有个公网IP

OSI七层协议

"""物数网传会表应"""
# 我们开发的软件都是基于网络传输,我们现在搞清楚的是网络知识
1. 什么是网络?
	所谓网络就是信息高速公路
    上网的本质就是数据传输的过程
    最开始的时候网络是一个个不互通的局域网,后来把这些局域网串联在一起形成了现在的互联网
    '''网络的组成部分:物理链接设备(网线,交换机,路由器等)+互联网通信协议(计算机界的英语)'''
2. 网络的好处
	# 方便数据传输
3. 互联网通信协议
	# OSI七层协议
    """物数网传会表应"""
    1. 物理层
    	# 硬件层,负责发送1010的高低电频,单纯的1010无意义,需要组合起来,表示不同的意思
    2. 数据链路层
    	# 同一使用以太网协议,一个数据成为一个帧
        # 数据帧 = 数据头(head) + 数据(data)
    3. 网络层
    	使用的是IP协议,固定每一个接入互联网的计算机都必须要有一个IP地址,IPv4地址长什么样子:
        0.0.0.0				------------------->		255.255.255.255
        00000000.0000000.0000000.0000000		11111111.11111111.11111111.11111111
        # 除了IPv4地址之外,还有IPv6地址:表示形式是:十六进制
        """
        	查看自己的IP地址是cmd里面ipconfig(Windows系统,Mac系统或者Linux系统:ifconfig)
        	1. 公网IP:是需要购买的,(阿里云、腾讯云等平台),买过之后的IP是固定的
        	2. 内网IP:以192.168开头的IP地址,也叫局域网的IP
        """
        网络分为局域网,城域网,广域网
        # 一个ip地址可以定义一个局域网,一个mac地址可以定位一个局域网中的一台计算机
        # ip地址加mac地址可以定位一个局域网中的唯一一台计算机
        也可以用arp协议直接讲ip地址解析成mac地址,从而省略mac地址
        # 等到一个IP地址可以定位全世界中的唯一的一台计算机
        需要记忆的一个IP地址:
        		本地回环地址:127.0.0.1,就是还没有出去网络,找到自己的电脑
       '''限制通过IP地址,把计算机之间是不是通信了,通信指的是软件的通信,所以,我们来到了下一层:传输层'''   
    4. 传输层
    	使用的是TCP协议和UDP协议,也称为是端口协议,0-65535之间的一个数字
        # 1. 0-1024之间的端口默认是系统使用的,我们不要使用,如果使用,就有可能端口冲突
    '''在一台计算机中,同一时刻,端口不能重复,因为一个端口就代码这台计算机上的一个应用程序'''
        # 域名本质上也是IP地址,域名要备案的,当你再地址栏中输入域名的时候,其实内部做了一个域名解析,把域名解析成IP地址,DNS解析
        如同这俩:baidu.com  --------------> 1.1.1.1
                jd.com		--------------> 1.1.1.2
        # 2. 1024-8000之间的端口,一般是常用软件的端口
        mysql默认端口:3306
        django默认端口:8000
        flask默认的端口:5000
        # 3. 以后我们自己开发的软件,端口最好使用8000之后的
        ip+port:定位世界范围内独一无二的一台计算机正在运行的一个应用程序
        # 书写格式:127.0.0.1:80
    5. 应用层
    	# 我们程序员其实就在应用层,使用的协议是什么?
    	1. 如果是客户端程序,协议想用什么就用什么,因为客户端是我们自己写的
        2. 如果是浏览器,协议就不能随意用了,就要按照浏览器规定的协议,因为浏览器不是我们自己写的,
        	当然你也可以自己写一个浏览器,那么,协议就可以按照你自己的,但是,你写的浏览器没人用
            '''浏览器使用的协议:http协议,默认端口号:80'''
            https://www.baidu.com/v2/api/?login
            协议://域名:端口/路径?参数
            
            # http://passport.baidu.com:80/v2/api/?login
            https: http + ssl证书
            '''
            	http和https的区别
            		1. https更加安全,密文传输数据
            		2. http不安全,明文传输数据
            		3. https协议监听的默认端口是:443
            '''

常用软件的端口

http协议:80
https:协议:443

TCP协议

# tcp协议是可靠传输,因为数据传输的时候要建立一个双向管道(我们也称其为流式协议,如流水一般)
# 三次握手建立连接,四次挥手断开连接
"""
	一般是客户端发起请求,但是不准确
	webSockert协议,它可以实现服务端主动给客户端发送请求.
	除此之外,都是客户端主动给服务端发送数据
	先让客户端给服务端发送数据,服务端接收数据之后,进行处理之后,在给客户端返回数据
"""
面试题会考到:TCP协议的三次握手(建立的双向链接)和四次挥手(断开链接的),四次挥手能不能缩短为三次?

UDP协议

# 一种不可靠协议,不会建立双向连接
'''如果使用UDP协议,客户端只负责发送数据,至于对方收到没收到,不关心、'''
两者的区别:
	1. UDP的速度更快
    2. TCP数据更安全
案例:远程控制软件一般都是使用UDP协议

socket编程

什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

AF_UNIX:用在局域网中
AF_INET:用在互联网

'''客户端和服务端谁先启动?一定是先启动服务端,在启动客户端'''