网络编程,osi七层协议
软件开发架构
规定了程序的请求逻辑,功能分开
分为两种:
1.C/S架构
客户端 (Client)
类似于 我们下载的app,给客户提供软件体验,可以理解成要去消费的客户
服务端 (Server)
相当于 给客户提供服务的服务的场所
服务端必备条件:' 1.必须24小时服务。 2.固定的地址 3.支持多用户 '
服务端必须由客户端来访问,一般情况下基于网络才能访问. 特殊情况下 客户端与服务端会在同一台计算机上。
====================================================================================
2.B/S架构
Browser 浏览器
Sevrver 服务端
"""
本质和c/s架构一样,只是我们在浏览器上当做客户端,没有专属的APP,通过浏览器页面去享受服务
"""
- C/S架构:
优势: 针对客户端可以高度定制
劣势: 需要用户去下载才能使用
-
B/S架构:
优势: 不需要下载,就可以体验
劣势: 无法做到高度定制, 所以体验感就没那么好
网络编程
1.什么是网络编程
基于网络编写代码,能够实现数据的远程交互
2.学习网络编程的目的
能够开发c/s架构的软件
3. 网络编程的起源
始于美国军方>>>: 很多先进的技术都是有军事发明后转为民用
实际应用:
军方想要实现不同计算机之间的数据交互,在当时没有网络编程技术的时候,只能拿硬盘拷贝并携带
4.网络编程的必备条件
1.座机电话 —— 连接时需要电话线
2.大屁股电脑 —— 数据交互需要插网线
3.智能手机 —— 数据交互无限网卡
"""
电话线、网线、无限网卡 —— 远程通信的前提就是必须具备一个物理链接介质
"""
OSI七层协议简介
"""
所有的计算机在生产过程过程中必须有相同的部分和相同的功能 —— 应、表、会、传、网、数、物
"""
1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理链接层
====================================================================================
# 很多人把它们总结成五层
1.应用层(包含了表示层和会话层)
2.传输层
3.网络层
4.数据链路层
5.物理链接层
osi七层协议之物理连接层
计算机之间的物理连接介质。 接受数据,接收电信号(bytes类型,二进制)
OSI七层协议之数据链路层
基于物理链接层收到一串二进制数, 那么如何正常解析
1.规定了电信号的分组方式
2.以太网协议
每台计算机都必须有一块网卡,该网卡上有一串数字。 每块网卡在出厂的时候都会被赋予一个人全世界唯一 的编号,用来记录,这个编号由12位16进制数组成
前6位产商编号 后6位流水线号
也称为"MAC地址"
可以基于MAC地址实现计算机之间的数据通信
OSI七层协议之网络层
ip地址: 规定了计算机接入互联网必须拥有ip地址,每个ip地址只能绑定一台计算机
"MAC地址是物理地址无法修改,ip地址是动态地址也可调成静态"
ip地址有两个版本
IPV4: 点分十进制
最小: 0.0.0.0
最大: 255.255.255.255
我们现在使用的都是IPV4地址,但是IP地址已经快不够用了,所以IPV6出来了
IPV6:
""" IPV6 可以表示出地球上每一粒沙子 """
他的ip地址数量能够给地球上每一粒沙子分一个ip地址。
IP地址可以跨局域网传输前提是 必须申请公网ip地址。
"""
IP地址分为公网IP和私网IP
公网可以直接被浏览器访问到,但是私网不可以
公网需要花钱购买并且需要实名认证并且备案
"""
OSI七层协议之传输层
PORT协议(端口协议)
我们使用的每个应用程序他们每个都有一个独立的端口 ,目的就是为了从内存中获取数据时不会错乱。
范围:
0-65535
特征:动态分配
0 - 1024 系统默认需要使用的端口
1024-8000 常见软件使用的端口号
所以我们在写项目的时候,推荐使用8000之后的端口
# 注意事项
1、同一时间同一台计算机上面的端口号不能重合
2、端口号是动态分配的, 就比如这次打开QQ的端口号是8118,使用完关了,再重新打开的时候可能是8118,也有可能是8888,或者其他数字
3. 也有特殊情况 使用固定端口,当我们使用软件时有的软件自带设置端口。我们可以指定一个端口固定使用。注意:后续不要占用端口
IP地址:用来标识全世界独一无二的一台接入互联网的计算机
PORT号:用来标识一台计算机上面的某一个应用程序
那么IP + PORT :就是定位全世界独一无二的计算机上面的某一个应用程序
所以我们在日常中使用的网址其本质就是""" IP地址+端口号,通过域名解析将网址解析IP+PORT 两者之间使用冒号:连接 """
网络相关专业名词
计算机之间想要实现数据交互 必须 要 '连接'在一起
1.交换机
能够将所有接在交换机设备上的计算机彼此互联
2.广播
首次查找在同一台交换机上的其他计算机,需要向交换机发出广播 ,首次"群发"
3.单播
广播目标计算机回复消息时称为 "单播"并传输 mac地址
4.广播风暴
同一台交换机上的计算机同时 发出广播
5.局域网
单个交换机组成的网络。一个小区域内的网络。
6.广域网
区域更大的局域网
7.互联网
所有局域网,广域网连接到一起
8.路由器
不同局域网之间的计算机无法实现数据交互,需要路由器连接 。
OSI七层协议之传输层
TCP协议
TCP协议 可靠协议(数据不易丢失)
为什么数据不会轻易丢失,不是因为有双向通道,是因为有反馈机制的存在 发送消息后会保留一个副本,直到对方回应收到消息,才会删除副本。
可以理解成一条规则,遵循这个协议就是遵循规则。
在多客户端同时申请建立通信通道时,可以请求做唯一标识。 相当于每个通道都有自己的一串身份识别码。
"三次握手键连接"
彼此之间互相开通道传输数据。
1.客户端向服务端发出开通道需求并附上标识(作为此通道唯一标识)
2. 服务端允许建立通道(+上此通道标识),但此时通道是单向的,服务端也想向 客户端开通通信通道, 发出请求给客户端建立通信通道。 并附上标识。
3. 客户端允许建立 通道。附上标识。
# 上述步骤完成后 就建立了双向通道
"四次挥手断链接"
1.客户端请求断开单向通道。(客户端通向服务端的通道)
2. 服务端确认断开单向通道。
3.服务端请求断开单向通道(服务端通向客户端的通道)
4.客户端确认断开单向通道
# 不能向 3次握手建链接那样 中间2步合并,因为中间需要确认消息是否发完,要思考。
称为: "TIME_WAIT 状态 "(时间等待)
比如说: 你发分手短信给女朋友, 女朋友不会立刻给你回复消息。他需要思考思考。(海后除外)
====================================================================================
"洪水攻击" "SYN_RCVD 状态" (同步收到)
是指在同一时间大量的客户端向服务端申请建立链接。 导致服务端处于 SYN_RCVD状态
解决方案:
设定缓冲池: 设定数量同时只接待规定的数量的客户端,超出部分进入缓冲中排队。当接待中有客户端退出,顺位补位 # 类似于咱们玩游戏排队
三次握手键连接
四次挥手断链接
"listen " 监听
"syn_sent " 请求联系
"SYN_RCVD " 同步收到
"estab_lished " 建立
"TIME_WAIT 状态 " 时间等待
"FIN_WAIT "
UDP协议
丢包协议、不可靠协议
不需要建立双向通道,数据的传输的速度快,但是传输的数据可能会发生丢失
QQ使用的就是UDP协议,以前我们使用QQ得时候经常会发现短信发了对方收不到,所以就存在产生数据的丢失情况。
但如果在UDP协议的基础上做扩展来保证数据的安全就两全其美。
OSI七层协议之应用层
程序员自己写的应用程序。协议狠多
常见的 HTTP , HTTPS, FTP
面试题
# TCP协议之所以比UDP协议可靠 ,就是因为有双向通道 对不对?
不对
TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留