计算机网络区域范围:
局域网络 (Local Area Network, LAN):节点之间的传输距离较近
广域网 (Wide Area Network, WAN):传输距离较远,网络应用方面大多为类似 email, FTP, WWW 浏览等功能
计算机网络协议:网络连接过程分成数个阶层 (layer),每个阶层都有特别的独立的功能,不会互相干扰的。 目前的OSI七层协定(Open System Interconnection)
OSI模型自上而下,分为以下:
应用层:文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层:数据格式化,代码转换,数据加密 没有协议
会话层:解除或建立与别的接点的联系 没有协议
传输层:提供端对端的接口 TCP,UDP
网络层:为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层:传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层:以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
简要说明各层职责,如下:
网络数据通信原理
TCP/IP:OSI七层协议的架构非常严谨,TCP/IP 也是使用OSI七层协议的观念,同样具有分层的架构,只是将它简化为四层,在结构上面比较没有这么严谨。
TCP/IP分层结构中,主要协议的分布(TCP/IP协议远不止以上协议):
TCP:使用不可靠的IP服务,但是却提供一种可靠的运输层服务
UDP:为应用程序发送和接收数据报。UDP是不可靠的,它不能保证数据报能安全无误的达到目的地。
IP(网际协议)是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP(internet控制报文协议)是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
IGMP(internet组管理协议)。它用来把一个UDP数据多播到多个主机。
ARP(地址解析协议)和RARP(逆地址解析协议)是网络接口使用的特殊协议,用来转换IP层和网络接口层使用的地址。
以下OSI与TCP/IP 协议之相关性
应用层(application layer):直接为用户的应用进程提供服务
传输层(transport layer):负责向两个主机中进程之间的通信提供服务
网络层(network layer):负责为分组交换网上的不同主机提供通信服务
数据链路层(data link layer): 将源自网络层来的数据可靠地传输到相邻节点的目标机网络层
物理层(physical layer): 为数据端设备提供传送数据通路、传输数据
TCP被称为可靠的联机封包,主要是透过许多机制来达成的,其中最重要的就是三次握手的功能
图示
三次握手:
SYN=1, ACK=0, FIN=0
SYN=1, ACK=1, FIN=0
SYN=0, ACK=1, FIN=0
流程概述:
1、当客户端想要对服务器端联机时,就必须要送出一个要求联机的封包,此时客户端必须随机取用一个大于 1024 以上的端口来做为程序沟通的接口。然后在 TCP 的表头当中,必须
要带有 SYN 的主动联机(SYN=1),并且记下发送出联机封包给服务器端的序号 (Sequence number = 10001)
2、当服务器接到这个封包,并且确定要接收这个封包后,就会开始制作一个同时带有 SYN=1, ACK=1 的封包, 其中那个 acknowledge 的号码是要给 client 端确认用的,所以该数
字会比(A 步骤)里面的 Sequence 号码多一号 (ack = 10001+1 = 10002), 服务器也必须要确认客户端确实可以接收我们的封包才行,所以也会发送出一个 Sequence (seq=20001) 给客户端
,并且开始等待客户端回应
3、当客户端收到来自服务器端的 ACK 数字后 (10002) 就能够确认之前那个要求封包被正确的收受了, 接下来如果客户端也同意与服务器端建立联机时,就会再次的发送一个确认封
包 (ACK=1) 给服务器,即开始建立起这次的联机
四次挥手图示
流程概述:
1、客户端发送一个FIN,用来关闭客户端到服务器端的数据传送
2、服务器收到这个IN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号
3、服务器关闭与客户端的连接,发送一个FIN给客户端
4、客户端发回ACK报文确认,并将确认序号设置为收到序号加1
IP地址标识着网络中一个系统的位置,分两种: IPv4(Internet Protocol version 4);IPv6 。IPv4 记录的地址由于仅有 32 位,为了避免这个问题发生,因此就有 IPv6 的产生。
IPv6 的地址可以达到128位。IP地址是一个32位,即4个字节的整数,可以采用点分十进制把每个字节表示出来。每个IP地址由两部分组成的:网络号和主机号。
IP地址分类分5类,即A类~E类,其中A、B、C由InternetNIC在全球范围内统一分配,D、E类为特殊地址
A类:最大网络数:126(2^7-2) IP地址范围:0.0.0.0-127.255.255.255 最大主机数:16777214 私有IP地址范围:10.0.0.0-10.255.255.255
B类:最大网络数:16384(2^14) IP地址范围:128.0.0.0-191.255.255.255 最大主机数:65534 私有IP地址范围:172.16.0.0-172.31.255.255
C类:最大网络数:2097152(2^21) IP地址范围:192.0.0.0-223.255.255.255 最大主机数:254 私有IP地址范围:192.168.0.0-192.168.255.255
注:标准分类的ip地址的网络号,A类是前8位、 B类是前16位 、C类是前24位 ;子网掩码与IP地址子网掩码与IP地址结合使用,可以区分出一个网络地址的网络号和主机号。
举个小例子:ip地址172.16.10.2,172.16.10.2是B类地址,172.16所代表的位就是网络号的位,后面10.2代表的位是主机位
网络基本属性配置:主机DNS的配置、主机名的配置、网关路由的配置、网络IP的配置等
主机DNS:
1、配置文件位置:/etc/resolv.conf
2、格式:
nameserver DNS-IP1 ---主DNS
nameserver DNS-IP2 ---备DNS
指定本地DNS解析:在/etc/hosts配置文件中下添加 ,目标主机IP 、主机名、 主机别名 (如:192.168.2.11 www.weihc.com)
注:DNS解析过程-->/etc/hosts-->DNS
主机名配置hostname:
1、配置文件位置: /etc/sysconfig/network
2、格式:
HOSTNAME=名称
NETWORKING={yes|no}:是否开启网络功能
NETWORKING
网关路由route:系统路由,网卡路由(redhat8以上),静态路由
系统路由:配置文件在/etc/sysconfig/network
网卡路由:配置文件在/etc/sysconfig/nework-script/ifcfg-ethX
静态路由:配置文件/etc/sysconfig/networking/device/,ethX.route中设置,静态路由顾名思义,就是固定的,设置好了一般不会轻易变化的路由
route命令:用于显示和操作IP路由表
语法:route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]
常见参数选项
-n:不解析名字
-f:清除所有网关入口的路由表。
-p:与 add 命令一起使用时使路由具有永久性
add:添加一条新路由
del:删除一条路由
-net:目标地址是一个网络
-host:目标地址是一个主机
netmask:当添加一个网络路由时,需要使用网络掩码
gw:路由数据包通过网关,指定的网关必须能够达到
metric:设置路由跳数
Destination :指定该路由的网络目标
mask Netmask:指定与网络目标相关的网络掩码(也被称作子网掩码)
Gateway:指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点IP地址
metric Metric:为路由指定一个整数成本值标(从1至9999),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用
例:显示路由信息
注:Flags字段,表示为路由标志,标记当前网络节点的状态
U:Up表示此路由当前为启动状态
H:Host,表示此网关为一主机
G:Gateway,表示此网关为一路由器
R:Reinstate Route,使用动态路由重新初始化的路由
D:Dynamically,此路由是动态性地写入
M:Modified,此路由是由路由守护程序或导向器动态修改
!:表示此路由当前为关闭状态
练习:在eno16777736第一接口上,添加192.16.168.111.0,成功后显示网关信息,屏蔽192.168.111.0路由,最后删除该路由,把192.168.110.0路由保存永久生效
网络IP:配置文件在/etc/sysconfig/network-scripts/网卡设备接口名称
格式:
DEVICE=:关联的设备名称
BOOTPROTO={static|none|dhcp|bootp}:引导协议,要使用静态地址,使用static或none,dhcp表示使用dhcp服务器获取地址
IPADDR=:IP地址
NETMASK=:子网掩码
GAYEWAY=:设定网关
ONBOOT=:开机是否自动激活此网络接口
HWADDR=:硬件地址,要与硬件中的地址保持一致,可省。
USERCTL={yes|no}:是否允许普通用户控制此接口
PEERDNS={yes|no}:是否在BOOTPROTO为dhcp时是否接受由dhcp服务器指定的DNS地址
注:以上保存不会立即生效,需重启网络服务或主机,属于永久生效
IP网络接口:lo:本地回环接口;eth[0-9]或eno[0-9]{n,m};以太网接口;pppX:点对点的链接
ifconfig命令:查看网卡信息
语法:ifconfig [网络设备] [参数]
常见参数选项
up:启动网卡
down:关闭网卡
add:添加网卡配置IPv6地址
del:删除网卡的IPv6地址
netmask:<子网掩码> 设置子网掩码
address:设置网卡IPv4地址
示例:查看当前网卡配置信息
简要说明上图:
说明:
eth0:表示第一块网卡,物理地址(MAC地址)00:0C:29:54:7D:BA
inet addr:网卡的IP地址: 192.168.2.10,广播地址, Bcast:192.168.2.255,掩码地址Mask:255.255.255.0
lo:是表示主机的回坏地址
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第二行:网卡的IP地址、子网、掩码
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息
练习:关闭eth1,再重新驱动,重新配置i5.255.225.0
网络管理相关的工具命令:ping,netstat,ss,ip,nmap,tcpdump
ping命令:测试与目标主机的连通性
语法:ping [参数] [主机名或IP地址]
常见参数选项
命令参数:
-r:查看本机的网络接口是否有问题
-R:记录路由过程。
-v:详细显示指令的执行过程。
-t:存活数值:设置存活数值TTL的大小
-c #: 报文的个数
-W timeout: 等待响应报文的超时时长
较简单不举例子
netstat命令:查看本机各端口的网络连接情况,是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告
语法:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
常见参数选项
-a:显示所有连线中的Socket
-l:显示监控中的服务器的Socket
-n:直接使用IP地址
-p:显示正在使用Socket的程序识别码和程序名称
-r:显示路由表
-t:显示TCP传输协议连接情况
-u:显示UDP传输协议连接情况
示例:查看当前所有端口
[[email protected] ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 52 192.168.2.11:ssh 192.168.2.107:57511 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 13611 /run/systemd/shutdownd
unix 5 [ ] DGRAM 8042 /run/systemd/journal/socket
unix 23 [ ] DGRAM 8044 /dev/log
unix 2 [ ] DGRAM 13491 @/org/freedesktop/systemd1/notify
unix 3 [ ] STREAM CONNECTED 25472 /run/user/42/pulse/native
unix 3 [ ] STREAM CONNECTED 25053 /run/systemd/journal/stdout
对上面概要说明:
输出结果分两个部分:
1、Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0,如果不是则表示软件包正在队列中堆积
2、Acive UNIX domain sockets,称为有源Unix域套接口
Proto显示连接使用的协议
RefCnt表示连接到本套接口上的进程号
Types显示套接口的类型
State显示套接口当前的状态
Path表示连接到套接口的其它进程使用的路径名
套接口类型:
-t :TCP
-u :UDP
-raw :RAW类型
--unix :UNIX域类型
--ax25 :AX25类型
--ipx :ipx类型
--netrom :netrom类型
状态:
LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态
示例:显示程序运行ssh进程的端口
ss命令:Socket Statistics的缩写,用来获取socket统计信息,显示和netstat类似的内容,但比netstat更快速更高效
语法:ss [参数] [过滤]
常见参数选项
-n:不解析服务名称
-a:显示所有套接字(sockets)
-l:显示监听状态的套接字(sockets)
-e:显示详细的套接字(sockets)信息
-p:显示使用套接字(socket)的进程
-i:显示 TCP内部信息
-4:显示IPv4的套接字(sockets)
-t:显示 TCP套接字(sockets)
-u:显示 UCP套接字(sockets)
-d:显示 DCCP套接字(sockets)
-w:显示 RAW套接字(sockets)
-x:显示 Unix套接字(sockets)
示例:显示所有的tcp或udp连接
[[email protected] ~]# ss -atu
IP命令:iproute2软件包内的一个命令,功能比ifconfig更强大,可以对系统配置IP和路由信息
常见参数选项
ip link:配置网络接口属性
ip link show:查看所有网络接口属性信息
ip -s link show:查看所有统计信息
ip link set ethX {up|down|arp {on|off}}:设置网络接口的工作属性
练习:
1、查看ip地址信息
2、重新配置eth1地址为192.168.220.11
3、显示路由信息
nmap工具:Network Mapper,网络扫描和嗅探工具包
语法:Nmap [ 扫描类型 ... ] [ 通用选项 ] { 扫描目标说明 }
常见参数选项
--扫描类型
-sT:TCP connect()扫描,这是最基本的TCP扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sS:TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志
-sP:ping扫描
-sU:扫描UDP服务
-sA:ACK扫描,这项高级的扫描方法通常可以用来穿过防火墙
-b:FTP反弹攻击(bounce attack),连接到防火墙后面的一台FTP服务器做代理,接着进行端口扫描
--通用选项
-P0:在扫描之前,不ping主机
-PT:扫描之前,使用TCP ping确定哪些主机正在运行
-PS:对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描
-PB:这是默认的ping扫描选项
-O:这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型
-I:打开nmap的反向标志扫描功能
-S <IP>:确定源地址
-g port:扫描的源端口
-oN:把扫描结果重定向到一个可读的文件FILES中
--host_timeout:设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制
--max_rtt_timeout:设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约9000毫秒
--min_rtt_timeout:设置nmap对每次探测至少等待时间,以毫秒为单位
-M count:置进行TCP connect()扫描时,最多使用多少个套接字进行并行的扫描
--扫描目标
-iL filename:从filename文件中读取扫描的目标
-iR:让nmap自己随机挑选主机进行扫描
-p[端口]:扫描指定端口号的范围,如:-p 20-30,139,60000
-exclude:排除指定主机
-excludefile:排除指定文件中的主机
练习:
1、 用主机名和IP地址扫描系统,用www.baidu.com主机名来扫描系统找出该系统上所有开放的端口,服务和MAC地址。
2、使用IP地址扫描
3、扫描使用“-v”选项,显示远程机器更详细的信息
4、扫描多台主机,多个IP地址或主机名来扫描多台主机
5、扫描整个子网
6、从一个文件中nmaptest.txt扫描主机列表,用iL选项
7、在192.168.2.10-11中,排除10再扫描,“-exclude”选项
8、用选项“-O”探测操作系统探测功能
9、扫描主机192.168.2.10是否有防火墙保护(受到数据包过滤软件或防火墙的保护)
10、检测192.168.2.0网段的在线主机,用“-sP”选项
11、检测主机192.168.2.10网络接口和路由信息,用–iflist选项
12、扫描主机192.168.2.10指定具体的端口类型和端口号
13、使用TCP ACK (PA)和TCP Syn (PS)扫描远程主机192.168.2.10
14、使用TCP ACK扫描远程主机192.168.2.10端口22,25,80,443
15、执行一次隐蔽的扫描
16、使用TCP Syn扫描主机192.168.2.10最常用的端口
tcpdump网络数据采集分析工具
语法:tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
常见参数选项
-a:将网络地址和广播地址转变成名字
-d:匹配信息包的代码以汇编格式输出
-dd:匹配信息包的代码以c语言程序段的格式输出
-ddd:将匹配信息包的代码以十进制的形式输出
-e:在输出行打印出数据链路层的头部信息
-f:将外部的Internet地址以数字的形式打印输出
-l:使标准输出变为缓冲行形式
-n:不把网络地址转换成名字
-t:在输出的每一行不打印时间戳
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv:输出详细的报文信息
-c:在收到指定的包的数目后,tcpdump就会停止
-F:从指定的文件中读取表达式,忽略其它的表达式
-i:指定监听的网络接口
-r:从指定的文件中读取包(这些包一般通过-w选项产生)
-w:直接将包写入文件中,并不分析和打印出来
示例:eth0 这个网络卡上的1个封包
[[email protected] ~]# tcpdump -i eth0 -nn -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:14:05.532947 IP 192.168.2.10.22 > 192.168.2.107.58287: Flags [P.], seq 894588612:894588808, ack 647799502, win 279, length 196
1 packets captured ------------>捉下来的封包数量
22 packets received by filter ------------>由过滤所得的总封包数量
0 packets dropped by kernel ------------>被核心所丢弃的封包
19:14:05.532947:封包被撷取的时间,『时:分:秒』的单位
IP:透过的通讯协议是 IP
192.168.2.10.22 > :传送端是 192.168.2.100这个 IP,而传送的 port number 为 22,大于 >号指的是封包的传输方向
192.168.3.107.1937:接收端的 IP 是 192.168.2.107, 且该主机开启 port58287来接收
[P.], seq 894588612:894588808:这个封包带有 PUSH 的数据传输标志, 且传输的数据为整体数据的 894588612~894588808 byte
ack 1:ack