這篇文章是寫給什麼人看的?
網路程式設計是現代計算機程式設計中不可缺少的乙個環節,這裡面的程式設計師主要分為兩種型別:一種是專門搞網路程式設計的,估計是一些通訊專業的童鞋,他們的任務是管理整個網路的通訊;第二種是使用網路作為乙個傳輸介質的的,最常見的就是使用socket程式設計的人,他們一般只是使用一些介面函式來完成通訊任務。這兩種人的關係就好比是修路人和走路人的關係,而這一篇文章是面向走路人的,更確切的說,就是幫助你通過網路程式設計面試的。
這篇文章的主要內容是什麼?
正因為tcp三次握手訊號非常重要,也非常基礎,所以是很多企業判斷乙個人是否了解網路程式設計的常用**。就好像一提到c++就必須問的多型及虛函式那一套東西一樣,所以本文就以乙個外行人的視角(事實上本人也確實是個外行),來幫助你理解一下著名的三次握手協議。好了,步入正題。
首先,為什麼要連線?
這是最基本問題之一,人家不一定會問,但為了對tcp有個較深入的理解,還是知道的好,因為也不複雜,就是一句話:因為tcp是面向連線的,只有連線好了才可以進行通訊。
然後,先了解一下什麼叫協議?
協議其實就是通訊雙方的一種規定。在計算機領域,就是大家規定好一些標誌位,它們分別對應著一些特殊的意義。比如說收到對方乙個位元組資訊,這個位元組的第一位表示對方是男是女,後面6位表示對方年齡,還剩一位是校驗位。
tcp中的標誌位有哪些?
理解了上面這一點,那我們就來看看tcp協議都規定了哪些標誌位,當然,這些位很多,我們只講跟連線相關的幾個。而且為了略去無關資訊,把這些位在報文中的位置資訊也省去了,總之它們都是出現在tcp的報文中的。
①序列號seq,就是給報文的乙個編號,因為這個編號不一定從0或者1開始,但肯定是乙個乙個往上加的,但注意收發兩端的序列號是分開計數的
②確認號ack,是期待接收到對方下乙個報文的序列號,如果確認號為n,則說明前n-1個報文正確接收
③確認ack,就是對方確認收到你資訊的標誌位,當ack=1時,確認號才有意義 ④
同步syn,這是專門用來連線時的標誌位,當syn=1,而ack=0時證明這是乙個請求連線訊號 ⑤
終止fin,這是專門用來是放乙個連線的標誌位,當fin=1時,表示要釋放連線了
再強調一下,三次握手協議就是通過設定上面這些標誌位來實現的,而這些標識為都出現在tcp的報文中。
三次握手到底如何進行?
好了,下面開始講三次握手過程,即tcp協議是如何建立乙個連線的。為了方便敘述,我們先看一下示意圖。
建立連線的過程大致如下:
①剛開始時,客戶端和伺服器都處於關閉狀態
②伺服器建立乙個傳輸控制塊tcb,用於記錄連線資訊,此後,伺服器進入監聽狀態,及等待連線狀態
③客戶端有連線需求時,首先也建立乙個傳輸控制塊tcb,然後開始傳送資訊
④第一次握手,客戶端向伺服器傳送乙個同步訊號報文,其中的同步訊號syn=1,還有乙個序列號seq=x
⑤第二次握手,伺服器接收到客戶端發來的連線訊號後,回乙個同步訊號報文,其中的syn=1,確認標誌ack=1,確認序列號ack=x+1,序列號seq=y
⑥第三次握手,客戶端收到伺服器發來的確認訊號後,會回乙個確認訊號,其中ack=1,seq=x+1,ack=y+1
然後連線就建立好啦,雙方想傳啥就傳啥吧...
如果去除序列號和確認號這些附加資訊,三次握手就可以簡化為同步訊號,確認同步訊號,確認訊號三個。
TCP三次握手協議
摘自 syn攻擊原理以及防範技術 tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...
TCP三次握手協議
在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即...
TCP協議三次握手
第一次握手 客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即syn ack包,此時伺服器進入 syn recv 狀態 第三次握手 客戶端 收到伺服器的...