TCP連接
TCP基礎知識
TCP標志位
? ? SYN? 建立連接?
? ? ACK? 表示響應?
? ? FIN? 關閉連接
TCP連接傳輸數(shù)據(jù)
? ? seq 是隨機生成的一個數(shù)型宙。另一端收到后會返回ack(seq+1)數(shù)據(jù)讓發(fā)出端進行驗證
? ? ack ack就是收到的上一次另一端發(fā)送的seq+1的數(shù)據(jù)
TCP,可靠的數(shù)據(jù)傳輸協(xié)議撬呢。
一個TCP生命周期主要經(jīng)歷三個步驟
? ? 1建立連接
? ? ? ? 三次握手
? ? ? ? ? ? 1,client->server. SYN=1,seq=x
? ? ? ? ? ? 2,server->client. SYN=1,ACK=1,seq=y,ack=x+1
? ? ? ? ? ? 3,client->server. ACK=1,seq=x+1,ack=y+1
? ? 2傳輸數(shù)據(jù)
? ? ? ? 數(shù)據(jù)通信
? ? 3關閉連接
? ? ? ? 四次揮手
? ? ? ? ? ? 1,client->server. FIN=1,seq=x
? ? ? ? ? ? 2,server->client. ACK=1,ack=x+1,seq=y
? ? ? ? ? ? 3,server->client. FIN=1,ACK=1,seq=z,ack=x+1
? ? ? ? ? ? 4,client->server. ACK=1,seq=x+1,ack=z+1
第一次
第一次握手:建立連接時,客戶端發(fā)送syn包(seq=j)到服務器妆兑,并進入SYN_SENT狀態(tài)魂拦,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)搁嗓。 [3]
第二次
第二次握手:服務器收到syn包芯勘,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(seq=k)腺逛,即SYN+ACK包荷愕,此時服務器進入SYN_RECV狀態(tài)。 [3]
第三次
第三次握手:客戶端收到服務器的SYN+ACK包棍矛,向服務器發(fā)送確認包ACK(ack=k+1)安疗,此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態(tài)够委,完成三次握手荐类。 [3]
syn 表示建立鏈接
ack 表示響應
seq 是隨機生成的一個數(shù)。另一端收到后會返回ack(seq+1)數(shù)據(jù)讓發(fā)出端進行驗證
ack ack就是收到的上一次另一端發(fā)送的seq+1的數(shù)據(jù)
SYN-SENT -在發(fā)送連接請求后等待匹配的連接請求茁帽;
SYN-RECEIVED - 在收到和發(fā)送一個連接請求后等待對連接請求的確認玉罐;
ESTABLISHED- 代表一個打開的連接屈嗤,數(shù)據(jù)可以傳送給用戶;
第一次握手:Client將標志位SYN置為1吊输,隨機產(chǎn)生一個值seq=J饶号,并將該數(shù)據(jù)包發(fā)送給Server,Client進入SYN_SENT狀態(tài)璧亚,等待Server確認讨韭。
第二次握手:Server收到數(shù)據(jù)包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1癣蟋,ack=J+1,隨機產(chǎn)生一個值seq=K狰闪,并將該數(shù)據(jù)包發(fā)送給Client以確認連接請求疯搅,Server進入SYN_RCVD狀態(tài)。
第三次握手:Client收到確認后埋泵,檢查ack是否為J+1幔欧,ACK是否為1,如果正確則將標志位ACK置為1丽声,ack=K+1礁蔗,并將該數(shù)據(jù)包發(fā)送給Server,Server檢查ack是否為K+1雁社,ACK是否為1浴井,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態(tài)霉撵,完成三次握手磺浙,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了。
https的原理
HTTPS在傳輸?shù)倪^程中會涉及到三個密鑰:
服務器端的公鑰和私鑰徒坡,用來進行非對稱加密
客戶端生成的隨機密鑰撕氧,用來進行對稱加密
一個HTTPS請求實際上包含了兩次HTTP傳輸,可以細分為8步喇完。
1.客戶端向服務器發(fā)起HTTPS請求伦泥,連接到服務器的443端口
2.服務器端有一個密鑰對,即公鑰和私鑰锦溪,是用來進行非對稱加密使用的不脯,服務器端保存著私鑰,不能將其泄露海洼,公鑰可以發(fā)送給任何人跨新。
3.服務器將自己的公鑰發(fā)送給客戶端寸五。
4.客戶端收到服務器端的證書之后束昵,會對證書進行檢查,驗證其合法性,如果發(fā)現(xiàn)發(fā)現(xiàn)證書有問題减牺,那么HTTPS傳輸就無法繼續(xù)。嚴格的說积蔚,這里應該是驗證服務器發(fā)送的數(shù)字證書的合法性可免,關于客戶端如何驗證數(shù)字證書的合法性,下文會進行說明龙优。如果公鑰合格羊异,那么客戶端會生成一個隨機值,這個隨機值就是用于進行對稱加密的密鑰彤断,我們將該密鑰稱之為client key野舶,即客戶端密鑰,這樣在概念上和服務器端的密鑰容易進行區(qū)分宰衙。然后用服務器的公鑰對客戶端密鑰進行非對稱加密平道,這樣客戶端密鑰就變成密文了,至此供炼,HTTPS中的第一次HTTP請求結束一屋。
5.客戶端會發(fā)起HTTPS中的第二個HTTP請求,將加密之后的客戶端密鑰發(fā)送給服務器袋哼。
6.服務器接收到客戶端發(fā)來的密文之后冀墨,會用自己的私鑰對其進行非對稱解密,解密之后的明文就是客戶端密鑰涛贯,然后用客戶端密鑰對數(shù)據(jù)進行對稱加密诽嘉,這樣數(shù)據(jù)就變成了密文。
7.然后服務器將加密后的密文發(fā)送給客戶端疫蔓。
8.客戶端收到服務器發(fā)送來的密文含懊,用客戶端密鑰對其進行對稱解密,得到服務器發(fā)送的數(shù)據(jù)衅胀。這樣HTTPS中的第二個HTTP請求結束岔乔,整個HTTPS傳輸完成。