Linux网络运维

一.OSI模型基础知识

1.OSI参考模型层次结构优点:

  1. 开放的标准化接口,接口不再封闭;
  2. 支持多厂商兼容性;
  3. 易于理解,学习和更新协议标准;
  4. 实现模块化工程,降低了开发实现的复杂度;
  5. 便于故障排除。
    2.OSI参考模型层次结构:
    Linux网络运维
概念 作用
物理层 涉及在通信信道上传递的原始比特流,定义了传输数据所需要的器械、电器、功能以及规程的特性,包括电压,电缆线,数据传输速率、接口的定义等。
数据链路层 提供对物理层的控制,检测并纠正可能出现的错误,并且进行流量控制;MAC地址寻址
网络层 决定数据包的最佳路径;网络地址层寻址。
传输层 上层数据分段,建立端到端的链接。
会话层 建立,维护,拆除应用程序间的会话。
表示层 定义数据格式,结构;数据加密,压缩。
应用层 为应用程序进程提供网络服务。

二.OSI模型与TCP/IP模型

1.ISO模型虽然定义了清晰的统一网络通信标准,但是存在以下两个问题:
(1):划分的层次过多,会话层和表示层存在的意义不大;
(2):IP协议称为事实的网络唯一协议;
Linux网络运维
2.TCP/IP传输层的作用:
(1)数据分段
(2)用端口区分链接
(3)维护传输访问安全

3.IP数据报:
Linux网络运维

(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封装:Linux网络运维

TCP头格式:
Linux网络运维

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来触发,整个流程如下图所示:
Linux网络运维

TCP建立连接步骤:
双方主机为了实现tcp的通信,所以首先三次握手
客户端主动发出了SYN,服务器端处于监听状态,随时等待客户端的请求信息;
服务器端接收到了SYN请求,从而回应用户的请求,发送SYN_ACK,从而转换为SYN_REVIN
客户端在发出了请求,从发出的那一刻close状态转换为SYN_SENT状态
客户端在SYN_SENT状态中一旦收到了服务端发来的SYN_ACK之后,转换为ESTABLISHED状态,这时便可以开始传送数据了,无论怎么传都是ESTABLISHED状态
而服务器端收到了对方的ACK,同样处于ESTABLISHED状态

注: 引用: 关于TCP三次握手,这是我见过最好的解读了,通俗易懂
2.四次挥手
Linux网络运维

数据传输结束之后
客户端从 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和进程命令