网络编程入门
软件开发架构
C/S架构
1.C/S架构
Client:客户端
Server:服务端
"""
我们使用计算机下载下来的一个个app本质是各大互联网公司的客户端软件
通过这些客户端软件我们就可以体验到各个互联网公司给我们提供的服务
eg:
下载淘宝客户端 打开 体验淘宝服务端提供的购物服务
下载抖音客户端 打开 体验抖音服务端提供的视频服务
ps:一般情况下客户端与服务端交互需要互联网 但是有些不需要(因为客户端和服务端都在一台计算机上)
客户端:即将要去消费的客人
服务端:给客人提供服务的店
"""
2.作为服务端具备的多个条件
1. 24小时不间断提供服务
2. 固定的地址
3. 能够服务多个客人(高并发)
B/S架构
2.B/S架构
Browser:浏览器
Server:服务器/端
"""
浏览器可以充当所有服务端的客户端
ps:B/S架构本质还是C/S架构
"""
架构总结
# 目前只有两种架构!
ATM:三层架构
选课系统:三层架构
本质也属于软件开发架构的范畴
# 目前的趋势是B/S!
微信小程序 只下载一个微信 然后通过小程序的方式 去访问很多服务端
那么这个微信是不是相当于B/S架构中的B!
# 软件设计的大方向
>>>:统一接口
微信小程序
支付宝小程序
为什么这么做?
为了统一接口 获取大量用户及数据 中途还可以提供广告服务!
# C/S和B/S的优缺点:
C/S可以高度定制化 但更新时要重新下载安装包
B/S无法高度定制化 因为你写的代码要符合浏览器的规矩
浏览器为了能兼容所有的服务器 必定会有相关规定 不能随心所欲
B/S架构可以通过浏览器去各个网站 享受各个网站的服务 而C/S架构只能去客户端对应的服务端
所以C/S开始整合资源 于是出现小程序 使得单个客户端里可以访问别的服务端!
网络编程发展史
1.什么是网络编程
基于网络编写代码 能够实现数据的远程交互
2.学习网络编程的目的
能够开发cs架构的软件
3.网络编程的起源
"""
最早起源于美国军事领域
想实现计算机之间数据的交互
最早的时候只能用硬盘拷贝
之后发明了网络编程
"""
4.网络编程必备条件
数据的远程交互
1.早期的电话
电话线
2.早期的大屁股电脑
网线
3.笔记本电脑、移动电话
网卡
实现数据的远程交互必备的基础条件是'''物理连接介质'''
但是有物理链接介质还不够! 还需要另外的一个东西! 比如交流要统一语言。
这个东西就是:互联网协议!
不同计算机之间想要实现无障碍交流
除了需要有物理链接介质之外还需要一套公有的标准
这个标准是>>>: 互联网协议(OSI七层协议)
# 比如不同厂家的厂商 也会有相同的接口 因为这些都被互联网协议统一了 方便互联、计算机通信!
OSI七层协议
简介
"""
OSI七层协议:规定了所有的计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能硬件
"""
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层
ps:应、表、会、传、网、数、物
'''常见的是整合之后五层或者四层'''
应用层
传输层
网络层
数据链路层
物理连接层
应用层
传输层
网络层
网络接口层
"""
接收网络消息 数据由下往上传递
发送网络消息 数据由上往下传递
"""
物理连接层
主要用于确保计算机之间的物理连接介质 接收数据(bytes类型、二进制)
比如规定网线材质 网口设计!
数据链路层
电信号的分组方式(NF)
基于物理链接层接收到一串二进制数 如何切分才能正常解析?
以太网协议
以太网协议:
规定了计算机在出厂的时候都必须有一块网卡 网卡上有一串数字
该数字相当于是计算机的身份证号码是独一无二的
该数字的特征:12位16进制数据
前6位产商编号 后6位流水线号 因为包含时间信息所有不会重复!
该数字也称为:以太网地址/MAC地址 也称为物理地址
交换机
两台计算机通过mac地址插一根网线就可以连接了,但是如果要与更多的计算机交互呢?
为了解决一台计算机连接多台计算机 难道一台计算机插几百根网线吗?
所以出现了交换机:
- 让接入交换机的多台计算机之间彼此互联。接入交换机的多台计算机,彼此之间是互联的!
- 由交换机组成的网络叫局域网(一个区域)
广播
广播:首次查找接入同一个交换机的其他计算机 需要朝交换机里面吼一嗓子
在交换机里所有的计算机都可以接受到这个信息!
单播
单播:首次被查找的计算机回应查找它的计算机 并附带自己的mac地址
比如:只有服务器1听到之后才会回复 诶我在这 我的mac地址(恰个w)传给你 你就不用再吼了!
广播风暴
广播风暴:接入同一台交换机的多台计算机同时发广播
大家都在吼!谁都听不见,都晕了!交换机同一时间出现太多广播操作,导致交换机瘫痪。
总结
局域网
可以简单的理解为有单个交换机组成的网络
在局域网内可以直接使用mac地址通信
广域网
可以简单的理解为范围更大的局域网
互联网
由所有的局域网、广域网连接到一起形成的网络
路由器
不同的局域网计算机之间是无法直接实现数据交互的 需要路由器连接
手机的4G 5G 也是连接路由器(基站) 访问别的局域网计算机
网络层
路由器
路由器实现跨局域网交互!
如果不用家里的路由器,用流量,实际是用运营商的路由器,实现跨局域网通信。
路由器:将局域网彼此链接起来并支持数据交互
'''互联网其实可以看成是由多个局域网链接在一起! '''
IP协议
# IP协议:
规定了所有'''接入互联网'''的计算机都必须有一个IP地址 类似于身份证号
mac地址是物理地址可以看成永远无法修改
IP地址是'''动态分配'''的 不同的场所IP是不同的
可以取决于所接的网线,你换跟根网线IP地址就变了。
# IP地址特征:
IPV4:点分十进制
0.0.0.0
255.255.255.255
IPV6:能够给地球上每一粒沙分一个IP地址
IP地址可以跨局域网传输
# IP地址分为公网IP和私网IP:
公网IP是需要花钱购买的!并且需要实名认证并备案
小网站 非法网站在国外注册备案
# arp协议:
处于数据链路层 可以把IP协议转成mac地址 所以说最终两台计算机联系还是要有一个唯一的物理地址
谁正在使用某个IP地址 我们就可以通过IP地址动态解析到使用者的MAC地址。
ps: IP地址可以用来标识全世界独一无二的一台计算机
网络地址和主机地址(重要)
# IP地址可以划分为两个部分,一个是网络地址,一个是主机地址
我们可以通过子网掩码去去确定网络地址和主机地址
'''
1. IP:192.168.1.199 11000000.10101000.00000001.11000111
子网掩码:255.255.255.0 11111111.11111111.11111111.00000000
此时,网络地址就是前24位 + 主机地址是后8位。你可能见过有些IP这样写 192.168.1.199/24,意思也是前24位是网络地址。
2. IP:192.168.99.254 11000000.10101000.01100011.11111110
子网掩码:255.255.240.0 11111111.11111111.11111100.00000000
此时,网络地址就是前22位 + 主机地址是后10位。你可能见过有些IP这样写 192.168.99.254/22,意思也是前22位是网络地址。
'''
划分网络地址和主机地址的意义:
网络地址相同的IP,也属于同一个网段
在局域网中,只有同一个网段的IP才能相互通信,不同网段IP想要通信需要借助路由器的转发才能通信。
公网IP和私网IP
IP地址分为公网IP和私网IP:
公网IP是需要花钱购买的!并且需要实名认证并备案
小网站 非法网站在国外注册备案
- 第一步:左边公司,去运营商申请公网的固定IP(办理专线宽带时运营商会分配至少1个固定的IP地址),其实运营商就是将你拉的这个专线和固定IP创建绑定关系。(假设公网IP:123.206.15.88)
- 第二步:配置公网IP与指定服务器的转发规则。
- 第三步:右边家庭,如果想要访问某个公司服务器上的网网站,只需要执行指定IP:123.206.15.88,运营商就会根据IP找到与之关联的公司专线,并通过公司路由器、防火墙等设备找到指定的服务器。
按理说,每个从运营商接入网的用户都可以有一个外网IP,但由于全球用户太多而IP根本就不够分配,所以,运营商网络会进行划分,让多个家庭宽带用户共用一个公网IP(动态,可能每次上网公网IP都不一样)。
让家庭用户想要通过网络访问访问其他IP时,先发给运营商由运营商向外转发到其他IP。
注意:外部用户想要访问家庭宽带的IP时,运营商不会把请求转发到我们的电脑。
我们如果想要开发一个可以供全球用户访问的网站,那么我们就需要以下几点:
- 拉专线,申请固定公网IP
- 买一台服务器(就是性能好的电脑)
- 公网IP绑定至此服务器
- 将写好的代码放在服务器上并运行起来
传输层
PORT协议(端口协议)
端口协议:计算机通过端口号管理正在运行的诸多应用程序。
一台计算机上面可以运行很多数据交互软件 比如微信、qq、钉钉
不同的软件 都是从内存中获取数据 为什么不会错乱 比如你微信收到QQ发来的信息!
是因为端口协议的存在!!!
规定了某一个应用程序必须有一个固定的号码。
把内存划分出很多小的区域供使用 一个应用程序就在一个小的内存区域中存取数据。
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
端口号的范围、端口号动态分配(重要)
# 端口号的范围
0-65535
一台计算机最多同时运行 65536 个应用程序(理论上)
0-1024:系统经常使用的端口号
1024-8000:常用软件端口号
我们写项目用 8000 之后的!
# 动态分配
1.同一时间同一计算机上面端口号只能给一个应用程序用
2.端口号是动态分配的
隐喻:去洗浴中心,端口号是一个箱子,里面装了很多手牌,来了就拿一个手牌,走了手牌要归还。
# 举例
软件启动的时候 是可以指定端口号的 没有指定端口号就动态分配
微信关了再打开,可能分配的就是另外一个端口号
多QQ号登录 是两个端口 肯定不一样 一样就数据冲突了
# 常见软件的端口号
常见端口号(<256):
21端口号:FTP 文件传输服务
22端口号:SSH 远程登录(安全性较高 加密认证)- TCP
23端口:Telnet 远程登录服务 TCP
25端口:SMTP 简单邮件传输服务
53端口:DNS 域名解析服务 TCP和UDP
80端口:HTTP 超文本传输协议 TCP
110端口:POP3 “邮局协议版本”使用的端口
443端口:HTTPS 加密的超文本传输协议 TCP
520端口:RIP UDP
URL本质(重要)
# URL
网址的本质是IP和PORT组成的!!!
1. IP+PORT (重要)
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于表示一台计算机上面的某一个应用程序
IP+PORT 能够标识全世界独一无二的一台计算机上面的某一应用程序
访问网址 其实就是访问某一台计算机上的某个应用程序
我们日常生活使用浏览器访问的各个网址其实就是IP+PORT
比如:14.215.177.39:80
遵循格式:ip:port
2. 无需指定端口
很多常见的服务端都不需要指定端口 比如百度!
只要访问了ip地址 内部会自动映射 不需要指定端口了
eg:或者服务端只开放了一个80端口
DNS域名解析
我们通过IP地址就可以访问网站了!但是为什么网址长这样:
www.baidu.com # 好记
14.215.177.39:80 # 难记
我们之所以不直接使用IP+PORT的原因是太难记 所以发明了域名(网址)
域名解析:将网址解析成IP+PORT
补充
- 应用层:为用户程序提供网路服务,使用的协议有HTTP、TFTP, FTP, NFS, WAIS、SMTP
- 表示层:对信息进行语法处理,可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取,使用的协议有Telnet, Rlogin, SNMP, Gopher
- 会话层:通过传输层(端口号:传输端口与接收端口)建立不同的会话请求,主要是在系统之间里建立对话以及接收对话。使用的协议为SMTP, DNS
- 传输层:接受上一层的数据,将上层的数据进行分割操作,在当到达目的地址的时候再进行重组,常常把这个数据叫做段。使用的协议TCP,UDP
- 网络层:对在不同地理位置的网络中的两个主机系统提供连接和路径选择,使用的协议有IP,IPv6, ICMP, ARP, RARP, AKP, UUCP
- 数据链路层:定义了数据化格式化传输,如何控制对物理介质的访问,这层提供信息的检测和纠正,以确保数据的可靠性传输,使用的协议有FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
- 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特,使用的协议有IEEE 802.1A, IEEE 802.2到IEEE 802.11
参考:https://www.cnblogs.com/qiguanfusu/articles/16892669.html