文章目录
- 1.计算机网络分类
 - 2.计算机网络的层次结构
 - 3.层次结构设计的基本原则
 - 4.网络层核心知识
 - 5.传输层核心知识
 - 6.MTU-MSS介绍
 - 7.计算机网络的核心指标
 - 8.ifconfig命令简介
 - 9.网络统计分析命令netstat
 
1.计算机网络分类
- 按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN)
 - 按照网络使用者:公用网络、专用网络
 
2.计算机网络的层次结构
(1)OSI 七层模型 Open System Interconnection 七层模型

(2)TCP/IP四层模型与OSI体系结构对比

- TCP/IP 四层模型 Transmission Control Protocol/Internet Protocol)四层模型
 
- 应用层:负责应用程序之间的沟通,如 HTTP、FTP、DNS 等
 - 传输层:负责两台主机之间的数据传输,端到端通信,如 TCP、UDP 等
 - 网际层:负责网络包的封装、寻址和路由,如 IP 等
 - 网络接口层:负责网络包在物理网络中的传输,如 MAC 寻址转化、通过网卡传输网络数据帧等
 
3.层次结构设计的基本原则
- 各层之间是相互独立的
 - 每一层需要有足够的灵活性
 - 各层之间完全解耦
 

- 网络分层模型下,数据在各层之间的传输
 - 发送数据包
 
- 在网络协议栈中从上到下逐层处理,最终送到网卡发送出去
 
- 接收数据包
 
- 需要经过网络协议栈从下到上的逐层处理,最后送到应用程序中使用
 
- 注意
 
- 应用层是直接面向用户的一层,为应用程序提供统一协议的接口,但不是应用程序
 - 目的是保障不同类型的应用采用的低层通信协议是一致的
 

- 分层的好处:
 
- 每层分工明确,利用单一职责模式和责任链模式
 - 开发人员 负责 编写应用层 业务代码
 - 操作系统 负责 建立网络连接、可靠性传输
 - 交换机路由器 负责 物理媒介上传输二进制格式
 
- 传输层协议和网际层协议有什么区别
 
- 网际层协议负责提供主机间的逻辑通信
 
- 互联网上N多台设备,通过IP地址识别通信主机,网络层可以具体定位到哪台设备
 - 网络层的只检验IP数据报首部中的校验和字段是否出现差错,而不检查数据部分
 
- 传输层协议负责提供进程间的逻辑通信
 
- 一个主机上N多进程,通过端口号识别应用层进程,传输层可以具体定位到哪个进程
 - 需要对收到的报文更进一步进行差错检测
 
4.网络层核心知识
(1)什么是IP协议(Internet Protocol)
- IP协议是一种工作在网际层的网络协议,定义如何将数据包从一台计算机传输到另一台计算机。提供一种通用的方法来在网络中传输数据,提供不可靠、无连接的传送服务。
 - App发送请求,达到运营商的交换机,交换机根据IP地址在进行路由转发(多次),最后达到目标服务器。IP协议用途是把数据包投递过去,但不确保数据一定送达,可以用传输层TCP协议的机制做可靠性传输。IP协议是其他协议的基础,比如TCP和UDP。
 

(2)IP协议的用途
- 寻址和路由
 
- IP数据报中有源IP地址和目的IP地址,表示数据包的源主机和目标主机。
 - 数据报在传输过程中,每隔中间的网络节点比如IP网关/路由器等,都是根据网络地址来进行转发的,直至目标主机。
 
- 分片和重组
 
- 数据报传输过程中会经过不同的网络,不同的网络环境中数据报的最大长度限制是不同的。
 - 通过给每个IP数据报分配一个标识符和分段组装信息,可以让数据报在不同的网络中能够被传输。
 - 被分段的IP数据报可以独立在网络中进行转发,在达到目标主机后由目标主机完成重组工作,恢复程原来的I数据报。
 
(3)网络层相关协议
- IP协议(Internet Protocol,因特网互联协议);
 - ICMP协议(Internet Control Message Protocol,因特网控制报文协议)
 - ARP协议(Address Resolution Protocol,地址解析协议)
 - RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)
 
(4)IP地址分类
- ip地址由4个小段,每个小段由8个bit,即四个字节组成共32位。例如 192.168.0.0 (二进制1100 0000, 1010 0000, 0000 0000, 0000 0000)。
 - IP 地址 = {<网络号>,<主机号>}
 
- 网络号:属于互联网的哪一个网络
 - 主机号:属于该网络中的哪一台主机
 
类别  | 描述(商业应用中只用到A、B、C三类)  | 
A类  | 0开头,前8为网络号,后24位的主机号;即0.0.0.0到127.255.255.255  | 
B类  | 10开头,前16为网络号,后16位的主机号;即128.0.0.0到191.255.255.255  | 
C类  | 110开头,前24为网络号,后8位的主机号,即192.0.0.0到223.255.255.255  | 
D和E类  | 留作未来社会的应用,或做一些实验用到  | 
- 全球现有的IPv4地址一共有2的32次方个,估算约为42.9亿个,除去一些特用的IP和一些不能用的IP,剩下可用的不到40亿
 
(5)如果IPv4地址不够用怎么办
- DHCP技术
 
- 动态主机配置协议,动态分配IP地址,指给接入网络的设备分配IP地址。
 - 同一个MAC地址的设备,每次接入互联网时,得到的IP地址可能不一样
 
- NAT技术
 
- 网络地址转换协议,不同局域网的主机可以使用相同的IP地址,一定程度上缓解了IP资源枯竭的问题。
 - 局域网中使用的IP地址是不能在公网中使用的,当局域网主机想要与公网主机进行通信时,将主机IP地址转换为全球IP地址
 - 原理
 
- 从局域网出去的IP数据报,将其IP地址替换为NAT服务器拥有的合法的公共IP地址,并将替换关系记录到NAT映射表;
 
- 从公共互联网返回IP数据报,根据目的IP地址查找NAT映射表,把内部局域网IP地址替换目的IP地址,转发到内部网络。
 
- IPV6
 
- 作为接替IPv4的下一代互联网协议,可以实现2的128次方个地址,
 - 即使给地球上每一粒沙子都分配一个IP地址也够用,从根本上解决IPv4地址不够用的问题
 
(6)什么是MAC地址(Media Access Control Address)
- 用来定义网络设备的位置,也叫硬件地址,每一个电脑设备都有唯一的Mac地址共48位,使用十六进制表示。
 - MAC地址在世界是唯一的,通常表示12个16进制数。
 

- ARP协议
 
- Address Resolution Protocol,地址解析协议,实现 IP 地址到 MAC 地址的映射,ARP表是自动建立,不需要配置
 - 为网卡的IP地址到对应的硬件地址提供动态映射, 把网络层32位地址转化为数据链路层MAC的48位地址。
 
- RARP协议
 
- Reverse Address Resolution Protocol 逆地址解析协议,把数据链路层MAC的48位地址 转化为 网络层32位地址
 
(7)IP和Mac的区别
- MAC地址是数据链路层和物理层使用的地址,写在网卡上的物理地址,不可变更。
 - IP地址是网络层使用的地址,是一种逻辑地址,用来区别网络上的计算机
 
5.传输层核心知识
(1)什么是传输层
- 网络层把数据发到对应的节点,传输层则进一步将数据可靠的传送到对应的端口。
 - 使用端口区分不同的进程,信息传送的协议数据单元称为段或报文。
 - 主要的协议:TCP和UDP
 
(2)UDP协议(User Dataram Protocol用户数据报协议)
- 面向无连接的协议,它不需要建立连接,就可以发送数据。
 - 协议不需要握手,因此发送数据的速度最快,传输效率更高。
 - 不提供可靠性,因为它不会检查发送的数据是否损坏或丢失,所以可能会发生数据丢失或损坏的情况。
 - 支持多种应用,如视频会议、在线游戏等,它可以提供实时性和可靠性。
 

(3)TCP协议 (Transmission Control Protocol 传输控制协议)
- 面向连接:TCP是面向连接的协议,在正式收发数据前,必须建立可靠的连接。
 - 可靠性:TCP协议提供了丰富的可靠性机制,如检验、确认和重传等,来确保数据的正确性。
 - 流量控制:提供了流量控制机制,可以防止发送方发送数据速度过快,从而使接受方来不及处理,从而确保网络的稳定性。
 - 拥塞控制:提供了拥塞控制机制,可以防止网络拥塞,从而提高网络的吞吐量。
 - 常用于传输文件、电子邮件、FTP等服务,能够校验数据的完整性,以保证数据不被破坏。
 

- 协议部分解析
 - 源端口号:报文的发送端口
 - 目的端口号:报文的接收端口
 - 序号(seq):在TCP传送的数据流都有一个序号
 
- 在SYN标志是1时,表示初始发送的序列号
 
- 确认号(ack):期望收到对方下次发送的数据的第一个字节的序号,是上次已成功收到数据字节序号+1
 
- 例如发送确认号为1001,则表示前1000个字节已经被确认接收
 
- 标志位(控制位,方便后续了解TCP三次握手)
 
- URG (urgent紧急,很少用)
 
- 当URG=1时,此报文应尽快传送
 
- RST (reset重置)
 
- 重置复位标志,用于复位对应的TCP连接
 - RST一般是在FIN之后才会出现为1的情况,表示的是连接重置
 
- FIN (finish结束)
 
- 结束标志,用于结束一个TCP会话,释放连接
 
- PSH (push传送)
 
- 指数据包到达接收端以后,不对其进行队列处理,尽快把数据交给应用程序处理
 - 常规数据发送流程
 
- 主机发送数据时,会放在TCP缓冲区中,直到该段达到一定大小,然后发送到接收器
 - 当段到达接收端时,被放置在TCP传入缓冲器中,会等待直到其他段到达,完成后数据就被传递到应用层
 - 这种设计保证数据传输尽可能高效,将它们组合成一个或多个较大的片段,节省时间和带宽
 - 上述流程大多数情况下是没问题的,但是有些则需要尽快处理,所以有这个标识位
 
- ACK (acknowledgement 确认)
 
- 确认标志,1表示确认收到请求,0表示未确认
 
- SYN( 同步序列编号Synchronize Sequence Numbers)
 
- SYN标志位和ACK标志位搭配使用,用来建立连接
 - 当连接请求的时候,SYN=1,ACK=0,代表连接开始但是未获得响应
 - 当连接被响应的时候,标志位中ACK会置为1 代表确认收到连接请求,变成了SYN=1,ACK=1
 - SYN与FIN不会同时为1的,因为前者 表示的是建立连接,而后者表示的是断开连接
 
6.MTU-MSS介绍
(1)什么是MTU(Maximum Transmission Unit)
- MTU是指在网络中,单个数据包能够传输的最大字节数,数据链路层提供给上层网络最大一次传输大小。
 - 是网络设备在处理数据包时所能支持的最大封装单元大小(不同网卡的MTU也是不一样的)。
 - 以太网数据链路层中约定的数据载荷部分最大长度,数据不超过它时就无需分片。
 - MTU值越大传输的速率就越快,但也会增加网络的延迟。
 - 数据包从发送端传输到接收端,要经过多个网络,每条网络的MTU都可能不一样,通信过程中最小的MTU称为路径MTU
 
(2)什么是MSS(Max Segment Size,是TCP最大报文段大小)
- 是一个TCP报文段中包含的最大字节,传输层TCP提交给网络层最大分段大小。
 - TCP在传输大量数据时以MSS的大小将数据进行分割发送,重发时也是以MSS位单位。
 - MSS的值由发送端和接收端在建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能够适应的MSS的大小。
 - MSS = MTU -IP header头大小 - TCP头大小
 - TCP的MSS最大值是:以太网MSS = 1500(MTU)-20(IP首部长度)-20(TCP首部大小) = 1469字节
 
(3)TCP和UDP每次能够传输的最大长度是多少?
- 以太网数据包(packet)的大小是固定1522字节
 
- 其中22字节是头信息(head), 1500 字节是负载(payload)
 - IP 数据包在以太网数据包的负载里面,它也有自己的头信息20字节,所以 IP 数据包的负载最多为1480字节
 - TCP 数据包在 IP 数据包的负载里面,它的头信息最少也需要20字节,所以 TCP 数据包的最大负载是 1480 - 20 = 1460 字节
 - 但 IP 和 TCP 协议往往有额外的头信息,所以 TCP 负载实际为1400字节左右
 
- UDP 数据包每次能够传输的最大长度 MSS = MTU(1500B)- IP头(20B) - UDP头(8B) = 1472(Bytes)
 - TCP 数据包每次能够传输的最大长度 MSS = MTU(1500B) - IP头(20B) - TCP头(20B) = 1460 (Bytes)
 
发送10MB数据包,最终应用程序是怎样获取数据的?
- 假如发送一个 10MB 的文件,因为一个包最多1400字节,就必须分成多个包,起码需要发送7100多个包。
 
- 注意:数据包大小在不同协议不一样,HTTP/2对比HTTP/1有优化压缩 HTTP协议的头信息。
 
- 服务器的操作系统会把收集的数据包组装完成,根据TCP包的端口转给应用程序,应用程序不用关心数据通信的细节。
 
7.计算机网络的核心指标
- 比特是计算机中的数据量单位,一个比特是一个1或一个0
 - 1Byte(字节)=8bit(比特) 字节的简写为B,比特简写为b
 - 小写b和大写B分别对应大小单位bit(比特)和byte(字节)
 
(1)速率
- 连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或速率。
 - 单位:bit/s(b/s,bps) 或 kb/s = 10³ b/s(小写k指10³)
 - 案例
 
- 假如 数据块大小 100MB,网卡发送速率是100Mbps,发送时间大体是 8秒多
 - 100MB*8 / 100Mbps 约等于 8秒, 特别注意:1/8(B/s)=b/s,即1B=8bit,平时计算需要单位换算
 
(2)带宽
- 网络通信线路所能传送数据的能力,在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”,单位同速率也是bps
 - 案例
 
- 家里带宽为800M,是指800Mbps或800Mb/s,真实速度其实要在带宽的基础上除以8即,800Mbps/8=100M/s
 - 用户在网上下载时显示的速率单位往往是Byte(字节)/s(秒),注意是大写字母B,字节和比特之间的关系为1Byte=8Bits;
 
(3)吞吐量
- 单位时间内通过某个网络(或信道、接口)的实际的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)
 - 吞吐量受带宽限制,吞吐量 / 带宽,就是该网络的使用率
 - 常用的网络吞吐率的单位有
 
- PPS(即每秒发送多少个分组数据包)Packet Per Second(包 / 秒)表示以网络包为单位的传输速率
 
- 云服务器实例每秒最多可以处理的网络数据包数量(包括收发包两个方向)
 - 网络收发包用于衡量云服务器的网络质量,PPS数值越大网络性能越好
 
- BPS(Bytes Per Second)即每秒发送多少字节
 - bPS (bits Per Second )即每秒发送多少比特
 
(4)时延
- 指数据(一个报文或分组,甚至比特)从网络的一端传送到另一端所需的时间
 - 源主机和目的主机之间路径会由多个链路和多个路由器组成,网络时延主要由 发送+传播+处理时延组成
 
(5)往返时间RTT
- 从源主机发送信号到目标主机,目标主机接收信号再返回到源主机所需要时间(一个来回)
 
(6)丢包率
- 丢包率即分组丢失率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率。
 - 场景 :老王打王者荣耀游戏时丢包造成游戏卡顿
 
8.ifconfig命令简介
- 展示网络信息和网卡接口手法数据包的统计信息
 

字段  | 说明  | 
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  | RUNNING 表示物理网络是连通的,网卡已连接到交换机或路由器。如果没有,通常表示网线被拔掉  | 
mtu  | 最大的传输单元,默认大小是 1500  | 
inet  | ipv4地址,ECS实例绑定弹性公网IP(EIP)后,操作系统中只显示私网IP地址,不显示EIP的公网IP地址 公网IP存在于网关设备,并不在ECS实例的网卡上,所以在操作系统内看不到公网IP,只能看到网卡上的私网IP  | 
netmask  | 子网的掩码  | 
broadcast  | 广播地址  | 
ether  | mac地址  | 
RX,TX  | 接收和发送的数据包的个数 或 字节数  | 
packets  | 包数  | 
bytes  | 字节数  | 
errors  | 表示发生错误的数据包数,比如校验错误等  | 
dropped  | 表示丢弃的数据包数  | 
overruns  | 表示超限数据包数,网络 I/O 速度过快,数据包来不及处理而导致的丢包  | 
carrier  | 表示发生 carrirer 错误的数据包数,比如物理电缆出现问题等  | 
collisions  | 表示碰撞数据包数  | 
9.网络统计分析命令netstat
(1)netstat命令简介
- 内核中访问网络及相关信息的命令,显示与IP、TCP、UDP和ICMP协议相关的统计数据,检验本机各端口的网络连接情况
 
参数  | 说明  | 
-r  | –route,显示路由表信息  | 
-n  | -n选项禁用域名解析功能,默认情况下netstat会通过反向域名解析技术查找每个ip地址对应的主机名  | 
-s  | –statistics,按照每个协议来分类进行统计  | 
-p  | –programs,与链接相关程序名和进程的PID  | 
-l  | –listening,显示所有监听的端口  | 
-a  | -all,显示所有链接和监听端口  | 
-u  | –udp 显示UDP传输协议的连接状况  | 
-t  | –tcp 显示TCP传输协议的连接状况  | 
-i  | –interfaces,显示网卡界面信息  | 
(2)应用场景
- netstat -anp :显示系统端口使用和进程情况
 
- netstat -anp |grep 端口 :显示指定系统端口使用和进程情况
 


- netstat -nupl:UDP类型的端口
 

- netstat -ntpl:TCP类型的端口
 
- netstat -na|grep ESTABLISHED|wc -l:统计已连接上的,状态为"established"
 

- netstat -l:只显示所有监听端口
 

- netstat -lt:只显示所有监听tcp端口
 

- netstat -atnlp 常用固定参数命令
 

字段  | 说明  | 
Proto  | 协议名 tcp协议 或 udp协议  | 
recv-Q  | 网络接收队列,表示收到的数据已经在本地接收缓冲,但还有多少没有被进程取走  | 
send-Q  | 网络发送队列,发送队列不能很快清零,则可能是有应用向外发送数据包过快,或对方接收数据包不够快  | 
Local Address  | 表示本地IP地址 :::port 表示对外开放的IPv6端口,外网可访问,::: 这三个冒号:中, 前两个"::“是"0:0:0:0:0:0:0:0"的缩写,表示IPv6的"0.0.0.0”,第三个冒号:是IP和端口的分隔符 如127.0.0.1:port 表示只能本机访问的端口,外网无法访问; 如0.0.0.0:port 表示对外开放的IPv4端口,外网可访问 如为0.0.0.0:* 则表示没有对外开放;  如是 : : : * 表示对外开放  | 
Foreign Address  | 表示远程IP地址,显示规则与 Local Address 相同, 一般都是0.0.0.0:(IPv4) 和 :::(IPv6)。  | 
State  | 链路状态 有11种,TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述   | 
PID/Program  | PID即进程id,Program即使用该socket的应用程序  | 
(3)state状态简介
- LISTEN(socket进行监听)
 - SYN_SENT(客户端tcp发送一个SYN以请求建立一个连接.之后状态)
 - SYN_RECV(服务端发出ACK确认客户端的 SYN 后状态置为SYN_RECV)
 - ESTABLISHED(打开的连接,双方可以进行或已经在数据交互)
 - FIN_WAIT1(主动关闭端应用程序调用close,TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态)
 - CLOSE_WAIT(被动关闭端TCP接到FIN后,发出ACK以回应FIN请求,并进入CLOSE_WAIT)
 - FIN_WAIT2(主动关闭端接到ACK后,就进入了FIN-WAIT-2)
 - LAST_ACK(被动关闭端一段时间后程序将调用CLOSE关闭连接,TCP发送一个 FIN,等待对方的ACK.进入LAST-ACK)
 - TIME_WAIT(在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态)
 - CLOSING(少见,等待远程TCP对连接中断的确认)
 - CLOSED(被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束)
 - UNKNOWN(未知的Socket状态)
 
                










