osi七层协议
1.软件开发架构
网络编程:我们要编写一款基于网络传输的软件,你现在写的项目都不是基于网络的,比如ATM client -------------网络传输----------------server 客户端 服务端 我们通常称这种架构为 c/s 架构 客户端服务端是存在一定的问题的: # 当我们需要下载大量的软件的时候,会占用大量的资源,其次,就是使用起来不方便,因此,这个时候,就有人站出来开发了浏览器,那么,这个浏览器其实也是一个客户端,浏览器它是一个万能客户端,超级客户端 browesr server 浏览器(客户端)-------网络传输--------服务端 我们通常称为这种架构为B/S架构 """本质上B/S架构也是C/S架构!!!""" # 当下我们使用的软件架构模式是二者兼有! """很多的公司开发的软件都是小程序(微信), 为了转换更加容易一些"""
2. OSI七层协议
背景: 在早期的时候,其实世界范围内的计算机是不能够互相通信的,当时的计算只是在'局域网'中通信,后来呢,世界范围内的计算机也通信了,在广域网中通信,这就是互联网. 网络的组成:物理链接设备(路由器、交换器、网线等) + 计算机界的英语(互联网通信协议) 2. 互联网通信协议(osi七层协议) 互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。 """协议是干什么的,协议就是标准。""" 七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 五层划分为:应用层、传输层、网络层、数据链路层、物理层。 四层划分为:应用层、传输层、网络层、网络接口层 """ 1. 物理层 # 它是专门用来发送高低电频的 其实就是二进制 (011000101101010001010) 物理层单纯的发送电频是没有任何意义的 因为不知道发送的电频是什么意思 所以 需要对发送的电频进行分组 但是物理层做不了分组 2 .数据链路层 它就是专门用来对物理层发送过来的数据进行分组的,该层使用的以太网协议ethernet 一组电信号构成一个数据报,叫做帧,或者叫数据帧,数据帧的组成:报头head和数据data两部分 ● head包含:(固定18个字节) ○ 发送者/源地址,6个字节 ○ 接收者/目标地址,6个字节 ○ 数据类型,6个字节 # 数据报的具体内容:head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送 Mac地址: 以太网协议规定,每一个接入互联网的设备都必须要有一个网卡,发送端和接收端的地址便是指网卡的地址,即Mac地址 每块网卡出厂时都被烧制上一个世界唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号。 # 通过一个Mac地址能不能确定局域网中得唯一一台计算机? 能确定 3. 网络层: 该层使用的是IP协议,规定每一个接入互联网的计算机都必须要有一个IP地址,网络层中的数据我们称为是数据包,IP地址的组成格式 分类:IPv4、IPv6, 目前大多数用的都是IPv4,由于IPv4地址即将耗尽,所以,其他场景开始使用IPv6了 0.0.0.0------------------------------------->255.255.255.255 00000000.00000000.00000000.00000000 ----------> 11111111.11111111.11111111.11111111 # 192.168开头的地址基本上都是局域网中得ip地址 # 公网ip:需要购买的,阿里云、腾讯云的,人家或给你一个公网ip地址,固定的,不会变。172.0.1.200 # 内网ip:192.168开头的地址基本上都是局域网中得ip地址 IPv6:十六进制表示法 """ 如何查看自己的IP地址: windows: cmd----->ipconfig linux(macOS): ifconfig """ # 其实通过一个IP地址它是可以定位唯一一个局域网 """IP+Mac地址确定世界范围内的唯一一台计算机? 是的""" 但是我们知道,现在只需要一个IP地址就能够确定唯一一台计算机,那是因为:arp协议的玩意儿,它能够通过你的IP地址计算出Mac地址,归根结底还是:IP+Mac地址 # 记忆:本地回环地址:127.0.0.1(你自己的电脑) # 192.168.1.252 127.0.0.1 localhost (这两个有时候会有区别) 4. 网络传输层: 该层使用的是TCP协议或者是UDP协议,暂且忽略. 它也称之为是端口协议,一个端口可以代码一个应用程序 端口的范围:0-65535 """ 1. 0-1024之间的端口号都是系统自己使用的 2. 1024-8000之间的端口号一般是常用软件的端口号 MySQL:3306 Django:8000 flask:5000 ... 3. 我们自己开发的软件,端口一般选择8000之后的到65535 """ 同一个端口号只能够表示一个正在运行的应用程序,端口号不能够冲突,但是,软件一旦关闭,就会释放出来占用的端口号,别的应用程序就能够使用了. 常用软件的端口号: 应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL 熟知端口 21,20 69 23 25 53 80 22 3306 传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP 5. 应用层; Application App 该层就是离用户最近的一层,比如,微信、QQ、腾讯会议、pycharm等都是一个一个的应用,他们都在应用层 1. 客户端:你想使用什么协议都行,自己开发的软件,协议你自己选择 2. 浏览器:你就不能够随便使用了,就要安装浏览器规定的协议使用,而浏览器使用的协议恰好事HTTP协议 3. Https协议 HTTP协议 HTTPS协议 https://www.baidu.com/ 协议://域名/v1/v2?参数 https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3 """ HTTP协议 1. 是明文传输数据 2. 不安全 HTTPS协议 1. 是密文传输数据 2. 安全 https = http + ssl证书(它是需要申请的,国际机构,公钥、私钥等) nginx服务器:配置文件,需要在配置文件中配置一些东西,就能够把你的http改成https """ 域名解析: DNS服务器它就是用来解析域名的,域名的本质其实就是IP地址,域名比IP地址好记,最终还是需要把域名解析成IP地址 baidu.com 110.242.68.66 域名的解析过程: 1. 首先会先从本地开始解析hosts文件 2. 会去对应平台的域名关系表中取查询
"""
3.
客户端 服务端 """客户端要想给服务端发送消息,肯定需要建立链接""" tcp协议它也称为是可靠协议(三次握手), 流式协议(发送数据可以分多次发送 100M数据 10M 10次) 三次握手--------------------> 建立链接 四次挥手---------------------> 断开链接 """一定是客户端先给服务端发送消息,然后,服务端给客户端做返回信息""" # 有个个例,服务端可以先给客户端发送消息,需要使用websocket协议,一般用在即时通信软件 客服系统、微信、QQ等都是 客户端可以是多个的,服务端(饭店)只有一个 面试题: 1. TCP协议的可靠性,是因为建立了双向通道? 不是。是因为TCP协议的反馈机制 2. 四次挥手能不能省略为三次挥手? UDP协议: 它不可靠、是因为它不建立链接,没有三次握手、四次挥手 速度快 远程控制
tcp 和 udp 协议在网络传输层