文章目录
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的,因为前者 表示的是建立连接,而后者表示的是断开连接
- URG (urgent紧急,很少用)
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 )即每秒发送多少比特
- PPS(即每秒发送多少个分组数据包)Packet 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状态)