今天,小明帶你認識TCP協議的三次握手與四次揮手

「本文已參與好文召集令活動,點擊查看:後端、大前端雙賽道投稿,2萬元獎池等你挑戰!前端

前言

TCP在現現在面試中已然是常客,常聽面試官問你:知道TCP嗎?知道TCP鏈接爲何要三次握手嗎?那四次揮手呢?雖然答案咱們都有大體的瞭解過,也默默的在一次次面試中,知道了要怎麼回答這個問題,但是咱們真的瞭解TCP嗎?今天就讓咱們從從新認識TCP的三次握手與多一次揮手(四次揮手),相信在文章結束的時候,你下次能夠反問面試官,你真的瞭解TCP嗎?(狗頭保命)面試

TCP的前世此生

在MDN上,關於TCP的定義以下:後端

傳輸控制協議(TCP)是主要的網絡協議之一。它使兩臺主機可以創建鏈接並交換數據流。
TCP 能保證數據的交付,維持數據包的發送順序。
TCP 在1970年代被兩位 DARPA 的科學家 Vint Cerf 和 Bob Kahn 所設計出來,他們當時被稱爲互聯網之父。
複製代碼

從上面的定義上咱們發現幾點:markdown

  • TCP是做爲網絡協議的一種
  • TCP鏈接兩臺主機並交換數據
  • TCP傳輸的數據有必定的順序

TCP---傳輸控制協議

TCP全稱是Transport Control Protocol,是一種主機到主機的鏈接導向協議。什麼是主機到主機呢?也就是咱們的兩個設備之間,包括但不限於PC,手機,平板電腦等。並且TCP是一種支持全雙工的協議,什麼是雙工呢?就比如咱們的一條路有來回兩條道,而相對應的,單工就比如是咱們的單向道,只能從這端到那端,因此,在雙工的支持下,咱們的兩個主機之間就能相互發送消息了。網絡

那麼說了這麼多,如今咱們知道了TCP其實是一種鏈接,可以爲應用之間的通訊提供橋樑,那麼咱們爲何會使用TCP呢?使用TCP又有什麼好處呢?實際上,TCP的傳輸有很強的可靠性,爲何這麼說呢?由於這就是咱們須要掌握的三次握手和四次揮手的保證,也就是無損傳輸,每次發送的包都有序號,收到後須要給一個反饋,若是超過必定的時間沒收到反饋,就會重發,直到收到反饋爲止。併發

TCP---三次握手

終於到了三次握手的環節了,若是沒有聽過的同窗確定會很懵逼,啊,三次握手,握手麼握個一次就行了,幹嗎握三次?這麼友好,這麼客氣嗎?沒錯TCP就是一種咱們上面說道的可靠的協議,由於每次發送數據前,咱們首先須要創建鏈接,而鏈接的創建又有TCP自身須要攜帶的參數,好比創建鏈接的時候,一方應用發起鏈接須要帶上SYN;而接收方若是要表示收到信息了,回饋的時候要帶上ACK;若是須要向另外一方推送數據的話,又被稱爲PSH;若是一方須要斷開鏈接,那麼就要發送FIN,咱們來看一下下圖,可能就會好理解了:app

TCP3.jpeg 從上圖咱們就能夠看到咱們剛纔提到的SYN,ACK等,那麼它究竟是什麼做用呢?ide

兩個應用之間須要創建鏈接,首先A會發送一個消息給B,攜帶一個SYN以及seq=x,而後B收到後回覆表示收到了,並攜帶一個seq以及ack,這裏的ack做爲回覆上一次發送過來的消息,會在x的基礎上加1,表示回覆的是這條消息,並將此次回覆過去的消息也會帶一個seq=y,A收到消息後,再回復一個好的,seq和ack和上述表示的同樣,至此,A與B之間就完成了三次揮手創建了鏈接,雙方都能發送和接受消息了。post

不理解?不要緊,看了下面小明與女神的故事你就明白了。ui

備胎 2.jpg

小明先向女神發起了邀請,可是女神沒有回覆他,他過了一段時間發現沒收到消息,他就從新發送了一遍給女神,女神此次收到了,並委婉拒絕了他,小明表示知道了,至此,小明和小紅就聊上天了,做爲女神的忠實粉絲,一定不會放過和女神聊天的機會!

TCP---四次揮手

說完了三次握手,咱們再來聊聊四次揮手,揮揮手不帶走一片雲彩~,對不起,不自覺就接上了。說回正題,TCP斷開鏈接爲何要四次,整個過程實際上是和三次差很少,首先是A向B表示,我要斷開鏈接了,B表示我知道了,而後B再發送我要斷開鏈接了,這是最後一條消息,A最後發送回一條,已經確認是最後一條消息,斷開鏈接,咱們看一下下圖:

TCP.jpeg 如圖所示,咱們發現A發送了一個FIN結束信息給了B,seq=u,B在處理完本身手頭上的請求以後回覆A表示你剛剛的結束消息我收到了,我手頭上的事情已經處理完了,對應的seq爲u+1,而後B也發送一個FIN標誌給A,表示我要斷開鏈接了,seq=w,最後A表示已經收到你的結束標誌seq爲u+1,而後B斷開鏈接,A等待一段時間沒有收到B的消息後,斷開鏈接,至此A與B的通訊就結束了。

是否是不明白,不要緊,小紅和小明的故事也要收尾了。

女神 3.jpg

小紅找到了本身的富家公子,天然要甩掉小明,就跟小明說了再見,併發了好人卡,小明難受的表示我接受了,而後最後一句祝福了小紅,小紅一邊表示你也是,一邊想着終於甩掉了一個備胎,哎,我這該死的魅力!

總結

至此,小明和小紅的故事就結束了,對了,這裏要特別強調一下,圖中小明與女神的故事,僅僅只是用來解釋三次與四次之間主機與主機的關係,這已經屬於應用層的會話了,而不是傳輸層的鏈接,你們不要搞混哦。咱們的TCP的認識也結束了,相信經歷了上述圖文的描述,你必定對TCP有了深入的印象,若是記不清了,想象小明的經歷,相信會提示到你,下次面試的時候,若是面試官問起了TCP,咱們就給他講述一個小明的故事,動之以情,曉之以理,相信面試官會被你打動,成功拿下offer!

相關文章
相關標籤/搜索