OSI七层协议&TCP协议(三次握手四次挥手)
今日内容
- python 基础回顾
- 软件开发架构
- 网络理论前戏
- OSI 七层协议(五层)
- TCP协议
- 三次握手与四次挥手
- UDP协议
内容详细
一、python 基础回顾
1、基本数据类型
整型 int
浮点型 float
字符串 str
列表 list
字典 dict
元组 tuple
集合 set
布尔值 bool
2、字符编码意义与分类
意义:
内部记录人类字符和数字对应关系的数据
分类:
ASCII码
GBK码
shift_JIS码
Eur_kr码
unicode(万国码)
utf8(万国码的优化版本)
现在默认使用的编码是utf8
3、函数
类似工具,提前定义好之后就可以反复使用
4、对象、类、父类
对象
对象是数据与功能的结合体
'''对象必须要由类产生!!!'''
类
类:一系列对象相似的特征与相似的技能的结合体
类的三大特性:
封装、继承、多态
继承重点掌握
# 继承案例:
把对象存放json成格式文件
import json
from datetime import date, datetime
class MyJsonClass(json.JSONEncoder):
def default(self, o):
# 判断o是否符合序列化类型,不符合则把对象中的datetime方法格式化输出成字符串保存
if isinstance(o, datetime):
return o.strftime('%Y-%m-%d %X')
elif isinstance(o, date):
return o.strftime('%Y-%m-%d')
return o.super().default(o)
# 定义一个字典,它的v值是个对象
d = {'time1': datetime.today(), 'time2': date.today()}
# 把字典转换成json格式
res = json.dumps(d, cls=MyJsonClass)
print(res)
# 打印会报错,因为json不支持对象的格式转换,需要把对象的内容转换成字符串
# print(res)
# TypeError: Object of type 'datetime' is not JSON serializable
# 把对象内容转换成字符串:
# 方法一:人工只智能转换 str()
# 方法二:利用继承特性,自定义json的类,继承json原有类,重定义default方法,转化字符串
会查看源码:
父类
父类 : 结合子类相似的数据和功能,子类可以继承父类并使用父类中的属性与方法
二、软件开发架构
1、C/S 架构
c/s架构
c:client 客户端
s:server 服务端
"""
将客户端看成是去店里消费客人
将服务端看成是提供服务的店面
eg:收集各种app其实就是各大软件的客户端
服务端需要具备的三大特征
1.24小时不间断提供服务(24小时监听)
2.固定的地址(IP地址)
3.能够服务多个用户(高并发)
"""
2、B/S 架构
b/s架构
b:browser 浏览器
s:server 服务器
"""
浏览器统一充当各个服务端的客户端
本质:bs架构本质上也是cs架构
"""
统一:各大互联网巨头正在做的事情
eg:
微信小程序(微信提供开发微信小程序的软件)
支付宝小程序(各大程序接口)
# 总结
网络编程学习完就可以开发cs架构的软件(简易版本)
并发编程、前端、数据库、后端框架就可以开发bs架构软件(任何类型的软件)
三、网络编程前戏
网络编程其实研究的是程序之间的数据通信
由来:
基于远程传输数据的技术最早诞生于美国军方(前沿技术通常都是由军事产生)
远程数据传输发展史(民用)
1.有线电话 电话线互联
2.无线电话 信号发射器
3.大屁股电脑 网线
4.笔记本电脑 网卡
...
"""
要想实现远程数据交互的前提是必须要有物理连接介质
"""
除了有物理连接介质之外还应该有一些能够保证数据彼此无障碍交互的东西(标准)
OSI七层协议
四、OSI 七层协议
知识储备
交换机:能够使接入该机器的所有计算机之间彼此互联
局域网:由交换机和接入该交换机的所有计算机组成的网络
互联网:简单理解为多个局域网之间彼此互联
'''
基于mac地址的数据传输
1、广播风暴
2、mac地址不能跨局域网传输
'''
路由器:能够连接多个局域网并实现局域网之间的数据传输
1、七层协议
应用层
表示层
会话层
传输层 端口号(定位计算机中的的软件)
网络层 IP协议(互联网)
数据链路层 以太网协议、mac地址(作用在局域网中)
物理层
# 开发的五层协议
应用层
传输层
网络层
数据链路层
物理层
2、物理层
提供一个物理连接接口(网线口 无线网卡)
3、数据链路层
1、规定电信号的分组方式
2、以太网协议
规定计算机必须有一块网卡,并且网卡上要有固定的一串数字(12位十六进制的数字)
12位十六进制数
前六位:产商编号
后六位:流水线号
上述数字也被称为计算机的'mac地址'(用于定位局域网内计算机地址)
4、网络层
IP 协议
IP协议:
规定了接入互联网的计算机都必须有一个IP地址用于唯一标识
IPv4:
最小 0.0.0.0
最大 255.255.255.255
然而近些年来IPv4的地址逐渐不够用
IPv6:
能够表示出地球上的每一粒沙子
# IP地址能够标识接入互联网的一台独一无二的计算机
公网IP和私网IP
公网IP需要花钱购买并申请
私网IP是自带的,但无法基于互联网访问(192.168 开头的)
# arp协议
将IP地址转换成mac地址(基于网络请求)
5、传输层
端口协议
端口号:
'''能够唯一标识一台计算机上正在运行的一款应用程序'''
范围: 0~65535
特性: 动态分配
eg: 第一次运行微信,系统随机取一个端口号2022
然后关闭微信重新启动,系统再随机取一个端口号
端口号的基本使用:
0~1024 系统默认需要使用的端口号
1024~8000 常见软件端口号
以后自己开发的软件最后使用8000之后的端口号
'''
端口号在同一台计算机同一个时刻不可以重复
'''
总结:
ip+port 172.16.1.5:8080
'''
ip地址 + 端口号 能唯一标识世界上某一台接入互联网的计算机上某一个正在运行的应用程序
'''
TCP 协议
流式协议 可靠协议
三次握手 建立链接
重要状态
listen监听态:等待对方发请求
syn_rcvd态:忙于恢复确认建立请求
# 洪水攻击:服务端在同一时间接收到了大量的要求建立链接的请求
四次挥手 断开链接
不能合并成三次
又有可靠协议、流式协议之称
# 可靠协议:
TCP协议有反馈机制,当发送方传输一段数据给接收端后,接收端需要反馈信息(我收到了)给发送方,发送方才会继续传输剩下的数据,如果不回馈,发送方会在规定时间内间隔传输,都没有反馈信息则停止传输
# 流式协议:
传输数据是一边传一边存的形式,不是一次性传完
# 三次握手 建立连接通道
客户端与服务端要建立的传输数据通道都是单向的
每建立一个通道都需要发送方发送建立请求,接收方同意请求,才能建立成功(syn=x、ack=x+1)
每次发送建立连接请求称为 一次握手
在第一次建立通道,服务端返回同意建立连接的信号时,可以同时发起建立服务端到客户端的连接请求,两次握手合并在了一起,所以三次握手就可以建立两条相互通信的连接通道
# 四次挥手 断开连接通道
断开链接通道也需要一方发起断开请求,另一端同意才能断开
每次发送断开链接请求也成为 一次挥手
在断开之前,服务器方会有一段真空期,确保全部数据已经全部传输完成了才会请求断开
UDP 协议
不可靠协议
数据发送没有通道的概念,发送出去之后就不管了
'''
TCP协议相当于打电话 你一句我一句 你侬我侬
UDP协议相当于发短信 发了就完事 管你看不看
'''
早期的QQ使用的就是UDP
UDP虽然是不可靠协议,但是可以在后期通过各种脚本弥补它的缺点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)