25--网络通信原理:TCP、IP五层模型、IP子网划分、DNS
一 软件架构
# CS架构
Client <===========> Server
客户端软件send 服务端软件recv
操作系统 操作系统
计算机硬件 <===物理介质====> 计算机硬件
# BS架构
Browser <===========> Server
特殊的CS架构 客户端就是浏览器
二 网络通信
https://www.cnblogs.com/linhaifeng/articles/5937962.html
# 网络存在的意义
方便跨地域数据传输 =》 称之为通信 又称为信息高速公路
# 什么是互联网
网络(互联网) = 物理链接设备(介质) + 互联网通信协议
# 发展历程
单机 --> 局域网(内网) --> 互联网
三 OSI七层协议
- 互联网协议按照功能不同分为 tcp/ip四层 或 tcp/ip五层 或 osi七层
-
每层运行常见物理设备
# 前提: 物理层通信都是靠以太网协议 广播的形式传递 物理层的设备进行优化,将每次的目标mac地址,记录到自己的mac地址表 下次新的物理层数据过来,物理设备可自行分析目标地址,若能找到,就直接发送,若无,再进行广播形式传递 # 几层交换机: 在物理层接受到数据后,自身的物理设备 能够自行拆开分析到哪一层 # 分析目标地址 再精准到对应的目标进行封装成二进制 再进行发送 # eg: 二层交换机: 可自行分析到数据链路层,直接找到目标mac 个人电脑:五层交换机
四 TCP/IP五层模型 ***
五层协议
# 协议:规定数据的组织格式
格式:头部 + 数据部分
计算机1: 计算机2:
应用层 应用层
传输层 传输层
网络层 网络层
数据链路层 数据链路层
物理层 <======二层交换机=====> 物理层
0101010101010
# 注:
二层交换机只有在两种情况下才把包广播
1.ARP协议获取目标mac时
# 即:目标mac地址是:FF:FF:FF:FF:FF:FF
2.目标mac不存在于mac地址表中
# 即:局域网内 ethernet以太网通信时,二层交换机未记录过目标mac
4.1 物理层
物理层:电信号
# 功能:
基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0
4.2 数据链路层
数据链路层:ethernet以太网协议
# 由来:
单纯的电信号毫无意义,必须规定电信号多少位一组,每组什么意思
# 功能:定义了电信号的分组方式 (依据ethernet以太网协议)
一组的物理层数据称之为:位
# ethernet 以太网协议
1.一组数据称之为一个数据帧
2.数据帧分成两部分 =》 头(head) + 数据(data)
头(head): # 固定18个字节
源地址 (发送者) : 6个字节 # 该地址是mac地址
目标地址(接受者) : 6个字节
数据类型 : 6个字节
数据(data): # 46--1500个字节
包含的是网络层发过来的整体内容
# 数据帧长度:head + data = 64--1518字节 超过最大限制就分片发送
3.但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址 (mac地址)
mac地址: 长度为48位2进制,通常由12位16进制数表示 # 前六位是厂商编号,后六位是流水线号
# 注:以太网协议的工作方式是广播,即计算机通信基本靠吼
故:以太网包只能在同一个局域网(广播域)发送,跨局域网(广播域)通信只能通过路由转发
# eg:
数据帧:
(egon,张三)(帮我买包子)
以太网协议,会以广播的形式 将给数据帧 复制N多份,每个接受者都会接收到
然后按照以太网协议拆开,发现目标mac是自己就响应 不是自己,就丢弃
4.2.1 二层交换机
https://www.cnblogs.com/linhaifeng/articles/6710751.html
二层交换机 # 以太网交换机
# 前提:
同个局域网LAN 之间可以直接通信
不同局域网LAN 经过路由器才能通信
路由器
LAN交换机 LAN交换机
设备1 设备2 设备1 设备2
# 随着设备的强大,单个二层交换机 也能实现二层隔离 不需要多个交换机
划分:VLAN 虚拟局域网
将交换机上的端口 配置 划分成不同的VLAN
# 注:
二层隔离和三层隔离需保持一致
即:不同vlan,应配置不同的 子网段
# 多台交换机上划分VLAN:
需注意交换机的端口:Access port 和 Trunk port
Access port:进出 会将广播包 增加或删除VLAN Tag # 连接 交换机和计算机
Trunk port:进出 不修改VLAN Tag # 连接 交换机和交换机
4.3 网络层
网络层:IP协议
# 由来:
有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了
但问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的
那么如果所有通信都采用以太网的广播方式,那么一台机器发送的包 全世界都会收到 灾难...
# 网络层的目的:
划分广播域
每一个广播域但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
网关与外界通信走的是路由协议
# 功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址 (依据IP协议)
mac地址是无法区分的,它只跟厂商有关
4.3.1 IP协议
# IP协议
1.规定网络地址的协议,定义的地址称之为ip地址
2.广泛采用的v4版本即ipv4,规定网络地址由32位2进制表示
# ipv4地址:8bit.8bit.8bit.8bit
3.范围: 0.0.0.0--255.255.255.255
一个ip地址通常写成四段十进制数,例:172.16.10.1
# IP数据包
ip数据包也分为head和data部分
但无须为ip包定义单独的栏位,直接放入以太网包的data部分
# 以太网头 | ip头 | ip数据
1.一组数据称之为一个数据包
2.数据包分成两部分 =》 头 + 数据
头: # 20到60字节
源地址与目标地址 # 该地址是IP地址
数据: # 最长为65,515字节
传输层发过来的整体内容
# 注:
ip数据包是放在以太网数据帧的"数据"部分,最长1500字节
故IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了
# IP地址构成 (通过子网掩码划分)
1.网络部分:标识子网
2.主机部分:标识主机
# 注:
单纯的ip地址段只是标识了ip地址的种类,无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
# 子网掩码
1.划分子网,并确定主机在子网的具体ip地址
2.形式同ip地址一样
子网掩码:8bit.8bit.8bit.8bit
网络部分全部为1,主机部分全部为0
# eg:
255.255.255.0对应的二进制表达
11111111.11111111.11111111.00000000
# 总结:
1.IP协议的作用:
1.为每一台计算机分配IP地址,确定哪些地址在同一个子网络
2.通过ARP协议获取目标mac地址
2.一个合法的ipv4地址组成部分 = ip地址/子网掩码地址
172.16.10.1/255.255.255.0
172.16.10.1/24
3.IP地址 + MAC地址 = 全世界范围内 计算机的唯一地址
ip =》 标识全世界范围内独一无二的一台计算机 # ARP协议,可以通过IP获取mac
4.3.2 判断两个IP地址是否在同一局域网
# 判断方式:
IP地址 + 子网掩码 进行二进制的 'and 位运算'
结果相同:则在同一子网络中
# eg:
计算机1:
172.16.10.1: 10101100.00010000.00001010.000000001
255255.255.255.0: 11111111.11111111.11111111.000000000
172.16.10.0: 10101100.00010000.00001010.000000000
计算机2:
172.16.10.2: 10101100.00010000.00001010.000000010
255.255.255.255.0: 11111111.11111111.11111111.000000000
172.16.10.0: 10101100.00010000.00001010.000000000
计算结果:
结果都是172.16.10.0,因此它们在同一个子网络
4.3.3 ARP协议
# 由来:
所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac
# 功能:获取mac地址
通过广播的方式发送数据,目标根据ip地址接受,然后返回自己的mac地址
# 工作方式: 每台主机ip都是已知的
1.首先通过ip地址和子网掩码区分出双方所处的子网
2.根据所在子网的不同,通过arp获取的mac地址也不同
# ARP协议广播包:
同一子网: 源mac地址 目标主机mac地址(未知) 源ip地址 目标ip地址 数据
不同子网: 源mac地址 网关的mac地址(未知) 源ip地址 网关ip地址 数据
3.这个包会以广播的方式在发送端所处的子网内传输
所有主机接收后拆开包,发现目标ip为自己,就响应,返回自己的mac
- 同一个局域网内通信
# 数据流向:
源主机---> 本地交换机---> 目标主机
计算机1:172.16.10.10/24 直接 计算机2:172.16.10.11/24
# 通信准备: ARP协议 以广播的形式 获取目标mac
ARP协议:
1.计算二者网络地址 # 如果一样 直接拿到计算机2的mac地址
2.发送广播包
发送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 数据
# FF:FF:FF:FF:FF:FF :特殊的mac地址 就是返回主机的mac地址
3.所有主机接收后拆开包,若发现目标ip为自己,就响应,返回自己的mac
# 通信: 真正开始
从应用层开始 一层一层往下 封装数据包 --->二层交换机(解析出目标mac) ---> 目标主机 一层一层向上 解析数据包
此时数据包: # 真的数据包
源mac地址 目标mac地址 源IP地址 目标IP地址 数据
- 不同一个局域网内通信
# 数据流向:
源主机--->本地交换机--->本地路由器--->公网--->本地路由器--->目标交换机--->目标主机
计算机1:172.16.10.10/24 网关 计算机2:101.100.200.11/10
# 通信准备: ARP协议 以广播的形式 获取网关mac
ARP协议:
1.计算机二者网络地址 # 如果不一样 拿到网关的mac地址
2.发送广播包 # 此时目标IP地址 不是真正的目标IP地址,而是网关的IP地址
发送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.1/24 数据
3.所有主机接收后拆开包,若网关发现目标ip为自己,就响应,返回网关的mac
# 通信: 真正开始
此时数据包: # 真的数据包
源mac地址 网关的mac地址 源IP地址 目标IP地址 数据
# 总结:
局域网内通信: 主要通过Mac地址
非局域网通信: 主要通过IP地址 路由协议
4.3.4 常见的私有IP地址
私有地址:只能在局域网内使用
# 常见的私有IP地址
1: 10.0.0.0~10.255.255.255 /8 # 表示1个A类地址 设备数:2^24
2: 172.16.0.0~172.31.255.255 /16 # 表示16个B类地址 设备数:16*2^16
3: 192.168.0.0~192.168.255.255 /24 # 表示256个C类地址 设备数:256*2^8
第1种 用于大型企业,局域网内 网络位唯一 设备很多 eg: google公司等
第2种 用于中型企业,局域网内 网络位一般 设备足够 eg: 公司常见服务器 做集群等 ****
第3种 用于小型企业,局域网内 网络位很多 设备很少 eg: 办公室局域网 或者小型公司的服务器等
# 特殊的IP地址
网络地址: .0 # 表示纯网络地址,主机位全为0
网关地址: .1 # 常被网络地址 网关 路由器使用
广播地址: .255 # 表示网络地址正常,主机位全为1
回送地址: 127. # 127开头 用于系统诊断
127.0.0.1 # 用于回路测试 常用于软件本地开发测试,排除网络通信的因素
有限广播地址:255.255.255.255 # 32位全为1 用于本网广播
占位地址: 0.0.0.0 # 32位全为0 表示的是所有不清楚主机和目的网络
在服务器中,0.0.0.0指的是本机上的所有IPV4地址
如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,
并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。
在路由中,0.0.0.0表示的是默认路由,即当路由表中完全没有找到完全匹配的路由的时候所对应的路由
4.3.5 子网划分
https://www.cnblogs.com/linhaifeng/articles/5951486.html
# 子网划分
通过借用ip地址的若干位 主机位 来充当子网地址的 网络位
从而将原来的网络分为若干个彼此隔离的子网实现的
# eg:
# 原网段:192.168.10.{0-255} /24
网络位:192.168.10.0 主机位:256个
# 子网划分(增加一位子网掩码) 192.168.10.{0-255} /25
子网1 192.168.10.{0-127} /25
网络位:192.168.10.0 主机位:128
子网2 192.168.10.{127-258} /25
网络位:192.168.10.128 主机位:128
此时两个ip地址:192.168.10.11/25 和 192.168.10.200/25 分别属于两个不同的子网
# ARP协议:计算的就是 是否处于同一子网
# 二层隔离与三层隔离
简单讲,处于第几层的隔离,就是几层隔离
二层隔离(数据链路层隔离):指的是两台计算机接入不同的交换机,相互通信,需借助路由器进行转发
三层隔离(网络层隔离):指的是两台计算机处于不同的子网地址 子网划分就是三层隔离
故:即使两台电脑连接同一个交换机,也不一定处于同一局域网
连接同一个交换机上,说明二层没有隔离,广播包 所有主机都能收到
但不确定是否有三层隔离,ARP协议获取目标mac地址时,需验证是否是同一子网
# 总结:
1.二层隔离与三层隔离应当保持一致 (二层不隔离,三层隔离 不合理)
2.即使两台电脑连接同一个交换机,也不一定处于同一局域网
4.4 传输层
传输层: tcp\udp 协议 ==》基于端口的通信
# 功能: 建立端口到端口的链接
# 端口范围
0-65535,0-1023为系统占用端口
# ip+port=》标识全世界范围内独一无二的一个基于网络通信的应用程序
# 常见问题:
1.TCP协议为何三次握手、四次挥手?
2.为何TCP协议可靠?
3.TCP协议与UDP协议的对比?
4.4.1 TCP协议 ***
# tcp协议通信前提:必须建立一个双向通信的链接
C------------->S
C<-------------S
# 三次握手建立链接:
建立链接是为了传数据做准备的,三次握手即可
# 四次挥手断开链接
断开链接时,由于链接内有数据传输,所以必须分四次断开
# tcp是可靠传输的
发送数据必须等到对方确认后(回复ack确认信息),才会将自己内存中的数据清理掉,否则会重复发送几次
ps:
1.当服务端大量处于
SYN_RCVD (服务端接受连接请求)状态时
TIME_WAIT(客户端正在接受数据)状态时
意味着服务端正在经历高并发
2.TCP协议传输的程序,需要事先启动服务端,否则客户端报错
# SYN洪水攻击:
利用TCP协议的好人协议特性,客户端带着SYN过来,都会去处理
攻击者,模仿大量的请求发送,服务端一直忙着处理这些请求,导致正常客户端无法访问
# tcp协议的半连接池: # 服务器系统优化时,会将TCP协议的半连接池扩大
backlog
[链接请求1,链接请求2,链接请求3,链接请求5]
-
报文格式
-
链接过程
4.4.2 UDP协议
# 无链接
# 不可靠传输
每发送一个数据包,不需要对方回复确认信息,会直接将本地数据清除
“报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包
# 注:
1.UDP协议传输的程序,无需事先启动服务端
2.UDP协议传输数据效率比TCP更快,但TCP协议更可靠
4.5 应用层
协议:http,ftp,mail
# 功能:程序使用应用层协议规定的格式 封装应用软件产生的数据
# 可以自定义协议=》头部+数据部分
自定义协议需要注意的问题:
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息
比如:数据要发给谁,数据的类型,数据的长度
数据部分:想要发的数据
2、头部的长度必须固定
因为接收端要通过头部获取所接接收数据的详细信息
五 其他概念
5.1 网络编程
# 网络编程 又称 socket编程 / 套接字编程
# 什么是socket编程?
是在应用层和传输层之间的一个抽象层
把TCP/IP层及以下复杂的操作抽象为几个简单的接口
供应用层调用已实现进程在网络中通信
5.2 DNS
DNS: 翻译者(域名----->ip) 域名系统(英文:Domain Name System,缩写:DNS)
是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.
# dns服务端口: 53
# 浏览器网站: 默认 80端口
"www.baidu.com." <== DNS ==> IP地址
# 域名结构:
'.' 根域名
'com' 顶级域名
'.xx' 子域名
'baidu' 二级域名
'www' 主机名或三级域名
# 根域名服务器
全球一共13台 9台美国 日本 英法 瑞典
# 域名查询方式
1.迭代查询
2.递归查询
# 浏览器DNS查找顺序
浏览器DNS缓存->本地系统DNS缓存->本地计算机HOSTS文件->ISP DNS缓存->递归or迭代搜索
# 本机HOSTS文件
C:\Windows\System32\drivers\etc\hosts
/etc/hosts
# 拓:可以充当本地DNS使用,搭建集群之类的
5.3 DHCP
# DHCP服务端口: 67
DHCP(动态主机配置协议)是一个局域网的网络协议
指的是由服务器控制一段IP地址范围,客户机登录服务器时
就可以自动获得服务器分配的IP地址和子网掩码。
5.4 URI与URL
# URL(统一资源定位符)+URN(统一资源名称) = URI(统一资源标识符)
URI地址:http://www.cnblogs.com/alex3714
URL地址:http://www.cnblogs.com 是URI的子集
协议部分:http://
域名部分:www.cnblogs.com--->ip
资源部分:/alex3714
# 网线线序:
橙白 橙 绿白 蓝 蓝白 绿 棕白 棕