网络安装覆盖方式的分类
- 局域网 (LAN):作用范围一般为几米到几十公里
- 城域网 (MAN):作用范围介于局域网和广域网之间
- 广域网 (WAN):作用范围一般为几十到几千公里
局域网
局部区域网络(local area network)
,他是结构复杂程度最低的计算机网络。一般是仅仅在同一地点上经过网络连接在一起的一组计算机。
我们的路由器组成的网络就可以理解为一个局域网
广域网
广域网(wide area network)
,是连接不同地区局域网或者城域网计算机的远程网,可以跨接很大的物理范围。
就像那些跨洋的电话,xshell的远程连接什么的
网络协议
协议
协议指通信双方所约定的,使用同一种解析信息的手段来进行有效的沟通
网络协议
网络协议是指通信双方对数据交换和数据的传输做出的一种约定,也就是一个通信协议的标准。
计算机中有很多的网络协议,当这些协议汇总在一起的时候,就组成了一个协议簇
协议分层
参考模型
他定义了各种协议之间的一个关系,并且划分了每一种协议应该执行的任务
物数网传会表应
- OSI参考模型:物理层,数据链路图,网络层,传输层,会话层,表示层,应用层
- TCP/IP五层模型:物理层,数据链路层,网络层,传输层,应用层
TCP/IP五层模型
- 应用层:负责应用程序之间的数据沟通
比如:ssh协议,http协议
- 传输层:负责端与端之间的数据传输,负责可靠的数据传输,以确保数据被可靠的传送到目标地址
典型协议:TCP协议,UDP协议
- 网络层:负责地址管理与路由选择
典型协议:IP协议,ICMP协议
设备:路由器
- 数据链路层:负责相邻设备之间的数据帧传输
典型协议:以太网协议 (Ethernet)
典型设备:交换机
- 物理层:负责光电信号的传输
典型协议:以太网协议
典型设备:集线器
网络传输的封装与分用
不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长, 上层协议是什么等信息.
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
用户在传输数据的时候
用户端:
- 应用层:对数据进行包装
- 传输层:在数据的首部加上协议,TCP协议
- 网络层:加上网络地址IP协议
- 数据链路层:在组合数据的头部加上以太头,尾部加上以太尾
- 物理层:对数据进行拆分,变成二级制的数据流
再通过网卡设备发送到客户端
客户端:
- 物理层:接收二进制的数据,并解密
- 数据链路层:去掉以太头和以太尾
- 网络层:去掉网络地址IP
- 传输层:去掉协议的名称
- 应用层:得到数据
ip地址
- 作用
用来唯一标识一台主机,每一个主机的Ip地址都是独一无二的,相当于我们的身份证号一样。
ipv4
- 本质
无符号的四个字节,uint32_t
的值。他的最大范围是42亿多,所以说ipv4的地址可能有点不够用。
- 格式
点分十进制表示方法,每一个点分割的最大数字为255,2的8次方-1
192.168.48.128
在网络通信过程中,每一条数据都需要具备五个信息,我们称之为5元组 = 源IP + 源端口 + 目的IP + 目的端口 + protocol
- 源IP:标识数据的来源
- 源端口
- 目的IP:标识数据的需要到哪里
- 目的端口
ipv6
ipv6 和 ipv4是两个不同版本的ip协议,但是ipv6并不向下兼容ipv4,因为两者ip协议的报头格式不一样
Ipv6 是16个字节的整数,表示的范围是2的128次方
port端口
端口是在一台主机当中标识一个进程
可以用命令查看nginx的信息,关于nginx的安装,可以参考https://www.runoob.com/linux/nginx-install-setup.html
本质:
uint16_t 端口的范围0~2^16 (0 ~ 65535)
- 知名端口:0~1023
- 注册端口(注册端口):从1024 到49151
mysql -> 3306 ; oracle -> 1521 - 动态和 / 或私有端口(动态和/或专用端口):从49152 到65535
端口的查看
- netstat命令格式:
Netstat -a -e -n -o -s-an
-
a 表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。
-
e 表示显示以太网发送和接收的字节数、数据包数等。
-
n 表示只以数字形式显示所有活动的TCP连接的地址和端口号。
-
o 表示显示活动的TCP连接并包括每个连接的进程ID(PID)。
-
s 表示按协议显示各种连接的统计信息,包括端口号。
-
an 查看所有开放的端口
客户端与服务端
- 客户端:主动发起请求的一方
- 服务端:被动的固定在同一个位置上接收请求的一方。防止客户端的数据发送到错误的端口,所以服务端选择固定在一个位置。
客户端与服务端的概念是相对的,而不是绝对的
为什么不使用PID作为请求主机当中查找进程的标志呢?
PID确实唯一标识一个进程,但是如果这个进程突然崩溃,下一次再重启的时候,PID并不是上一次的PID,就会出现客户端通过上一次PID找不到这个进程的情况,导致数据丢失