网络

osi7层模型:应用层;表示层;会话层;传输层;网络层;数据链路层;物理层

TCP/IP的参考模型将协议分成四个层次:数据链路层(物理层). 网络层、传输层、和应用层

应用层:负责产生相应格式的数据  ssh ftp nfs cifs dns http smtp pop3   

传输层:定义数据传输的两种模式:一种是TCP(传输控制协议:面向连接,可靠的,效率相对不高);另外一种是UDP(用户数据报协议:非面向连接,不可靠的,但效率高)

网络层:连接不同的网络如以太网、令牌环网

IP (路由,分片) 、ICMPIGMP

ARP ( 地址解析协议,作用是将IP解析成MAC )

数据链路层:以太网传输

物理层:主要任务是规定各种传输介质和接口与传输信号相关的一些特性

抓取数据包:tcpdumpwiresharkwireshark是一个网络协议检测工具,支持windows平台和unix平台;最好在windows下使用wiresharklinux下使用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.99TCP端口80,等价于telnet 192.168.0.99 80

[root@server2 ~]# nc 192.168.0.99 -u 5555   #连接到主机192.168.0.99udp端口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.99TCP端口2000上监听

[erver2 ~]# nc 192.168.0.99 -l -u 2000#在本地接口192.168.0.99UDP端口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端口号为21Port方式数据端口为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协议简介:

TCPTransmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流

的传输层(Transport layer)通信协议,由IETFRFC 793说明(specified)。在简化的计算机网络OSI模型中,

它完成第四层传输层所指定的功能。

 

网络层协议:IP

IP协议简介: 路由、分片

IP协议是TCP/IP协议族中最为核心的协议。所有TCPUDPICMPIGMP数据都以IP数据报格式传输。

特点:

不可靠(unreliable:  它不能保证IP数据报能成功地到达目的地,IP仅提供尽力而为的传输服务。如果发生某种错

误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信

源端。任何要求的可靠性必须由上层来提供(如TCP)。

无连接(connectionless): 这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是

相互独立的。这也说明, IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是

A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。  

 

网络层协议:ARP

ARP :地址解析协议,作用是将IP解析成MAC

TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。

为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物理地址的地址转换问题。

以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32IP地址转换成为48位以太网的地址。这就需

要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。

RARP:反向地址解析协议

   

网络层协议:ICMP

一、ICMP协议简介:

ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高

层协议(TCPUDP)使用。一些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

 

posted @ 2017-07-06 15:32  青牛怪  阅读(311)  评论(0编辑  收藏  举报