TCP 是软管,HTTP 是流经软管的水
我刚刚读了一些,并试图概念化 TCP 和 HTTP 之间的区别。我从这里偷了一个类比http://wiki.answers.com/Q/What_is_the_difference_between_tcp_and_http
答案1
不,这不是一个特别好的比喻,但它还算管用(如果你眯起眼睛...然后转过头...忽略几个问题...)
HTTP 是一种协议,但 TCP 也是另一种协议。协议只是相互通信的规则。从这个意义上讲,称一个为“软管”,而称另一个为“水”,暗示它们有两种不同的工作,这是不公平的。
我认为了解一点 OSI 模型对你是有好处的。http://en.wikipedia.org/wiki/OSI_model
本质上,HTTP 是应用程序之间相互通信的一组规则。它定义了 Web 浏览器与服务器等通信的规则。TCP 是端到端传输和控制的一组规则。它处理端点之间的连接和可靠性。但还涉及其他协议,例如在物理层、网络层等发生的协议。
如果一定要打个比方,我会这样说。假设有一座建筑,里面的人都不能离开自己的房间,但又需要互相交谈。有一种协议可以让人与人交流(比如写便条)。如果我想把它寄到隔壁的房间,我可能需要把它放在信封里,然后按照办公室的邮寄规则寄出去(即写上楼层-房间号)。如果我想把它寄到另一栋建筑,我需要通过快递员穿过城镇寄出去(即写上建筑地址)。
突然间,如果我想和城镇另一边的人通话,我需要写一张便条(协议 1),将其放入写有我所在楼层地址的信封中,然后让快递员将其送到城镇另一边的某栋大楼(协议 3)。在另一端,一楼的人需要打开快递箱并取出信封(回到协议 2),将其送到正确的楼层和房间号,然后打开信封并取回便条(回到协议 1)。
这种“层层递进”的情况就是 OSI 模型中发生的现象。
答案2
这种类比确实表明了一种依赖关系,但它暗示 HTTP 是有效载荷(或数据内容),而实际上它是另一种(更高级别的)协议。
而水并不是一个好的介质选择,因为数据不是以连续的比特流形式传输的。以太网数据是封包化(并且经常缓冲的在传输和接收过程中)。
协议更像是发送邮件或包裹。
考虑纸质邮件的分层方案:
1. intra-office mail,
2. corporate mail, and
3. a courier service.
您想将一份装订好的文件寄给另一个城市另一个办公室的同事。
因此,您将文件放入办公室内部信封中,然后让邮递员取走。
您当地的邮件收发室知道这不是给当地同事的,所以您的文档将作为公司邮件处理。
因此,要将其发送到其他办公室,您的文档(在办公室间信封中)将被塞入快递服务信封(例如 FedEX),然后寄出。
到达另一家办公室后,快递服务信封将被拆开。
然后,办公室间信封将被递送给收件人,收件人将打开信封以阅读文件。
您的文档就像 HTTP 使用的 HTML(或其他数据)。HTTP
就像您(用户)与之相关的办公室间信封。
邮递员和邮局就像您的 Web 浏览器,它将 TCP/IP 等低级协议包裹在 HTTP 等高级协议上。
快递服务信封就像 TCP/IP。
快递服务就像以太网传输服务,实际上负责移动货物。
答案3
TCP 就像电话交谈,我打电话给你,你接起电话说“你好”。(SYN)
我们互相问候后就开始聊天。当我讲一个很长的故事时,你不时地会说“哇”或“好吧!”或“真糟糕!”。(ACK)
谈话一直持续到我说“好吧,我得走了。”FIN
至于 TCP 和 HTTP 之间的比较,在上面的类比中,TCP 是对话的礼仪,而 HTTP 是您正在通话的电话类型。您可以使用手机(HTTP)或座机(例如 FTP)。对话方法相同,但访问协议的方式不同。
我相信有人可以改进这一点。这就是我的尝试!