TCP/IP模型的一个简单解释

作者: 阮一峰

日期: 2009年3月20日

珠峰培训

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协议,进行二进制数据的传输;而二进制数据的传输,离不开最底层负责网络连接的物理协议。

所以,通过这样四层的网络架构,就实现了整个互联网的通信。

(完)

一灯学堂

留言(22条)

和OSI的标准模型对应着讲,对比会更加清楚

不懂的还是不懂····

请经济学博士讨论一下经济问题。
请简要的评论一下美国印1万亿美元票子来救市的行为。以及会对中国经济和中国股市造成的影响。
由于美元暴跌,美国股市狂涨,由于近期中美股市走势一直是相反的。所以美国股市暴涨,是不是会导致在中国股市投资的美国投资者的资产回流,流动性收紧,股市进入新一轮下跌。
另外,由于美元强势贬值,人民币可能再次扩大M2的供应量,也即人民币跟随美元贬值,避险的措施是买入大宗商品期货,黄金,还是把手头人民币换成日元?

我觉得您对TCP的理解有误,而且似乎跟Transport Layer 混淆了。

难道阮老师的blog真的变成仅仅是技术一类的东西了。。。

不会吧。。

引用Nicky的发言:

和OSI的标准模型对应着讲,对比会更加清楚

OSI的七层模型,我到现在还没有搞懂……

理解TCP/IP模型和OSI参考模型的关键在于理解封装和解包
同时首部中的类型字段指定了解包后的处理方式

理解了又能怎样?

真佩服你, 学经济的能这样花精力去了解计算机方面的知识. 说的差不离.
OSI 就没有必要了, 那都是学究气的, 从来就没有实用过.


写得很简单,应该很多人可以因此读懂。

回一下楼上,Ruan始终是一个经济学人,他做了很多IT的东西,但很多专业的人一看,就觉得门外的。

Ruan更写了很多有趣的专业的事情,如果写在我专业头上的,更觉得幼稚。

可以说,我相信Ruan说的经济学,语言学的所有,因为我相信他是专家。但,此外的,我很赞赏他的表达能力,但并不认同所有。

就上面的贴,他说的没错,但不是全部。

tcp协议负责文本传输,ip协议负责二进字传输?
老大不是这样简单的吧,ip协议是无连接,不保证传输安全性的协议,tcp是以它为基础,进行了封装,让它传输的数据不会丢失

峰粉说得很对!不过,学习对有些人来说,有时候是一种乐趣,从未知到了解的过程是一个探索,学习的过程,很让人着迷。但是要想达到精通甚至顶尖的境界,之前是要付出太多的时间和精力,而且未必能达到。阮的心态其实很好,自娱自乐之余,还能给大家提供一个氛围,至少交了一些朋友,大家可以讨论一些问题。

所谓的OSI标准模型,根本就是个笑话,出现以后一直就没有得到业界的认可,而TCP/IP早就成了事实的标准。有人认为OSI还应该再加上经济层和政治层,现在互联网系统协会(ISC.org)的网站上还在出售这个9层OSI模型的T恤衫:
https://www.isc.org/logoware/isc-9-layer-osi-model-cotton-t-shirt

分析的已经很好了

引用花心开未的发言:

由於美元強勢貶值,人民幣可能再次擴大M2的供應量,也即人民幣跟隨美元貶值,避險的措施是買入大宗商品期貨,黃金,還是把手頭人民幣換成日元?

真正的重點:不是去印鈔票!而是去證明「錢」消失去哪裡了。

市場上流通得貨幣,為何會消失?

經常「金融巨惡」不是來自外部經濟,而是內部經濟?在資本主立場上,從「大幅囤積物資」轉為「大幅的囤積貨幣」,使得整體經濟?發生中轉困難!而這種中轉價值,多半發生在「民生消費」,極少發生在「企業資金」的需求。

然後?就會發生「國家」必須在提供「大量籌碼」給「民生賭局」去運用,這時候?「大量囤積貨幣、大量囤積物資」的商人,就能夠再次提高「市場價格」,使得整體消費,再次吞食「民生消費」,很自然!這種手段是「經濟回收:賭局莊家思想」的事實。

閒家?要能夠不失敗?唯一的方式是「避免使用貨幣」,及減少「貨幣使用率」。但仍會發生「喪失信用」的背景。

有興趣?

可以來拜訪我的 Blog http://hr-no.blogspot.com

經濟控制,已經成為一種「社會操作」的統治手段!

引用博主的章节:
“400 Bad Request”说明Google看不懂你的发言。这是毫不奇怪的,因为这时你是在TCP文本通道中,进行HTTP对话。所以,你的发言必须遵守HTTP协议,这样Google才能看懂。 第四步:输入“GET / HTTP/1.1”,表示向google索要首页根文件,使用的协议是HTTP的1.1版本。
文章中大部分内容我经常看到,总觉得自己是理解了,而当我看到这段说明时却有了更深刻地认识.尤其是 "你的发言必须遵守HTTP协议,这样Google才能看懂"。

图片都看不了了~~

引用no的发言:

图片都看不了了~~

翻墙再看文章就看得到图片了。

GET HTTP/1.1没有反应,提示无效。。

总是显示遗失对主机的连接是什么情况?
前面返回了一些头信息,但是返回码是404 NOT FOUND。
后面的HTML文档貌似是返回的404页面对应的HTML代码。这是因为访问不到谷歌首页的原因吗?

too simple

有点抽象,结合图片有了一个大致的了解。ip负责计算机之间的通信,并且将包发送至接受的一方,路由的功能。TCP:负责将文本数据分割并包入IP包中,数据达到目的地后重新组合。并且它的端口可以规定使用哪个应用层协议,所以可以理解为控制了两个“应用”之间的通信,这也就是对“C”的解释吧,controller应用层的作用。

以上是自己的理解,小白一只,只能用直观的想法理解了。。

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接