有没有laravel 项目源码源码分析的资料

从Laravel4升级为Laravel5
利用composer从新开始安装一个Laravel5的应用十分简单(当然前提是网络畅通,装好composer而言的...),只要执行:composer create-project laravel/laravel my-project-name-here dev-develop --prefer-dist命令就可以了。但是如果想将一个已有的Laravel4应用升级呢?你可能认为只需要这么做:升级Composer依赖包,然后手工修改发生变化的文件。相当少一部分小伙伴是通过这种方式完成了升级,这也是可以的——但是在修改过程中那有很多琐碎的问题需要注意,而Taylor(Laravel创始人)也公开表示,他认为最好的升级方法还是直接全部复制文件然后再修改,这也是我们准备要用的方法。第一次升级花了我3个小时(因为我一边在写这个文章),而第二次我只花了1小时。SaveMyProposals(译者注:作者自己的一个原来基于Laravel4的项目)不是十分复杂,也希望这个文章能帮助你更快完成升级开始,一些目录和文件的配置本文将从升级SaveMyProposals项目开始,首先,我进入目录~/Sites/savemyproposals把一个新网站(一个新的空的Laravel5包)和一个旧网站(从github获得的基于Laravel4.2的SaveMyProposals)放在一起,将一个新的SaveMyProposals从github下载到平行的目录l5smp。我将在新的目录下将文件升级为laravel5,而不是在我之前的工作目录,以保证我没有遗漏任何git-ignored状态的文件
cd ~/Sites
git clone :mattstauffer/savemyproposals.git l5smp //从github获取 savemyproposals
git checkout -b features/laravel-5 //创建并切换到features/laravel-5分支好,现在我们清理我们的目录。我希望除了.git外,删除其他任何文件。这是我能想到最快的清理方法,但如果谁有更好的方法也欢迎贡献出来:cd ~/Sites/l5smprm -rf *rm .gitattributesrm .gitignore当然,如果你有任何文件仍然没删干净——例如.scrutinizer.yml——将它们也删除。我们将在后面的步骤将它们拷贝回来。记住,除了.git你不要在你的目录中留任何东西我们已经准备好升级环境,将在这目录(l5smp)将SaveMyProposals升级为Laravel5了!如果你像我一样,希望一个干净的节点便于恢复,可以做一次git提交:
说明:如果你做了提交,你将失去所有你打算拷贝回来的文件的版本延续性。当然,我们为了保持版本延续性,可以在之后使用git merge --squash命令合并这次提交。好的,我们将在这目录放置Laravel5的文件。感谢 Isern Palaus (@ipalaus) 在这一步给了我一个十分简便的方法
git remote add laravel /laravel/laravel.git
git fetch laravel
git merge laravel/master --squash
git commit -am "Bring in Laravel 5 base."
composer install你应该检查一下,用下面的命令确认这个应用(虽然是空的)正常工作了:
php -S localhost:8090 -t public/在浏览器中查看http://localhost:8090/(替换为你自己网站对应地址),如果你看到这个画面,我们就做对了:现在,把文件一一拷贝到Laravel5的包中,开始升级。我是用 iTerm 2把目录并排打开,然后将旧网站OLD目录(~/Sites/savemyproposals)下的文件,将它们一一拷贝到新网站NEW目录(~/Sites/l5smp)里。我将文件夹看做OLD和NEW,OLD是我的laravel4代码目录,而新的是空的Laravel5安装包,记住他们的代号,下面开始拷贝:PSR-4命名空间If you already have a top-level PSR-0/PSR-4 namespace set up, like I did for SaveMyProposals, you’ll want to use the new app:name Artisan command. 如果你就像我在SaveMyProposals所做那样,已经建立一个顶级的PSR-0/PSR-4命名空间,你需要用新的app:name Artisan命令:
php artisan app:name SaveMyProposals你的域文件夹如果你跟着一些社区论坛学习时,建立过一些最高级目录(改变原来的目录结构),或在以自己重新命名了最高级命名空间——例如我的app/SaveMyProposals就在我的PSR-0目录下解决这个问题最简单的方法就是将这个文件夹下所有文件移到你的app文件夹里,然后将他们放在你已经建立的命名空间下(例如这里的SaveMyProposals)。完工。composer.json依赖包你需要祈祷你的所有依赖包都已经升级并支持Laravel5(译者注:例如Sentry2就不支持Laravel5,而Sentry3听说是收费了,悲剧)。将旧的composer.json所有依赖项和其他个人配置,一一拷贝到新的composer.json中。现在,试试使用composer update升级,看看你的祈祷有没有用吧。app/ 目录下命令(app/commands)目录将app/commands的内容全部移到app/Console/Commands里你可以为commands文件分配命名空间,或者不分配而将其目录添加到composer.json->autoloader->classmap中,让composer自动加载。请注意,在Laravel5中默认调用handle()方法执行命令,但事实上,Laravel对于fire()(旧版本),或handle()(新版本)都是会调用的。将所有命令的绑定配置从start/artisan.php移到app/console/kernel.php里的$commands数组,在这注册所有命令的绑定。配置(app/config)目录请看下面的Configureation目录控制器(app/controllers)目录将app/controllers的内容全部移到app/Http/Controllers中要么为你的controllers(及目录下的文件)分配命名空间,要么从抽象类app/Http/Controllers/Controller.php删除命名空间,并在composer->autoload->classmap下添加app/Http/Controllers的目录数据库迁移文件和填充文件(Database Migrations & Seeds)将app/database的内容全部移到database里如果你已经有user表的迁移文件,且你确定你已经添加了remember_token字段(在版本4.1.26添加),就可以删除Laravel5的database/migrage下的_00000_create_users_table文件。但必须保留password_reset迁移文件,这是Laravel5中新添加的。过滤器(filters)目录Laravel5中过滤器(filters)的功能全都以中间件(Middleware)的模式实现。但你也仍可以使用你旧的过滤器文件,只需要把原来的过滤器都贴到app/Providers/RouteServiceProvider.php的boot()里,例如:
// app/filters.php
Router::filter('shall-not-pass', function() {return Redirect::to('shadow');
});变成这样:
// app/Providers/RouteServiceProvider@boot()
$router-&filter('shall-not-pass', function() {return /Redirect::to('shadow');
});注意你不需要移动任意系统默认过滤器,他们已经被移植了,不过现在变为中间件的模式而已。多语言(app/lang)将app/lang的内容全部移到resources/lang里模型(app/models)目录在社区里面多次提及,Laravel5已经去除了模型(models)文件夹的概念。如果你想保留models目录只需要在应用的app目录下创建一个models目录,并把目录地址添加进在composer.json->autoload->classmap中,如下:
"autoload": {"classmap": [
"database",
"app/models"]}我们可以看到在Laravel5中自带的User.php被放到app目录下,所以你也可以将你的模型文件都放在app这个顶级目录下(例如SaveMyProposals/Conference就是conference模型)软删除如果你在模型文件中使用了软删除标记SoftDeletingTrait,需要将标记改为SoftDeletes路由(app/routers)目录将app/routes.php的内容全部移到app/Http/routes.php中你需要调整所有以前使用before绑定过滤器的路由,例如,before =& auth需要改为 middleware =& auth。启动(app/start)目录artisan.php需要参照上述commands目录,全部移到command进行绑定global.php对于很多人来说就像个杂物箱。所有这里的配置都应该改为使用服务提供者service provider配置,但如果你不想一一做去改,也可以在SaveMyProposals/Providers/AppServiceProvider中的register()方法中注册测试(app/test)目录将app/tests的内容全部移到tests中视图(app/view)目录将app/views的内容全部移到resources/views中修改控制器(controllers),命令(commands)等命名空间等修改控制器(controllers)的命名空间如果你的旧代码中没有为控制器设定命名空间,你可以选择添加或者不添加命名空间:如果你想添加命名空间,只需要在每一个控制器添加上use SaveMyProposals/Http/Controllers如果你不想这么做,需要修改app/Providers/RouteServiceProvider.php,将protected $namespace改为null(这个属性相当于所有controller命名空间的前缀),然后将controllers的目录添加到composer.json->autoload->classmap里,接着编辑RouteServiceProvider.php的map()方法,将$this-&loadRoutesFrom整行替换为:
include app_path('Http/routes.php');
注意:如果你修改了控制器的命名空间,所有的内部定义facade将失效。最简单的方法其实还是使用没有命名空间的控制器。如果你还是修改了命名空间,你将看到一些类似Class 'SaveMyProposals/Http/Controllers/Auth' not found..的错误。这时你需要在每个控制器开头添加命名空间use Auth, use Session,等等,或者只是为每个添加上/。(例如将Session::flash('stuff', 'other stuff');转换为to /Session::flash('stuff', 'other stuff');)修改artisan commands命名空间就像控制器的修改方式那样,你可以选择添加或不添加命名空间。为artisan commands添加命名空间的方法上述为控制器添加命名空间的方法类似。如果不想添加命名空间,你需要修改app/Console/Kernel.php中的$commands属性,然后在composer.json->autoload->classmap中加上app/Console/Commands目录引导项(bootstrap)目录如果你在引导项目录中做了部分个人配置,甚至只是在start.php中,你都得把它们删掉。注意detectEnvironment在Laravel5发生了改变,所以不用管任何环境检测的内容,你将对这部分重新设置(见下面配置.env文件的方法)公共资源(public)目录你可以在NEW目录的public下将除了index.php外所有文件删除,然后在OLD目录下的public中将所有文件拷过来你可能注意到Laravel5将less的源文件放在resources/assets/less,所以如果你想遵循这种结构,你可以将sass或者less文件和其他资源文件放在这。但你不是一定要这么做,所以这里我们就不演示了。其他顶级目录文件这需要你自己决定,例如是readme.md, .scrutinizer.yml, .travis.yml, travis.php.ini, package.json, gulpfile.js等等。注意Laravel中默认自带package.json和gulpfile.js,所以你在覆盖的时候需要检查一下它们当然,记得拷贝所有你自己应用产生的文件,例如.gitignore, .gitattributes,又或者phpunit.xml。配置(configureation).env.local.php => .env我将.env.local.php从OLD目录拷贝到了NEW目录。然后我将它从一个php数组转换成.env格式,从这样:
&?php return ['key' =& 'value'];变成
key=value我会将我认为需要设置的每个值设置到.env里:
key=valueHere我对框架内部需要使用的值进行如下配置:APP_ENV (设置为"local"),APP_DEBUG (设置为true), APP_KEY (设置为我的密钥), DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD设置为适当的数据库配置,而CACHE_DRIVER和SESSION_DRIVER设置为'file'配置文件抛弃以往local,production,staging等配置文件的概念,抛弃.env.local.php,.env.staging等想法。Laravel5里配置文件的加载,环境监测已经变得十分简单。所有通用配置文件都应该放在我们最熟悉的config目录下。所有特定环境的配置文件都应该放在.env里,而且应该被git所忽略。.env.example应该写出所有的、分布在各个.env文件中的、需要配置的项。所以,从你的OLD文件中拷贝出通用的值放到NEW目录的config目录下,然后可变的值放在.env和.env.example文件里。验证和用户使用你原来版本的User模型时最方便的,但是如果这样行不通,这有一些解决方法从你的代码删除以下内容:
use Illuminate/Auth/UserI
use Illuminate/Auth/Reminders/RemindableI添加以下内容到你的代码:
use Illuminate/Auth/A
use Illuminate/Auth/Passwords/CanResetP
use Illuminate/Contracts/Auth/Authenticatable as AuthenticatableC
use Illuminate/Contracts/Auth/CanResetPassword as CanResetPasswordC删除UserInterface和RemindableInterface接口文件如果你用了上述接口文件,从你的代码和类声明中删除Illuminate/Auth/Reminders/RemindableTrait和Illuminate/Auth/UserTrait实现以下接口
implements AuthenticatableContract, CanResetPasswordContract在类声明中包含以下内容
use Authenticatable, CanResetP最后,改变User模型的命名空间为你app目录的命名空间,或者在config/auth.php中改变model属性到正确的命名空间。(例如,用User代替SaveMyProposals/User)最后的最后,如果你用了你自己的User模型,那么就删掉app/user.php文件Form & HTML Helpers报错“class 'Form' not found”如果你用了Form & HTML Helpers,你将看到一个class 'Form' not found的错误(在使用Html时也会看到)。请修改composer.json,添加"illuminate/html": "~5.0"你还需要修改配置让Facade和服务提供者生效。编辑config/app.php,然后添加这个语句到'providers'数组
'Illuminate/Html/HtmlServiceProvider',添加这些到'aliases'数组
=& 'Illuminate/Html/FormFacade',
=& 'Illuminate/Html/HtmlFacade',{{ }} 的变化Blade模板中的原生HTML输出(不作转义)的功能,符号从{{变为了{!!。为了处理这个问题需要你查找和替换任何一个你知道的直接输出html的地方,例如是Laravel form helpers,就需要将{{和}}分别替换为{!!和!!}。而其他地方仍然保留{{和}}。{!!现在应该开始作为Blade模板默认的输出符号。如果因为某些原因你需要用就得用回旧的blade符号(例如懒的做替换操作),你可以自己去定义。只要添加下列代码到AppServiceProvider@register()里:
/Blade::setRawTags('{{', '}}');
/Blade::setContentTags('{{{', '}}}');
/Blade::setEscapedContentTags('{{{', '}}}');注意这样你将改变原生的输出符号,{{--作为注释又不再可用了。最后的清理如果你之前想我一样做了commit,你现在可以用git merge --squash将他们作合并了。然后用git log看你做了多少次提交,我有3个。然后执行git rebase -i HEAD~3(用你的数字代替3)这将启动git,如果你对git squash不太熟悉,可以看看我的tutorial on Squashing Git Commits文章里的介绍。其他方面的问题修改了命名空间的控制器里的Fa?ades因为所有东西都重新做了命名空间,所有你的控制器里的View::make()(或所有其他被使用的facede)都将失效,因为他们不能找到从顶级命名空间找到View,Auth等等。解决这个问题最简单的方法可能是在文件顶部加上use View,虽然哪还有很多其他更“单纯”的方法Whoops样式报错处理器如果你希望用回Whoops样式的报错处理器,在这里我有一个更换的方法依赖包Laravel5中依赖包的工作方式发生了很大变化,所以可能还有很多小问题需要解决。如果你执行过程中发现了这些小问题,欢迎留下评论告诉我,让我这个解决方案更加完善。目前为止,Ryan Tablada已经警告说:“准备好迎接‘function "package" does not exist’的问题吧!”有没有什么包是没有动过的...有很多包都被改变过,特别是Laravel自有的一些包。如果硬要找,可能这个版本里bugsnag-laravel是仅有没有动过的了...结语这只是一个小教程,很多小问题没有说到位,因为我只有用一个特定的网站做示例。所以,这种行为不符合我的初衷,我将要打开GitHub中的评论提供修改/更新/等。正如你可以看到,那有很多很琐碎的东西,但实际上这已经是一个非常简单而快速的升级方法了,考虑到我们以后的升级基础版本就是Laravel 5,快去升级吧!提交问题故障排除列表Eloquent模型如果你看到这个错误:
PHP Fatal error:
Class 'Eloquent' not found in /path/to/YourModel.php这是因为你的模型没有继承/Eloquent。只需要在你的模型里添加上这个use,就能解决问题:
use Illuminate/Database/Eloquent/Model as EString Given如果捕获到致命错误:
Argument 1 passed to Illuminate/Foundation/Application::__construct() must be an instance of Illuminate/Http/Request... 你需要执行 composer install.Call to a member function domain() on a non-object如果你看到这个错误:
Call to a member function domain() on a non-object这是因为你的路由跳转动作没有正确连接。例如,如果你跳转一个名为"signup"的路由但你却没有这个名字的路由,就会报这个错更可能因为升级为Laravel5了。这会在你任意有或没有命名空间的控制器中发生。Illuminate/Session/TokenMismatchException很可能在你的日志里,你会看到Illuminate/Session/TokenMismatchException这个错误。这是因为默认情况下laravel5是为所有路由开启CSRF( Cross-site request forgery跨站请求伪造)保护的。你如果想让部分路由去除CSRF保护,可以在App/Http/Kernel将全局中间件$middleware数组里的'App/Http/Middleware/VerifyCsrfToken'移到$routeMiddleware数组里,让它成为一个可选项;或者你调整包括AJAX在内所有表单,让他们都适用于CSRF。原文地址:https://mattstauffer.co/blog/upgrading-from-laravel-4-to-laravel-5
本文为Matt Stauffer根据自己一个基于laravel4的项目SaveMyProposals,升级到laravel5版本的过程而编写。由于文章比较长且本人才疏学浅,翻译上如有不当请指出,谢谢!
最新教程周点击榜
微信扫一扫Laravel5 中有没有函数或方法可以直接获取数据表和字段信息?
希望用过的人,帮我下,谢谢!
也许你会喜欢和关注与本文内容高度相关的文章:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)[很有用的]Windows和Linux下查看本机路由,路由跟踪命令,,trace路由信息,静态路由添加原理!tracert超时原因等。
引用地址:
注意: 该地址仅在今日23:59:59之前有效
我的centos怎么无traceroute命令?
yum search traceroute
N/S Matched: traceroute traceroute.x86_64 : Traces the route taken by packets over an IPv4/IPv6 network与是:
yum search traceroute
traceroute.x86_64
......Is this ok [y/N]: yDownloading Packages:traceroute-2.0.14-2.el6.x86_64.rpm&&&& ......Running Transaction&&Installing : 3:traceroute-2.0.14-2.el6.x86_64&&&& &&Verifying&&: 3:traceroute-2.0.14-2.el6.x86_64&&&&Installed:&&traceroute.x86_64 3:2.0.14-2.el6&&&&&&Complete!查看本机路由:route print背景:在测试机和内网办工网里进行调试时,因走的路由不一样,一个是Linux,一个是WIndow下环境,调用时返回不一样,为此,用下面的两个命令就能看到路由时的区别,进行判断出问题之所在:
tracert -d .cn
tracert -w 1
traceroute .cn
C:\tracert C:\pathping www.毒药.com除了显示路由外 还提供325S的分析 计算丢失包的% 假如我是机器A(公司内部办公机器),我们想访问message.cws.api..cn 这个域名,(可能通过修改host文件等来域名访问的),我们立马dig一下(在能打通路由的测试机上dig):dig message.cws.api..cn ,返回如下:[root@i space]# dig message.cws.api..cn ; &&&& DiG 9.3.3rc2 &&&& message.cws.api..cn;; global options:&&printcmd;; Got answer:;; -&&HEADER&&- opcode: QUERY, status: NOERROR, id: 62705;; flags: QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0;; QUESTION SECTION:;message.cws.api..cn. IN A;; ANSWER SECTION:message.cws.api..cn. 0 IN A&&&&&&10.55.37.254message.cws.api..cn. 0 IN A&&&&&&10.69.2.236;; AUTHORITY SECTION:.cn.&&&& 33&&&&&&IN&&&&&&NS&&&&&&ns1..cn..cn.&&&& 33&&&&&&IN&&&&&&NS&&&&&&ns2..cn.;; Query time: 39 msec;; SERVER: 10.55.37.15#53(10.55.37.15);; WHEN: Wed Apr 15 10:28:34 2009;; MSG SIZE&&rcvd: 120;; ANSWER SECTION:message.cws.api..cn. 0 IN A&&&&&&10.55.37.254message.cws.api..cn. 0 IN A&&&&&&10.69.2.2360& host message.cws.api..cn message.cws.api..cn has address 10.69.2.236message.cws.api..cn has address 10.55.37.2540& nslookup -qt=a&&message.cws.api..cn*** Invalid option: qt=aServer:&&&&&&&& 10.55.37.15Address:&&&&&&&&10.55.37.15#53Non-authoritative answer:Name:&& message.cws.api..cnAddress: 10.55.37.254Name:&& message.cws.api..cnAddress: 10.69.2.236发现:10.55.37.254是一个内网IP,不是公网ip,(根据ABCD类IP划分得到的),但是我自己的桌面还是无法访问的(原因是没有打通路由),如何打通这个路由呢?方法如下:加上一个桌面IP的路由,在加上一个指向message.cws.api..cn 的网关即可,添加路由:route add -host 10.218.19.17 10.55.37.1我把外网网线和内网网线插在一个HUB上,再接一根网线到自己机器上 在本机配成10.81.41.222 255.255.255.0 10.81.41.1 就可以上外网, 本机IP配成10.81.41.129 255.255.255.128 10.81.41.254就可以上内网 问一下大家怎么写route add添加静态路由可以同时上吗?route add 0.0.0.0 mask 0.0.0.0 10.81.41.1route add命令的主要作用是添加静态路由,通常的格式是: route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2 参数含义:^destination ^mask ^gateway metric^ ^interface destination【网段地址】 mask【子网掩码】 gateway【网关地址】 metric 【路由跳数】 if【端口号】 一般情况下,不涉及本机地址,除非你要做测试。 其中: 可以省略【路由跳数】参数; 当通往该网关地址的路径唯一时,【端口号】参数可以省略。(因为在多端口的路由交换设备上,可能存在通往同一个IP地址的多条备份路径。) mask 是关键字,不能省略。 route add 134.105.0.0 mask 255.255.0.0 134.105.64.1 意思是:所有需要发往134.105.0.0/16地址段的IP数据包,全部由134.105.64.1路径转发。 这个命令在大型IP网络组建时经常用到,在不同厂商的设备上命令格式可能不同,但原理是一样的。 如果有多条路由,根据不同的路由协议(比如rip, ospf等)的规定,一般优先选择网段地址小的路由。比如,当以下两条路由同时被添加的时候: route add 134.105.0.0 mask 255.255.0.0 134.105.64.1 route add 134.105.128.0 mask 255.255.128.0 134.105.0.1 目标地址是134.105.128.1的IP包会优先选择第二条路由。 多年的网络工程师了,这个答案肯定不会错。在dos下面输入route print 就可以查看路由表如何读懂路由表如何读懂路由表 源码:--------------------------------------------------------------------------------Active Routes: Network Destination&&&& Netmask&&&&&&&& Gateway&&&&&&&&&&&& Interface&&&&&&&&&&&&&& Metric 0.0.0.0&&&&&&&&&&&&&&&&0.0.0.0&&&&&&&&192.168.123.254&&&&&&&&192.168.123.88&&&&&&&&&&&&&&1 0.0.0.0&&&&&&&&&&&&&&&&0.0.0.0&&&&&&&&192.168.123.254&&&&&&&&192.168.123.68&&&&&&&&&&&&&&1 127.0.0.0&&&&&&&&&&&& 255.0.0.0&&&&&& 127.0.0.1&&&&&&&&&&&&&&127.0.0.1&&&&&&&&&&&&&&&&&& 1 192.168.123.0&&&&&& 255.255.255.0&&&& 192.168.123.68&&&&&&&& 192.168.123.68&&&&&&&&&&&&&& 1 192.168.123.0&&&&&& 255.255.255.0&&&& 192.168.123.88&&&&&&&& 192.168.123.88&&&&&&&&&&&&&& 1 192.168.123.68&&&&&&255.255.255.255&&&&127.0.0.1&&&&&&&&&&&&&&127.0.0.1&&&&&&&&&&&&&&&&&& 1 192.168.123.88&&&&&&255.255.255.255&&&&127.0.0.1&&&&&&&&&&&&&&127.0.0.1&&&&&&&&&&&&&&&&&& 1 192.168.123.255&&&& 255.255.255.255&&&&192.168.123.68&&&&&&&&192.168.123.68&&&&&&&&&&&&&&&&1 192.168.123.255&&&& 255.255.255.255&&&&192.168.123.88&&&&&&&&192.168.123.88&&&&&&&&&&&&&& 1 224.0.0.0&&&&&&&&&&&&224.0.0.0&&&&&&&& 192.168.123.68&&&&&&&&192.168.123.68&&&&&&&&&&&&&& 1 224.0.0.0&&&&&&&&&& 224.0.0.0&&&&&&&&&&192.168.123.88&&&&&&&& 192.168.123.88&&&&&&&&&&&&&&1 255.255.255.255&&&& 255.255.255.255&&&& 192.168.123.68&&&&&&&& 192.168.123.68&&&&&&&&&&&& 1&&&&&&&&&&&&Default Gateway: 192.168.123.254-------------------------------------------------------------------------------- 当前的路由: destination 目的网段 mask 子网掩码 interface 到达该目的地的本路由器的出口ip gateway 下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的 metric 跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由 第一条 缺省路由:意思就是说,当一个数据包的目的网段不在你的路由记录中,那么,你的路由器该把那个数据包发送到哪里!缺省路由的网关是由你的连接上的default gateway决定的 该路由记录的意思是:当我接收到一个数据包的目的网段不在路由记录中,我会将该数据包通过192.168.123.88这个接口发送到192.168.123.254这个地址,这个地址是下一个路由器的一个接口,这样这个数据包就可以交付给下一个路由器处理,与我无关。该路由记录的线路质量 1 第二条 缺省路由: 该路由记录的意思是:当我接收到一个数据包的目的网段不在路由记录中,我会将该数据包通过192.168.123.68这个接口发送到192.168.123.254这个地址,这个地址是下一个路由器的一个接口,这样这个数据包就可以交付给下一个路由器处理,与我无关。该路由记录的线路质量 1 第三条 本地环路:127.0.0.0这个网段内所有地址都指向自己机器,如果收到这样一个数据,应该发向哪里 该路由记录的线路质量 1第四条 直联网段的路由记录:当路由器收到发往直联网段的数据包时该如何处理,这种情况,路由记录的interface和gateway是同一个。 当我接收到一个数据包的目的网段是192.168.123.0时,我会将该数据包通过192.168.123.68这个接口直接发送出去,因为这个端口直接连接着192.168.123.0这个网段,该路由记录的线路质量 1第五条 直联网段的路由记录 当我接收到一个数据包的目的网段是192.168.123.0时,我会将该数据包通过192.168.123.88这个接口直接发送出去,因为这个端口直接连接着192.168.123.0这个网段,该路由记录的线路质量 1第六条 本地主机路由:当路由器收到发送给自己的数据包时将如何处理 当我接收到一个数据包的目的网段是192.168.123.68时,我会将该数据包收下,因为这个数据包时发送给我自己的,该路由记录的线路质量 1第七条 本地主机路由:当路由器收到发送给自己的数据包时将如何处理 当我接收到一个数据包的目的网段是192.168.123.88时,我会将该数据包收下,因为这个数据包时发送给我自己的,该路由记录的线路质量 1 第八条 本地广播路由:当路由器收到发送给直联网段的本地广播时如何处理 当我接收到广播数据包的目的网段是192.168.123.255时,我会将该数据从192.168.123.68接口以广播的形势发送出去,该路由记录的线路质量 1 第九条 本地广播路由:当路由器收到发送给直联网段的本地广播时如何处理 当我接收到广播数据包的目的网段是192.168.123.255时,我会将该数据从192.168.123.88接口以广播的形势发送出去,该路由记录的线路质量 1 第十条 组播路由:当路由器收到一个组播数据包时该如何处理 当我接收到组播数据包时,我会将该数据从192.168.123.68接口以组播的形势发送出去,该路由记录的线路质量 1 第十一条 组播路由:当路由器收到一个组播数据包时该如何处理 当我接收到组播数据包时,我会将该数据从192.168.123.88接口以组播的形势发送出去,该路由记录的线路质量 1 第十二条 广播路由:当路由器收到一个绝对广播时该如何处理 当我接收到绝对广播数据包时,将该数据包丢弃掉 一个从联通到电脑的示例:----------------------------------------------------------------------------------------IP地址: 125.35.5.65来&& 自: 北京市 联通IP地址: 61.148.17.65来&& 自: 北京市 联通61.148.152.217IP地址: 61.148.152.217来&& 自: 北京市 联通202.106.34.9IP地址: 202.106.34.9来&& 自: 北京市 联通IP地址: 202.106.230.198来&& 自: 北京市 联通IP地址: 61.148.157.161来&& 自: 北京市 联通IP地址: 61.148.154.253来&& 自: 北京市 联通IP地址: 61.148.146.30来&& 自: 北京市 联通IP地址: 202.106.228.246来&& 自: 北京市 联通IP地址: 61.49.39.58来&& 自: 北京市 联通IP地址: 124.202.11.38来&& 自: 北京市 电信通IP地址:124.202.11.182来&& 自: 北京市 电信通IP地址: 60.195.255.54来&& 自: 北京市 电信通IP地址: 123.196.119.42来&& 自: 北京市IP地址: 118.145.8.226来&& 自: 北京市 电信通IP地址: 115.182.9.243来&& 自: 北京市 电信通tracert超时原因:1.tracert是跟踪命令,在你在其后输入IP后,只要不是被手动关闭,它就会不停的进行跟踪,直到你输入的IP地址被跟踪到才会停止。所以才不断超时,同时也不断“跳”进行跟踪。tracert显示超时ping可以:2.可能是做了些保护吧。因为他们虽然都用的是同样的ICMP但是,却可以根据ACL进行调整比如,PING 的是ICMP 8TRACERT 是ICMP 11可以根据这些抓流量,限制,或直接用命令禁止你TRACE3.核心节点GW:这个是电信在那个节点做了禁止跟踪了,应该是核心设备的一挑,防止核心设备的IP泄露。引起一些不必要的麻烦。这个是无法解决的,电信或者是网通不会给你操作的呵呵·ping,测试网络是否连接,及网络延时 tracert,是检测路由状况,ping和tracert使用方法都一样,在命令后面加IP地址或者域名。ping 主要是用来查看到目的地址的时延和丢包情况,tracert是用来查看所经过的每一跳路由,可以具体判断时延变大或者丢包的点测试机接口访问外网的很慢,大概8秒:回忆未来-向东-Jàck 上午 11:53:52 兄弟分析下这个,为何接口这么慢,我看路由好像太绕了吧:[root@test ]# traceroute&&202.108.8.43traceroute to 202.108.8.43 (202.108.8.43), 30 hops max, 40 byte packets 1&&192.168.108.250 (192.168.108.250)&&0.599 ms&&0.525 ms&&0.486 ms 2&& (202.108.8.2)&&1.438 ms&&1.931 ms&&1.632 ms 3&&zz-9-245-a8. (202.108.9.245)&&1.603 ms&&1.854 ms&&1.831 ms 4&& (202.108.8.2)&&2.270 ms&&2.501 ms&&3.207 ms 5&&zz-9-245-a8. (202.108.9.245)&&2.455 ms&&2.434 ms&&2.413 ms 6&& (202.108.8.2)&&3.104 ms&&3.151 ms&&4.065 ms 7&& (202.108.9.245)&&3.626 ms&&3.555 ms&&4.032 ms 8&&zz-8-2-a8. (202.108.8.2)&&4.778 ms&&4.221 ms&&4.734 ms 9&&zz-9-245-a8. (202.108.9.245)&&4.437 ms&&4.695 ms&&4.386 ms10&&zz-8-2-a8. (202.108.8.2)&&5.328 ms&&6.060 ms&&5.042 ms11&&zz-9-245-a8. (202.108.9.245)&&6.016 ms&&5.986 ms&&5.446 ms12&&zz-8-2-a8. (202.108.8.2)&&6.169 ms&&40.794 ms&&34.093 ms13&&zz-9-245-a8. (202.108.9.245)&&6.300 ms&&7.269 ms&&7.252 ms14&&zz-8-2-a8. (202.108.8.2)&&24.788 ms&&26.491 ms *15&& (202.108.9.245)&&7.389 ms&&8.610 ms&&8.593 ms16&&* * *17&&zz-9-245-a8. (202.108.9.245)&&9.942 ms&&8.472 ms&&8.259 ms18&&* * *19&&zz-9-245-a8. (202.108.9.245)&&9.445 ms&&9.414 ms&&11.083 ms20&&* * *21&&* * *22&&* * *23&&zz-9-245-a8. (202.108.9.245)&&13.317 ms * *24&&* zz-8-2-a8. (202.108.8.2)&&12.181 ms *25&&* zz-9-245-a8. (202.108.9.245)&&12.385 ms *26&&* * zz-8-2-a8. (202.108.8.2)&&12.783 ms27&&* zz-9-245-a8. (202.108.9.245)&&13.219 ms&&13.191 ms28&&* * *29&&zz-9-245-a8. (202.108.9.245)&&14.098 ms * *30&&zz-8-2-a8. (202.108.8.2)&&17.000 ms * *You have new mail in /var/spool/mail/root12:07:39
王XX 下午 08:55:19 中间经过的跳数太多肯定会造成延时变大,而且还有一个可能,中间某些线路有问题, 出现*号的都是不通,有可能是对方不让tracert探测,也有可能是报文到这被丢了,可以多tracert几次看看,如果*有规律可能是被限制了,如果没有规律就是报文被丢了。王XX 下午 08:56:46 你的啥网络,你看我8跳就到了C:\Users\keil&tracert 202.108.8.43通过最多 30 个跃点跟踪到 zz-8-43-a8. [202.108.8.43] 的路由:&&1&&&&31 ms&&&&98 ms&&&&20 ms&&113.47.0.1&&2&&&&20 ms&&&& 4 ms&&&& 6 ms&&113.47.0.1&&3&&&& 4 ms&&&& 4 ms&&&& 4 ms&&218.241.166.205&&4&&&& 6 ms&&&& 5 ms&&&& 4 ms&&14.197.243.173&&5&&&& 6 ms&&&& 4 ms&&&& 4 ms&&14.197.243.141&&6&&&& 4 ms&&&& 5 ms&&&& 5 ms&&122.201.63.1&&7&&&& 4 ms&&&& 9 ms&&&& 3 ms&&122.201.63.6&&8&&&& 5 ms&&&& 4 ms&&&& 5 ms&&zz-8-43-a8. [202.108.8.43]跟踪完成。王XX 下午 08:57:50 白天我不上QQ,可以收邮件,不能上网。下回有事直接邮件或者电话嘛 zhwgw.王XX 下午 09:12:12 那有什么相关资料。。。。中间的设备你又不能登录,可以登录的话在中间的某台设备直接去ping 或者tracert,如果那样延时都大,就是那一段路有问题王XX 下午 09:15:32 一跳30MS,10跳都30,加起来就是300MS,中间应该有线链路有问题,就是星号那些吧问:怎么王XX 13/12/14 星期六 下午 04:17:53只能是tracert出路径,然后每一跳去看在哪丢的,不同设备有不同的分析方法,linux系统上可以用tcpdump命令抓包看报文有没有回来,回来的有没有问题,中间网络设备可以通过设备的抓包命令,或者设备的端口流量镜像到专门的流量分析工具,如netscout上分析报文。你管服务器的话只用在服务器上确认自己的包有没有出去,然后有没有回来,没有回来,只能往上查,上面就是管网络的人的事了王XX 13/12/14 星期六 下午 04:24:24对了,分析报文可以用wireshark,以前叫ethereal问:有的路由返回*号怎么查?王XX 13/12/14 星期六 下午 09:23:20*号就得到*号前的一跳查,设备上会有路由,可以知道往哪走的没有捷径,就是一点点查的,只不过查多了,容易知道问题在哪而已每经过一个设备都有可能丢弃或者转发这个报文,没有捷径王XX 13/12/14 星期六 下午 09:25:44设备上人家做的限制的,不让tracert或者不通,就是*号,没办法,除非你有权限登录那个设备解除限制关于网络技能的全面性探讨:王XX 13/12/14 星期六 下午 09:44:52你要想一个人解决所有问题,你得精通系统和网络设备,网络设备又有很多种,我只懂数通部分,传输网,核心网,或者跟手机上网相关的G网W网3G4G更麻烦王XX 13/12/14 星期六 下午 09:46:17一个报文从你服务器到用户终端中间设备太多了,很多是你管不了的,你只需要确认报文在你那服务器到广域网出口没问题就行了,确认回报的话,如果连广域网入口都没有看到这个报文,服务器肯定也不会有作者:@地址:版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: justwinit 编辑于 11:20
[9/9]北京市海淀区中关村理想国际大厦18层 Address:Sina 18th floor Ideal plaza Zhongguancun Haidain
Beijing 100080, P.R.China
[1/9]深圳南山腾讯大厦8楼 Address:Tencent Plaza High-tech One Road, Middle Zone, High-new Science & Technology Park, Nanshan Distrcit, Shenzhen City, Guangdong Province 518057, P.R. China
[2/9]深圳南山腾讯大厦旁大族激光大厦三楼 Address:Han's Building,Kejizhongyi Avenue, Hi-tech Pack,Nanshan District, Shenzhen City, Guangdong Province 518057, P.R.China
[2012/10-Now]北京海淀区西三环中路10号望海楼B座7层央视国际网络有限公司 Address:Seaview floor, Haidian District No.10,West Sanhuan Road,Beijing 100142, P.R.China

我要回帖

更多关于 laravel源码解析 的文章

 

随机推荐