网络基础 + 简易服务端和客户端
网络架构及其演变过程
单机架构
- 就只有一个客户端,不需要和服务器交换数据
CS架构
- 客户端(Client)--- 服务端(Server)
- - 客户端:用户安装软件
- - 服务端:统一管理数据库的主机中的软件就叫做服务端,再后来服务端不只是管理数据,外加处理业务逻辑
CS架构要求
- 要求操作系统安装客户端;产商操作系统部署服务端
- 每个用户需要独立安装软件、服务端升级也要每个用户升级
面试题:数据放在服务端和客户端的利与弊?
数据如果放在服务端处理安全性,稳定性而且升级很容易,但是对于服务器的负荷比较大
数据如果放在客户端处理,安全性、稳定性会降低,并且升级需要每个客户端都去升级,不利于节约网络资源
BS架构
- 浏览器(Browser) --- 服务端(Server)
- 统一客户端即默认安装用户电脑中的资源,访问同种类的网站,具体业务的处理根据相应的协议和标砖提供的服务器程序,在服务器中处理
- 原理上来说BS架构其实就是CS架构,就现在来说BS架构与OS架构的区别:
在技术架构,核心技术,在线预订等层面上来说BS架构其实是优于CS架构的,但在原理上来说BS架构其实也是一个cs架构,因为BS的浏览器端,其实也可以说成是客户端
互联网的组成
互联网的组成(教材)
互联网的拓扑结构非常复杂,并且在地理位置上覆盖了全球,从工作方式上看,可以划分为两大块:
- 1.边缘结构:这部分由所有连接在互联网上的主机组成,这部分是用户直接使用的,用来进行通信和资源共享
- 2.核心部分:由大量网络和连接这些网络的路由器组成,这部分用来为边缘结构提供服务.
以上是教材中所划分的:
互联网的组成(科普):
说道互联网大家都不陌生,利用互联网打开手机或者电脑看新闻,刷淘宝,看抖音,现在的互联网已然成为了人们生活的一部分
区块链号称是下一代互联网
互联网的基础设施非常庞大,包含硬件,软件两部分.下面我们先来看一下当你打开你的浏览器没输入一个网址,这样一个简单的动作,有计算机实现的过程:
- 1.浏览器检查是否有缓存过域名对应ip地址
- 2.如果没有缓存的域名对应的ip,请求域名服务器解析成对应的ip地址
- 3.浏览器建立Scoket连接,根据http协议组装get类型的http header,通过tcp/ip发送报文.
- 4.tcp/ip协议会通过网络层网卡(wifi或者网线)发射信号到家庭的路由器,家里面的路由器发送信号到电讯厂商的交换机中,
找到目标服务器,服务器也许托管在IDC机房,也许在阿里云VPS,也许在国外
- 5.机房里面有很多大型的交换机,机柜,专业的精密空调,你要访问的那台ip的服务器就在某个机柜中
- 6.在服务器接收到信号后,会根据tcp/ip协议解出http的协议头,根据get的请求决定需要返回的数据
- 7.在服务器端实际上根据业务还有很复杂的逻辑,服务器后面还有很多台服务器,到底指定那一台服务器来处理请求,需要负载均衡设备来完成
- 8.要返回的数据是在缓存里面,还是在静态文件中,还是在数据库中.
- 9 .根据浏览器返回的数据,发现一些静态资源(css,js等)时又重新发起新的http请求,而这些静态资源文件可能在CDN网络中,请求静态资源的整个过程需要从第一步再走一遍.并且很可能中间经过的交互机,路由的过程是不一样的
互联网的硬件组成
- 1.终端设备
- 2.网络设备
- 3.主机设备
互联网的软件组成
- 1.网路协议类
- 2.操作系统类
- 3.平台中间插件类
- 4.应用类
OSI七层协议
互联网的本质其实就是一些列的网络协议,这个协议就叫做OSI协议,是人为划分的,主要是区别每一层的作用,方便理解
七层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
五层:应用层,传输层,网络层,数据链路层,物理层
四层:应用层,传输层,网络层,网络接口层
以上这三张划分方式其实意义是一样的,只是人记得不同而已
1.物理层:接收高低压电平
2.数据链路层:解释高低压电平,将一电信号划分为一个一个的数据包,数据帧(由报头和数据组成)
-head包含(固定18个字节)
- 发送者/源地址 6个字节
- 接收者/目标地址 6个字节
- 数据类型 6个字节
-data包含:(最短46个自己,最长1500个字节)
3.网络层:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址
- 规定网络地址的协议叫做IP协议,定义的地址叫做IP地址
- 子网掩码就是表示网络特征的一个参数,他在形式上等同于一个ip地址
- IP协议的作用主要是,为每一台计算机分配ip地址和确定那些地址在同一个网络
- 有了MAC地址+IP地址,我们就可以确定世界上独一无二的一台计算机了
- APR协议:获取对方的MAC地址(通过广播的形式),因为每台计算机的IP地址是已知的,所以只需要获取MAC地址,就可以确定计算机了
4.传输层:建立端口到端口的通信
- 找到确定了的计算机上的应用,就需要通过端口,端口是应用程序与网卡关联的编号
- TCP协议:
可靠传输(需要建立连接,三次握手,四次挥手)
- UDP协议:
不可靠传输(不需要建立连接,数据容易丢失,就是玩lol丢包)
5.应用层:规定应用层的数据格式
- TCP协议可以为各种各样的程序传递数据,所以就有了为各种应用程序规定数据格式的协议存在.就构成了应用层
- TCP协议就是一个老好人协议,谁都能来
使用socket建立简易的服务端和客户端
服务端
#导入一个socket模块
import socket
#想象成买手机打电话:socket.SOCK_STREAM 表示建立tcp连接 ,udp连接socket.SOCK_DGRAM
#买了个手机
soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#插电话卡:绑定ip地址 传元组:(ip,端口号)
soc.bind(('192.168.11.146',8080)) #如果写本机ip,局域网外部可以访问
# soc.bind(('127.0.0.1',8080)) #如果写127.0.0.1,只能自己访问
#开机,监听,这个5 是半连接池的大小
soc.listen(5)
#等待别人给我打电话
print('xxxx')
conn,addr=soc.accept()
print('yyyy')
print(addr)
# conn 就是通路
#接收1024个字节
data=conn.recv(1024)
print('我收到客户端发的',data)
#conn.send 发送数据,数据必须是bytes格式
conn.send(b'xxxxx')
#挂断电话
conn.close()
#销毁手机
soc.close()
客户端
import socket
#创建一个socket对象
soc=socket.socket()
#连接服务端
soc.connect(('192.168.11.146',8080))
#发送消息
soc.send(b'xxx')
data=soc.recv(1024)
print('我收到服务端回的',data)
#关闭连接
soc.close()