Monthly Archives: 8月 2017

8月 31st, 2017

删除:

[plain] view plain copy
  1. yum remove mysql mysql-server mysql-devel mysql-libs compat-mysql51 mysql-community-client mysql-community-libs mysql-community-server mysql-community-common mysql-community-release.noarch
  2. rm -rf /var/lib/mysql
  3. rm /etc/my.cnf
  4. rm -rf /var/lib/mysql/
  5. rm -rf /usr/lib64/mysql
  6. rm -rf /usr/lib/mysql
  7. rm -rf /usr/share/mysql
  8. rm –rf /usr/my.cnf
  9. rm -rf /root/.mysql_sercret
  10. chkconfig –del mysqld

验证:

[plain] view plain copy
  1. yum list installed mysql*
8月 31st, 2017

安装 macOS 10.13 之后发现 nginx 产生了 502 错误,具体解决方式记录如下:

打开 nginx error log

注:
此处 nginx 使用的是 brew 安装的 nginx ,使用其他工具或不同时间安装的 nginx ,在查看 nginx error log 时具体操作可能不同。

我的nginx默认并没有打开 error log,编辑 nginx.conf,打开error log

error_log  logs/error.log;

此时,运行一下sudo nginx 会在/usr/local/Cellar/nginx/1.12.0_1/logs 下产生error.log 文件,

打开 error log 发现错误信息如下:

[error] 1676#0: *1 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: www, request: “GET / HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “www

检查php-fpm

运行sudo php-fpm 报错如下:

[30-Aug-2017 14:33:37] ERROR: failed to open configuration file ‘/private/etc/php-fpm.conf’: No such file or directory (2)

[30-Aug-2017 14:33:37] ERROR: failed to load configuration file ‘/private/etc/php-fpm.conf’

[30-Aug-2017 14:33:37] ERROR: FPM initialization failed

确定原因为php-fpm 配置文件丢失

在/private/etc/ 找到了php-fpm 的默认配置文件/private/etc/php-fpm.comf.default ;

复制,新建一份配置文件:

sudo cp /private/etc/php-fpm.comf.default /private/etc/php-fpm.conf

  • 1

再次运行sudo php-fpm 报错如下

/private/etc/php-fpm.conf

[30-Aug-2017 15:19:50] WARNING: Nothing matches the include pattern ‘/private/etc/php-fpm.d/*.conf’ from /private/etc/php-fpm.conf at line 125.

[30-Aug-2017 15:19:50] ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)

[30-Aug-2017 15:19:50] ERROR: failed to post process the configuration

[30-Aug-2017 15:19:50] ERROR: FPM initialization failed

进入/private/etc/php-fpm.d ,复制新建一份配置文件:

sudo cp /private/etc/php-fpm.d/www.conf.default /private/etc/php-fpm.d/www.conf

修改 php-fpm log 默认保存位置

编辑sudo vim /private/etc/php-fpm.conf

error_log = /usr/local/var/log/php-fpm.log

再次执行sudo php-fpm ,无错误提示。

重新启动 nginx:

sudo nginx -s stopsudo nginx

发现502错误 已解决

 

TAGS: , ,
8月 31st, 2017

# 该脚本使用guestmount工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中

# Centos7.2中安装libguestfs-tools-c可以获得guestmount工具

# 虚拟机可以启动或者不启动都不影响该脚本的使用

# 将虚拟机磁盘文件挂载到文件系统后,就可以直接读取磁盘文件中的网卡配置文件中的数据该脚本使用guestmount工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
#该脚本使用guestmount工具,可以将虚拟机的磁盘系统挂载到真实机文件系统中
#Centos7.2中安装libguestfs-tools-c可以获得guestmount工具
#虚拟机可以启动或者不启动都不影响该脚本的使用
#将虚拟机磁盘文件挂载到文件系统后,就可以直接读取磁盘文件中的网卡配置文件中的数据
clear
mountpoint="/media/virtimage"
[ ! -d $mountpoint]&& mkdir $mountpoint
read -p "输入虚拟机名称:" name
echo "请稍后..."
#如果有设备挂载到该挂载点,则先umount卸载
if mount grep -q"$mountpoint" ;then
       umount $mountpoint
fi
#只读的方式,将虚拟机的磁盘文件挂载到特定的目录下,这里是/media/virtimage目录
guestmount -r -d $name -i$mountpoint
echo
echo"--------------------------------------------"
echo -e "\033[32m$name虚拟机中网卡列表如下:\033[0m"
dev=$(ls /media/virtimage/etc/sysconfig/network-scripts/ifcfg-*|awk -F"[/-]" '{print $9}')
echo $dev
echo"--------------------------------------------"
 
echo
echo
echo"+++++++++++++++++++++++++++++++++++++++++++"
echo -e "\033[32m网卡IP地址信息如下:\033[0m"
for in $dev
do
       echo -n "$i:"
       grep -q "IPADDR"/media/virtimage/etc/sysconfig/network-scripts/ifcfg-$i || echo "未配置IP地址"
       awk -F= '/IPADDR/{print $2}'/media/virtimage/etc/sysconfig/network-scripts/ifcfg-$i
done
echo "+++++++++++++++++++++++++++++++++++++++++++"
TAGS: ,
8月 31st, 2017

下个版本预告:

PHPWAMP下个版本将会集成PHP打包器,可以将PHP网站生成单个EXE文件,双击即可浏览网站。

在打包PHP网站的过程中还可以选择任意PHP版本、Mysql版本、以及Web服务器,敬请期待后续版本吧。

目前的PHPWAMP支持,Nginx、IIS、Apache,支持无限制添加php和Mysql版本同时运行。

下面我们开始讲解一下目前PHPWAMP最新版本如何快速自定义任意的Mysql历史版本

讲解前先回答个小问题,有用户向我询问:PHPWAMP是否可以单独启动某些服务?其实是可以的

可能你们没有注意“服务管理器”这个功能吧,想单独启动某个服务,只需在“服务管理器”操作即可

wKioL1mk5PXSXm0MAAFfCK3Pbhk700.png

(点击图片可查看高清大图)

开始自定义我们的Mysql版本教程,打开软件,选择“相关设置”,然后选“Mysql版本”

wKiom1mk5uqS3CzVAADDM--yKTA288.png

(点击图片可查看高清大图)

想切换Mysql版本可以直接在此切换,默认就集成了Mysql5.5、Mysql5.6、Mysql5.7三个版本了

wKioL1mk6C-z9eJwAABLpBJ_Grc626.png

我们来添加一个Mysql版本,可以到Mysql官方去下载任意Mysql版本,

也可以点击软件这里,进入PHPWAMP提供的Mysql版本下载地址进行下载。

wKiom1mk6JbzuDZSAABRJWK6PCc241.png

我下载的是最新的版本Mysql8,如图所示

wKiom1mk69rAUVELAAB4htiTjR4288.png

下载完成后,我们点击此处给软件添加一个新的Mysql版本

wKioL1mk6VzSt0tfAABRppsWA_s322.png

点击后弹出输入框,可以给你新添加的数据库定义一个版本名称,比如我定义成Mysql8

wKiom1mk6iLAVu6RAAAxFfiW-Bw676.png

输入你定义的版本名称后(名称随意),点击添加按钮

wKiom1mk6oHR8gR6AAAxMskH-i0636.png

点击添加后,看到下图提示后点击“是”打开Mysql版本目录,

wKioL1mk6sLxVT3XAABVtnsXtCI184.png

在打开的新文件夹中,我们把刚才下载好的压缩包解压后,放到这里面即可,

不用理会是否有my.ini文件,后面会自动生成的,当然后期最好根据你的需求修改一下配置。

wKioL1mk7rqhA4k7AADwFogV37s571.png

(点击图片可查看高清大图)

然后就可以在Mysql版本列表看到我们刚才定义的Mysql8这个最新的Mysql数据库版本了。

wKioL1mk6ySAuK3XAAA2PYp3MLo417.png

最后就可以选择最新版本Mysql8,然后点击切换了

wKiom1mk643w5uhRAABODgMSP0M959.png

点击切换后,高版本Mysql会提示初始化,如果出现初始化提示,点击“是”即可,如图

wKiom1mk75aCofTrAAAxiDVB3zE196.png

很快就会提示成功,整个过程不到一秒

wKiom1mk787gMOvaAAAo9JIj9cA307.png

初始化成功后,再选择Mysql8,然后点击切换就能正常启动了

(有的Mysql版本不需要初始化,需不需要程序会自动判断的)

wKiom1mk643w5uhRAABODgMSP0M959.png

点击切换,提示切换成功,切换的同时也将启动Mysql

wKiom1mk8DPwJsP-AAA7gkuuvOE440.png

我们回到主界面,发现新定义的Mysql启动成功,鼠标移动到这里就会显示Mysql8以及当前端口号3306

wKioL1mk8L3SgfuoAACTzUZURBk724.png

这个时候我们发现,虽然新定义的Mysql数据库正常启动了,但是数据库密码并不知道!

到了这一步,我们可以使用常用工具的“强制修改数据库密码”功能改个你想要的密码

wKiom1mlAWTixeIAAAFYLplmoIs315.png

这里分成两部分,上面是修改当前自身的Mysql密码,下面的是修改其他环境

的Mysql数据库密码,而我们现在是要修改当前启动的最新版Mysql数据库密码,

因此只需要填写上面的即可,我输入的密码是168168,输入完毕后点击修改即可

wKiom1mlAXWR8E2WAABZrtFbku8539.png

密码修改成功后,在主界面点击管理数据库,或者在站点管理列表右键站点打开也可以

wKiom1mlBJDy_bbVAACo6ZcXvdo821.png

使用内置的phpmyadmin数据库管理工具登陆Mysql数据库,输入刚才修改的数据库密码。

wKioL1mlAW3CKa3AAABrTGG0fyk761.png

登陆成功,可以看到当前的Mysql版本是最新的,如下图所示

注意:每次切换Mysql版本,下图这个界面必须清除浏览器缓存才能正确显示当前Mysql版本

wKiom1mlAYyxEKqcAABg0NrMz2k542.png

题外话:

回到刚才的Mysql文件夹,如果找不到可以点击菜单,“编辑文件-Mysql各版本文件夹所在目录”。

如下图,我们看到新的版本Mysql8文件夹生成了两个新文件,一个是mysql配置,一个是data文件

友情提示:为了兼容所有系统,默认生成的my.ini是可以支持内存很小的系统的,可自行调整。

其他建议:如果你用的是其他的php集成环境,当服务器内存很小时你的数据库可能无法启动,

这时候可以适当增加虚拟内存或者直接用PHPWAMP生成的my.ini覆盖掉你原来环境的数据库配置。

wKiom1mk8TjSt1irAACSx3QX-T0987.png

Mysql自定义功能的其他妙用:

如果你原来用的是其他集成环境,但是现在想改用PHPWAMP,其实转移也很简单,

点击切换PHP版本,随意切换一个属于Apache2.4的php版本,如图标明的apache2.4即可

这三个php版本后面都标明了是apache2.4,所以随意启动这三个PHP版本就切换到Apache2.4了

wKiom1mk83mwWeTKAACwnndUSu0273.png

如图,只要这里显示Apache2.4,就说明能使用Apache2.4站点管理了

wKiom1mk9F_h-HERAACfzYor4hY884.png

切换到Apache2.4才可以使用Apache2.4站点管理,我们打开Apache2.4站点管理

wKiom1mk9AaxK7BwAAH3PA5WMu0983.png

如图,站点管理功能强大,添加站点可以随意指定任何PHP版本和自定义

我们添加站点的时候,只需要把根目录设置成你原来网站源码的文件夹即可

wKioL1mk9KDQtjmVAAB0AVsv_-0258.png

(点击图片可查看高清大图)

网站源码搬迁完毕,轮到网站数据库了,数据库可以直接sql导出导入,如果嫌麻烦可以用自定义Mysql功能,把原来你环境的Mysql数据库集成到PHPWAMP里面即可,方法和前面我讲解的自定义Mysql版本是一样的,只需要注意设置my.ini就可以了,如果不想修改原先环境的my.ini,直接删掉即可,区别如下。

吸纳其他集成环境的Mysql数据库和自定义Mysql的区别:

区别:大部分步骤是一样的,只需要把原来集成环境重Mysql目录的my.ini删掉即可(会自动生成)

提示:如不想删掉原环境my.ini配置,只需修改my.ini配置里面的路径即可,路径正确才能正常启动。

TAGS:
8月 31st, 2017

1、配置erlang yum 源 (根据自己系统版本选择合适的源  https://github.com/rabbitmq/erlang-rpm)

vim  /etc/yum.repos.d/rabbitmq-erlang.repo

[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1

2、安装 erlang
    yum install erlang
   
3、安装 rabbitMQ (rpm 包下载地址 

    rpm -ivh  rabbitmq-server-3.6.11-1.el7.noarch.rpm 
    
4、添加配置文件,及开启guest远程访问
    vim /etc/rabbitmq/rabbitmq.config 
    [{rabbit, [{loopback_users, []}]}].
    
5、启动rabbitMQ 和  management插件

    service rabbitmq-server start
    rabbitmq-plugins enable rabbitmq_management
    
6、远程登录管理平台
    
        默认用户名密码  guest guest
1
<br>
TAGS:
8月 31st, 2017

1.现象

IPMI lan 接口无法访问,具体如下面命令执行后出现的错误提示:

[root@localhost ~]#   ipmitool -I lanplus -H 10.10.77.48 -U ADMIN -P ADMIN sel list

Error: Unable to establish IPMI v2 / RMCP+ session

Get SEL Info command failed

You have new mail in /var/spool/mail/root

登录到10.10.77.48上去检查下,在本地通过KCS接口执行的情况,发现都成功:

[root@localhost ~]# ipmitool user list

ID Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit

2  ADMIN            true    false      false      Unknown (0x00)

You have new mail in /var/spool/mail/root

[root@localhost ~]# ipmitool user list 1

ID Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit

2  ADMIN            false   false      true       ADMINISTRATOR

[root@localhost ~]# ipmitool -I lanplus -H 10.10.77.48 -U ADMIN -P ADMIN sel list

1 | 08/03/2017 | 17:26:02 | Unknown #0xff |  | Asserted

2 | 08/03/2017 | 17:26:38 | Power Supply #0xc8 | Power Supply AC lost | Asserted

3 | 08/03/2017 | 17:30:38 | Unknown #0xff |  | Asserted

4 | 08/03/2017 | 17:31:13 | Power Supply #0xc8 | Power Supply AC lost | Asserted

5 | 08/03/2017 | 17:43:33 | Unknown #0xff |  | Asserted

You have new mail in /var/spool/mail/root

 

2解决过程

2.1和正确配置、能访问的比较网络:都OK

2.2检查用户并删去不用的用户

2.3得到LAN interface的channel编号

2.4授权用户通过这个channel可以登录

2.5测试。

前面两步直接执行相应的命令就好了,我们从第三步开始看具体怎么执行。可以看到’ipmitool channel info” 在此种模式下显示默认的KCS channel:

[root@localhost ~]# ipmitool channel info

Channel 0xf info:

Channel Medium Type   : System Interface

Channel Protocol Type : KCS

Session Support       : session-less

Active Session Count  : 0

Protocol Vendor ID    : 7154

但我们是不的是LAN interface,继续往下逐一测试,找到Lan interface对应的channel ID:

[root@localhost ~]# ipmitool channel info 1

Channel 0x1 info:

Channel Medium Type   : 802.3 LAN

Channel Protocol Type : IPMB-1.0

Session Support       : multi-session

Active Session Count  : 0

Protocol Vendor ID    : 7154

Volatile(active) Settings

Alerting           : enabled

Per-message Auth    : enabled

User Level Auth     : enabled

Access Mode         : always available

Non-Volatile Settings

Alerting           : enabled

Per-message Auth    : enabled

User Level Auth     : enabled

Access Mode         : always available

通过上面命令可以看到, LAN interface对应的channel ID 为1,因为只有它的Medium Type   是 802.3 LAN。

2.2向LAN channel  添加用户:

很容易犯错的地方出现在这里,以为下面的命令列出的页是Lan channel 看到的用户。

[root@localhost ~]# ipmitool user list

ID Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit

2  ADMIN            true    false      false      Unknown (0x00)

3                   true    true       true       OPERATOR

4                   true    true       true       OPERATOR

其实不然,上面默认看到是被授权使用KCS channel的用户,要查看Lan channel的用户信息,要用下面的命令:

[root@localhost ~]# ipmitool user list 1

ID Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit

2  ADMIN            true    false      true       ADMINISTRATOR

然后添加权限:

[root@localhost ~]# ipmitool user enable 2

[root@localhost ~]# ipmitool user priv 2 4 1

[root@localhost ~]# ipmitool user set name ADMIN

本地测试通过,通过LAN interface 远程登录也通过:

[root@localhost ~]# ipmitool user set password 2 ADMIN

[root@localhost ~]# ipmitool user test 2 16

Password for user 2:

Success

You have new mail in /var/spool/mail/root

[root@localhost ~]# ipmitool user test 2 20

Password for user 2:

Set User Password command failed (user 2): Unknown (0x80)

Failure: password incorrect

[root@localhost ~]# ipmitool user test 2 20

Password for user 2:

Success

 

3.总结

使用IPMI命令管理用户、通道、权限的时候,务必理解用户权限管理是基于通道的,同一个用户可以被授权使用某个通道而被禁止使用其他通道。

TAGS:
8月 31st, 2017

# 该脚本使用 guestmount 工具,Centos7.2 中安装 libguestfs-tools-c 可以获得 guestmount 工具

# 脚本在不登陆虚拟机的情况下,修改虚拟机的 IP 地址信息

# 在某些环境下,虚拟机没有 IP 或 IP 地址与真实主机不在一个网段

# 真实主机在没有 virt-mange 图形的情况下,远程连接虚拟机很麻烦

# 该脚本可以解决类似的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
#Author:丁丁历险(Jacob)
#该脚本使用guestmount工具,Centos7.2中安装libguestfs-tools-c可以获得guestmount工具
#脚本在不登陆虚拟机的情况下,修改虚拟机的IP地址信息
#在某些环境下,虚拟机没有IP或IP地址与真实主机不在一个网段
#真实主机在没有virt-mange图形的情况下,远程连接虚拟机很麻烦
#该脚本可以解决类似的问题
read -p "请输入虚拟机名称:" name
if virsh domstate $name|grep -q running ;then
       echo "修改虚拟机网卡数据,需要关闭虚拟机"
       virsh destroy $name
fi
mountpoint="/media/virtimage"
[ ! -d $mountpoint]&& mkdir $mountpoint
echo "请稍后..."
if mount grep -q"$mountpoint" ;then
       umount $mountpoint
fi
guestmount  -d $name -i $mountpoint
read -p "请输入需要修改的网卡名称:"dev
read -p "请输入IP地址:" addr
#判断原本网卡配置文件中是否有IP地址,有,就修改该IP,没有,就添加一个新的IP地址
if grep -q"IPADDR"  $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev;then
   sed -i "/IPADDR/s/=.*/=$addr/"  $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
else
   echo "IPADDR=$addr" >>  $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
fi
#如果网卡配置文件中有客户配置的IP地址,则脚本提示修改IP完成
awk -F= -v x=$addr '$2==x{print "完成..."}' $mountpoint/etc/sysconfig/network-scripts/ifcfg-$dev
8月 29th, 2017
CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
CDN有别于镜像,因为它比镜像更智能,或者可以做这样一个比喻:CDN=更智能的镜像+缓存+流量导流。因而,CDN可以明显提高Internet网络中信息流动的效率。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问网站的响应速度。
当用户访问已经加入CDN服务的网站时,首先通过DNS重定向技术确定最接近用户的最佳CDN节点,同时将用户的请求指向该节点。
  当用户的请求到达指定节点时,CDN的服务器(节点上的高速缓存)负责将用户请求的内容提供给用户。
  具体流程为: 用户在自己的浏览器中输入要访问的网站的域名,浏览器向本地DNS请求对该域名的解析,本地DNS将请求发到网站的主DNS,主DNS根据一系列的策略确定当时最适当的CDN节点,并将解析的结果(IP地址)发给用户,用户向给定的CDN节点请求相应网站的内容
8月 29th, 2017

1、更新计时器:指运行RIP协议的路由器向所有接口广播自己的全部路由表的时间间隔。在CISCO的IOS软体中缺省时间是30秒。为了避免在MA(多路访问)的网络中由于系统时延引起的更新同步,在CISCO中的实际更新时间时25.5~30秒之间,即30秒减去一个在4.5秒内的随机值。

2、无效计时器:针对路由表中的特定路由条目的计时器。路由器每收到一次路由条目就把无效计器置0,也就是说路由条目每隔无效计时器规定的时间内必须收到路由条目更新报文。如果没有收到相关条目的更新保文那么无效计时器超时,路由器就认为该目的不可达,并向所有接口广播不可达更新报文。无效计时器在IOS中缺省是180秒。

3、刷新计时器:指路由条目的刷新时间。刷新存在2种意思
1>如果在刷新时间内没有收到更新报文,那么该目的的路由条目将被刷掉也就是直接删除。
2>如果在刷新时间内收到更新报文,那么该目的的路由条目的刷新计时器被刷新置0。
CISCO中刷新计时器的缺省时间是240秒,也是是比无效计时器多了60秒。这里就意味着在一个路由条目在180秒内没有收到更新报文时,刷新计时器超时。路由条目中该路由被标志为x.x.x.x is possibly down,直到刷新计时器也超时了该路由条目才被删除。在RIP中真正删除路由条目的是刷新计时器超时。

4、抑制计时器:路由器如果在相同的接口上收到某个路由条目的距离比原先收到的距离大,那么将启动一个抑制计时器。在抑制计时器的时间内该目的不可到达。抑制计时器主要是在rip协议中用来防止路由环路,该计时器的原理是引用一个怀疑量,不管是真的还是假的路由消息,路由器先认为是假消息来避免路由环路。如果在抑制计时器超时后还接受到该消息,那么这时路由器就认为该消息时真的。RIP中认为假的消息总是真不了,不长久。

5、触发更新计时器:使用在触发更新中的一种计时器,触发更新计时器使用1~5秒的随机值来避免触发更新风暴。

更新计器比较容易理解,只是路由选择协议用来发送更新数据的时间间隔。从路由协议启动以后就开始生效,每发送一次更新报文后重新倒计时。

无效计时器是针对路由表上的路由条目。这个计时器是路由条目在路由表生效后开始倒计时。每收到公告该路由条目的路由更新报文后重新倒计时。

刷新计时器和无效计时器是同时启动的。收到更新报文后重新倒计时。如果你把刷新计时器设置的比无效计时器短那么会出现路由条目还没出现possibly down的时候就已经被刷掉了。

抑制计时器时收到比路由表上的路由条目METRIC大的时候所启动的计时器。2种情况:

1)如果收到路由表上的某个路由条目的同一个公告源发送过来的路由更新比路由器上的距离大,那么启动抑制计时器。例如:路由表上到达10.0.0.0网络的度量时3,发送该更新的路由器是A。如果收到来自A的关于10.0.0.0路由更新的报文并且度量大于3的时候。那么在路由表上对10.0.0.0的路由条目启动一个抑制计时器。

2)如果是来自路由器B的关于10.0.0.0网络的更新且度量大于3的时候,接受方会如何处理那?答案是丢弃路由器B的更新。因为路由表中已经存在经过A到达10.0.0.0网络且距离小于B路由器。

所谓的更新报文是指同一个公告源路由器公告的路由信息。比如11.0.0.0是A公告过来的,那么还必须在无效计时器的倒计时间内收到A公告过来的关于11.0.0.0的路由更新。如果更新是B发过来时路由器会根据度量大小判断丢弃或者时接受。丢弃,路由条目不处理B的更新,保留对A的关于11.0.0.0的通告。计时器继续倒计时直到收倒新的关于A的更新。接受,丢弃A的关于11.0.0.0的路由条目,接受B的关于11.0.0.0的信息重新启动计时器。

距离矢量路由选择协议时基于消息传闻的路由选择协议。对路由器来说它只知道到达目的的方向而不知道到达目的经过的地方。所以HOP就成为了判断距离远近的唯一标准。

8月 29th, 2017

1.RIP基于UDP,BGP基于TCP,OSPF和EIGRP基于IP。这些在TCP/IP协议栈中定义的路由协议用于发现和维护前往目的地的最短路径。你可以认为它们不属于网络层协议(注意,是用,based on,而不是实现了,BGP用TCP,所以BGP是应用层的,TCP用IP,所以TCP是传输层的,OSPF用IP,所以OSPF更应该是归类到传输层里比较合理。与书<<计算机网络自顶向下方法与Internet特色>>意思基本一致),但它们计算出来的路径最终为网络层提供服务。(在TCP/IP协议栈中,Routed Protocol(eg. IP)工作在网络层,而Routing Protocol(eg.BGP)工作在传输层或应用层,他们之间的关系为:Routing Protocol负责学习最佳路径,而Routed Protocol根据最佳路径将来自上层的信息封装在IP包里传输。)

当然,你也要理解,TCP/IP的定义本来就比较模糊。另外一种为OSI提供服务的路由协议就不一样了,IS-IS。它直接封装在数据帧中,自然是一种网络层协议了。这也可以看出OSI的定义比TCP/IP严谨许多。
2.一个协议的实现需要依赖协议所在层次的下一层功能。简单的说,如果TCP需要依赖网际层协议IP,那么它就是传输层的协议。同理,如果RIP需要依赖传输层的UDP,那至少它应该是被定义在UDP之上的协议,但我认为它并不能算是应用层协议。举个例子,ICMP是网络层协议,但它需要依赖IP承载,那么ICMP是传输层协议吗?
3.严格意义上说,根本就没有明确定义过这些协议的位置。学习这些协议关键是掌握它们在网络中的功能和如何应用它们。至于它们到底是哪一层的协议,你觉得重要吗?

4.如果一定在划分的话.单纯地从层次上讲的话,RIP,BGP应该在应用层,OSPF,EIGRP在传输层