为什么要构建追涨杀跌 高抛低吸量化交易模型

& 快速创建基于npm的nodejs库
快速创建基于npm的nodejs库
,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!
张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
转载请注明出处:
用Node实现的功能越来越多,代码越来越复杂,我们就开始考虑如何把代码从项目中抽出来,形成单独的类库(模块)管理。就像我们所依赖其他第三方类库一样。
本文将介绍如何定义开发一个类库,包括命令开发,发布到npm中,让其他人也可以使用。
npm是什么?
快速创建包
创建命令行工具
本地安装lowercase包
项目上传到github
通过npm发布包
通过npm安装包
1. npm是什么?
NPM的全称是,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块的标准。
Nodejs自身提供了基本的模块,但是开发实际应用过程中仅仅依靠这些基本模块则还需要较多的工作。幸运的是,Nodejs库和框架为我们提供了帮助,让我们减少工作量。但是成百上千的库或者框架管理起来又很麻烦,有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
类似于Java中的Maven,Ubuntu中的apt-get, Ruby中的Gem, Python中pypi等…
NPM模块发布页:
2. 快速创建包
项目描述:读取文件,把所有的大写文字转换成小写文字,控制台输出。
系统环境:
win7 64bit
Nodejs:v0.10.5
Npm:1.2.19
~ D:\workspace\javascript>mkdir nodejs-package && cd nodejs-package
创建项目结构
~ D:\workspace\javascript\nodejs-package>mkdir bin
~ D:\workspace\javascript\nodejs-package>touch bin/lowercase
~ D:\workspace\javascript\nodejs-package>touch bin/lowercase.bat
~ D:\workspace\javascript\nodejs-package>mkdir test
~ D:\workspace\javascript\nodejs-package>mkdir test/data
~ D:\workspace\javascript\nodejs-package>touch test/data/sample.txt
~ D:\workspace\javascript\nodejs-package>touch lowercase.js
~ D:\workspace\javascript\nodejs-package>touch example.js
~ D:\workspace\javascript\nodejs-package>touch README.md
项目结构说明
bin目录: 用于存放命令的目录
bin/lowercase文件: Linux命令行可执行文件
bin/lowercase.bat文件: Win命令行可执行文件
test目录: 用于存放测试代码的目录
test/data目录: 用于存放测试数据的目录
test/data/sample.txt: 测试数据文件
lowercase.js文件: 核心功能代码文件
example.js文件: 例子代码文件
package.json文件: 项目描述及依赖文件
README.md文件: 项目说明文件
1). 创建文件:package.json
~ D:\workspace\javascript\nodejs-package>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install
--save` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
name: (nodejs-package) lowercase
version: (0.0.0) 0.0.1
description: A demo package
entry point: (index.js)
test command:
git repository:
author: Conan Zhang
license: (BSD) MIT
About to write to D:\workspace\javascript\nodejs-package\package.json:
"name": "lowercase",
"version": "0.0.1",
"description": "A demo package",
"main": "index.js",
"directories": {
"test": "test"
"dependencies": {
"moment": "~2.4.0"
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"repository": "",
"author": "Conan Zhang",
"license": "MIT",
"readmeFilename": "README.md"
Is this ok? (yes) yes
npm WARN package.json lowercase@0.0.1 No readme data!
修改文件:package.json
~ vi package.json
"name": "lowercase_demo",
"version": "0.0.1",
"description": "A demo package of lowercase",
"keywords":[
"demo","lowercase"
"author": "Conan Zhang
(http://blog.fens.me)",
"license": "MIT",
"main": "lowercase.js",
"repository": {
"type":"git",
"url":"/bsspirit/lowercase_demo"
"engines": {
"node": ">=v0.10.5"
"readmeFilename": "README.md"
2). 编辑文件:lowercase.js
~ vi lowercase.js
"use strict"
var fs = require('fs');
exports.lowerCase = function (myfile) {
console.log(myfile);
if (fs.existsSync(myfile)) {
var content = fs.readFileSync(myfile, 'utf8');
console.log(content.toLowerCase());
console.log("File does not exist - " + myfile);
3). 编辑文件:example.js
~ vi example
"use strict"
var lowercase = require('./lowercase.js');
var myfile="test/data/sample.txt"
lowercase.lowerCase(myfile);
4). 编辑文件:test/data/sample.txt
~ vi sample.txt
5). 运行:example.js
~ D:\workspace\javascript\nodejs-package>node example.js
test/data/sample.txt
6). 编辑文件:README.md
~ vi README.md
========================
A demo package of lowercase
npm install lowercase_demo
Conan Zhang, http://blog.fens.me
## License
3. 创建命令行工具
1). 编辑文件:bin/lowercase
~ vi lowercase
#!/usr/bin/env node
var myfile = process.argv.slice(2);
var path = require('path');
var fs = require('fs');
var dir = path.dirname(fs.realpathSync(__filename))+"/../";
require(dir+'lowercase.js').lowerCase(dir+myfile);
2). 编辑文件:bin/lowercase.bat
~ vi lowercase.bat
node.exe bin/lowercase %1
3). 运行lowercase.bat
~ D:\workspace\javascript\nodejs-package>bin\lowercase.bat test\data\sample.txt
D:\workspace\javascript\nodejs-package>node.exe bin/lowercase test\data\sample.txt
D:\workspace\javascript\nodejs-package\bin/../test\data\sample.txt
4. 本地安装lowercase包
新建项目,并安装lowercase依赖库
~ D:\workspace\javascript>mkdir nodejs-package-project && cd nodejs-package-project
~ D:\workspace\javascript\nodejs-package-project>npm install ..\nodejs-package
lowercase_demo@0.0.1 node_modules\lowercase_demo
新建运行文件:app.js
~ vi app.js
var lowercase = require('lowercase_demo');
var myfile="data.txt"
lowercase.lowerCase(myfile);
数据文件: data.txt
~ vi data.txt
运行app.js
~ D:\workspace\javascript\nodejs-package-project>node app.js
5. 项目上传到github
把lowercase_demo库,上传到github。
~ git init
~ git add .
~ git commit -m 'init'
~ git remote add origin :bsspirit/lowercase_demo.git
~ git push origin master
项目github地址:
注:大家可以基于这个demo项目基础上,继续完成包的开发。
5. 通过npm发布包
在npm上,注册新用户
~ D:\workspace\javascript\nodejs-package>npm adduser
Username: bsspirit
npm http PUT https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http 409 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http GET https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http 200 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit
npm http PUT https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit/-rev/2-25eae
npm http 201 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit/-rev/2-25eae
在npm上,发布项目
~ D:\workspace\javascript\nodejs-package>npm publish
npm http PUT https://registry.npmjs.org/lowercase_demo
npm http 201 https://registry.npmjs.org/lowercase_demo
npm http GET https://registry.npmjs.org/lowercase_demo
npm http 200 https://registry.npmjs.org/lowercase_demo
npm http PUT https://registry.npmjs.org/lowercase_demo/-/lowercase_demo-0.0.1.tgz/-rev/1-162a1
npm http 201 https://registry.npmjs.org/lowercase_demo/-/lowercase_demo-0.0.1.tgz/-rev/1-162a1
npm http PUT https://registry.npmjs.org/lowercase_demo/0.0.1/-tag/latest
npm http 201 https://registry.npmjs.org/lowercase_demo/0.0.1/-tag/latest
+ lowercase_demo@0.0.1
6. 通过npm安装
通过npm下载安装
~ D:\workspace\javascript>mkdir nodejs-package-project2 && cd nodejs-package-project2
~ D:\workspace\javascript\nodejs-package-project2>npm install lowercase_demo
npm http GET https://registry.npmjs.org/lowercase_demo
npm http 200 https://registry.npmjs.org/lowercase_demo
lowercase_demo@0.0.1 node_modules\lowercase_demo
全局安装lowercase_demo
~ D:\workspace\javascript\nodejs-package-project2>npm install lowercase_demo -g
npm http GET https://registry.npmjs.org/lowercase_demo
npm http 304 https://registry.npmjs.org/lowercase_demo
D:\toolkit\nodejs\lowercase -> D:\toolkit\nodejs\node_modules\lowercase_demo\bin\lowercase
npm ERR! peerinvalid The package generator-karma does not satisfy its siblings' peerDependenci
npm ERR! peerinvalid Peer generator-angular@0.4.0 wants generator-karma@~0.5.0
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "D:\\toolkit\\nodejs\\\\node.exe" "D:\\toolkit\\nodejs\\node_modules\\npm\\bi
lowercase_demo" "-g"
npm ERR! cwd D:\workspace\javascript\nodejs-package-project2
npm ERR! node -v v0.10.5
npm ERR! npm -v 1.2.19
npm ERR! code EPEERINVALID
npm ERR! Additional logging details can be found in:
D:\workspace\javascript\nodejs-package-project2\npm-debug.log
npm ERR! not ok code 0
错误不是lowercase_demo的,没有关系。
执行全局命令:lowercase
~ D:\workspace\javascript\nodejs-package-project2>lowercase test\data\sample.txt
D:\toolkit\nodejs\node_modules\lowercase_demo\bin/../test\data\sample.txt
注: 关于命令lowercase,因为代码中定义的是相对目录,所以只能访问D:\toolkit\nodejs\node_modules\lowercase_demo\目录的数据文件。
这样,我们自定义的lowercase_demo库,开发完成,发布到npm官方依赖管理,并且安装成功!整体流程走了一遍发现还是挺简单的。
你也来动手试试吧!
转载请注明出处:
This entry was posted in
Pingback: ()
Pingback: ()
Pingback: ()
Designed by& R是最值得学习的编程语言
R是最值得学习的编程语言
,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。
要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。
关于作者:
张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
转载请注明出处:
本篇文章是受51CTO编辑的约稿文章,主要谈谈以下5种语言 NODE,LUA,Python,Ruby,R ,哪个在2014年的应用前景会更好?51CTO文章地址:
我毫不犹豫的选择R。R不仅是2014年,也是以后更长一段时间的主角。
我的编程背景
为什么我会选择R?
R的应用前景
时代赋予R的任务
1. 我的编程背景
本人程序员、架构师,从编程入门到今天,一直深信着Java是改变世界的语言,Java已经做到了,而且一直很辉煌。但当Java的世界越来越大,变得无所不能的时候,反而不够专业,给了其他语言发展的机会。
本次要比较要5种编程语言(NODE,LUA,Python,Ruby,R),这些都是非常优秀的,在特定领域发展壮大的语言。
我已使用Java语言 11年,R语言 3年,Node 1年,对于本次问题 “哪个语言在2014年的应用前景会更好?”,我选择R语言。
2. 为什么我会选择R?
我会从下面的几个方面,来说明我选择R的原因。
R的社区和资源
R的思维模式
R解决的问题
1). R的基因
R是统计学家发明的语言,天生具有统计的基因。
从我开始学习R语言,我就开始了知识的跨界思考。统计基于概率论,概率论又基于数学,用计算机的方式编程,解决某个领域的实际问题。简单一算,4个学科知识的交集,决定着我们解决问题的能力。统计的基因,让R语言与众不同!
2). R的发展
R一直在小众领域成长着,最早也只有统计学家在用,主要用R来代替SAS做统计计算。时代在进步,随着大数据的爆发,R终于在这一波浪潮中,被工业界所发现。然后,有越来越多的工程背景的人加入到这个圈子,对R计算引擎,R的性能,R的各种程序包进行改进和升级,让R获得了新生。
我们现在用到的R语言软件,已经越来越接近工业软件的标准了。由工程师推动的R的发展速度,远远地超过了由统计学家推动的步伐。随着人们对数据分析要求的进一步增加,R会以更快的脚步继续发展,将成为免费的、开源的、数据分析软件的代名词。
3). R的社区和资源
R的发展,离不开R的社区支持。当然,我不得不承认R的官方社区,从Web页上看起来太简陋了,稍微调整一下CSS样式表,都会比现在好看很多。也许这种简单、无修饰也是统计学家的基因吧。
在R的社区中,我们可以下载到R语言软件,R的第三方软件包,和R的其他支持软件。可以找到开发者论坛,R-Journal列表,软件包列表,R语言图书列表,R用户组等的信息,同其他语言的社区资源一样丰富。
R是自由软件,开发者可以开发自己的软件包,封装自己的功能,然后在CRAN上面发布。截止到2014年2月,共有5236个R包在CRAN上面发布。
可能很多人会说只有5236个包,数量太少了。这是因为CRAN是需要提交申请的,R语言小组审核,检查后再会发布的出来。而且审核非常严格的,高质量是发布一个新的R包基本要求。由于CRAN过于严格的审查,让很多的开发者选择在RForge上发布,还有些R包是基于Github发布的,我也在github上面发布了自己的R包:。
R官方地址:http://www.r-project.org/
R开发者论坛:http://r.789695./
RForge:https://r-forge.r-project.org/
4). R的哲学
每种语言都有自己的设计理念和哲学,而我体会的R的哲学,就是“静下心做事情”。
R不需要很长的代码,R也不需要设计模式。一个函数调用,传几个参数,就能实现一个复杂的统计模型。我们需要思考,用什么模型,传什么参数,而不是怎么进行程序设计。
我们可能会用R实现 “从一个数学公式,变成一个统计模型” 的过程,我们也可能会考虑 “如何让一个分类器结果更准确”,但我们不会思考 “时间复杂度是多少,空间复杂度是多少”。
R的哲学,可以让你把数学和统计学的知识,变成计算模型,这也是R的基因所决定的。
5). R的使用者
R语言早期主要是学术界统计学家在用,在各种不同的领域,包括统计分析,应用数学,计量经济,金融分析,财经分析,人文科学,数据挖掘,人工智能,生物信息学,生物制药,全球地理科学,数据可视化等等。
近些年来,由互联网引发的大数据革命,才让工业界的人,开始认识R,加入R。当越来越多的有工程背景的人,加入到R语言使用者的队伍后,R才开始像着全领域发展,逐步实现工业化的要求。
RevolutionAnalytics公司的RHadoop产品,让R可以直接调用Hadoop集群资源
RStudio公司的RStudio产品,给了我们对于编辑软件新的认识
RMySQL, ROracle, RJDBC 打通了R和数据库访问通道
rmongodb, rredis, RHive, rhbase, RCassandra 打通过R和NoSQL的访问通道
Rmpi, snow 打通了单机多核并行计算的通道
Rserve,rwebsocket 打通了R语言的跨平台通信的通道
R不仅是学术界的语言,更将成为工业界必备的语言。
6). R的语法
R是面向对象语言,语法如同Python。但R的语法很自由,很多函数的名字,看起来都是那么随意,这也是R的哲学的一部分吧!
看到这样的赋值语法,有其他语言基础的程序员,肯定会崩溃的。
[1] 1 2 3 4
[1] 1 2 3 4
随机取正态分布N(0,1)的10个数,又是这么的简单。
> rnorm(10)
用R画鸢尾花的数据集的散点图,非常好的可视化效果
> data(iris) #加载数据集
> head(iris) #查看前6行数据集
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
> plot(iris) #画图
正是因为R自由哲学,让R的语法独特而简洁,我已经喜欢上这种哲学了。
7). R的思维模式
R语言让我跳出了原有思维定式。使用R语言,我们应该从统计学的角度想问题,而不是计算机的思维模式。
R语言是直接面向数据的语言。在我们的日常生活中,无论做什么事情都会产生数据,上网有浏览数据,买东西有消费数据,就算什么都不干,也会受大气PM2.5的影响。利用R语言,我可以直接分析这些数据。
面向什么业务,就分析什么数据,不需要从产品经理向程序员的角色转换,不需要考虑有什么功能,更不需要考虑程序设计的事。
跳出程序员的思维模式,你所能认知的东西会更多,找到更适合自己的定位。
8). R解决的问题
当数据成为生产资料的时候,R就是为人们能运用生产资料创造价值的生产工具,R语言主要解决的是数据的问题。
在很长期的历史时期,人类产生的数据都没有自互联网诞生以来产生的数据多;当Hadoop帮助人们解决了大数据存储的问题后,如何发现数据的价值,成为当前最火的话题。R语言的统计分析能力,就是数据分析最好的工具。
所以,R要解决的问题,就是大数据时代的问题,是时代赋予的任务。
9). R的不足
前面说了太多R的优点了,R也有很多不足之处。
R语言是统计学家编写的软件,并不如软件工程师编写的软件那么健壮。
R语言软件的性能,存在一些问题。
R语言很自由,语法命名不太规范,需要花时间熟悉。
R语言结合了很多数学、概率、统计的基础知识,学起来有一定门槛。
R的这些不足,都是可以克服的。当有更多的工程背景的人加入的时候,R语言会比现在更强大,帮助使用者创造更多的价值。
3. R的应用前景
R可以做所有SAS做的事情。
R应用最热门的领域:
统计分析:包括统计分布,假设检验,统计建模
金融分析:量化策略,投资组合,风险控制,时间序列,波动率
数据挖掘:数据挖掘算法,数据建模,机器学习
互联网:推荐系统,消费预测,社交网络
生物信息学:DNA分析,物种分析
生物制药:生存分析,制药过程管理
全球地理科学:天气,气候,遥感数据
数据可视化:静态图,可交互的动态图,社交图,地图,热图,与各种Javascript库的集成
我在博客中已经写了很多篇关于R语言应用的文章,包括上面所列出的除生物以外的热门领域。R有着非常广阔的应用前景,而且R也将成为新一代的最有能力创造价值的工具。
4. 时代赋予R的任务
R语言是在大数据时代被工业界了解和认识的语言,R语言被时代赋予了,挖掘数据价值,发现数据规律,创造数据财富的任务。
R语言也是帮助人们发挥智慧和创造力的最好的生产工具,我们不仅要学好R语言,还要用好R语言,为社会注入更多的创新的生产力。
所以,通过上面的几节内容所有的文字描述,我认为“R是最值得学习的编程语言”。不论你还在读书,还是已经工作,掌握R语言这个工具,找最适合自己的位置,前途将无限量。
最后总结:在这5种语言中,R是最特殊的,R被赋予了与其他语言不同的使命。R的基因决定了,R将成为2014年,也可能是以后更长一段时间的主角。
5. 作者介绍
张丹,程序员、架构师,创业者。我的博客: 。
从程序员开始,到架构师一路走来,经历过太多的系统和应用。做过手机游戏,写过编程工具;做过大型Web应用系统,写过公司内部CRM;做过SOA的系统集成,写过基于Hadoop的大数据工具;做过外包,做过电商,做过团购,做过支付,做过SNS,也做过移动SNS。以前只用Java,然后学了PHP,现在用R和Node。最后跳出IT圈,进入金融圈,研发量化交易软件。
注:我正在写一本关于R语言的图书,本篇文章会作为图书的开篇文章。
######################################################
看文字不过瘾,作者视频讲解,请访问网站:
######################################################
转载请注明出处:
This entry was posted in
Designed by& 网络问题 – bitbucket同步数据
网络问题 – bitbucket同步数据
,介绍了如何利用自己的计算机资源,通过虚拟化技术搭建VPS。
在互联网2.0时代,每个人都有自己的博客,还有很多专属于自己的互联网应用。这些应用大部分都是互联网公司提供的。对于一些有能力的开发人员(geek)来说,他们希望做一些自己的应用,可以用到最新最炫的技术,并且有自己的域名,有自己的服务器。这时就要去租一些互联网上的VPS主机。VPS主机就相当于是一台远程的计算机,可以部署自己的应用程序,然后申请一个域名,就可以正式发布在互联网上了。本站“” 就使用的VPS在美国达拉斯机房。
其实,VPS还可以自己搭建的。只要我们有一台高性能的服务器,一个IP地址,一个路由。可以把一台高性能的服务器,很快的变成5台,10台,20台的虚拟VPS。我们就可以在自己的VPS上面的,发布各种的应用,还可以把剩余的服务器资源租给其他的互联网使用者。 本系列文章将分为以下几个部分介绍:“虚拟化技术选型”,“”,“”,“VPS内网的网络架构设计”,“VPS租用云服务”。
关于作者:
张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
blog: http://blog.fens.me
转载请注明出处:
话要从bitbucket.org被封说起。github众所周知,是IT界最有名的代码开放社区,2013年1月间由于12306的订票助手使用到了github上面分享的代码,网站先被拖垮,后被封杀,Github被GFW屏蔽,最后IT界的所有大老们通过社会舆论的影响,才使得github逃过GFW的劫难。
bitbucket.org同样也是代码开放社区,大概于2013年4月的一天悄悄被GFW封了。很多朋友的私有项目,都是托管在bitbucket.org社区的,这样一封又是一场不小的灾难。
traceroute测试
tracepath测试
未解决的问题1 – 为什么显示星号(*)和no reply
未解决的问题2 – bitbucket.org同步数据
1. 问题描述
我们今天要讲的内容,虽然由bitbucket引起,但确是网络技术的问题。
为了创业做准备,朋友在深圳买了一台服务器放在家里,网络服务商为”深圳电信”。 服务器IP每天会变的问题,已经解决:。
我们使用GIT通过bitbucket.org社区管理代码。经常会出现的现象就是,git clone / git pull/ git push 的操作时,长时间的等待代码不能同步。但有时候,“运气”好又可以同步代码。
2. ping测试
linux ubuntu环境中,用ping去检查是不是连接正常。
下面是正常的ping连接, 207.223.240.182,ping的速度慢但比较稳定。
cos@delta:~$ ping bitbucket.org
PING bitbucket.org (207.223.240.182) 56(84) bytes of data.
64 bytes from 207.223.240.182: icmp_req=1 ttl=47 time=224 ms
64 bytes from 207.223.240.182: icmp_req=2 ttl=47 time=224 ms
64 bytes from 207.223.240.182: icmp_req=3 ttl=47 time=224 ms
不正常的ping连接,207.223.240.181,ping的过程,经常是长时间等待,完全连不通。
cos@delta:~$ ping bitbucket.org
PING bitbucket.org (207.223.240.181) 56(84) bytes of data.
3. dig测试
为什么会有两个IP,我们查看一下DNS解析。
cos@delta:~$ dig bitbucket.org
; &&&& DiG 9.8.1-P1 &&&& bitbucket.org
;; global options: +cmd
;; Got answer:
;; -&&HEADER&&- opcode: QUERY, status: NOERROR, id: 29646
;; flags: QUERY: 1, ANSWER: 2, AUTHORITY: 13, ADDITIONAL: 0
;; QUESTION SECTION:
;bitbucket.org. IN A
;; ANSWER SECTION:
bitbucket.org. 5351 IN A 207.223.240.181
bitbucket.org. 5351 IN A 207.223.240.182
;; AUTHORITY SECTION:
. 4447 IN NS e.root-servers.net.
. 4447 IN NS j.root-servers.net.
. 4447 IN NS a.root-servers.net.
. 4447 IN NS f.root-servers.net.
. 4447 IN NS b.root-servers.net.
. 4447 IN NS g.root-servers.net.
. 4447 IN NS m.root-servers.net.
. 4447 IN NS c.root-servers.net.
. 4447 IN NS h.root-servers.net.
. 4447 IN NS d.root-servers.net.
. 4447 IN NS l.root-servers.net.
. 4447 IN NS i.root-servers.net.
. 4447 IN NS k.root-servers.net.
;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Sat Jun 29 20:15:02 2013
;; MSG SIZE rcvd: 274
确实发现bitbucket.org域名绑定了2个IP。
4. traceroute测试
接下来,跟踪路由跳转的情况。一测试才发现傻眼了。
cos@delta:~$ traceroute bitbucket.org
traceroute to bitbucket.org (207.223.240.181), 30 hops max, 60 byte packets
192.168.1.1 (192.168.1.1)
都是*,这说明什么呢?难道全部都超时?!
测试一下其他的域名,同样的问题。
cos@delta:~$ traceroute fens.me
traceroute to fens.me (50.116.27.194), 30 hops max, 60 byte packets
192.168.1.1 (192.168.1.1)
有人说这个问题是因为traceroute默认使用udp协议造成的,那我们改用icmp协议看看结果。
cos@delta:~$ sudo traceroute -I bitbucket.org
traceroute to bitbucket.org (207.223.240.181), 30 hops max, 60 byte packets
192.168.1.1 (192.168.1.1)
0.361 ms *
207.223.240.181 (207.223.240.181)
226.251 ms
226.787 ms
227.130 ms
还是*,完全不是我们预期的情况。
我们换台机器再测试一下:
阿里云租的服务器:
root@AYcda8003:~# traceroute bitbucket.org
traceroute to bitbucket.org (207.223.240.182), 30 hops max, 60 byte packets
(223.4.215.252)
10.200.252.4 (10.200.252.4)
0.567 ms 10.200.252.8 (10.200.252.8)
10.200.252.4 (10.200.252.4)
121.0.31.26 (121.0.31.26)
0.661 ms 119.38.221.90 (119.38.221.90)
119.38.220.70 (119.38.220.70)
26.691 ms 119.38.220.138 (119.38.220.138)
782 ms 119.38.220.188 (119.38.220.188)
42.120.252.138 (42.120.252.138)
2.086 ms 42.120.252.150 (42.120.252.150)
.812 ms 42.120.253.162 (42.120.253.162)
122.224.213.214 (122.224.213.214)
0.748 ms 122.224.187.18 (122.224.187.18)
61.164.13.77 (61.164.13.77)
4.193 ms 61.164.13.129 (61.164.13.129)
s 220.191.135.101 (220.191.135.101)
202.97.55.9 (202.97.55.9)
3.548 ms 202.97.68.137 (202.97.68.137)
4.277 ms 202.97.55.5 (202.97.55.5)
202.97.50.254 (202.97.50.254)
4.065 ms 202.97.50.246 (202.97.50.246)
202.97.35.94 (202.97.35.94)
102.816 ms 202.97.35.18 (202.97.35.18)
6.412 ms 202.97.35.94 (202.97.35.94)
101.986 ms
202.97.50.114 (202.97.50.114)
138.102 ms 202.97.58.186 (202.97.58.186)
198.226 ms
198.229 ms
202.97.52.226 (202.97.52.226)
179.517 ms 202.97.90.38 (202.97.90.38)
157.887 ms
157.835 ms
xe-9-2-3.edge2.SanJose3.Level3.net (4.53.210.113)
187.224 ms
187.255 ms
166.808 ms
vlan80.csw3.SanJose1.Level3.net (4.69.152.190)
209.114 ms
187.905 ms vlan70.csw2.SanJose1.Level3.net (4.69.152.126)
213.411 ms
ae-62-62.ebr2.SanJose1.Level3.net (4.69.153.17)
239.783 ms ae-92-92.ebr2.SanJose1.Level3.net (4.69.153.29)
251.184 ms ae-82-82.ebr2.SanJose1.Level3.net (4.69.153.25)
178.626 ms
ae-3-3.ebr1.Denver1.Level3.net (4.69.132.58)
389.061 ms
389.349 ms
371.320 ms
ae-1-100.ebr2.Denver1.Level3.net (4.69.151.182)
214.218 ms
214.161 ms
200.663 ms
ae-4-4.car1.StLouis1.Level3.net (4.69.132.181)
238.644 ms
217.050 ms
216.909 ms
XIOLINK-LLC.car1.StLouis1.Level3.net (4.53.160.186)
201.729 ms
201.835 ms
201.292 ms
b1-e21.c1-f00. (63.246.15.2)
238.787 ms
215.672 ms
243.613 ms
北京联通(win7):
C:\Users\Administrator&tracert bitbucket.org
通过最多 30 个跃点跟踪
到 bitbucket.org [207.223.240.182] 的路由:
PC [192.168.1.1]
111.192.144.1
61.148.185.69
124.65.61.137
123.126.0.169
219.158.100.158
219.158.11.206
219.158.97.2
sl-st30-sj-0-4-3-1.sprintlink.net [144.228.110.93]
144.232.12.151
sl-xocomm-.sprintlink.net [144.223.1.2]
207.88.14.225.ptr.us.xo.net [207.88.14.225]
te-3-0-0.rar3.denver-co.us.xo.net [207.88.12.57]
ae0d0.mcr2.marylandheights-mo.us.xo.net [216.156.0.182]
ae1d0.mcr1.marylandheights-mo.us.xo.net [216.156.1.89]
206.181.23.22
63-246-15- [63.246.15.30]
207.223.240.182
跟踪完成。
只有深圳电信的服务器,都是星号(*),这如何解释呢?
6. tracepath测试
下面我们换一个命令tracepath,再测试一下。
左边是”深圳电信”的服务器,右边是”阿里云”的服务器。
“no reply”, 这种情况。。。让老夫如何是好!!
本来是想看看,为什么连接bitbucket有问题,结果情况越来越复杂了。
6. 未解决的问题1 – 为什么显示星号(*)和no reply
网上查到一个合理的解释:“运营商,为了安全性,屏蔽了这些信息”。
我的疑问又来了,只是“深圳电信”才会做这个屏蔽,北京联通和阿里云都不做安全屏蔽。
7. 未解决的问题2 – bitbucket.org同步数据
我们还是用 “深圳电信”的服务器做实验。
同IP两台虚拟机,左边ping,右边git pull。
执行过程:
右边 ping bitbucket.org,发现IP是207.223.240.181,停止
左边 ping 207.223.240.181,一直畅通一直在动
右边 执行git pull命令, 挂着不动了
左边 ping 命令也挂着不动了
两边同时都挂住了。。。我这泪啊!
也不知道过几多长时间,10分钟,左边动了,右边出现“Already up-to-date.”同步成功。
这次竟然成功了,很多时候等30分钟,都不会有动静的!!
有没有同学能帮我解释一下原理及我所描述过程中的问题。由于网络知识的缺乏,只好写成文章求助大家了。
转载请注明出处:
This entry was posted in
Designed by

我要回帖

更多关于 追涨杀跌的小伙子 的文章

 

随机推荐