TCP/IP 和 HTTP 的区别和联系是什么?

最近在学即时通讯,对HTTP 和IP TCP有点分不清了,网上搜索相关的知识,说HTTP是应用层规定传输格式的 又说IP 规定传输的基本单元和格式 又说IP 是寻址的通道 TCP是建立通道,,有点分不清了。求知乎大神解决
关注者
831
被浏览
141,429

【才艺不精,原答案的确有很多不妥,也有些跑题。吸取评论区大神的建议,做以修改和补充。感谢 @面纱如雾 @南宫凛 的纠错。】


下个月你就要结婚了,打个电话给老王。


你先打开电话本,查找“老王”的电话号码:老王 -> 13987654321(DNS解析)。

然后你用手机拨打了13987654321(IP)。

你的手机连接到了联通的基站(路由器),联通(你自己的网关)发现这是个移动的手机号,通过移动的帮助,找到了老王的手机(MAC),老王的手机开始响铃。

“嘟……”(TCP握手)

-“喂?老绿啊!”“哈哈,是我啊,老王!(连接建立)下个月我结婚,你有空吗?”(开始传输数据,先说事)“噢,有啊!”

-“那你记一下地址啊(再说时间地点)!北京市东长安街16号午门太和殿。”“诶,你慢点说(流量控制),我记一下。”

-“北京市”(缩小了滑动窗口)“嗯,然后呢?”(ACK)“东长安街16号”“东……16号”(ACK)

-“午门太和殿”“午门(ACK“午门”)什么殿?你再说一遍,我没听清!”(“太和殿”传输失败,数据包丢失)

-“太和殿”(重传)“好!记下了”(传输成功)

-“那回见啊!”(准备断开连接)“好嘞!”

【通话已结束】(连接断开)


刚才的例子实际上传递了一段信息:我下个月结婚。

HTTP只是信息的载体,刚才说的“汉语”就是HTTP。你也可以用其他协议传递,比如“I'm getting married next month”,只要对方能理解协议,那就是同一个意思。

电话线路相当于一个TCP连接。TCP提供了流量控制、数据重传等机制保证了数据可靠顺序传输。当然这个例子中,可靠传输是靠人来保证的。

HTTP和TCP的联系,是HTTP(要结婚的消息)使用TCP(电话)提供的“传输能力”。除此之外,没了。


很多答案都提到了,网络协议是一个栈,提供对等通信。这里解释下对等。

老王和老绿只与电话发生交互,他们不理解声音如何转换成电信号,也不理解电磁波如何传播。他们只知道,我对着电话说汉语,对方就能听到汉语。老王和老绿就是一个对等的协议层。两部电话也是对等的协议层,它们给上面的老王和老绿提供传输语音的服务。而电话提供的服务,底层又依赖电磁波传递无线信号。最后形成了一个个服务层,完成了打电话这个事情。再举个栗子,两个老板要约时间谈生意,他们会跟自己的秘书下达指令,让秘书搞定约会这个事。双方的秘书会互相联系,约好时间地点和司机,最后搞定这个问题。老板们不会跟对方的秘书联系(除非是小老板对马老板,那他们实际上就是不对等的),因为他们不是一个层的。

把上文层次的概念,放到计算机网络中,就是协议栈。协议栈的每一层,都专注于自己层的事情:HTTP专注于要传输的信息(HTTP是信息的载体,所以在协议里面会标注信息长度,信息类型等),TCP专注于传输的可靠(为了可靠传输,TCP会给自己层的包标注大小和顺序,并且有确认机制),IP负责因特网传输(IP也有自己的格式,自己查吧),再下面的层负责与局域网和硬件打交道。

简单来说,网络协议栈里面,每层都解决了计算机通信流程的某一环节的问题。它们使用下层提供的能力跟对方机器的相应协议层通信,给上层提供自己的服务。

最后,TCP的下层是IP。“我下个月结婚”这几个字,你也可以通过短信(UDP)或微信(其他传输协议)来发送。虽然传输层协议不一样(电话 vs 短信),底层还是依赖IP协议(发短信仍然需要知道对方的电话号码)。