Linux之网络基础TCP/IP以及网络属性配置

   计算机网络区域范围:

       局域网络 (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


    简要说明各层职责,如下:

wKioL1XxbMLRYpQYAAWTtgG4LGA298.jpg

    网络数据通信原理

wKiom1XxaqLCUe3DAALy7_kzHhM366.jpg

   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 协议之相关性

wKioL1XxbODQcA-PAAFnYBrxgiY530.jpg

       应用层(application layer):直接为用户的应用进程提供服务    

       传输层(transport layer):负责向两个主机中进程之间的通信提供服务    

       网络层(network layer):负责为分组交换网上的不同主机提供通信服务

    数据链路层(data link layer): 将源自网络层来的数据可靠地传输到相邻节点的目标机网络层    

        物理层(physical layer): 为数据端设备提供传送数据通路、传输数据

   TCP被称为可靠的联机封包,主要是透过许多机制来达成的,其中最重要的就是三次握手的功能

   图示

 wKiom1XxauziEnnUAAEne3G5RYU642.jpg

   三次握手:

       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) 给服务器,即开始建立起这次的联机

    四次挥手图示

wKioL1XxbSfyB8evAAF5OZu8VNc992.jpg

    流程概述:

        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)

wKiom1XxawmTvK6DAAGFAVF147o835.jpg

            注: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),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用 

   例:显示路由信息

wKiom1XxaxbR0i0zAAJs2jQqQvE748.jpg

   注: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路由保存永久生效

wKiom1XxayPQC3keAAYd1YdDb-o208.jpgwKioL1XxbVyhPVadAALtuT3o9Mc388.jpg

   网络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地址

   示例:查看当前网卡配置信息

wKiom1Xxaz2z0IvUAAUJ5a30dVg460.jpg

   简要说明上图:

   说明:

   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

wKioL1XxbXnx3YrPAAKxlVaPJU8601.jpg

   

  网络管理相关的工具命令: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传输协议连接情况


    示例:查看当前所有端口

    [root@localhost ~]# 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进程的端口

wKiom1Xxa2DwTvaiAAJqKpRvqPA528.jpg

    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连接

     [root@localhost ~]# ss -atu

wKiom1Xxa2-BXT9bAAIQZeh29pk833.jpg

   IP命令:iproute2软件包内的一个命令,功能比ifconfig更强大,可以对系统配置IP和路由信息

    常见参数选项

        ip link:配置网络接口属性

        ip link show:查看所有网络接口属性信息

        ip -s link show:查看所有统计信息

     ip link set ethX {up|down|arp {on|off}}:设置网络接口的工作属性

    练习:

    1、查看ip地址信息

wKioL1Xxbani5i4rAAOTT1WSYNQ602.jpg

    2、重新配置eth1地址为192.168.220.11

wKiom1Xxa4yCwdmZAAVaYiPoUPo051.jpg

    3、显示路由信息

wKioL1XxbcbQFaHgAAFRGl0wZ9s205.jpg

  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地址。

wKiom1Xxa8qhxh83AAGE4jI26rI113.jpg

      2、使用IP地址扫描

wKiom1Xxa9nSe0-uAAGduGRXk4w959.jpg

      3、扫描使用“-v”选项,显示远程机器更详细的信息

wKioL1XxbhiwcN9-AARpWJOsbcM658.jpg

      4、扫描多台主机,多个IP地址或主机名来扫描多台主机

wKioL1XxbiayHA2iAAQFlWUKx50792.jpg

      5、扫描整个子网

wKioL1XxbjLBoOUDAABmsVmEimM714.jpg

      6、从一个文件中nmaptest.txt扫描主机列表,用iL选项

wKioL1Xxbj7jmqEYAAL16StiOtQ012.jpg

      7、在192.168.2.10-11中,排除10再扫描,“-exclude”选项

wKiom1XxbB6SZhZrAAEinZzPhEM669.jpg

      8、用选项“-O”探测操作系统探测功能

wKiom1XxbCyj8AEzAAKJuikfZqs256.jpg

      9、扫描主机192.168.2.10是否有防火墙保护(受到数据包过滤软件或防火墙的保护)

wKioL1XxbmbDLivpAAErrOOYNOs347.jpg

      10、检测192.168.2.0网段的在线主机,用“-sP”选项

wKioL1XxbnKgetb4AALkvGtADEM604.jpg

      11、检测主机192.168.2.10网络接口和路由信息,用–iflist选项

wKioL1XxboOwOS9KAAJdDMw_jAg324.jpg

      12、扫描主机192.168.2.10指定具体的端口类型和端口号

wKiom1XxbHKwnCvnAAFug247neU228.jpg

      13、使用TCP ACK (PA)和TCP Syn (PS)扫描远程主机192.168.2.10

wKioL1XxbrnR4l2vAAEwk_j_EI0458.jpg

      14、使用TCP ACK扫描远程主机192.168.2.10端口22,25,80,443

wKioL1XxbsWgwCAHAAFh_1yZ02w050.jpg

      15、执行一次隐蔽的扫描

wKiom1XxbKLBKsKRAAEzM0wTQlM825.jpg

      16、使用TCP Syn扫描主机192.168.2.10最常用的端口

wKiom1XxbLOBmoU8AAEvAdow6fw038.jpg

  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个封包

   [root@10 ~]# 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