我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
标签 #技术

TCP/IP 笔记(5.ICMP)

IP是不可靠的传输协议,并没有提供错误处理相关的功能. 错误处理的能力由ICMP(Internet Control Message Protocol,互联网控制消息协议)提供.

ICMP是配合IP运行的不可或缺的重要机制,IMCP也运行于网际层,利用IP的传输能力来发送消息.

TCP/IP的错误报告与信息性功能主要是通过ICMP来传达的.

ICMP可用于进行:

  • 流程控制

当数据报抵达的速度太快而来不及处理时,目的主机或中间网关会回传一个SQM(ICMP Source Quench Message)给发送方,要求数据报的来源停止传送.

  • 无法到达目的地

当无法将数据报送达目的地时,检测到此问题的系统会发出DUM(Destination Unreachable Message)给数据包的来源.

所谓目的地,可能是某网络或某主机,也可能是目标主机的通讯端口.

对于前者,由中间网关发出DUM, 后者则由目标主机发出DUM.

  • 重定向路由

网关通过RM(ICMP Redirect Message)让主机知道另一个网关或许是比较好的选择. 只有源主机与网关都位于同一个网络上时,才能使用该消息.

  • 检查远程主机

主机可利用EM(ICMP Echo Message)来检查远程主机的IP是否已经激活,以及是否能正常运行. 当一个系统收到EM后,他会将收到的数据返回给源主机.

ping命令使用的就是EM.

RP 主机正式开卖!

RP主机官网:http://rp2.jybox.net

RP主机的功能和定位,以及价格,在官网说的已经很明白了,不再重复.

2011年8月,因为零毫秒的需要,我买了一个VPS, 因为之前有半年多的Linux使用经验,也算很快就调教好了. 因为没钱,质量很差,动不动就挂,之后又辗转换过几家VPS服务商.

2012年3月,换到了大名鼎鼎的Linode, 140元/月,这价格我实在有点负担不起,于是决定将VPS上剩余的资源以虚拟主机的形式来出售,主要用于建站、翻墙之类的. 用了这么久的Linux, 也有了点Linux服务器管理的经验,这正好是一个实践的好机会,同时还能捞回点钱.

我很快就开干了,我没有选择安装市面上一些常见的虚拟主机管理系统,而是让用户直接给我发邮件,我自己来按照用户的要求修改配置文件. 包括新建和删除用户等等,都是手动的.

不使用面板一方面是版权的问题,很多面板是收费的. 另一方面是对免费的面板的不信任,不是怕作者使坏,而是怕那么大一个系统,会有某些细节不符合我的预期,造成漏洞. 另外别人的代码,有了bug我也没法改.

我给它起名神马终端, 很蛋疼的名字…., 5元/月. 我也没想到盈利,只是想收回一部分买VPS的钱,减轻点负担. 我以为这么蛋疼的卖法不会有几个人来买的. 但事实上还是有20几个人在用. 手动管理起来实在有点烦,于是我想着自己写个虚拟主机管理面板,将管理操作自动化,顺便把服务器搞的规范一点,实现盈利.

我给这个面板起名RootPanel, 这也是RP主机名字的由来. 我从2012年9月一直写到11月末,大致把它写完了,并结束了相关的测试工作.

期间神马终端受到过5、6次DDOS, 至今也不知道是谁干的、为什么要这样做. 这些次攻击给我的打击也挺大的,一度想放弃卖虚拟主机.

在这段时间,我又购进了一台LocVPS的VPS, 性价比很不错,我主要就是在用它进行面板的测试工作.

现在RP主机在LocVPS上已经开卖了,半个月后,Linode上原有的神马终端也将装上新的面板、更名,成为RP主机的第二个节点.

TCP/IP 笔记(4.IP路由选择和分段)

IP数据报头中的目标地址决定数据报的去处,它代表目标网络中的特定主机. 如果目标地址在本地网络,直接将数据报送到该主机即可.

如果目标地址指向外部网络,则将数据报发给网关,而决定发给哪个网关的过程,叫路由选择.

IP会为每个数据报选择路由.

路由选择

Internet网关(gateway)通常被称为IP路由器(IP router). 网关根据IP决定数据报传送的路径.

严格来说,网关能在不同的协议之间传输数据,路由器则在不同网络间,使用相同协议传输数据.

在TCP/IP术语中,网络设备分为网关和主机.

网关同时连接到多个网络,并可以在网络之间传输数据,而主机不能. 但如果主机被连接到多个网络,也可以被视为网关.

网关和主机最大的差别在于,主机的数据包必须逐层经过四层协议的处理,而在网关上,数据包只需上达网际层即可,因为IP会为数据包决定路由.

任何网络设备都只能将数据报送到与自己连接在同一物理网络上的其他设备. 若要向其他网络上的设备发送数据报,则必须先将数据报发给连接两个网络的网关,然后由网关转发给目标设备.

对于一个主机而言,它只需知道本地网关可以将数据报送往其他网络,不必也不能控制数据报在经过网关之后的转发路径.

这是因为不同的物理网络之间可能完全不兼容,一个网络中的数据报,必须经过网关的转换才能送达另一网络. 这样,数据报像接力棒一样可以跨越多个不同的物理网络,到达目标.

数据报的分段

因为不同的物理网络本质上的差异,连接不同种类物理网络的网关的IP模块可能会将数据报拆分成较小的片段(fragment). 如果网关两端连接的是相同种类的物理网络,则不必拆分数据报.

每一种物理网络,都有自己的最大传输单元(MTU, Maximum Transmission Unit)限制,也就是说,各种网络所能承载的最大数据报容量并不一致.

当数据报从MTU较大的网络流向MTU较小的网络时,网关就必须将数据报拆分成较小的传输单位. 这个过程叫分段.

分解后的数据报称为片段,其格式与普通数据报一样,报头的编号部分可以用来唯一地区分一个片段,并作为还原数据报的依据.

片段(分段)偏移量代表该片段在原数据报中的位置(顺序).

标记中的是否为最后一个片段(分段), 可使IP判断是否已经收集到了一个数据报的所有片段.

传送数据给传输层

当IP收到一个传送给本机的数据报时,它会去掉报头,将得到的数据交给正确的传输层协议(如TCP或UDP). 至于要交给哪一种传输层协议,则由协议号决定,每一种传输层协议都有自己的协议号,以便IP进行识别.

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.