TCP/IP 和 HTTP 的區別和聯繫是什麼?

最近在學即時通訊,對HTTP 和IP TCP有點分不清了,網上搜索相關的知識,說HTTP是應用層規定傳輸格式的 又說IP 規定傳輸的基本單元和格式 又說IP 是定址的通道 TCP是建立通道,,有點分不清了。求知乎大神解決


中秋節到了,上海的老王想給北京的好友老張快遞一些節日禮物,有鮮肉月餅、大閘蟹等,老王選擇了機器人快遞公司,聽說送快遞的全是機器人。

老王把禮物打好包並轉交給快遞公司,並叮囑快遞公司,要鮮肉月餅先到,大閘蟹後到,快遞公司說:okay,放心好了。

快遞公司將鮮肉月餅貼上標籤1,大閘蟹標籤2,放在倉庫里,先聯繫到北京的老張再發貨

於是快遞公司派出機器人小哥,給小哥輸入老張、老王的地址信息:

收件人地址
北京海淀區知春路xx號

寄件人地址
上海浦東新區世紀大道200號

機器人用導航軟體智能選取路線,過程不表。

聯繫老張的過程(三次握手):

機器人A到達北京快遞公司,快遞公司看到老張的地址信息,去他家敲敲門,老張你在家嗎?等會有快遞要送過來,務必在家哦(伺服器TCP埠號活),老張說好的好的。

北京的快遞公司派出機器人B回復上海方面,老張在家的,快遞可以運過來了。

上海的快遞公司派出機器人A回復北京,快遞馬上就發出,請稍候。

有同學說,需要那麼麻煩嘛?打個電話不就行了嗎?沒錯,但這只是一個虛擬故事,在這個故事裡沒有電話,只有跑腿的機器人。

以上聯繫老張的過程,機器人A、B都是空載,什麼貨物也沒有運,只是起到消息傳遞的作用,接下來開始運送貨物了。

上海的快遞公司讓機器人C運鮮肉月餅,機器人D運大閘蟹,於是C、D先後上路了。

C的導航軟體讓他走滬陝高速,結果堵成狗了,高速成了停車場。

D的導航軟體讓他走京滬高速,雖然有點堵,但還是後發先至,結果比C先到北京的快遞公司。

北京的快遞公司將D運的禮物放在倉庫里(緩存),耐心地等待C的到來,第二天C終於還是到了。

快遞公司將貨物按標籤1、2按照順序轉交給了老張。

快遞公司稍後還要派出機器人通知上海方面,貨物(標籤1、2)安全到達,請勿挂念。

老張心情大好,來而不往非禮也,於是將北京烤鴨、北京糕點打包好,讓快遞公司轉交給老王,只有一個叮囑,烤鴨先到,糕點後到(按序)

過程與上類似,機器人E運烤鴨,機器人F運糕點。

E走京滬高速,結果在某某大橋出車禍了,被撞到江里了,game over。

F走滬陝高速,堵了三天三夜沒動彈。

北京的快遞公司左等等、右等等,上海方面一點消息也沒有,知道最壞的情況發生了,但快遞公司有自己的預案,三天沒有對方的消息,就默認機器人掛了,需要重新安排機器人重新運貨物。

於是機器人G運烤鴨、H運糕點又重新上路了。

這次非常順利,G、H走的都是京滬高速,按序到達了上海快遞公司,不一會,F也到了,快遞公司很惱火,對F很不客氣滴說:你現在是多餘的人(F與H是重複的貨物,需要丟一個),快滾!

上海的快遞公司於是將烤鴨、糕點按序轉交給老王。

稍後再派出機器人通知北京方面,烤鴨、糕點已經安全到達,請不要再發重複的貨物過來!

在這個虛擬故事裡,老王是http客戶端,老張是http伺服器端,負責將什麼樣的禮物(數據)送給對方,同時負責解釋這些禮物的真正含義。

快遞公司是TCP,負責將客戶的數據按序(客戶的數據按序才有意義)送到客戶指定的目的地,如果有丟失,TCP負責重傳。

機器人是IP,根據快遞公司輸入的客戶目的地,根據導航軟體將貨物送到目的地,如果有丟件,機器人無能為力。


歡迎來參加我本周六(10.21)上午10點的live:
https://www.zhihu.com/lives/897123723914649600

這個live里肯定有你沒有看過的驚喜…


我覺得一個學習協議的人,最基本的七層協議得背一下吧?


【才藝不精,原答案的確有很多不妥,也有些跑題。吸取評論區大神的建議,做以修改和補充。感謝 @面紗如霧 @南宮凜 的糾錯。】

下個月你就要結婚了,打個電話給老王。

你先打開電話本,查找「老王」的電話號碼:老王 -&> 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協議(發簡訊仍然需要知道對方的電話號碼)。


上圖Http的首部就是上圖中的Appl首部,一條Http請求或者響應協議會被分成N個TCP協議報文,每個TCP協議報文,每個TCP報文又被IP報文封裝,每個報文頭部的內容是不同的,比如IP報文頭部由源IP和目的IP信息,TCP報文頭部有源埠號和目的埠號信息等


即時通信是應用層通信。HTTP和TCP/IP木有什麼聯繫。

看到有人洋洋洒洒寫了一大篇,挺仔細的。沒事,先看著吧。

但是,回過頭,再看看教科書的第一章。

或者,好好理解一下:服務、介面、對等實體。特別是那幾條雙向箭頭的虛線


打個比方,你有一些想法,你把他們變成文字寫在信紙上,這是http

你把這個信紙塞進信封,這個信封是tcp

你把這個信封寫上地址交給郵局,這地址是IP

一層套一層


TCP/IP是一個分層的協議,計算機裡面很多東西都是這樣分層來設計的,這樣設計的好處是每一層只需要考慮自己需要處理的數據。

在TCP/IP協議的四層模型里,HTTP屬於應用層,之所以叫應用層是因為這些是我們直接接觸到的具體應用,比如用於網頁瀏覽的HTTP,用於傳輸文件的FTP,或者遠程登錄的Telnet和SSH。

應用層需要交換數據的時候,比如你需要訪問一個網頁,瀏覽器會先生成HTTP的數據包,然後交給傳輸層去建立連接。

TCP是傳輸層,它通過流量控制,重傳等機制來在主機間建立一個可靠的連接。TCP使用不同的埠來標記不同的應用發起的連接。為了避免在網路層產生分片,TCP會通過協商MSS,Path MTU Discovery的方式來對數據包進行分段交給網路層。

IP是網路層,負責處理不同的網路之間發送的數據包,它不需要考慮具體應用或者埠的信息。它的主要工作是分片(fragmentation)和重組(reassembly)數據包(TCP需要通過重傳來保證可靠性,所以不依賴網路層的分片,主要是UDP使用)以及根據IP地址做路由(route)。

最下面的數據鏈路層負責和硬體打交道,這一層主要是arp和rarp協議,根據IP地址決定數據包要發送的mac地址,把數據包發送給直接相連的下一個主機或者路由器。

推薦一本書《TCP/IP協議詳解 第一卷》,作者是Richard Stevens。之前也是懵懵懂懂,看完這本書才理清楚一點,真的是受益匪淺,中文版翻譯的也不錯。如果想寫代碼去實現一些功能的話,還有一本同一個作者寫的《UNIX網路編程》。


ip是大馬路,tcp是客車,http是乘客。一個承載在另一個基礎之上的關係。


我換個角度回答一下。
題主可以試著接觸一下socket編程(基於tcp和udp),用這個玩意就可以從一台電腦上傳輸數據到另外一台電腦,在這裡tcp的作用就是保證數據能夠順利在這兩個端之間傳輸,ip和埠號是用來標識這兩個電腦的。
於是電腦們就可以開心的在互聯網上獲取/發送消息了。
但是,但是!你發的東西別的電腦看不懂怎麼辦?所以就需要有一套標準。所以文件傳輸ftp有ftp的標準,網頁http也有http的標準,你要和他們交流,就依照他們規定的格式來,如果你只是需要私下和人交流,也可以自己在tcp上定義一個協議,只要雙方知道彼此的語言就行了。
題主可以自己用tcp糊一個http伺服器出來,先指定ip和埠開啟一個伺服器,然後等待連接並列印語句,這時候你用瀏覽器訪問一下該ip,就能看到瀏覽器給你發的http消息了,你按著協議解析一下,再給它發同樣格式的回復,把html傳給它。幾百行搞定,受益終生。


這算哪門子問題


他們有聯繫么,層數都不一樣,tcp是http的載體,ip是tcp的載體


謝邀
HTTP是應用層協議
TCP是傳輸層協議
IP是網路層協議


簡單的說法:

  • Ethernet:將數據包從一塊網卡傳輸到相鄰的另一塊網卡
    • 利用 MAC 地址
  • IP:將數據包從來源 IP 網卡傳輸到目的 IP 網卡(中間可能經過若干相鄰的網卡)
    • 利用 IP 地址、子網掩碼、默認網關
  • TCP:在特定埠上建立數據流(維持數據包的順序,如果丟失就重傳等)
    • 利用埠號
  • HTTP:數據流內部的格式(如何傳 URL、Cookies、表單等)
    • 如何傳輸的問題已經由上面幾層解決了,這裡開始只需要關注要傳輸的數據本身了

HTTP是應用層,負責內容解析、內容呈現、用戶交互

TCP是傳輸層,負責可靠傳輸,保證HTTP層能拿到正確格式的包(按序到達,無需擔心丟了、多了、改(必須上TLS輔助))

IP是網路層,負責把包從發送端送到接收端,但是,不保證服務(丟、多、改、按序)

三層之間是服務關係。

HTTP必須運行在TCP上,由TCP幫他可靠傳輸。這樣他可以專心處理收到的信息,無需關心信息在網路上是怎麼走的,無需關心收到的信息是不是有問題,不能解析。

TCP必須依賴在IP上,這樣他無需關心網路的形態,無需管理主機位置、子網。TCP會重整順序,把「包」變成「數據流」。TCP會通過知會的方式,告訴對端哪些收到哪些沒有收到。發端會重傳丟掉的部分。

IP層則是跨網傳輸的基本協議,他負責把不同形態的網路連接起來,把數據按照數據包上攜帶的地址送達。當然,寄送過程中可能會被中間某跳丟了,或者複製了,或者有的慢有的快,IP層不解決,留給TCP解決。

知乎上現在流行用大家看不懂的技術語言解釋技術問題,我只好匿了,不會用流行語言,慚愧啊。


都不是一個層次的東西,ip協議保證能找到是哪台機器,tcp協議保證傳的數據準確無誤,http表示傳遞的數據是什麼格式


先放結論,http一般是由tcp實現的,理論上用udp也可以實現,但是不會這麼做。

http是應用層協議,tcp是傳輸層協議,不是同一層的協議,協議是一層層打包的。
像這樣

[以太[IP[TCP[http[應用數據]]

所以是http借用了tcp協議進行通信。


HTTP是應用層協議
TCP/IP是網路傳輸層協議
本質上HTTP依賴於TCP/IP
好比你用手機(TCP/IP)打電話,手機只管能把信號順利發送到對的地方,至於你說什麼(HTTP)無所謂
具體網路到底是怎麼運作的可以研讀經典計算機網路教材(龍書)


告訴你tcp協議,你程序員知道怎麼把數據發過去嗎?不知道,OK,我寫好把基於TCP傳輸的程序,包裝一下,你只要寫入地址和埠號就行了,其他我解決。這程序就是http。
http就像寄快遞,你只要告訴快遞員地址電話,至於東西通過什麼車,經過什麼路,這你就不用管了。
至於要用什麼車,過什麼路,公司都規章制度都寫好了,這規章制度就是TCP。
所以這兩玩意的關係就這樣。tcp/ip 就是http的基礎,http要輸入地址和埠號,而tcp/ip就是規定地址和埠號要怎麼管理,也就是一個規章制度,告訴底層地址和埠怎麼規定以及要怎麼按流程走。
tcp和udp 都是一個層級的東西,而http和socket是一個層級的,後者是建立在前者的基礎上。


http跟http協議不同層,ftp跟ftp協議不同層,一個是應用完整實現,一個是互通語言(協議),cisco考試以前經常考


協議都是規範,按照這個規範構造的數據就能正確的被os發出去。

ip包著tcp,tcp包著http,http就是規定格式的用戶數據

一層層包起來組成一個原始的數據包,通過socket發出去就完成了一次數據傳輸。

編碼實現發送一個原始數據包大概就能理解這些關係了,

比如可以實現個ping,或者寫個syn flood...


推薦閱讀:

為什麼tcp連接的傳輸速度慢,斷開重新連接後,傳輸速度就變快了呢?
如何用Python寫一個分散式爬蟲?
為什麼網關與主機可以不在同一個網段?
ip地址是否可以取代mac地址,Fibre Channel over IP是否只使用ip地址進行通信?
TCP協議自2000年後有什麼變化?

TAG:互聯網 | 計算機網路 | 計算機科學 | HTTP | TCPIP |