1)服務器收到一個SYN包後,計算一個消息摘要mac:
mac = MAC(A,k);
MAC是密碼學中的一個消息認證碼函數,也就是滿足某種安全性質的帶密鑰的hash函數,它能夠提供cookie計算中需要的安全性。
A為客戶和服務器雙方的IP地址和端口號以及參數t的串聯組合:
A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t
K為服務器獨有的密鑰;
時間參數t為32比特長的時間計數器,每64秒加1;
2)生成cookie:
cookie = mac(0:24):表示取mac值的第0到24比特位;
3)設置將要返回的SYN+ACK報文的初始序列號,設置過程如下:
i. 高24位用cookie代替;
ii. 接下來的3比特位用客戶要求的最大報文長度MMS代替;
iii. 最後5比特位為t mod 32。
客戶端收到來自服務器SYN+ACK報文後,返回一個ACK報文,這個ACK報文將帶一個cookie(確認號為服務器發送過來的SYN ACK報文的初始序列號加1,所以不影響高24位),在服務器端重新計算cookie,與確認號的前24位比較,如果相同,則說明未被修改,連接合法,然 後,服務器完成連接的建立過程。