网络
osi7层模型:应用层;表示层;会话层;传输层;网络层;数据链路层;物理层
TCP/IP的参考模型将协议分成四个层次:数据链路层(物理层). 网络层、传输层、和应用层
应用层:负责产生相应格式的数据 ssh ftp nfs cifs dns http smtp pop3
传输层:定义数据传输的两种模式:一种是TCP(传输控制协议:面向连接,可靠的,效率相对不高);另外一种是UDP(用户数据报协议:非面向连接,不可靠的,但效率高)
网络层:连接不同的网络如以太网、令牌环网
IP (路由,分片) 、ICMP、 IGMP
ARP ( 地址解析协议,作用是将IP解析成MAC )
数据链路层:以太网传输
物理层:主要任务是规定各种传输介质和接口与传输信号相关的一些特性
抓取数据包:tcpdump和wireshark;wireshark是一个网络协议检测工具,支持windows平台和unix平台;最好在windows下使用wireshark;linux下使用tcpdump
应用层协议:
1.HTTP协议:超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的
规则,通过因特网传送万维网文档的数据传送协议。
wireshark详细查看HTTP;一种是请求头,一种是响应头;客户端发给服务器;服务器回给客户端
一、tcpdump
[root@uplooking ~]# yum -y install tcpdump
1.针对特定网口抓包(-i选项)
[root@uplooking ~]# tcpdump
[root@uplooking ~]# tcpdump -D #显示所有可用端口
[root@uplooking ~]# tcpdump -i eth0 #如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0
[root@uplooking ~]# tcpdump -i eth0 -nn #遇到协议号或端口号时,不要将这些号码转换成对应的协议名称或端口名称
[root@uplooking ~]# tcpdump -i eth0 -nn -S #显示TCP 数据包的顺序号
2.抓取指定数目的包(-c选项)
默认情况下tcpdump将一直抓包,直到按下”ctrl+c”中止
[root@uplooking ~]# tcpdump -i eth0 -nn -c 2 #抓取数据包数量
3.将抓到包写入文件中(-w选项)
[root@uplooking ~]# tcpdump -i eth0 -nn -w lab1.tcpdump #保存到文件中
4.读取tcpdump保存文件(-r选项)
[root@uplooking ~]# tcpdump -nn -r lab1.tcpdump #加载文件抓包记录
5.增加抓包时间戳(-tttt选项)
使用-tttt选项,抓包结果中将包含抓包日期:
[root@uplooking ~]# tcpdump -i eth0 -nn -tttt #添加时间戳
tcpdump过滤器(filter):
6.指定抓包的协议类型
[root@uplooking ~]# tcpdump -i eth0 -nn 'arp'
[root@uplooking ~]# tcpdump -i eth0 -nn 'icmp'
[root@uplooking ~]# tcpdump -i eth0 -nn 'ip'
[root@uplooking ~]# tcpdump -i eth0 -nn 'tcp'
7.抓和某个主机通讯的包
[root@uplooking ~]# tcpdump -i eth0 -nn host 192.168.1.20
[root@uplooking ~]# tcpdump -i eth0 -nn not host 192.168.1.20
8.指定抓包端口
[root@uplooking ~]# tcpdump -i eth0 -nn port 22
[root@uplooking ~]# tcpdump -i eth0 -nn host 192.168.1.20 and port 22
[root@uplooking ~]# tcpdump -i eth0 -nn dst 192.168.1.20 and dst port 22
[root@uplooking ~]# tcpdump -i eth0 -nn src 192.168.1.20 and dst port 22
[root@uplooking ~]# tcpdump -i eth0 -nn dst 192.168.1.20 and not port 22
[root@uplooking ~]# tcpdump -i eth0 -nn host 172.16.100.49 and dst port 22
[root@uplooking ~]# tcpdump -i eth0 -nn host 172.16.30.55 and port 22 -w /tmp/ssh.tcpdump
二、wireshark
[root@uplooking ~]# yum -y install wireshark wireshark-gnome
[root@uplooking ~]# wireshark /tmp/ssh.tcpdump
HTTP协议命令
[root@uplooking ~]# tcpdump -i eth0 -nn port 80 -w http.tcpdump
[root@client ~]# firefox 192.168.1.250
HTTP请求头
[root@uplooking ~]# curl -I 172.16.70.86 #只看HTTP头部内容
HTTP/1.1 200 OK #http协议
Server: nginx/1.6.0 #server版本,出于安全可隐藏
Date: Wed, 24 Dec 2014 02:27:43 GMT #发送HTTP消息的日期
Content-Type: text/html; charset=utf-8 #WEB 服务器告诉浏览器自己响应的对象的类型
Connection: keep-alive #一个用于表明是否保存socket连接为开放的通用头标
X-Powered-By: PHP/5.3.27 #PHP版本
TCP状态(补充)
问题一:服务器有大量的 TIME_WAIT 不影响服务器,但会影响客户端再使用刚才的端口
分析及解决方案: 主动断开(FIN)的一端,会进入该状态。如网站服务器端、SSH客户端。
问题二:服务器有大量的 SYN_RCVD <半开的连接>
分析及解决方案: 设置超时时间
五、nc命令补充
功能1:连接某主机的某TCP/UDP的端口
功能2:扫描某主机开启了哪些端口
功能3:在本机某TCP/UDP的端口上监听
[root@server2 ~]# nc 192.168.0.99 80 #连接192.168.0.99的TCP端口80,等价于telnet 192.168.0.99 80
[root@server2 ~]# nc 192.168.0.99 -u 5555 #连接到主机192.168.0.99的udp端口5555
[root@server2 ~]# nc 192.168.0.99 -z 1-2000 #扫描主机192.168.0.99开放的TCP端口
[root@server2 ~]# nc 192.168.0.99 -z -u 1-2000 #扫描主机192.168.0.99开放的UDP端口
[root@server2 ~]# nc 192.168.0.99 -l 2000 #在本地接口192.168.0.99的TCP端口2000上监听
[erver2 ~]# nc 192.168.0.99 -l -u 2000#在本地接口192.168.0.99的UDP端口2000上监听
例1:
[root@server2 ~]# nc 192.168.0.101 -l -u 2000
[root@server2 ~]# netstat -tunlp |grep :2000
udp 0 0 192.168.0.101:2000 0.0.0.0:* 6339/nc
FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。该协议是Internet文件传送的基础,
它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠
高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为
“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。
在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。
小结:
主动模式:客户端向FTP服务器提供数据端口,FTP服务器会使用20/tcp和客户端数据端口通信
被动模式:FTP服务器向客户端提供数据端口,客户端和FTP服务器的数据端口通信
FTP响应码
响应代码 解释说明
110 新文件指示器上的重启标记
120 服务器准备就绪的时间(分钟数)
125 打开数据连接,开始传输
150 打开连接
200 成功
传输层协议:UDP
UDP协议简介:
UDP 是User Datagram Protocol的简称,用户数据报协议。
UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在
传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的
QQ就是使用的UDP协议。
结论:
非面向连接:不用先与对方建立连接,不握手
不可靠的:没有确认机制
UDP的可靠是通过上层协议来保障的!
传输层协议:TCP
重点掌握:
1. TCP建立连接/断开连接(三次握手、四次挥手)的过程 及相应TCP状态
2. TCP连接标记flags
TCP协议简介:
TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流
的传输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,
它完成第四层传输层所指定的功能。
网络层协议:IP
IP协议简介: 路由、分片
IP协议是TCP/IP协议族中最为核心的协议。所有TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。
特点:
不可靠(unreliable): 它不能保证IP数据报能成功地到达目的地,IP仅提供尽力而为的传输服务。如果发生某种错
误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信
源端。任何要求的可靠性必须由上层来提供(如TCP)。
无连接(connectionless): 这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是
相互独立的。这也说明, IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是
A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
网络层协议:ARP
ARP :地址解析协议,作用是将IP解析成MAC。
在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。
为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物理地址的地址转换问题。
以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。这就需
要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。
RARP:反向地址解析协议
网络层协议:ICMP
一、ICMP协议简介:
ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高
层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程
路由基础
什么是路由?
数据从发送端到接受端选路的过程
根据IP首部确定目标网络或目标主机,之后选择路线(路由表)
路由分基本路由和策略路由
在场景当中,策略路由是用来做双线均衡
如何查看当前由内核维护的路由表
路由里面有三个路由表,一个叫main,一个叫default,一个叫local
[root@server ~]# ip r
[root@server ~]# ip route show table main #主路由表;默认网关就在里面
[root@server ~]# route -n
#ip route show table main就是平时用的route -n的命令
[root@server ~]# ip route show table default #就是默认路由
[root@server ~]# ip route show table local #直连路由表;特点就是路由器本机所配的IP地址所配的网段
默认情况下,主机里面会有这么三个路由表,这三个路由表有一个应用顺序,local的优先级最高,自己直连的是成本最低的;其次是main表,里面记录的是静态条目,我们自己添加的静态路由;最后走default,默认路由;
在路由选择过程不像路由器那么复杂,因为路由器有很多路由协议
直连路由:
[root@uplooking ~]# ip addr add dev lo 172.16.130.100/24
[root@uplooking ~]# ip addr add dev lo 172.16.130.100/32
[root@server ~]# cat /etc/iproute2/rt_tables #路由表配置文件
# reserved values
255 local
254 main
253 default
0 unspec
# local
#1 inr.ruhep
[root@uplooking ~]# ip route flush table local
[root@uplooking ~]# ip route add 172.16.8.0/24 via 172.16.30.252 dev eth0 #添加静态路由
[root@uplooking ~]# ip route add default via 172.16.30.254 #添加默认路由
[root@uplooking ~]# ip route del 192.168.1.0/24 dev eth0
[root@uplooking ~]# ip route show #查看路由表信息
[root@uplooking ~]# ip route del default #删除默认路由
[root@uplooking ~]# ip route del #删除默认路由
[root@uplooking ~]# ip neigh show #查看通信过的邻居
[root@uplooking ~]# ip route
172.16.30.0/24 dev eth0 proto kernel scope link src 172.16.30.30 #直连路由,由接口产生
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.20
172.16.8.0/24 via 172.16.30.252 dev eth0 #静态路由,手动添加
Default via 172.16.30.254 dev eth0 #缺省路由,手动添加
高级路由扩展[了解]
策略路由 policy routiing
等值多路 equl cost multipath
隧道 tunneling
流量控制 tc
1. 策略路由
a. 查看 当前路由规则(策略)
2. [root@uplooking ~]# ip rule #设置路由策略
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
第一列: 优先级,数值越小,优先级越高
第三列: source 地址 (all)
b. 添加自定义路由表
[root@uplooking ~]# vi /etc/iproute2/rt_tables #路由表配置文件
表ID 表名字
255 local
254 main
253 default
0 unspec
10 table1
20 table2
c. 添加默认路由
[root@uplooking ~]# ip route add default via 192.168.1.254 dev eth1 table table1
[root@uplooking ~]# ip route add default via 192.168.3.254 dev eth3 table table2
[root@uplooking ~]# ip route list table table1 #单独查看某一个路由的路由条目
[root@uplooking ~]# ip route list table table2 #单独查看某一个路由的路由条目
d. 添加路由策略
场景一:把两个网段的网络流量分割
[root@uplooking ~]# ip rule add from 192.168.10.0/24 table table1
[root@uplooking ~]# ip rule add from 192.168.30.0/24 table table2
[root@uplooking ~]# ip rule show
场景二:把一个网段的网络按地址范围流量分割
[root@uplooking ~]# iptables -t mangle -A PREROUTING -m iprange --src-range \
90.0.0.2-90.0.0.100 -j MARK --set-mark 10
[root@uplooking ~]# iptables -t mangle -A PREROUTING -m iprange --src-range \
192.168.0.101-192.168.0.254 -j MARK --set-mark 20
[root@uplooking ~]# service iptables save
[root@uplooking ~]# ip rule add fwmark 10 table table1
[root@uplooking ~]# ip rule add fwmark 20 table table2
2. 等值多路
a. 添加两个网关
[root@uplooking ~]# ip route add default \
> nexthop via 192.168.3.1 dev eth0 weight 1 \
> nexthop via 192.168.4.1 dev eth1 weight 1 //值越小,权重越低
三、ss命令
介绍:ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计
参数介绍:
ss命令条目多的情况下,效命更高
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
[root@uplooking ~]# netstat -ntl #查看listen TCP socket
[root@uplooking ~]# netstat -nul
[root@uplooking ~]# netstat -nutpl
[root@uplooking ~]# netstat -an #查看all sockets
[root@uplooking ~]# netstat -an |grep :80
[root@uplooking ~]# ss -anp
[root@uplooking ~]# ss -an
[root@uplooking ~]# ss -h #查看all sockets