本节所讲内容:
OSI七层模型和TCP/IP四层模型
IP地址分类
了解常见的网络相关协议
TCP三次握手和四次挥手
网络相关的调试命令
实战tcpdump和tshark抓包
一、OSI七层模型和TCP/IP四层模型
OSI 七层模型 TCP/IP 四层模型
应用层 应用层:如:http协议 FTP协议
表示层 ASCII
会话层
传输层 防火墙 传输层 tcp udp
网络层 三层交换机和路由器 网络层 路由器
数据链路 二层交换机和网卡 链路接口层
物理层 集线器
二、IP地址分类
简单的说,IP地址分5类,常见的地址是A、B、C类
IP地址由4组8位2进制数组成,为了方便记忆转换成十进制数,如:192.168.1.2
分为网络号(网段号)与主机号组成。
子网掩码:用于区分网段号与主机号,标准子网掩码网段号用全1表示(即255),主机号用全0表示(即0),可用于划分子网。
A类地址:第一位为网络号,后三位为主机号,网段号的取值范围从0-127,0是保留的并且表示所有IP地址(例:0.0.0.0),而127也是保留的地址,并且是用于测试环回口用的。因此A类地址的可用的范围其实是从1-126之间。
其标准子网掩码为:255.0.0.0
B类地址:前2位为网络号,后2位为主机号,网段号第一位的取值范围从128-191,如172.168.1.1,其标准子网掩码为:255.255.0.0
C类地址:前3位为网络号,后1位为主机号,网段号第一位的取值范围从192-223,如: 192.168.1.254,其标准子网掩码为: 255.255.255.0
D类地址:范围从224-239,被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
例:
私有IP
A:10.0.0.0/8
B: 172.16.0.0 ~ 172.31.0.0/16
C: 192.168.0.0 ~ 192.168.255.0/24 255.255.255.0
【例】 ping 127网段的ip
[[email protected] ~]# ping 127.23.23.23 PING 127.23.23.23 (127.23.23.23) 56(84) bytes of data. 64 bytes from 127.23.23.23: icmp_seq=1 ttl=64 time=0.360 ms
回环口一直是可用up状态:
结论:这个127这个网段都用于环回口
三、TCP/IP协议
TCP/IP协议是一个协议簇。里面包括很多协议的。
主要有以下协议
超文本传输协议(HTTP):万维网的基本协议.
文件传输(TFTP简单文件传输协议):
远程登录(Telnet)
网络管理(SNMP简单网络管理协议)
TCP Transmission Control Protocol,传输控制协议)是面向连接的协议,
UDP UDP(User Data Protocol,用户数据报协议)非连接的协议
Internet协议(IP)
Internet控制信息协议(ICMP)
地址解析协议(ARP)
反向地址解析协议(RARP)
TCP和UDP区别
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.tcp流模式与udp数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
四、TCP三次握手和四次挥手
1 tcp: 三次握手
作用:建立连接
1.1 tcp三次握手的链接状态
C(client) S(server)
TCP连接状态 建立过程 TCP连接状态
LISTEN
SYN_SENT ---syn seq=a --> SYN_RCVD
ESTABLISHED <--syn seq=b ack=a+1
--ack=b+1--> ESTABLISHED #(单词意思为:公认;含意为:连接成功)
2 TCP四次挥手
作用:关闭连接
四次挥手状态
关闭连接:四次挥手
C(client) S(server)
TCP连接状态 建立过程 TCP连接状态
FIN_WAIT --fin seq=a--> CLOSE_WAIT
FIN_WAIT2 <--ack a+1--
TIME_WAIT <--fin b-- LAST_ACK
--ack b+1--> CLOSE
扩展: 网络接口类型表示方法
以太网(ethernet) ethN
回环口 lo
光纤网 fddiN
桥设备: br0
Linux ADSL宽带接口:ppp pppN 如:ppp0
tun0 tun1
五、网络相关的调试命令
1查看网卡硬件相关信息
1.1 查看网卡物理连接是否正常
[[email protected] ~]# mii-tool eth0 eth0: negotiated 100baseTx-FD, link ok
1.2 ethtool 是用于查询及设置网卡参数的命令
#ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10 baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes #播发自动协商:是 Speed: 1000Mb/s #当前是1000M Duplex: Full #全双工 Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: Unknown Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) Link detected: yes
2 配置网络和IP地址
方法一:
#setup (TUI,方式,文本用户界面(Text User Interface) 配置IP地址
说明:在RHEL6中增加了一个新的网络服务:
[[email protected] ~]# /etc/init.d/NetworkManager stop #但是这个服务在后期使用中有一些问题,另外,在字符界面下也不需要使用这个服务。 Stopping NetworkManager daemon: [FAILED] [[email protected] ~]# chkconfig NetworkManager off [[email protected] ~]# service network restart
查看IP相关信息
#ifconfig #查看所有激活状态的网卡信息
#ifconfig eth0 #只查看eth0
-a所有网卡,包括没有启动的网卡信息。
#ifconfig eth0 down/up
#ifdown eth0
#ifup eth0
#ifconfig eth0:1 192.168.1.3 netmask 255.255.255.0 #临时有效。 重启network服务
方法二:
修改网卡配置文件:
#vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #物理设备的名字,内核通过这上名字来确认是哪个网卡 BOOTPROTO=static 或dhcp 或none无(不指定),如是none,配上IP地址和static效果一样 IPADDR=192.168.18.254 NETMASK=255.255.255.0 ONBOOT=YES 开机启动网卡 TYPE=Ethernet #类型为:以太网 注: BOOTPROTO=static 静态IP BOOTPROTO=dhcp 动态IP BOOTPROTO=none 无(不指定)
【例】 给新添加的网卡添加IP地址和对应的配置文件。
[[email protected] ~]# setup #通过setup命令可以快速生成一个网卡的配置文件
[[email protected] ~]# service network restart
3 修改主机名配置文件
作用:设置主机名永久生效
其他相关配置文件:
#vim /etc/sysconfig/network
NETWORKING=yes 开机时激活网络,开启network服务
注:如果NETWORKING=no,即使network设置为开机启动,那也启不来。
HOSTNAME=localhost.localdomain
4配置IP与主机名(域名)的对应
[[email protected] ~]# cat /etc/hosts #优先级高于DNS解析 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.63 xuegod63.cn 192.168.1.64 xuegod64.cn
5 DNS配置的配置文件
#vim /etc/resolv.conf
RHEL5,用这个文件。在RHEL6中直接在网卡配置文件中指定:DNS1=192.168.1.1
默认情况下,域名解析顺序: 本地hosts文件-》DNS查询
互动:是不是一定先解析hosts再解析DNS?
本机域名解析顺序
#vim /etc/nsswitch.conf #查找以下内容 #hosts: db files nisplus nis dns hosts: files dns
6 端口号和服务对应的配置文件
#vim /etc/services #此文件可以查看常用端口对应的名字。iptables或netstat要把端口解析成协议名时,都需要使用到这个文件。另外后期xinetd服务管理一些小服务时,也会使用到此文件来查询对应的小服务端口号。
7 查看路由信息: 查看默认网关
[[email protected] ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.1.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 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
说明:
route命令输出的路由表字段含义如下
Destination 目标
The destination network or destination host. 目标网络或目标主机。
Gateway 网关
The gateway address or ‘*‘ if none set. 网关地址,如果没有就显示星号或4个0。
Genmask 网络掩码
The netmask for the destination net; ‘255.255.255.255‘ for a
host destination and ‘0.0.0.0‘ for the default route.
添加/删除路由条目:
增加 (add) 与删除 (del) 路由的相关参数:
-net :表示后面接的路由为一个网域;
-host :表示后面接的为连接到单部主机的路由;
netmask :与网域有关,可以设定 netmask 决定网域的大小;
dev :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等
【例】
添加路由(把Linux做成路由器时或服务器有多个网卡,指定到不同网段走哪个网卡)
[[email protected] ~]# route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1
添加默认网关
[[email protected] ~]# route add default gw IP
删除路由
[[email protected] ~]# route del -net 192.168.2.0 netmask 255.255.255.0
查看路由信息
[[email protected] ~]# route 或 route -n (-n 表示不解析名字,列出速度会比route 快)
8 查看网络连接状态
[[email protected] ~]# netstat -antup
-a, --all
-n, --numeric don‘t resolve names
-p, --programs
-t 显示tcp连接
-u 显示udp连接
9 ping命令的一般格式为
-c 数目 在发送指定数目的包后停止。
-i 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
[[email protected] ~]# ping -i 0.01 192.168.1.1
指定从哪个端口出去。
ping -I eth0 192.168.1.1
使用参数大写的I
10 iptraf
查看网络流量:
[[email protected] ~]# rpm -ivh /mnt/Packages/iptraf-3.0.1-13.el6.x86_64.rpm [[email protected] ~]# iptraf
arping: 查看IP地址是否有冲突
例:
arping 192.168.1.1
[[email protected] ~]# arping 192.168.1.1 ARPING 192.168.1.1 from 192.168.1.63 eth0 Unicast reply from 192.168.1.1 [50:BD:5F:24:78:72] 8.376ms Unicast reply from 192.168.1.1 [C0:61:18:63:BC:D6] 8.457ms Unicast reply from 192.168.1.1 [D0:C7:C0:0C:B2:24] 8.476ms Unicast reply from 192.168.1.1 [34:BD:F9:84:50:D0] 8.499ms Unicast reply from 192.168.1.1 [34:BD:F9:84:50:D0] 4.634ms
11.ARP 管理命令
示例1:查看ARP缓存
[[email protected] ~]# arp
示例2: 添加
[[email protected] ~]# arp –s IP MAC
示例3: 删除
[[email protected] ~]# arp –d IP
12.ip
ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等,
ip命令的语法
ip命令的用法如下:
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
ip link set——改变设备的属性。 缩写:set、s
示例1:up/down 起动/关闭设备。
[[email protected] ~]# ip link set dev eth0 up
这个等于传统的 # ifconfig eth0 up(down)
示例2:改变设备传输队列的长度。
参数:txqueuelen NUMBER或者txqlen NUMBER
[[email protected] ~]# ip link set dev eth0 txqueuelen 100
示例3:改变网络设备MTU(最大传输单元)的值。
[[email protected] ~]# ip link set dev eth0 mtu 1500
示例4: 修改网络设备的MAC地址。
参数: address LLADDRESS
[[email protected] ~]# ip link set dev eth0 address 00:01:4f:00:15:f1
ip link show——显示设备属性。 缩写:show、list、lst、sh、ls、l
-s选项出现两次或者更多次,ip会输出更为详细的错误信息统计。
示例:
[[email protected] ~]# ip -s -s link ls eth0 eth0: mtu 1500 qdisc cbq qlen 100 link/ether 00:a0:cc:66:18:78 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 2449949362 2786187 0 0 0 0 RX errors: length crc fifo missed 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 178558497 1783946 332 0 332 35172 TX errors: aborted fifo window heartbeat 0 0 0 332
这个命令等于传统的 ifconfig eth0
六、实战tcpdump和tshark抓包
1 tcpdump命令
1.1指定接口(-i)
如:tcpdump -i eth0
三次握手过程分析
在主机A上开启SSHD服务,此时不要有任何客户端主机来连接主机A的SSHD服务。这样是为了抓包更清楚。
主机A执行:
tcpdump port 22 -c 3 -n -S
# port 端口号
-c 抓几个包
-n 不解析端口号为协议名
-S Print absolute, rather than relative, TCP sequence numbers.
主机B执行:
yum install telnet -y #安装telnet
telnet 192.168.1.63 22 #连接主机A的22端口
1.2 分析数据包
[[email protected] ~]# tcpdump port 22 -c 3 -n -S tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 22:41:08.630144 IP 192.168.1.64.53619 > 192.168.1.63.ssh:Flags [S], seq 1186556275, win 14600, options [mss 1460,sackOK,TS val 4294894444 ecr 0,nop,wscale 7], length 0 22:41:08.630270 IP192.168.1.63.ssh > 192.168.1.64.53619: Flags [S.], seq 1584691203,ack 1186556276,win 14480, options [mss 1460,sackOK,TS val 3611906 ecr 4294894444,nop,wscale 7], length 0 22:41:08.631121 IP 192.168.1.64.53619 > 192.168.1.63.ssh: Flags [.], ack 1584691204, win 115, options [nop,nop,TS val 4294894449 ecr 3611906], length 0 3 packets captured 7 packets received by filter 0 packets dropped by kernel
2 抓包命令
[[email protected] Packages]# yum install wireshark -y [[email protected] ~]# tshark -w filename -i eth0
-w 将抓包的数据写入文件filename中。
-i 指定要抓包的接口名称
[[email protected] ~]# tshark -r filename
-r 指定要读取的包文件
-V 将包尽可能的解析(这个有时在包数量很多的情况下可以不使用,这样它会给出一个很简洁的报文解释
学神-IT-教育51cto技术交流群:468845589 快来上我们公开课吧!
学神MK老师:1273815479
学神ZY老师:3054384936
学神IT-vip1508-公瑾提供