软件开放机构、OSI七层协议、TCP协议和UDP协议
软件开发架构
网络编程:我们要基于网络来编写一款B/S或者是C/S架构的软件,比如:ATM,我们只写写的ATM系统都是单机版本的,没有接入网络的系统,别人时无法访问到的
# 目的:
"""
以ATM为例,现在我们想把之前写的ATM系统编程基于网络传输的,别人如果想用,就必须把客户端下载到本地电脑上,以登录为例,用户把用户名和密码在客户端输入完成,然后,把用户名和密码传到服务端进行用户名和密码的验证,这就是一款基于网络开发出的软件.
"""
客户端(C)------------------------网络传输----------------------------------->服务端(s)
client server
# B/S的由来
客户端和服务端存在的问题:当我们下载大量的软件的时候,会占用用户电脑的大量资源,时间长了之后,电脑就会受影响. 用户想要使用软件就必须下载,而每次下载都是成本很高的
B/S
browser server
浏览器-------------------------网络传输---------------------------------------------服务端
"""
由于之前的客户端都要让用户去下载,所以,后来就有人站出来,开出来了一款浏览器,以后你在开发的软件直接可以在浏览器打开,不用下载任何的客户端,浏览器我们也称之为是万能客户端,超级客户端.
"""
B/S
浏览器(browser):就类似于用户
服务端(server):饭店中的工作人员
C/S:
客户端(client):就类似于用户
服务端(server):饭店中的工作人员
"""客户端是可以有多个的,服务端一般是只有一个(针对一款软件)"""
# 本质上B/S架构也是C/S架构!
"""目前,我们所使用的软件是二者兼有!!!"""
服务端所要具备的特征:
1. 24小时不间断对外提供服务
2. 服务端要有一个公网IP(服务器:理解成是另外一台计算机而已,是需要去买的,阿里云、腾讯云之类的)
OSI七层协议
下面是协议层从底层至顶层的一个模型图:
以及每一层相对应的功能:
1. 什么是网络?
# 上网的本质其实就是:上传和下载数据的过程
"""
最开始的时候,世界上的计算机是不能互相通信的,只是在局域网中通信,后来,随着技术的发展,世界范围的计算机开始通信了,通过网络来通信,这就是我们现在所说的互联网.
"""
网络的组成部分:物理连接设备(网线、交换机、路由器等) + 计算机通信协议(英语)
物理层:
它是专门用来发送高低电频的, (01)1010(10101110)101010(1010)
'''单纯的发送高低电频是没有意义的,需要对电频进行分组,来表示不同的意思'''
# 物理层是不能做分组的
数据链路层:
数据链路层:专门用来做分组使用的
该层中的数据称之为是一个数据帧,数据帧有两部分组成:head(报头)+data(真实数据)
head部分:# 固定18个字节
○ 发送者/源地址,6个字节
○ 接收者/目标地址,6个字节
○ 数据类型,6个字节
data:
最短46字节
# 数据报的具体内容:head长度+data长度=最短64字节
"""该层使用的是以太网协议,以太网协议规定,任何接入互联网的计算机都应该有一个网卡,默认的就叫以太网"""
Mac地址:每一个网卡都要有一个Mac地址,每块网卡出厂时都被烧制上一个世界唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示
# Mac地址可以确定局域网中唯一一台计算机
网络层:
这一层使用的是IP协议,该协议规定接入互联网的计算机都必须要有一个IP地址,该层的数据称之为是数据包. IP地址的分类:IPv4、IPv6
IP地址:ip地址可以确定世界范围内任意的一个局域网,
IP地址的组成:
# IPv4地址的格式:
0.0.0.0----------------------------------------->255.255.255.255
00000000.00000000.00000000.00000000------------------->11111111.11111111.11111111.11111111
如何查看自己电脑的IP地址:
Windows系统:ipconfig
linux(macOS): ifconfig
1. 公网Ip:固定的,不变,需要购买的(服务器), 阿里云、腾讯云、百度云等,172.12.1.101
2. 内网IP:192.168.1.63,会变的
子网掩码: IP+子网掩码
"""IP地址+MAC地址可以确定世界范围内唯一一台计算机!"""
# 其实,这里只需要IP地址就可以确定世界范围内的唯一一台计算机,为什么?
因为:有一个叫arp协议,可以根据IP地址计算出来Mac地址,所以,有了IP地址就相当于有了Mac地址
需要记忆:本地回环地址:127.0.0.1(就是找自己的电脑)
传输层
该层使用的是TCP协议和UDP协议(暂时忽略),也称为是端口协议,我们一般使用端口来表示一个个的应用程序
# 一个端口表示一个正在运行的应用程序.
端口:0-65535、
"""
1. 0-1024之间的端口号一般是系统使用的,我们尽量不要使用,否则有可能会造成端口冲突
2. 1025-8000之间的端口号一般是常用软件软件的端口号
MySQL的默认端口号:3306
Django的默认端口号:8000
3. 以后我们自己开发的软件,尽量使用8000之后的
"""
常用软件的端口号:
应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL
熟知端口 21,20 69 23 25 53 80 22 3306
DNS:域名解析
baidu.com
jd.com
taobao.com
"""域名的本质其实就是IP地址,域名最终还是要解析成对应的IP地址,才能找到IP地址对应的计算机"""
baidu.com -------------------DNS--------------------------------------->172.1.1.1
# 我们有一个地方保存了域名和IP地址的对应关系
baidu.com 127.0.0.1
jd.com 127.0.0.2
taobao.com 127.0.0.3
...
# 文件的后缀名是给我们看的,文件可以有后缀名也可以没有,Linux中,一切皆文件.
1. 先从你自己电脑的host文件中查找的
2. 如果hosts文件没有找到对应的关系, 在去对应平台的关系中去找
3. 域名是需要去购买的,并且是需要备案的
应用层:
Application
才是跟我们程序员离的最近的一层
1. 客户端,想用什么协议就用什么协议,客户端是我们自己开发的
2. 浏览器,我们就不能随便使用协议了,就要按照浏览器的协议,HTTP协议(先忽略)
3. HTTP协议
HTTPS协议
网址:https://www.baidu.com/?tn=49055317_42_hao_pg
协议://域名:端口/v1/v2?参数
"""
http特征:
1. 不安全,因为经过http协议的数据都是明文传输的
https协议:
2. 安全,经过https协议传输的数据都是密文传输
https = http + ssl证书
ssl证书:要去机构申请,国际组织,怎么用呢?
NGINX服务器,需要在nginx服务器的配置文件中配置一些代码才能使用.
"""
网络七层协议记忆口诀是什么?
网络七层协议记忆口诀是:应,表,会,传,网,数,物,七个关键字。
OSI是一个开放性的通信系统互连参考模型,是一个定义得非常好的协议规范。
OSI模型有7层结构,每层都可以有几个子层。大多数的计算机网络都采用层次式结构,即将一个计算机网络分为若干层次,
处在高层次的系统仅是利用较低层次的系统提供的接口和功能,不需了解低层实现该功能所采用的算法和协议;
较低层次也仅是使用从高层系统传送来的参数,这就是层次间的无关性。
TCP协议和UDP协议
什么是TCP?
TCP(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的字节流服务,也就是说,在收发数据前,
必须和对方建立可靠的连接。这一过程和打电话类似:先拨号振铃,等待对方接电话,说喂,再说自己是谁。
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的传输层。
什么是UDP?
UDP (User Datagram Protocol,用户数据报协议),是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种非连接的传输层协议,
提供面向事务的简单不可靠信息传送服务,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上,故也不安全。
TCP协议的三次握手和四次挥手
TCP协议也叫可靠协议,流式协议(数据是可以分多次发送的)
三次握手-------------->为了建立链接
1、客户端采用TCP协议将带有SYN标志的数据包发送给服务器,等待服务器的确认。
2、服务器端在收到SYN的数据包后,必须确认SYN,即自己发送的ACK标志,同时,自己也将会向客户端发送一个SYN标志。
3、客户端在接收到服务器短的SYN+ACK包后,自己会向服务器发送ACK包,完成三次握手。那么客户端和服务器正式建立了连接,开始传输数据。
四次挥手--------------->断开连接
1、在整个通信的过程中,谁先发起请求,谁就是客户端。
当客户端的数据传输到尾部时,客户端向服务器发送带有FIN标志的数据包,使其明白自己准备断开通信了。
2、因为TCP的通信是使用全双工通信的WebSocket,所以在断开连接的时候也应该是双向的;当服务器收到带有FIN标志的数据包时,其必不会直接发送FIN标志断开通信的请求,而是先发送一个带有ACK标志的应答信息,使客户端明白服务器还有数据要进行发送。
3、当 服务器的数据发送完成后,向客户端发送带有FIN标志的数据包,通知客户端断开连接。
4、这一次挥手是我觉得四次挥手中设计的最巧妙的一次。
当客户端收到FIN后,担心网络上某些不可控制的因素导致服务器不知道他要断开连接,会发送ACK进行确认,同时把自己设置成TIME_WAIT状态并启动定时器,**在TCP的定时器到达后客户端并没有接收到请求,会重新发送;当服务器收到请求后就断开连接;当客户端等待2MLS(两倍报文最大生存时间)后,没有收到请求重传的请求后,客户端这边就断开连接,**整个TCP通信就结束了。
TCP协议的三次握手为什么可以保证数据安全?是因为建立了双向通道吗?
原因是:TCP协议的反馈机制
面试题:TCP协议的三次握手(建立的双向链接)和四次挥手(断开连接的),四次挥手能不能缩短为三次?
不可以,TCP协议的四次挥手过程是必要的,无法缩短为三次。这是因为在TCP连接的断开过程中,
需要确保双方都能够完成数据的传输和确认,以防止数据丢失或者重复传输的问题。
四次挥手的过程可以确保双方都能够完成数据的传输和确认,从而保证连接的可靠性。
如果将四次挥手缩短为三次,可能会导致数据的丢失或者重复传输的问题。
因此,四次挥手是TCP协议设计的必要步骤,不能缩短为三次。
"""客户端与服务端之间一定是客户端先向服务端发起请求,而不能返回来"""
# 特殊情况:服务端可以主动向客户端发起请求 websocket协议,一般用在即时通信软件中
UDP协议:
1. 不建立双向连接,也没有三次握手
2. 速度快
合集:
Python之网络编程
分类:
python快速入门
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律