TCP/IP模型是互联网的基础。
想要理解互联网,就必须理解这个模型。但是,它不好懂,我就从来没有搞懂过。
前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型。我读后有一种恍然大悟的感觉,第一次感到自己理解了互联网的总体架构。
下面,我按照自己的理解,写一下互联网到底是怎么搭建起来的。说得不对的地方,欢迎指正。
什么是TCP/IP模型?
TCP/IP模型是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换。
所谓"协议"可以理解成机器之间交谈的语言,每一种协议都有自己的目的。TCP/IP模型一共包括几百种协议,对互联网上交换信息的各个方面都做了规定。
TCP/IP模型的四层结构
这些协议可以大致分成四个层次,上一层的协议都以下一层的协议为基础。就像下面这张图:
从下到上的四层,分别为连接层(Link Layer)、网络层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer)。
可以这样理解它们的作用:
1)连接层负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL等等;
2)网络层负责分配地址和传送二进制数据,主要协议是IP协议;
3)传输层负责传送文本数据,主要协议是TCP协议;
4)应用层负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是HTTP、FTP等。
理解这个结构的关键,在于理解科学家在70年代设计互联网的原始目的,就是为了传输文本。所有协议最初都是为了这个目标而设计的,互联网架构的核心就是文本对话。
实例:用Telnet建立HTTP对话
为了观察文本在互联网上是如何传输的,我们做一个小实验。
第一步:在"开始"菜单中,点击"运行"命令,输入"telnet google.com 80"。
telnet命令本身就是一个应用层协议,它的作用是在两台主机间,建立一个TCP连接,也就是打开两台主机间文本传输的一个通道。
"telnet google.com 80"表示建立本机与google.com在80端口的一个文本传输通道。所谓"端口"其实是TCP协议的一个参数,用来帮助TCP协议判断对方主机传来的文本,到底使用的是哪一种应用层协议。80端口是HTTP协议的端口,就是我们平时浏览网页的端口。常见端口列表可以参考这里。
另外,与Windows 2000和Windows XP不同,Vista系统默认没有安装Telnet客户端,大家可以参考微软公司的安装说明自行安装。如果你使用的是Linux系统,那么可以直接在命令行窗口中,输入上面的命令。
第二步:打开本地显示。(非Windows系统跳过此步。)
请按以下步骤操作:在Telnet窗口中按下"Ctrl+]";然后,输入"set localecho"命令,再连续按下两次回车键。
好了,这个时候你就可以直接同google.com主机进行对话了。
第三步:你可以试着同Google随便说句话,看看有什么反应。
我输入了"Hello World!"。
结果,Google的回答是这样的:
"400 Bad Request"说明Google看不懂你的发言。这是毫不奇怪的,因为这时你是在TCP文本通道中,进行HTTP对话。所以,你的发言必须遵守HTTP协议,这样Google才能看懂。
第四步:输入"GET / HTTP/1.1",表示向google索要首页根文件,使用的协议是HTTP的1.1版本。
Google的回应如下:
"200 OK"表示要求数据成功。在头部信息的下面,就是google在浏览器中显示的首页文件的源代码。
总结
上面这个例子用的是HTTP协议,如果要使用其他"应用层协议"与主机进行对话,你只要改变端口就行了。比如,"telnet ftp.website.com 21",表示用ftp协议进行对话。
所有这些对话的底层协议,都是TCP协议,因为这是负责文本传输的协议;而TCP协议又必须依靠IP协议,进行二进制数据的传输;而二进制数据的传输,离不开最底层负责网络连接的物理协议。
所以,通过这样四层的网络架构,就实现了整个互联网的通信。
(完)
Nicky 说:
和OSI的标准模型对应着讲,对比会更加清楚
2009年3月21日 03:22 | # | 引用
Daniel 说:
不懂的还是不懂····
2009年3月21日 16:01 | # | 引用
花心开未 说:
请经济学博士讨论一下经济问题。
请简要的评论一下美国印1万亿美元票子来救市的行为。以及会对中国经济和中国股市造成的影响。
由于美元暴跌,美国股市狂涨,由于近期中美股市走势一直是相反的。所以美国股市暴涨,是不是会导致在中国股市投资的美国投资者的资产回流,流动性收紧,股市进入新一轮下跌。
另外,由于美元强势贬值,人民币可能再次扩大M2的供应量,也即人民币跟随美元贬值,避险的措施是买入大宗商品期货,黄金,还是把手头人民币换成日元?
2009年3月21日 17:27 | # | 引用
chao 说:
我觉得您对TCP的理解有误,而且似乎跟Transport Layer 混淆了。
2009年3月21日 23:16 | # | 引用
hehe 说:
难道阮老师的blog真的变成仅仅是技术一类的东西了。。。
不会吧。。
2009年3月22日 01:11 | # | 引用
Ruan YiFeng 说:
OSI的七层模型,我到现在还没有搞懂……
2009年3月22日 07:25 | # | 引用
anonymous 说:
理解TCP/IP模型和OSI参考模型的关键在于理解封装和解包
同时首部中的类型字段指定了解包后的处理方式
2009年3月22日 11:49 | # | 引用
Bourne 说:
理解了又能怎样?
2009年3月22日 19:50 | # | 引用
kuber 说:
真佩服你, 学经济的能这样花精力去了解计算机方面的知识. 说的差不离.
OSI 就没有必要了, 那都是学究气的, 从来就没有实用过.
2009年3月23日 10:12 | # | 引用
峰粉 说:
写得很简单,应该很多人可以因此读懂。
回一下楼上,Ruan始终是一个经济学人,他做了很多IT的东西,但很多专业的人一看,就觉得门外的。
Ruan更写了很多有趣的专业的事情,如果写在我专业头上的,更觉得幼稚。
可以说,我相信Ruan说的经济学,语言学的所有,因为我相信他是专家。但,此外的,我很赞赏他的表达能力,但并不认同所有。
就上面的贴,他说的没错,但不是全部。
2009年3月24日 13:19 | # | 引用
杨丽永 说:
tcp协议负责文本传输,ip协议负责二进字传输?
老大不是这样简单的吧,ip协议是无连接,不保证传输安全性的协议,tcp是以它为基础,进行了封装,让它传输的数据不会丢失
2009年4月11日 19:19 | # | 引用
任我行不行 说:
峰粉说得很对!不过,学习对有些人来说,有时候是一种乐趣,从未知到了解的过程是一个探索,学习的过程,很让人着迷。但是要想达到精通甚至顶尖的境界,之前是要付出太多的时间和精力,而且未必能达到。阮的心态其实很好,自娱自乐之余,还能给大家提供一个氛围,至少交了一些朋友,大家可以讨论一些问题。
2009年4月23日 09:27 | # | 引用
fallwithme 说:
所谓的OSI标准模型,根本就是个笑话,出现以后一直就没有得到业界的认可,而TCP/IP早就成了事实的标准。有人认为OSI还应该再加上经济层和政治层,现在互联网系统协会(ISC.org)的网站上还在出售这个9层OSI模型的T恤衫:
https://www.isc.org/logoware/isc-9-layer-osi-model-cotton-t-shirt
2009年4月27日 18:39 | # | 引用
Mooy 说:
分析的已经很好了
2010年4月20日 16:31 | # | 引用
darkman 说:
真正的重點:不是去印鈔票!而是去證明「錢」消失去哪裡了。
市場上流通得貨幣,為何會消失?
經常「金融巨惡」不是來自外部經濟,而是內部經濟?在資本主立場上,從「大幅囤積物資」轉為「大幅的囤積貨幣」,使得整體經濟?發生中轉困難!而這種中轉價值,多半發生在「民生消費」,極少發生在「企業資金」的需求。
然後?就會發生「國家」必須在提供「大量籌碼」給「民生賭局」去運用,這時候?「大量囤積貨幣、大量囤積物資」的商人,就能夠再次提高「市場價格」,使得整體消費,再次吞食「民生消費」,很自然!這種手段是「經濟回收:賭局莊家思想」的事實。
閒家?要能夠不失敗?唯一的方式是「避免使用貨幣」,及減少「貨幣使用率」。但仍會發生「喪失信用」的背景。
有興趣?
可以來拜訪我的 Blog http://hr-no.blogspot.com
經濟控制,已經成為一種「社會操作」的統治手段!
2011年5月 4日 15:07 | # | 引用
yuhai 说:
2011年12月28日 21:59 | # | 引用
no 说:
图片都看不了了~~
2014年6月12日 18:42 | # | 引用
Testtt 说:
翻墙再看文章就看得到图片了。
2014年10月31日 10:13 | # | 引用
李驰 说:
GET HTTP/1.1没有反应,提示无效。。
2015年7月10日 11:09 | # | 引用
刘欢 说:
总是显示遗失对主机的连接是什么情况?
前面返回了一些头信息,但是返回码是404 NOT FOUND。
后面的HTML文档貌似是返回的404页面对应的HTML代码。这是因为访问不到谷歌首页的原因吗?
2017年1月17日 22:35 | # | 引用
1 说:
too simple
2017年7月18日 16:25 | # | 引用
lalal 说:
有点抽象,结合图片有了一个大致的了解。ip负责计算机之间的通信,并且将包发送至接受的一方,路由的功能。TCP:负责将文本数据分割并包入IP包中,数据达到目的地后重新组合。并且它的端口可以规定使用哪个应用层协议,所以可以理解为控制了两个“应用”之间的通信,这也就是对“C”的解释吧,controller应用层的作用。
以上是自己的理解,小白一只,只能用直观的想法理解了。。
2017年9月28日 16:05 | # | 引用
Viking 说:
您少了一个/
GET / HTTP/1.1
2019年8月31日 22:54 | # | 引用
bigkkkkk 说:
刚开始接触互联网,一直都很好奇又困惑。看了您的文章好几天了,今天看到这一篇,真的很感动,词语的精确性,太吸引人了。比如“互联网架构的核心就是文本对话” ,可能一直困惑太久,看到一些句子完全解答了我的困惑。有一种颅内高潮的感觉。
2020年4月 1日 10:22 | # | 引用
zzXing 说:
我的专业就是这种的,一般学这个去思科。
2020年12月27日 12:08 | # | 引用