网络编程 之 网络协议
网络编程 之 网络协议
C/S B/S 架构
- C:client端 / 客户端
- B:Browser / 浏览器
- S:Server / 服务端
C/S 客户端与服务端之间的架构
- C/S 客户端与服务端之间的架构 : QQ ,微信 ,游戏 , App的都属于C/S架构
优点
- 安全性高 , 个性化设置丰富 , 功能全面 , 响应速度快
缺点
- 开发与维护成本高 , (基于App) 面向客户固定
B/S 浏览器与服务器之间的架构
- B/S 浏览器与服务器之间的架构 , 属于C/S架构,最近几年比较流行的特殊的C/S架构 例如 : 浏览器
优点
- 开发 / 维护成本低 , 面向用户广泛
缺点 :
- 安全性相对低 , 响应速度慢 , 个性化设置单一
互联网通信原理
打电话示例:
穿越时空 : 80年代初期, 固定电话 , 座机 ,
互联网通信 :
-
一堆物理连接介质将两个电话连接起来
-
拨号
-
统一的通信标准 , 一揽子协议 ,
这些互联网协议 , 就是一个一个标准 , 最终就可以通信
单播:
- 一对一通信
广播:
- 一对多通信
mac网卡 :
- 与网线直接连接的硬件 , 确定计算机的mac地址
osi (开放式系统互联) 七层协议
- osi Open System Interconnection 开放式系统互联
osi五层协议
- osi(开放式系统互联)(七层协议)
- 实际上,是七层协议,只不过其中两层与其它层合并了,功能类似
应用层 http / FTP 文件传输协议
- 软件自己定义的协议
- 将数据按照自己定义的协议进行分装,http,FTP协议 (FTP 文件传输协议)
- 各种应用程序 , 直接使用 底层 提供 数据
传输层 端口协议 UDP / TCP
- 负责数据重传,冗余校验等,保证数据在单次传输时的准确性
端口 : 0 - 65535 端口号
1 - 1023 系统占用的端口
1024 - 8000 之内 : 一般的是有软件占用
TCP 传输控制协议协议
- Transmission Control Protocol 传输控制协议
- 优点 : 好人协议 流式协议 稳定安全
- 缺点 : 效率相对低 传输效率较慢
- 使用tcp的应用 : Web浏览器 文件传输程序
UDP 无连接的传输协议
- User Datagram Protocol 用户数据报协议
- 面向数据报协议
- 优点 : 效率高 传输快
- 缺点 : 不安全 不是面向连接的 不可靠,容易丢包
- 使用应用 : 域名系统(DNS) 视频流 IP语音(VoIP) 微信QQ
网络层 IP协议
- 保证通过IP地址能够顺利找到相应的主机
- 广播 , mac地址 , + IP + 端口== 找到世界上任意一台计算机对应的软件
IP(网络之间互连协议)
- 广播 , mac地址 , + IP == 找到世界上任意一台计算机
- 计算机的通信 计算机的软件与服务器的软件进行的通信
ip地址与子网掩码
ip协议: ip地址+子网掩码确定计算机所在网段,子网,局域网的位置.
ipV4地址: 四点分十进制
192.168.12.23 取值范围:0255.0255.0255.0255
子网掩码: 一般都是C类.
255.255.255.0
ip地址+子网掩码如何确定局域网的位置?
一个ip: 172.16.10.1 : 10101100.00010000.00001010.00000001
子网掩码: 255.255.255.0 : 11111111.11111111.11111111.00000000
网段,子网,局域网: 172.16.10.0
另一个ip: 172.16.10.2: 10101100.00010000.00001010.00000010
子网掩码: 255.255.255.0 11111111.11111111.11111111.00000000
网段,子网,局域网: 172.16.10.0
一般情况下: C类子网掩码,一个局域网能承载多少计算机?
C类子网掩码可以分配的ip数量: 254个.
一个局域网 最多可以分类254个ip地址(同一个局域网内的ip地址不能重复),也就是
可以连接254台计算机.
通过iP地址与子网掩码可以确定对方计算机是否和自己的计算机在同一子网.
如果确定在同一子网: 通过广播+单播就可以通信.
若果不在同一个子网 :
- 就要经过交换机的 网关 通过路由协议 去找其他局域网的网关 直至找到目标ip与子网掩码 交换机有学习功能 最终记录最短路程 在寻找过程中, 源ip和子网掩码在一级一级的变动 , 例 : 跨子网的首次通信 , 源ip + 子网掩码 在一层一层查找时 , 最前面会动态变动 , 里面含有 源ip 与 子网掩码
IP + ARP 地址解析协议
ARP协议
- Address Resolution Protocol 地址解析协议
ARP协议 (地址解析协议) : 就是将对方的ip地址获取到对方的MAC地址 (mac网卡的物理地址)
如果两个用户进行第一次通信的时候,你不可能知道对象的mac地址么? 但是你必须要知道对方的IP地址.
IP(网络之间互连协议) + ARP协议 (地址解析协议) 获取对方的 MAC地址 (mac网卡的物理地址)
源mac 目标mac 源ip 目标ip 数据部分
发送端mac: 1C-1B-0D-DA-E8-8F FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/34 今晚一起吃饭
目标计算机
(源mac:1C-1B-0F-4A-E8-8F 目标mac 1C-1B-0D-DA-E8-8F 源ip: 172.16.10.11/34 目标ip:172.16.10.10/24)
路由器
虚拟分配ip地址.(DHCP协议) 动态主机配置协议
- 网关: 连接外网. 我们路由器分配这些ip都是内网ip(路由器虚拟出来的ip,外网访问不到, 只能访问到路由器网关 )
- 计算最优路径.
数据链路层 标准 : 以太网协议
- 负责封装数据帧 ,以及保证数据帧的传输速率和对方保持相当
以太网协议
- 是按照一定的协议对 比特流数据 进行分组 一组是一帧
- 以太网协议 : 就是对数据进行分组
- 以太网协议 : 将数据分组 , 一组电信号构成一个数据报,也称叫做一帧
- 每一数据帧分成 : 报头 head 和 数据 data 两部分
- head 数据(源地址,目标地址,数据类型) | data 数据(具体讯息)
- 分组 : head(源mac地址,目标mac地址) 数据类型 | data
广播
- 计算机最原始的通讯方式就是吼
- 数据的分组(源地址目标地址) + 广播 : 理论上我的计算机就可以通信了 , 效率太低 , 因为每台计算机都需要接受广播的消息 ,查看是否是自己的数据 ,比广播风暴还要严重
- 所以 : 广播它是有范围的 , 在同一子网 , 局域网内是通过广播的方式 ,发消息
数据头 : 固定长度 18个字节
源地址 , 目的地址 , 数据类型
date数据 : 46 字节 < = date < = 1500 字节
-
问题一 : 为什么数据头要固定?
固定就是一个标准 , 统一 , 为了提取源地址以及目的地址
-
问题二 : 以太网协议中 源地址 / 目标地址 如何设置唯一?
网线直接接触的硬件就是网卡 , 网卡上有一个地址 , mac地址 , 确定计算机的唯一性的物理地址 .网卡上 : 12位 16进制组成的一串数字 , 前六位 厂商标号 , 后六位 : 流水线号
交换机自主学习功能
示例
交换机对照(网口与MAC地址的)表:
1: 1C-1B-0D-DA-E8-8F
2: FF-FF-FF-FF-FF-FF
3: FF-FF-FF-FF-FF-FF
4: FF-FF-FF-FF-FF-FF
5: 1C-1B-0F-4A-E8-8F
网口1: 出来一条信息:
# 第一次广播的形式发出去.
网口1:源地址: 1C-1B-0D-DA-E8-8F 目标地址: 1C-1B-0F-4A-E8-8F | 今晚一起吃饭
2,3,4,5口接收到次消息,查看目标mac地址是否是自己的,
5口确定是自己的.
每个网口都广播发送消息一遍之后,对照表就构建好,下次在任意的网口在发消息,就直接以 单播 的形式发送.
目的: 避免局域网内每一次都广播的形式通信.以后就可以单播,提升效率.
物理层
-
一系列的物理连接介质 : 网线 , 光纤 , 电缆等等
-
负责在不同介质中, 保证不同种类的信息能正确的传输
-
发送的数据就是 01011101 比特数据流 , 这些数据连续不断地收发 , 01010101拿到没有用,不知道意义 , 数据要进行分组(按照一定规则),数据分组这件事物理层做不了
TCP的三次握手 / 四次挥手
连接时 三次握手
-
client 第一次向 server 请求连接 send syn(请求) = 1 seq = x 第一次握手
-
server 接收到 并向client send ack(确认) 1 + x 第二次握手
此时建立 client 与 server 的 第一条传输线建立
-
server 第一次向 client 请求连接 send syn(请求) = 1 seq = y 第三次握手
-
client 接收到 并向server send ack(确认) 1 + y 第四次握手
此时建立server 与 client 的 第一条传输线建立 / 一共两条传输线
-
第二次握手 与 第三次握手 合并为 一次握手 简化为三次握手 / 实际上是四次握手
客户端 与 服务端 第一次建立通信联系 需要三次" 握手 "
建立连接不能一直连接着
TCP 传输控制协议 : 好人协议 不会拒绝别人
syn洪水攻击 : 黑客会虚拟很多的假IP , 然后访问你的服务器 半连接池的处理方式 / 缓冲作用 (syn数据请求)
断开连接时 四次挥手
断开时不简化 流程与建立相反 一共四次挥手
五层协议流程重新梳理
服务器 : 大黑盒子 , 机房声音很大 , 对温度 , 湿度, 等环境都有要求 , 双电源 , 双网卡 , 系统linux .
详细解释中间环节的一些特殊的功能 :
数据经过以太网协议封装后 ,先要从局域网内进行吼 , 每次发消息每次都要吼 , 效率很低 (数据给交换机 , 交换机再分发出去)
五层协议示例
计算机 形成了一个数据 '今天上课,别迟到'
数据size, md5这两个参数报头head
- 应用层(飞信) FTP协议 / 或者软件自己定义的协议
- data =
- 传输层 UDP/ TCP端口协议. 封装了端口.确定软件在计算机的位置.
- TCP协议(端口号: 9000) |data =
- 网络层 IP协议
- IP协议(源ip地址, 目标ip地址)|tcp(端口号: 9000) |data =
- 数据链路层 以太网协议. MAC地址
- 以太网协议(源mac地址,目标mac地址 数据类型)|IP协议(源ip地址, 目标ip地址)|tcp(端口号: 9000) |data =
- 物理层 转化成bite流 发出去