网络知识

第1章  静态路由配置          

1.1  网络

通过介质把物体连接起来能够互相通信称为网络。

1.1.1 网络的重要性

所有的系统都有网络!

我们的生活已经离不开网络。

运维生涯50%的生产故障都是网络故障!

1.1.2  网线  8芯   水晶头反过来    

网线制作(线序):568A:绿白-1,绿-2,橙白-3,蓝-4,蓝白-5,橙-6,棕白-7,棕-8

                568B:橙白-1,橙-,绿白-3,蓝-4,蓝白-5,绿-6,棕白-7,棕-8。常用线序

4芯正常可用1236  一根网线正常可以带两台电脑

4芯额外供电   POE设备     反向供电箱--->305

网线的有线距离100米-->超过100米   加设备  HUB 交换机

1.2  如何通过网络实现多台主机之间的通讯

1.2.1  在两台主机之间需要有传输介质(网线、光纤、无线等)

1.2.2  在两台主机上面需要有网卡设备

    在发送信息时:将二进制(数字信号)信息转换为高低电压(电信号)   #调至过程

    在接收信息时:将高低电压(电信号)信息转换为二进制数(数字信号)  #解调过程

1.2.3  在进行数据传输之前,需要协商网络传输速率。

    网卡速度参数  100Mbps==100M bit 每秒==每秒钟传输多少个bit(0或1)

    100000k==100000000 bit/s=1bit/xxns

    网络传输数据单位:比特  bit    1bit=1/8byte

    磁盘存储数据单位:字节  byte   1byte=8bit

1.2.4  光纤

多模光纤    传输距离近2公里

单模光纤    传输距离远20公里

1.2.5  无线网络 4G  5G

1.2.6  电脑之间通信需要硬件地址  网卡   唯一标识    出厂就是惟一的 MAC地址16进制

PS: 如果在公网环境或者局域网中MAC两台PC手机平板相同 会出现一台电脑或者两台电脑没网络

PS:如果局域网内的MAC和路由器的MAC相同 整个局域网无法上网

1.2.7  电脑之间通信还需要逻辑地址 IP地址 (可变)

  网络的传输单位

  网卡传输的速率  100Mbps==100M bit 每秒==每秒钟传输多少个bit(0或1

我家买了一个100M 的带宽 但是我DIAN测试没有达到100M

100Mb  bit 1/8字节

1Byte=8bit

磁盘的计算单位:

100Mbit=12.5MB

1.3  交换机 只负责数据转发 没有路由的功能 不能配置IP地址

1.3.1  在数据前面设置目标地址和源地址,目标地址和源地址用mac地址进行标识

      mac称为物理地址,每块网卡上都有的一个标识身份信息的
      mac地址全球唯一,不能进行修改,mac地址用16进制标识    

1.3.2  在网络通讯初期,会利用广播方式进行发送数据包,在通讯的过程,数据包的发送一定是有去有回的。

      在一个交换网路中,如果产生了大量广播数据包时会产生广播风暴,影响主机性能,这样的问题称为广播风暴问题      
#解决广播风暴问题思路:
减少广播产生数量,将一个大的交换网络切割为几个小的交换网络(局域网,广播域)

1.3.3  交换机的种类

    傻瓜交换机(TP-link/Dlink/水星...)
    程控交换机(存储程序控制交换机,配置管理,思科、华为、华三)

1.4  路由器 进行路由的选择 隔离广播域 可以配置IP地址

IP地址由两部分组成: 交换网络标识信息+主机地址标识信息===网段地址+主机地址

192.168.1     网段  网络标识

63         主机地址

1.4.1  需要有身份标识信息:ip地址

  逻辑地址(可以改变的地址/???) 利用10进制方式进行显示

   IP地址由两部分组成: 交换网络标识信息+主机地址标识信息===网段地址+主机地址

   内网卡---交换机   192.168.11.0/24(192.168.11.1~192.168.11.254)

   外网卡---运营商   122.71.227.79(铁通)

1.4.2   查公网ip的方法

Windows打开浏览器,访问百度,搜IP即可

linux:curl ifconfig.me

高级路由器还有上网行为管理器和防火墙功能

论坛:鸿鹄论坛(网络工程师)

1.4.3  路由实现数据传输通讯时,会根据路由表信息进行数据包路由

   实现不同网段之间通讯需要经过一条必经之路,这条路称为网关

1.5  路由器静态路由配置

路由器维护者路由表信息

路由器1:

网络标识1       IP地址 网关

192.168.1        1.254

192.168.2      2.254

路由器1配置:

1
2
3
4
5
6
Router>     # 命令提示符 用户模式 只能操作部分命令
Router>enable   # 进入特权模式 在特权模式查看大部分的配置 ? 查看所有当前模式可以执行命令
Router#show ip route  # 查看路由表信息
路由器配置接口IP地址 从特权模式 进入到配置模式 简写config t
Router#configure terminal   (conf t)
Router(config)# # 配置模式

1.5.1  第一步:进入路由器的网卡  PS: exit 退出到上一个模式

1
2
3
4
5
Router(config)#interface gigabitEthernet 0/0
 
Router(config-if)# # 进入到了g0/0
 
outer(config-if)#ip ad

1.5.2  第二步: 配置IP地址和子网掩码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Router(config-if)#ip address ?
 
A.B.C.D  IP address
 
dhcp     IP Address negotiated via DHCP
 
Router(config-if)#ip address 192.168.1.254 ?
 
A.B.C.D  IP subnet mask
 
Router(config-if)#ip address 192.168.1.254 255.255.255.0 ?
 
<cr>
 
Router(config-if)#ip address 192.168.1.254 255.255.255.0

1.5.3  第三步: 启动网卡

1
2
3
4
5
6
7
Router(config)#interface gigabitEthernet 0/0
 
Router(config-if)#no
 
Router(config-if)#no shu
 
Router(config-if)#no shutdown

1.5.4  第四步: 查看配置

在特权模式下查看      

1
Router#show interfaces gigabitEthernet 0/0

在特权模式下pingIP地址  出现.代表不通 出现!代表可以通信

1
2
3
4
5
6
7
8
9
10
Router#ping 192.168.1.1
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 0/0/1 ms
Router(config)#interface g0/1
Router(config-if)#ip add
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shu
Router(config-if)#no shutdown
Router(config-if)#
%LINK-5-CHANGED: Interface GigabitEthernet0/1, changed state to up

修改路由器的提示符名称

1
2
3
4
Router(config)#hostname R3
R3(config)#
R3(config)#
R3(config)#

--------------------------------------

路由器

       家用路由器:  TP-Link 腾达 小米 华为 穿墙王...

       企业路由器:  CISCO 华为 锐捷 中兴 H3C 瑞斯康达...

路由器维护者路由表信息

       路由器R1:

1
2
3
4
5
6
7
   网络标识1          IP地址 网关
 
   192.168.1          1.254   G0/0     ----> pc---IP 192.168.1.1----4.254通信
 
   192.168.2        2.254   G0/2
 
S  192.168.4.0     via 192.168.2.2

路由器R2

1
2
3
4
192.168.2                 2.2    G0/0
192.168.3                 3.1    G0/1
S   192.168.4.0       via 192.168.3.2
S   192.168.1.0       via 192.168.2.1

    路由器R3

1
2
3
192.168.3         3.2     G0/0
192.168.4        4.254    G0/1     ------> 1.1 找到了 4.1 给1.1进行回复
S    192.168.1.0      via 192.168.3.1         

       数据包不知道下一步该往哪里走? 我们手动给它指定方向道路 称为静态路由

       静态路由配置命令格式:

       ip route add 去哪里 指定哪里走

       网络中的称呼: 在做回来的路由配置时候 称为路由回指(指定下个接口的IP地址,自身的不用指定)

       配置静态路由:

       R1配置  下个接口的IP地址 称为 下一跳

1
R1(config)#ip route 192.168.4.0 255.255.255.0 192.168.2.2

       R2配置

1
2
R2(config)#ip route 192.168.4.0 255.255.255.0 192.168.3.2
R2(config)#ip route 192.168.1.0 255.255.255.0 192.168.2.1

       R3配置

1
2
R3(config)#ip route 192.168.1.0 255.255.255.0 192.168.3.1
192.168.1.0 255.255.255.0  可用IP地址1-254  我指定的静态路由可以和局域网192.168.1.1-192.168.1.254 任意的主机通信

       取消静态路由:

1
no ip route 192.168.1.0 255.255.255.0 192.168.3.1

1.6  动态路由:

       rip ospf BGP EIGRP(CISCO) ISIS

       路由器1配置:

1
2
3
4
5
6
Router>     # 命令提示符 用户模式 只能操作部分命令
Router>enable   # 进入特权模式在特权模式查看大部分的配置  ? 查看所有当前模式可以执行命令
Router#show ip route  # 查看路由表信息
路由器配置接口IP地址 从特权模式 进入到配置模式 简写config t
Router#configure terminal
Router(config)#    # 配置模式

1.6.1  第一步:进入路由器的网卡  PS: exit 退出到上一个模式

1
2
3
Router(config)#interface gigabitEthernet 0/0
Router(config-if)#    # 进入到了g0/0
outer(config-if)#ip add

1.6.2  第二步: 配置IP地址和子网掩码

1
2
3
4
5
6
7
8
Router(config-if)#ip address ?
A.B.C.D  IP address
dhcp     IP Address negotiated via DHCP
Router(config-if)#ip address 192.168.1.254 ?
A.B.C.D  IP subnet mask
Router(config-if)#ip address 192.168.1.254 255.255.255.0 ?
<cr>
Router(config-if)#ip address 192.168.1.254 255.255.255.0

1.6.3      第三步: 启动网卡

1
2
3
4
Router(config)#interface gigabitEthernet 0/0
Router(config-if)#no
Router(config-if)#no shu
Router(config-if)#no shutdown

1.6.4      第四步: 查看配置

       在特权模式下查看

1
Router#show interfaces gigabitEthernet 0/0

 在特权模式下pingIP地址  出现. 代表不通 出现!代表可以通信

1
2
3
4
5
6
7
8
9
10
Router#ping 192.168.1.1
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 0/0/1 ms
Router(config)#interface g0/1
Router(config-if)#ip add
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shu
Router(config-if)#no shutdown
Router(config-if)#
%LINK-5-CHANGED: Interface GigabitEthernet0/1, changed state to up

   --------------------------------------------------------------------------

   修改路由器的提示符名称

1
2
Router(config)#hostname R3
R3(config)#

1.7 路由器的分类

          家用路由器:  TP-Link 腾达 小米 华为 穿墙王...

        企业路由器:  CISCO 华为 锐捷 中兴 H3C 瑞斯康达...

       动态路由: 动态的自动的去学习路由

RIP OSPF BGP EIGRP(CISCO) ISIS            

       初始路由表信息:

       路由器R1: 

       网络标识1           IP地址 网关           

1
2
3
4
192.168.1           1.254   G0/0         
192.168.2        2.254   G0/2
R    192.168.3.0/24         via 192.168.2.2
R    192.168.4.0/24 [120/2]   via 192.168.2.2

 路由器R2        学习(RIP)    

1
2
3
4
192.168.2       2.2    G0/0           
192.168.3       3.1    G0/1       
R    192.168.1.0/24       via 192.168.2.1
R    192.168.4.0/24 [120/1] via 192.168.3.2, 00:00:09

   路由器R3      学习(RIP)      

1
2
3
4
192.168.3       3.2   G0/0            
192.168.4       4.254  G0/1         
R    192.168.1.0/24 [120/2] via 192.168.3.1
R    192.168.2.0/24 [120/1] via 192.168.3.1   

       配置RIP动态协议 最短路径优先 最大只支持16 

       1)取消静态路由

1
2
3
4
5
no ip route 192.168.4.0 255.255.255.0 192.168.3.2
no ip route 192.168.1.0 255.255.255.0 192.168.2.1  
no ip route 192.168.2.0 255.255.255.0 192.168.3.1
no ip route 192.168.1.254 255.255.255.255 192.168.3.1
no ip route 192.168.1.1 255.255.255.255 192.168.3.1

       2) 配置RIP协议

 

1
2
3
4
5
6
7
8
9
10
11
12
13
R1:
R1(config)#route rip
R1(config-router)#network 192.168.1.0
R1(config-router)#network 192.168.2.0  
R2:
R2(config)#route rip
R2(config-router)#network 192.168.2.0
R2(config-router)#network 192.168.3.0
R3:
R3(config)#route rip
R3(config-router)#network 192.168.3.0
R3(config-router)#network 192.168.4.0
OSPF-->BGP--> 路由重发布 案例 运营商网络缓存案例

第2章 网络架构

2.1  网络层次结构

核心层:主要部署路由器设备,用于连接外网线路,还要具备冗余能力(安全备份)

汇聚层:主要部署三层交换设备,用于相应安全访问控制 进行链路汇聚

接入层:主要部署二层交换设备,用于终端设备接入.

                                 基本网络层次划分示意图

 

2.2  网络类型

局域网:本地私有的一个网络范围。规模较大的局域网,也会称为园区网。

城域网:网络的覆盖面积达到了一个城市,就可以称为城域网。

广域网:覆盖面积达到了全国或全球,就称为广域网,全球最大的广域网就是Internet互联网。

2.3  网络层次模型(OSI7模型)

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

OSI7层模型(公司的组织架构)

    层次模型结构:由上置下

   管理部   公司决策                          应用层

   行政部   传达领导要求 组织活动           表示层

   财务部   发工资 公司账目                   会话层

   市场部   推广宣传                          传输层

   销售部   销售产品                          网络层

   物流部   运输产品                         数据链路层

   仓储部   保存看管物品                      物理层

   每一个层级对应每一个层级,不能跨沟通

   层次模型结构: 由上至下

2.4  OSI七层模型功能介绍

2.5 OSI七层模型详解

2.5.1  应用层

 

作用: 主要就是提供应用程序可以接入网络接口,并根据程序的不同对应不同的接口协议。

2.5.2  表示层

2.5.3  会话层

2.5.4  传输层

负责网络中端到端的连接(TCP、UDP)

2.5.5  网络层

 

 

2.5.6数据链路层

 

 

2.5.7  物理层

Layer1物理层:物理层标准规定了信号、连接器和电缆要求、接口类型、线缆类型、设备(集线器hub)。

单工:(广播电台)通讯时候。只有一方作为发送方,另一方作为接受方.

半双工:(对讲机) 通讯的某一时刻,只有一方作为发送方,另一方作为接受方,通讯时刻发生转变,发送方可以变为接收方,接收方可以变为发送方.              

全双工:(电话) 同一时刻,双方皆可以是发送方,又可以是接收方.

2.6  数据包封装与解封装

2.6.1  封装

封装过程:由上至下进行封装

             应用层、表示层、会话层  PDU 数据

                传输层:分段 TCP协议

                网络层:打包 TCP协议+IP地址

                数据链路层:成帧  TCP协议+IP地址+MAC地址

                物理层:位  数据成为比特

2.6.2  解封装

拆包过程:由下至上进行拆包

物理层:位  比特

数据链路层:查看MAC地址

网络层:查看IP地址

传输层:查看TCP协议

前三层:数据内容

不知名端口:1024以上的端口称为不知名端口

cat /proc/sys/net/ipv4/ip_local_port_range

2.7  TCP/IP模型(4层模型)

2.7.1  OSI7层模型与TCP/IP模型(DOD)对应关系

2.7.2 TCP/IP 协议簇相关协议汇总

    TCP协议: 传输控制协议  --- 面向连接的网络协议

在线发送文件==面向连接

发送文件 --> 对端点击接收

优点: 数据传输可靠性高

缺点: 数据传输效率低

       UDP协议: 用户报文协议  --- 无连接的网络协议

 离线发送文件==无连接

 发送文件 --> 直接发送了

优点: 数据传输效率高

 缺点: 数据传输可靠性低

QQ离线传输文件/在线传输文件: TCP协议

在线传输

PC 传输文件 - 交换机 - 检查目标QQ主机是否在局域网中

路由器 - 目标主机

离线传输

PC 传输文件 - 互联网 - QQ公司服务器(临时存储服务器) --- 对端QQ是否登录在线

2.7.3 应用层协议介绍

FTP         21          明文协议,文件传输协议,基于TCP

TFTP        69          简单文件传输协议,基于UDP

SSH         22          安全外壳协议,远程连接,加密

Telnet      23          明文协议,远程连接

SNMP        161/162     简单网络管理协议,基于UDP

SMTP       25        简单邮件传输协议,基于TCP

HTTP        80        超文本传输协议

HTTPS       443         超文本传输安全协议

DHCP        67/68/546   动态主机设置协议,C(67),S(68),546(V6)

DNS         53

2.8  DHCP原理图

DHCP 动态获取IP地址

      服务器是否需要DHCP功能?

      访问网站--->访问IP地址--->MAC地址

      域名--->IP进行绑定

      局域网中使用DHCP服务

ICMP(在防火墙中禁止了ICMP协议 其他所有的用户 都无法ping通  禁ping)

禁traceroute

APR解析: 地址解析协议 把IP地址解析成MAC地址

DNS称为域名系统,在网站运行中起到了至关重要的作用,主要作用是负责把网站域名解析为对应的IP地址。

一般域名提供商,提供的dns服务器,都是走udp53端口的。

2.9  DNS解析过程

2.9.1  域名解析

举个例子,https://www.baidu.com,这个其实并不是域名,其中https是指协议,去掉https后www.baidu.com.(注意最后面有一个点号)才是真正的域名。

每个域名的最后面都有一个点号 "." 表示根域名,为了方便在实际使用的时候被省略了。

根域名的下一级就是顶级域名了,.com 也就是顶级域名,常见的顶级域名后缀有.com、.cn、.net、.org 等,这些都是固定的,用户不能自己修改,只能选择。

顶级域名的下一级又是权威域名,如baidu.com中的.baidu,这个权威域名就是我们自己可注册的域名。

顶级域名下就是主机名了,www是指主机名,这个是我们可以自己定义的,通常在http服务器如nginx中可以修改。

 

 

下面就还以www.baidu,com这个网址来分析一下dns的解析过程。

当浏览器拿到输入的www.baidu.com后,首先会去浏览器的dns缓存中去查询是否有对应记录,如果查询到记录就可以直接返回ip地址,完成解析。

如果浏览器没有缓存,那就再去查询操作系统的缓存,同样的,如果查询到记录就可以直接返回ip地址,完成解析。

如果操作系统也没有缓存,那就再去查看本地host文件,Windows下host文件一般位于 "C:\Windows\System32\drivers\etc"。

近几年网上流传的通过修改本地host文件来避免双11女友剁手的段子,其实就是将淘宝的支付接口解析到错误的ip地址,从而导致支付不成功。

如果本地host文件也没有相应记录,那就需要求助于本地dns服务器了,所以应该要知道本地dns的ip地址。

本地dns服务器ip地址一般是由本地网络服务商如移动、电信提供,一般是通过DHCP自动分配,当然你也可以自己手动配置。目前用的比较多的是谷歌提供的公用dns 8.8.8.8和国内的公用dns 114.114.114.114及阿里的223.5.5.5。

你之前可能有遇到过电脑可以正常上QQ但是就是不能打开网页的怪现象,这种情况大多数可能就是dns域名解析出问题了,你可以尝试手动把dns设置为公用dns。

找到本地dns后,它也会先去查询一遍它自己的缓存,如果有记录就返回,如果没有记录,它将开始要去我们前面提到的根域名服务器查询了。注意由于根域名服务器ip地址一般都是固定的,所以本地dns服务器一般都内置了根域名服务器ip地址。https://www.uedbox.com/post/50977/

目前全球一共有13个根域名服务器(这里并不是指13台服务器,是指13个ip地址,按字母a-m编号),为了能更高效完成全球所有域名的解析请求,根域名服务器本身并不会直接去解析域名,而是会把不同的解析请求分配给下面的其他服务器去完成,下面是dns域名系统的树状结构图。

 

 

注意dns域名服务器一般分三种,分别是根域名服务器(.)、顶级域名服务器(.com)、权威域名服务(.baidu.com) 。

当根域名接收到本地dns的解析请求后,发现是后缀是.com,于是就把负责.com的顶级域名服务器ip地址返给本地dns。

本地dns拿着返回的ip地址再去找到对应的顶级域名服务器,顶级域名又把负责该域名的权威服务器ip返回去。

本地dns又拿着ip去找对应的权威服务器,权威服务器最终把对应的主机ip的解析记录(俗称A记录)返回给本地dns。

本地dns会将解析后的ip地址信息进行缓存,缓存好将A记录信息返回给客户端。

客户端收到本地dns响应的A记录信息,会将A记录缓存到本地,然后使用解析后的ip地址访问www.baidu.com。

至此就完成了域名解析的全过程。

下面用一张图来展示上面迭代查询的过程。

解析期间涉及到两个特殊查询:

客户端---本地dns缓存:递归查询

本地dns服务器---根域名服务器  顶级域名服务器  权威域名服务器:迭代查询

所谓递归查询过程就是 “查询的递交者” 更替, 而迭代查询过程则是 “查询的递交者”不变。

A记录:

从域名到IP的解析过程,被称为A记录;www.baidu.com---1.1.1.1

获取A记录命令方法:

1) dig www.baidu.com

    dig @223.5.5.5 www.baidu.com +trace   ---显示完整DNS解析过程

2) nslookup www.baidu.com

3) host www.baidu.com

4) ping www.baidu.com

 

 

2.10  主机到主机层协议介绍

TCP: 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

特点:面向连接,可靠,传输效率低.

应用场景:web浏览器,电子邮件,文件传输程序.

UDP: 用户数据报协议,属于无连接的传输协议.   

特点:无连接、不可靠、快速传输.

应用场景:域名系统(DNS),视屏流,IP语音(VOIP). 

TCP UDP协议端口号范围 1 - 65535 (可以的),真正端口号总数为2的16次方=65536   

面向连接:是指通信双方在通信时,要事先建立一条通信线路,其有三个过程:建立连接、使用连接和释放连接。

面向无连接:是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输。

2.11  控制字段介绍

ACK:表示确认控制字段,确认数据是否接收到.    

SYN:表示请求建立连接字段,和主机建立连接时使用.   

FIN:表示请求断开连接字段,和主机断开连接时使用.   

PSH: 表示有DATA数据传输,PSH为1表示的是有真正的TCP数据包内容被传递

RST: 表示连接重置。一般是在FIN之后才会出现为1的情况,表示的是连接重置。

seq序列号:将大的数据进行拆分后标记序列信息,便于接收方将拆分后的数据信息进行组装,在原有序列号基础上+1进行回复,告知发送方下次再给我发送的数据是什么.

2.12  TCP三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。

刚开始, 客户端和服务器都处于CLOSED状态.

此时, 客户端向服务器主动发出连接请求, 服务器被动接受连接请求.

1. TCP服务器进程先创建传输控制块TCB, 时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态.

2. TCP客户端进程也是先创建传输hu控制块TCB, 然后向服务器发出连接请求报文,此时报文首部中的同步标志位SYN=1, 同时选择一个初始序列号seq = x, 此时TCP客户端进程进入了SYN-SENT(同步已发送状态)状态。TCP规定, SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

3. TCP服务器收到请求报文后, 如果同意连接, 则发出确认报文。确认报文中的ACK=1, SYN=1, 确认序号是x + 1, 同时也要为自己初始化一个序列号seq = y, 此时TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据, 但是同样要消耗一个序号。

4. TCP客户端进程收到确认后还要向服务器给出确认。确认报文的ACK=1,确认序号是y + 1,自己的序列号是x + 1。

5. 此时TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

举个例子:

TCP三次握手好比在一个夜高风黑的夜晚,你一个人在小区里散步,不远处看见小区里的一位漂亮妹子迎面而来,但是因为路灯有点暗等原因不能100%确认,所以要通过招手的方式来确定对方是否认识自己。

你首先向妹子招手(syn),妹子看到你向自己招手后,向你点了点头挤出了一个微笑(ack)。同时妹子也向你招了招手(syn),你看到妹子向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑(ack)。

于是两人加快步伐,走到了一起。

我们来回顾一下,这个过程中总共有四个动作,

你招手

妹子点头微笑

妹子招手

你点头微笑

其中妹子连续进行了两个动作,先是点头微笑(回复对方),然后再次招手(寻求确认),实际上我们可以将这两个动作合成一个动作,招手的同时点头和微笑(syn+ack)。于是这四个动作就简化成了三个动作。

你招手

妹子点头微笑并招手

你点头微笑

这就是三次握手的本质,中间的一次动作是两个动作的合并。通过这个案例,不知你对TCP三次握手,有没有进一步的理解

 

2.13  TCP四次挥手

数据传输完毕后,双方都可以释放连接.

此时客户端和服务器都是处于ESTABLISHED状态,然后客户端主动断开连接,服务器被动断开连接.

1. 客户端进程发出连接释放报文,并且停止发送数据。

释放数据报文首部,FIN=1,其序列号为seq = u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2. 服务器收到连接释放报文,发出确认报文,ACK=1,确认序号为 u + 1,并且带上自己的序列号seq = v,此时服务端就进入了CLOSE-WAIT(关闭等待)状态。

TCP服务器通知高层的应用进程,客户端向服务器请求了断开连接,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3. 客户端收到服务器的确认请求后,此时客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最终数据)。

4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,确认序号为v + 1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq = w,此时服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,确认序号为w + 1,而自己的序列号是u + 1,此时客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

小知识点:在网络传输层,tcp模块中有一个tcb(传输控制模块,transmitcontrolblock),它用于记录tcp协议运行过程中的变量。对于有多个连接的tcp,每个连接都有一个tcb。tcb结构的定义包括这个连接使用的源端口、目的端口、目的ip、序号、应答序号、对方窗口大小、己方窗口大小、tcp状态、top输入/输出队列、应用层输出队列、tcp的重传有关变量。

2.13.1 TCP四次挥手的原因

那四次分手又是为何呢?TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,主机1收到主机2的FIN报文段时,回复ACK,表示知道主机2也没有数据传输了,之后彼此就会愉快的中断这次TCP连接。

2.13.2  TIME_WAIT状态还需要等2*MSL秒之后才能返回到CLOSED状态的原因

因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

2.14  TCP协议的十一种状态集转换

2.15  TCP十一种状态集表示含义

各个状态的意义如下:

CLOSED:  初始状态,表示TCP连接是“关闭着的”或“未打开的”。 

LISTEN:  表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

SYN_RCVD:表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED状态。

SYN_SENT :这个状态与SYN_RCVD状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

ESTABLISHED :表示TCP连接已经成功建立。

FIN_WAIT_1:这个状态得好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态有时仍可以用netstat看到。

FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2是没有超时的(不像TIME_WAIT状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个FIN_WAIT_2状态将一直保持到系统重启,越来越多的FIN_WAIT_2状态会导致内核崩溃。

TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文。TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(这种情况应该就是四次挥手变成三次挥手的那种情况)

CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT:表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK状态。当收到对方的ACK报文后,也就可以进入到CLOSED可用状态了。

第3章  因特网层协议介绍

ICMP Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

RARP  反向地址转换协议

ARP   地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。作用:有效的避免广播风暴的产生

动态ARP:自动完善ARP表信息,会定时更新ARP条目,自动更新ARP表时会消耗服务器性能,适用于主机更换频繁网络。

静态ARP:手工配置ARP表信息,不会实时更新ARP条目,节省服务器性能,适用于主机更换不频繁网络。

第4章 IP地址

4.1  IP地址基本概念

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。

IP地址在网络层将不同的物理网络地址统一到了全球唯一的IP地址上(屏蔽物理网络差异),是唯一标识互联网上计算机的逻辑地址(相当于手机号码,可以通过唯一的手机号码找到手机),所以IP地址也被称为互联网地址(可见其重要性)。

4.2  IP地址格式

我们目前常用的IPv4中规定,IP地址长度为32位二进制,在表示时,一般将32位地址拆分为4个8位二进制,再转为4个十进制数表示,每个数字之间用点隔开,如127.0.0.1(localhost),这种描述方式被称为“点-数表示法”。

IP地址层次:分为网络号和主机号两个层次。网络号表示主机所属网络,主机号表示主机本身。网络号与主机号的位数与IP地址分类有关。

4.3  IP地址分配

IP地址分配的基本原则是:要为同一网络(子网、网段)内不同主机分配相同的网络号,不同的主机号。

4.4  IP地址类型

#公有地址

公有地址(Public address)由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。全球唯一,不能出现重复.

#私有地址

私有地址(Private address)属于非注册地址,专门为组织机构内部使用。缓解了地址枯竭 是可以重复使用的(不同局域网内)

#以下列出留用的内部私有地址

   A类 10.0.0.0--10.255.255.255

   B类 172.16.0.0--172.31.255.255

   C类 192.168.0.0--192.168.255.255

需要实现配置私网地址的服务器可以访问外网(互联网

NAT --- 网络地址转换技术(化妆),将私网地址转换为公网地址

4.5  特殊的IP地址

1.每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;

2.IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;

3.IP地址中凡是以“11110”开头的E类IP地址都保留用于将来和实验使用。

4.IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试,如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。

5.169.254.0.0~169.254.255.255,是开启了dhcp服务的设备但又无法获取到dhcp的会随机使用这个网段的ip

第5章  子网掩码

子网掩码又叫网络掩码、地址掩码

上面我们说到IP地址分为网络号与主机号,但是路由如何区分网络号与主机号呢?就需要通过子网掩码。子网掩码必须与IP地址结合使用,A、B、C类的子网掩码分别为255.0.0.0,255.255.0.0与255.255.255.0(网络号字节为255,主机号字节为0)。

也就是说给你一个IP地址,那么怎么知道它的网络号和主机号各是多少位呢?

如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现

子网掩码的重要作用:就是将某个IP地址划分成网络地址和主机地址两部分。

子网掩码的位数就是网络的位数。

A类网络的网络位数是8位,子网掩码就是255.0.0.0,

B类网络的网络位数是16位,子网掩码是255.255.0.0,

C类是24位,255.255.255.0。

5.1  不同子网下的主机能否直接通信(是否在同一网络下/段下)

假设两个IP地址分别是172.20.0.18和172.20.1.16,子网掩码都是255.255.255.0。

我们可以知道两者的网络标识分别是172.20.0和172.20.1,无法直接通信,也就无法PING通。要想能相互通信,需要将子网掩码改成255.255.0.0

5.2  如何理解172.20.1.0/18

为什么要子网划分

一个大的地址范围区域,你不进行划分的时候,会造成地址浪费

一个大的地址范围区域,可能会产生大量广播风暴,影响主机性能

一个大的地址访问区域,可能会造成网关路由器负载过高

将一个大的网段切割成一个一个小的局域网段,就称为子网划分

一个网段中可以有多少个地址=2的n次方-2 n表示的就是这个网段中有多少个主机位

-2 表示网络地址不能用  表示广播地址不能用

一个局域网中的地址在使用时要预留一个作为网关地址

5.3  如何理解172.20.1.0/26

上文中的26代表主机ID的掩码地址长度,从前往后有26位,即子网掩码的地址是255.255.255.192。

子网掩码还可以用来将网络划分为更小的子网,将IP的两极结构扩充成三级结构,节约地址空间,减轻路由器负担。

子网掩码的划分

如果要将一个网络划分为多个子网,如何确定子网掩码?步骤如下:

第一步:将要划分的子网数目转换为2的m次方。如果不是恰好是2的多少次方,则按照取大原则。

第二步:将上一步确定的幂m按照高序占用主机地址前m位,再转化为十进制。如m为3,表示主机位中有3位被划分为网络标识号占用,因网络标识号都为1,故如是C类地址,主机号对应的字节变为11100000,转化为十进制后为224,故子网掩码为255.255.255.224,如果是B类网络,则子网掩码为255.255.224.0。

第6章 网关

上文中的26代表主机ID的掩码地址长度,从前往后有26位,即子网掩码的地址是255.255.255.192。

子网掩码还可以用来将网络划分为更小的子网,将IP的两极结构扩充成三级结构,节约地址空间,减轻路由器负担。

子网掩码的划分

如果要将一个网络划分为多个子网,如何确定子网掩码?步骤如下:

第一步:将要划分的子网数目转换为2的m次方。如果不是恰好是2的多少次方,则按照取大原则。

第二步:将上一步确定的幂m按照高序占用主机地址前m位,再转化为十进制。如m为3,表示主机位中有3位被划分为网络标识号占用,因网络标识号都为1,故如是C类地址,主机号对应的字节变为11100000,转化为十进制后为224,故子网掩码为255.255.255.224,如果是B类网络,则子网掩码为255.255.224.0。

第7章 抓包方式

抓包方式:wireshark抓包软件在windows中使用

Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包

tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。

tcpdump命令工作时先要把网卡的工作模式切换到混杂模式。所以tcpdump命令需要以root身份运行。tcpdump命令是linux下使用最广泛的网络协议分析工具。使用tcpdump命令时,必须精通TCP/IP协议工作原理。

语法格式: tcpdump [参数]

常用参数:

-a

尝试将网络和广播地址转换成名称

-c<数据包数目>

收到指定的数据包数目后,就停止进行倾倒操作

-d

把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出

-dd

把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出

-ddd

把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出

-e

在每列倾倒资料上显示连接层级的文件头

-f

用数字显示网际网络地址

-F<表达文件>

指定内含表达方式的文件

-i<网络界面>

使用指定的网络截面送出数据包

-l

使用标准输出列的缓冲区

-n

不把主机的网络地址转换成名字

-N

不列出域名

-O

不将数据包编码最佳化

-p

不让网络界面进入混杂模式

-q

快速输出,仅列出少数的传输协议信息

-r<数据包文件>

从指定的文件读取数据包数据

-s<数据包大小>

设置每个数据包的大小

-S

用绝对而非相对数值列出TCP关联数

-t

在每列倾倒资料上不显示时间戳记

-tt

在每列倾倒资料上显示未经格式化的时间戳记

-T<数据包类型>

强制将表达方式所指定的数据包转译成设置的数据包类型

-v

详细显示指令执行过程

-vv

更详细显示指令执行过程

-x

用十六进制字码列出数据包资料

-w<数据包文件>

把数据包数据写入指定的文件

参考实例

监视指定网络接口的数据包:

[root@linuxcool ~]# tcpdump -i eth1

监视指定主机的数据包:

[root@linuxcool ~]# tcpdump host linuxcool

截获主机192.168.10.10 和主机192.168.10.20 或192.168.10.30的通信:

[root@linuxcool ~]# tcpdump host 192.168.10.10 and \ (192.168.10.20 or 192.168.10.30 \)

抓取80端口的HTTP报文,以文本形式展示:

[root@linuxcool ~]# tcpdump -i any port 80 -A

7.1  默认启动

tcpdump -vv       #普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

 过滤主机

tcpdump -i eth1 host 192.168.1.1       #抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据

tcpdump -i eth1 src host 192.168.1.1   #指定源地址,192.168.1.1

tcpdump -i eth1 dst host 192.168.1.1   #指定目的地址,192.168.1.1

7.2  过滤端口

tcpdump -i eth1 port 80        #抓取所有经过eth1,目的或源端口是80的网络数据

tcpdump -i eth1 src port 80    #指定源端口

tcpdump -i eth1 dst port 80    #指定目的端口

7.3  协议过滤

tcpdump -i eth1 arp

tcpdump -i eth1 ip

tcpdump -i eth1 tcp

tcpdump -i eth1 udp

tcpdump -i eth1 icmp

#抓tcp某端口的数据包

tcpdump -i eth0 tcp port 21 -nn

7.4  常用表达式

非 : ! or "not" (去掉双引号)

且 : && or "and"

或 : || or "or"

#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数

tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

第8章  Linux常用网络命令

8.1  网卡命令规则

CentOS-6之前基于传统的命名方式如eth1,eth0....

Centos-7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比eth0、wlan0更难读。比如enp5s0

biosdevnamenet.ifnames两种命名规范

#net.ifnames的命名规范为:   

设备类型+设备位置+数字

#设备类型:

   en 表示Ethernet

   wl 表示WLAN

   ww 表示无线广域网WWAN

#实际的例子:

    eno1 #板载网卡

   enp0s2  #pci网卡

   ens33   #pci网卡

   wlp3s0  #PCI无线网卡

   wwp0s29f7u2i2   #4G modem

   wlp0s2f1u4u1   #连接在USB Hub上的无线网卡

#biosdevname的命名规范为:

    根据系统BIOS提供的信息对网络接口进行重命名。

   em[1-N] #表示主板(嵌入式)NIC (对应机箱标签) 

   pci   #表示PCI插槽中的卡,端口1至N 

实际的例子:

    em1   #板载网卡

   p3p4 #pci网卡

   p3p4_1   #虚拟网卡

CentOS-7

默认内核参数(biosdevname=0(dell服务器默认是1),net.ifnames=1):  网卡名 "enp5s2"

biosdevname=1,net.ifnames=0:网卡名 "em1"

biosdevname=0,net.ifnames=0:网卡名 "eth0" (最传统的方式,eth0 eth1)

#定义网卡命令规则

在安装系统时,选择安装选项,按tab键,在跳出的一行内容后面添加net.ifnames=0 biosdevname=0

#命令行设置网卡名称规则

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@qls ~]# cd /etc/sysconfig/network-scripts/  #修改网卡配置文件
 
[root@qls network-scripts]# mv ifcfg-ens33 ifcfg-eth0
 
[root@qls network-scripts]# sed -i "s#ens33#eth0#g" ifcfg-eth0
 
[root@qls ~]# vim /etc/sysconfig/grub  #GRUB添加kernel参数
 
GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"
 
[root@qls ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
 
[root@qls ~]# reboot   #重启系统生效

8.2  网卡配置文件详解

#动态ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@qls ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"             网络类型:以太网
PROXY_METHOD="none"         代理方式:关闭状态
BROWSER_ONLY="no"           只是浏览器(yes|no)
BOOTPROTO="dhcp"            设置网卡获得ip地址的方式(static|dhcp|none|bootp)
DEFROUTE="yes"              设置为默认路由(yes|no)
IPV4_FAILURE_FATAL="no"     是否开启IPV4致命错误检测(yes|no)
IPV6INIT="yes"              IPV6是否自动初始化
IPV6_AUTOCONF="yes"         IPV6是否自动配置
IPV6_DEFROUTE="yes"         IPV6是否可以为默认路由
IPV6_FAILURE_FATAL="no"     是否开启IPV6致命错误检测
IPV6_ADDR_GEN_MODE="stable-privacy"  IPV6地址生成模型
NAME="eth0"                 网卡物理设备名称
UUID="fb32c09d-5a9f-40b9-852b-0f44ff2202ed"  UUID识别码
DEVICE="eth0"                网卡设备名称
ONBOOT="yes"                 开机自启(yes|no)
#静态ip                      IP地址
[root@qls ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"              网络类型:以太网
BOOTPROTO="static"           设置静态模式
NAME="eth0"                   网卡名称
DEVICE="eth0"                 网卡设备名称
ONBOOT="yes"                  开机自启(yes|no)
IPADDR="10.0.0.200"         IP地址
NETMASK="255.255.255.0"     子网掩码
GATEWAY="10.0.0.254"         网关
DNS1="223.5.5.5"             备用DNS1服务器
DNS2="223.6.6.6"                备用DNS2服务器

8.3  网络管理命令

ping 命令

ping命令主要用来测试主机之间网络的连通性,也可以用于。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

语法格式:ping [参数] [目标主机]

常用参数:

-d

使用Socket的SO_DEBUG功能

-c

指定发送报文的次数

-i

指定收发信息的间隔时间

-I

使用指定的网络接口送出数据包

-l

设置在送出要求信息之前,先行发出的数据包

-n

只输出数值

-p

设置填满数据包的范本样式

-q

不显示指令执行过程

-R

记录路由过程

-s

设置数据包的大小

-t

设置存活数值TTL的大小

-v

详细显示指令的执行过程

参考实例

检测与linuxcool网站的连通性:

1
[root@linuxcool ~]# ping www.linuxcool.com

 连续ping4次:

1
[root@linuxcool ~]# ping -c 4 www.linuxcool.com

设置次数为4,时间间隔为3秒:

1
[root@linuxcool ~]# ping -c 4 -i 3 www.linuxcool.com

利用ping命令获取指定网站的IP地址

1
2
[root@linuxcool ~]# ping -c 1 linuxcool.com | grep from | cut -d " " -f4
220.181.57.216

nc  命令

常用参数:

-l

使用监听模式,管控传入的资料

-p

设置本地主机使用的通信端口

-s

设置本地主机送出数据包的IP地址

-u

使用UDP传输协议

-v

显示指令执行过程

-w

设置等待连线的时间

-z

使用0输入/输出模式,只在扫描通信端口时使用

参考实例

扫描80端口:

1
[root@linuxcool ~]# nc -nvv 192.168.3.1 80

扫描UDP端口:

1
[root@linuxcool ~]# nc -u -z -w2 192.168.0.1 1-1000

扫描TCP端口:

1
[root@linuxcool ~]# nc -v -z -w2 192.168.0.3 1-100

nmap 命令

语法格式:nmap [参数]

常用参数:

--traceroute

扫描主机端口并跟踪路由

-p

扫描指定端口和端口范围

-sP

对目标主机进行ping扫描

-A

使用高级功能进行扫描

-PE

强制执行直接的ICMPping

-sV

探测服务版本信息

-d

增加调试信息地输出

-PU

发送udp ping

-ps

发送同步(SYN)报文

参考实例

扫描主机并跟踪路由:

1
[root@linuxcool ~]# nmap --traceroute www.linuxcool.com

使用-p参数探测80、443端口:

1
[root@linuxcool ~]# nmap -p80,443 www.linuxcool.com

探测服务器的1-10000端口范围:

1
[root@linuxcool ~]# nmap -p1-10000 www.linuxcool.com

使用-A参数进行高级扫描:

1
[root@linuxcool ~]# nmap -A www.linuxcool.com

telnet 命令一种远程登录的工具。

同样可以检查某个主机是否开启某个端口

语法格式: telnet [参数]

常用参数:

-8

允许使用8位字符资料,包括输入与输出

-a

尝试自动登入远端系统

-b

使用别名指定远端主机名称

-c

不读取用户专属目录里的.telnetrc文件

-d

启动排错模式

-e

设置脱离字符

-E

滤除脱离字符

-f

此参数的效果和指定”-F”参数相同

-F

使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机

-k

使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名

-K

不自动登入远端主机

-l

指定要登入远端主机的用户名称

-L

允许输出8位字符资料

-n

指定文件记录相关信息

-r

使用类似rlogin指令的用户界面

-S

设置telnet连线所需的IP TOS信息

-x

假设主机有支持数据加密的功能,就使用它

-X

关闭指定的认证形态

参考实例

登录远程主机:

1
[root@linuxcool ~]# telnet 192.168.0.5

连接本地主机,端口号为23

1
2
3
4
5
6
7
8
9
10
11
[root@linuxcool ~]# telnet localhost23
#用法 
[C:\~]$ telnet 10.0.0.99 22
 
Connecting to 10.0.0.99:22...
 
Connection established.
 
To escape to local shell, press 'Ctrl+Alt+]'.
 
SSH-2.0-OpenSSH_7.4

netstat 命令

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

语法格式netstat [参数]

常用参数:

-a

显示所有连线中的Socket

-p

显示正在使用Socket的程序识别码和程序名称

-u

显示UDP传输协议的连线状况

-i

显示网络界面信息表单

-n

直接使用IP地址,不通过域名服务器

参考实例

显示详细的网络状况:

1
[root@linuxcool ~]# netstat -a

显示当前户籍UDP连接状况:

1
[root@linuxcool ~]# netstat -nu

显示UDP端口号的使用情况:

1
2
3
4
5
6
[root@linuxcool ~]# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address  Foreign Address  State  PID/Program name  
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*      4000/dhclient     
udp        0      0 localhost:323           0.0.0.0:*      3725/chronyd      
udp6       0      0 localhost:323           [::]:*         3725/chronyd

显示网卡列表:

1
2
3
4
5
[root@linuxcool ~]# netstat -i
Kernel Interface table
Iface MTU Met  RX-OK  RX-ERR  RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500   0  181864   0      0       0     141278   0     0     0    BMRU
lo   16436  0   3362    0      0       0     3362     0     0     0    LRU

显示组播组的关系:

1
2
3
4
5
6
7
[root@linuxcool ~]# netstat -g
IPv6/IPv4 Group Memberships Interface  
RefCnt Group
--------------- ------ ---------------------
lo        1   ALL-SYSTEMS.MCAST.NET
eth0      1   ALL-SYSTEMS.MCAST.NET lo       1   ff02::1
eth0      1   ff02::1:ff0a:b0c eth0          1   ff02::1

ss 命令

语法格式:ss [参数]

ss命令用来显示处于活动状态的套接字信息。

常用参数:

-n

不解析服务名称,已数字方式显示

-a

显示所有套接字

-l

显示处于监听状态的套接字

-o

显示计时器信息

-e

显示详细的套接字信息

-m

显示套接字的内存使用情况

-p

显示使用套接字的进程

-i

显示内部的TCP信息

-s

显示套接字使用概况

-4

仅显示ipv4的套接字

-6

仅显示ipv6的套接字

-0

显示PACKET套接字

-t

只显示TCP套接字

-u

只显示UDP套接字

-d

只显示DCCP套接字

-w

只显示RAW套接字

-x

只显示 Unix套接字

-D

将原始TCP套接字信息转储到文件

参考实例

显示TCP套接字:

1
2
3
4
5
6
[root@linuxcool ~]# ss -t -a
State     Recv-Q     Send-Q     Local Address:Port     Peer Address:Port 
LISTEN    0          128        0.0.0.0:ssh            0.0.0.0:*                               
ESTAB     0          52         192.168.60.19:ssh      192.168.30.21:59321             
LISTEN    0          128        *:websm                *:*             
LISTEN    0          128        [::]:ssh               [::]:*

显示UDP套接字:

1
2
3
4
5
[root@linuxcool ~]# ss -u -a
State     Recv-Q     Send-Q     Local Address:Port     Peer Address:Port            
UNCONN    0          0          0.0.0.0:bootpc         0.0.0.0:*               
UNCONN    0          0          127.0.0.1:323          0.0.0.0:*               
UNCONN    0          0          [::1]:323              [::]:* 

显示套接字使用概况:

1
2
3
4
5
6
7
8
9
[root@linuxcool ~]# ss -s
Total: 185
TCP:   4 (estab 1, closed 0, orphaned 0, timewait 0)
Transport Total     IP        IPv6
RAW       1         0         1       
UDP       3         2         1      
TCP       4         2         2      
INET      8         4         4      
FRAG      0         0         0     

tracert 命令

(windows) 路由跟踪(检查你与目标之间每个路口是否畅通)
#常用选项

   -d   #禁止把IP解析为对应的域名(主机名)

traceroute   追踪数据包在网络上的传输时的全部路径

语法格式:traceroute [参数] [域名或者IP]

常用参数:

-d

使用Socket层级的排错功能

-f<存活数值>

设置第一个检测数据包的存活数值TTL的大小

-F

设置勿离断位

-g<网关>

设置来源路由网关,最多可设置8

-i<网络界面>

使用指定的网络界面送出数据包

-I

使用ICMP回应取代UDP资料信息

-m<存活数值>

设置检测数据包的最大存活数值TTL的大小

-n

直接使用IP地址而非主机名称

-p<通信端口>

设置UDP传输协议的通信端口

-r

忽略普通的Routing Table,直接将数据包送到远端主机上

-s<来源地址>

设置本地主机送出数据包的IP地址

-t<服务类型>

设置检测数据包的TOS数值

-v

详细显示指令的执行过程

-w

设置等待远端主机回报的时间

-x

开启或关闭数据包的正确性检验

参考实例

追踪本地数据包到www.linuxprobe.com的传输路径:

1
[root@linuxcool ~]# traceroute www.linuxprobe.com

跳数设置:

1
[root@linuxcool ~]# traceroute -m 7 www.linuxprobe.com

显示IP地址,不查主机名 

1
[root@linuxcool ~]# traceroute -n www.linuxprobe.com

把探测包的个数设置为值4

1
[root@linuxcool ~]# traceroute -q 4 www.linuxprobe.com

把对外发探测包的等待响应时间设置为3秒:

1
[root@linuxcool ~]# traceroute -w 3 www.linuxprobe.com

iftop 命令

iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。

iftop界面说明:

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量

RX:接收流量

TOTAL:总流量

Cumm:运行iftop到目前时间的总流量

peak:流量峰值

rates:分别表示过去 2s 10s 40s 的平均流量

#常用选项

-i                  #设定监测的网卡

-B                 #以bytes为单位显示流量(默认是bits)

-n                  #使host信息默认直接都显示IP

-P                   #使host信息及端口信息默认就都显示

-m                  #设置界面最上边的刻度的最大值,刻度分五个大段显示

按q退出监控。

glances  命令

glances是一个相对比较新的系统监控工具,用 Python 编写的,使用 psutil 库从系统获取信息。可以用它来监控 CPU、平均负载、内存、网络接口、磁盘 I/O,文件系统空间利用率、挂载的设备、所有活动进程以及消耗资源最多的进程。

语法格式:glances [参数]

常用参数:

-b

显示网络连接速度 Byte/ 

-s

设置 glances 运行模式为服务器

-B

绑定服务器端 IP 地址或者主机名称

-c

连接 glances 服务器端

-t

设置屏幕刷新的时间间隔,单位为秒,默认值为 2 秒,数值许可范围:1~32767

参考实例

192.168.10.10 主机启动 glances 服务:

1
[root@linuxcool ~]# glances -s -B 192.168.10.10 &

从另一台主机查看 192.168.10.10 主机的系统负载状态:

1
[root@linuxcool ~]# glances -c 192.168.10.10

显示网络连接速度 Byte/ 秒:

1
[root@linuxcool ~]# glances -b

设置屏幕刷新的时间间隔为6秒:

1
[root@linuxcool ~]# glances -t 6

8.4  常见面试题

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的
间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
【问题3】为什么不能用两次握手进行连接?
答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
       现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

第9章   Linux配置多IP地址

9.1  每个网卡都可以配置多个公网IP 内网IP

9.1.1  可以配置任意接口

给eth0网卡配置10.0.0.201     临时生效       重启失效

1
[root@oldboyedu ~]#ip addr add 10.0.0.201/24 dev eth0

永久生效

    /etc/rc.local

扩展:配置网卡的子接口  eth0:0 eth0:1  了解   绑定多网卡

1
[root@oldboyedu-lnb ~]# ip addr del 10.0.0.251/24 dev eth0

9.2   指定默认网关  笔试题

查看默认的网关

9.2.1  route -n

1
2
3
4
5
6
[root@oldboyedu ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

9.2.2  查看网卡配置

9.2.2.1      删除默认的网关

第一种方法:

1
[root@oldboyedu ~]# route del default gw 10.0.0.2

第二种方法:使用静态路由的方式删除网关

1
[root@oldboyedu ~]# ip route del 0/0 via 10.0.0.2

9.2.2.2      设置默认网关

第一种方法:

1
[root@oldboyedu ~]# route add  default gw 10.0.0.2

第二种方法:

1
[root@oldboyedu ~]#ip route add 0/0 via 10.0.0.2

9.2.2.3      工作中临时+永久

在命令行执行

1
2
3
ip route del default gw 10.0.0.2               #删除默认网关
ip route add default gw 10.0.0.254             #添加默认网关
vim /etc/sysconfig/network-scripts/ifcfg-eth0  #修改默认网卡

9.2.2.4      修改默认网关

1
2
ip route  replace  直接修改  不需要先删除后添加
ip route replace default via 10.0.0.2 dev eth0

9.2.2.5      指定默认路由

1
2
3
ip route add 192.168.1.100 via 10.0.0.2
route add  10.0.0.1 netmask
route –net 202.106.0.20 netmask 255.255.255.0 dev

9.2.2.6      策略路由:

     案例:如果服务器使用pptp拨号

1)      业务需要pptp拨号

2)      购买pptp账号

3)      拨号pptpset up

4)      安装pptp命令

[root@oldboyedu-lnb ~]# yum -y install pptp-setup

5)      Linux系统拨号  Windows如何拨号 vpn的账号?  扩展

a. 删除默认的网关

 b. 指定去往vpn服务器默认的路由

1
2
3
ping shh.91ip.vip
ip route add 115.207.30.130 via 172.17.159.253
[root@oldboyedu-lnb ~]# pptpsetup  --create test --server shh.91ip.vip --username 66951 --password 1234  --start

6) 测试网络通信

7) 指定默认的路由走ppp0接口

1
[root@oldboyedu-lnb ~]#  route add -net 0.0.0.0 netmask 0.0.0.0 ppp0

8) 无法通过SSH连接服务器

9) 使用策略路由 来给SSH进行回包

      路由表:

      /etc/iproute2/rt_tables

      可以给里面的表名字 配置一个默认的路由

1
[root@oldboyedu-lnb ~]#  ip route add 0/0 via 172.17.159.253 table test

给test表配置了一个静态路由 去往任意IP的 网关为172.17.159.253

配置策略

1
[root@oldboyedu-lnb ~]# ip rule add from 39.153.181.202 table test

PS:DNS作用:

域名解析  把域名解析成IP  我们和解析到的IP地址建立通信

没有域名   直接可以使用IP地址

linux的网卡配置文件 /etc/resolv.conf   #  工作中建议使用

 

posted @ 2021-09-02 10:43  精舞门2020  阅读(138)  评论(0编辑  收藏  举报