一.OSI模型基础知识
1.OSI参考模型层次结构优点:
- 开放的标准化接口,接口不再封闭;
- 支持多厂商兼容性;
- 易于理解,学习和更新协议标准;
- 实现模块化工程,降低了开发实现的复杂度;
- 便于故障排除。
2.OSI参考模型层次结构:
概念 | 作用 |
---|---|
物理层 | 涉及在通信信道上传递的原始比特流,定义了传输数据所需要的器械、电器、功能以及规程的特性,包括电压,电缆线,数据传输速率、接口的定义等。 |
数据链路层 | 提供对物理层的控制,检测并纠正可能出现的错误,并且进行流量控制;MAC地址寻址 |
网络层 | 决定数据包的最佳路径;网络地址层寻址。 |
传输层 | 上层数据分段,建立端到端的链接。 |
会话层 | 建立,维护,拆除应用程序间的会话。 |
表示层 | 定义数据格式,结构;数据加密,压缩。 |
应用层 | 为应用程序进程提供网络服务。 |
二.OSI模型与TCP/IP模型
1.ISO模型虽然定义了清晰的统一网络通信标准,但是存在以下两个问题:
(1):划分的层次过多,会话层和表示层存在的意义不大;
(2):IP协议称为事实的网络唯一协议;
2.TCP/IP传输层的作用:
(1)数据分段
(2)用端口区分链接
(3)维护传输访问安全
3.IP数据报:
(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。(IPV4:0100 IPV6:0110)
(2)首部长度 占4位,可表示的最大十进制数值是15.
(3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过.
(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
(5)标识 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
(6)标志 占3位,但只有2位有意义。是否容许分片,1表示“是”,0表示“否”.
(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。
(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。
(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和。
(11)源地址 占32位。
(12)目的地址 占32位。
4.TCP头部封装格式:
TCP封装:
TCP头格式:
Source Port:源端口
Destination Port:目的端口
Sequence Number:序列号,用来标识TCP源端设备向目的端设备发送的字节流。
Acknoledgemnment Number:确认号,用来标识期望收到的下一个段的第一个字节,并声明此前所有数据都已经准确无误收到。
Data offset:数据偏移,数据在传输层分段,用于分段重组。
Rseerved:保留
控制位:共6位每一位标识打一打开的控制功能:
(1)URG(UrgentPointerfieldsignificant)紧急指针字段标志
(2)ACK(Acknowledgmentfieldsignificant)确认字段标志
(3)PSH(PushFunction)推功能
(4)RST(Resettheconnect)重置链接
(5)SYN(Synchronizesequencenumber)同步序列
(6)FIN(Nomoredatafromsender)数据传送完毕。
Window:窗口,通过告知对方主机接受能力。来实现流量控制
Checksum:校验和,差错校验。
UrgentPointer:紧急指针,指向段内最后一个字节位置,这个字段只在URG标志被设置时才有效。Options:选项。
Data:数据。
Padding:填充
三.TCP链接建立和拆除
1.三次握手
三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
TCP建立连接步骤:
双方主机为了实现tcp的通信,所以首先三次握手
客户端主动发出了SYN,服务器端处于监听状态,随时等待客户端的请求信息;
服务器端接收到了SYN请求,从而回应用户的请求,发送SYN_ACK,从而转换为SYN_REVIN
客户端在发出了请求,从发出的那一刻close状态转换为SYN_SENT状态
客户端在SYN_SENT状态中一旦收到了服务端发来的SYN_ACK之后,转换为ESTABLISHED状态,这时便可以开始传送数据了,无论怎么传都是ESTABLISHED状态
而服务器端收到了对方的ACK,同样处于ESTABLISHED状态
注: 引用: 关于TCP三次握手,这是我见过最好的解读了,通俗易懂
2.四次挥手
数据传输结束之后
客户端从 ESTABLEISHED 状态,发起四次断开请求
客户端发起 FIN 请求,从而进入等待状态
服务端收到断开请求之后,便发起 ACK 请求
客户端收到服务端发来的 ACK 确认信息后,从而又发起 FIN_2 请求
等待服务端发来的 FIN 请求之后,便确认
服务器端收到 FIN 并发送 ACK 之后,服务器端便处于 CLOSE_WAIT 便自己发送 FIN,从而进入 LAST
ACK 模式 ,
确认完后不能立刻断开,还需要等待一定的时间(大约 240 秒),确认报文是否传递给对方
于是转换为 CLOSED
四.Linux网络管理命令
1.显示本机网络连接、运行端口和路由表等信息的命令 netstat
netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员等等。
选项 | 含义 |
---|---|
-a | 列出系统中所有网络连接,包括已经连接的网络服务、监听的网络服务和Socket套接字 |
-t | 列出TCP数据 |
-u | 列出UDP数据 |
-l | 列出正在监听的网络服务(不包含已经连接的网路服务) |
-n | 用端口显示服务,而不用服务名 |
-p | 列出该服务的进程ID(PID |
-s | 按各个协议进行统计 |
-c | 每隔一个固定时间,执行该命令 |
-r | 路有信息 |
Proto:数据包的协议,分为TCP和UDP
Recv-Q:表示收到的数据已经在本地接收缓存,但是还没有被进程取走的数据包数量
Send-Q:对方没有收到的数据包,或者没有ACK回复的,还在本地缓冲区的数据包数量
LocalAddress:本地IP:端口,通过端口可以知道本机开启了那些服务
ForeignAddress:远程主机:端口也就是远程那个IP使用那个端口连接到本机
State:连接状态,主要是已经建立连接(ESTABLISED)和监听两种状态(LISTEN)
PID/Programname:主要是进程ID和进程命令
2.配置网络或显示当前网络接口状态的命令ss
ss命令用于显示socket状态.他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets,RAW sockets, Unix domain sockets等等统计.它比其他工具展示等多tcp和state信息.它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具。
常用选项:
选项 | 含义 |
---|---|
-t | tcp协议的连接 |
-u | udp协议的连接 |
-l | 监听状态的连接 |
-a | 所有状态的连接 |
-e | 显示扩展信息 |
-m | 显示套接连接使用的内存 |
-p | 进程及UDP |
-n | 数字格式显示 |
-o state(established) | 数字格式显示 |
ss -o state established '( dport = :smtp or sport = :smtp )'
显示所有已建立的smtp连接
ss -o state established '( dport = :http or sport = :http )'
显示所有已建立的http连接
ss -ta
查看所有TCP协议的连接
3.获取当前主机到目标主机所经过的路由(网关)
(1)traceroute命令
(2)mtr命令
常用选项:
-r | 已报告模式显示 |
---|---|
-s | 用来指定ping数据包的大小 |
-n | no-dns不对IP地址做域名解析 |
-a | 来设置发送数据包的IP地址这个对一个主机由多个IP地址是有用的 |
-i | 使用这个参数来设置ICMP返回之间的要求默认是1秒 |
-4 | IPv4 |
-6 | IPv6 |
4.从网络上下载软件的命令 wget,以及拷贝命令SCP
(1)wget是一个从网络上自动下载文件的自由工具。wget下载数据的时候使用的协议可以是http,https,ftp三种协议。使用wget命令时的输出信息中可以看到本地下载使用的是什么协议。
例: wget https://cn.wordpress.org/latest-zh_CN.tar.gz
(2)scp是一个基于SSH的不同Linux系统间相互拷贝文件或者目录的工具。scp是有Security的文件copy,基于ssh登录。也就是它实际上是使用的ssh协议
选项释义:
选项 | 用法 |
---|---|
-r | 表示递归copy目录 |
-q | 安静模式,不打印scp的命令输出信息 |
-l | 表示限速;单位为kbps |
-p | 保留文件原有的权限信息、时间戳等 |
5.配置网络工具nmcli
LINUX常见网络接口:
lo:本地回环接口
vnet0:虚拟机接口
virbr0:虚拟交换机
enp2s0:物理机接口
选项释义:
dev --device:物理设备
conn -connection:连接,逻辑设置
查看网络设备状态:
nmcli dev stat
nmcli dev show ens33
在同一网卡上多配置几个IP地址:
[root@localhost ~]# nmcli conn mod ens33 +ipv4.address 192.168.19.153/24
删除将“+”改为“-”
新加IP地址生效:cmcli conn down ens33 ; nmcli conn up ens33
修改网络配置参数:
nmcli conn mod ens33 ipv4.gateway 192.168.19.2
删除网卡:nmcli conn delete ens33