TCP服務
儘管TCP和UDP都使用相同的網絡層( IP),TCP卻嚮應用層提供與UDP徹底不一樣的服務。
在一個TCP鏈接中,僅有兩方進行彼此通訊。TCP提供一種面向鏈接的、可靠的字節流服務。
面向鏈接意味着兩個使用TCP的應用(一般是一個客戶和一個服務器)在彼此交換數據以前必須先創建一個TCP鏈接。
這個過程相似向別人打電話,先撥號等待,在等待對方接據說「喂」,而後才說明是誰。
TCP包頭
每一個TCP段都包含源端和目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址惟一肯定一個TCP鏈接
順序號用來標識從TCP發端向TCP收端發送的數據字節流,TCP傳送的字節流的每個字節都會按順序標號
確認號用來確認收到發送者發送的順序序號爲x的數據,並告訴發送者下次發送順序序號爲x+1的數據
首部長度給出首部中32 bit字的數目。須要這個值是由於任選字段的長度是可變的。這個字段佔4 bit,所以TCP最多有60字節的首部。然而,沒有任選字段,正常的長度是20字節。
在T C P首部中有6個標誌比特。它們中的多個可同時被設置爲1
U R G 緊急指針
A C K 確認序號有效。
P S H 接收方應該儘快將這個報文段交給應用層。
R S T 重建鏈接。
S Y N 同步序號用來發起一個鏈接
F I N 發端完成發送任務。
鏈接的創建和終止
TCP的三次握手
第一次握手:客戶端發送創建鏈接請求報文,SYN=1,seq=x,客戶端進入SYN_SEND狀態,等待服務器肯定
第二次握手:服務器收到客戶端SYN報文段,對這個SYN報文段進行確認,ack=x+1 ,同時服務端本身還要發送SYN請求信息,SYN=1,ACK=1,seq=y,服務器進入SYN_RECV狀態
第三次握手:客戶端收到服務器的SYN+ACK報文段,ack=y+1,向服務器發送ACK報文段,ACK=1,seq=x+1,這個報文發送完畢後客戶端和服務器都進入ESTABLISHED狀態,完成TCP三次握手服務器
TCP的四次揮手
第一次揮手:主機A向主機B發送一個FIN=1報文段,seq=u,發起斷開鏈接請求,表示沒有數據要發送給主機B了
第二次揮手:主機B收到FIN報文段並向主機B回ACK=1報文段,seq=v,ack=u+1,進入CLOSE_WAIT狀態,主機B告訴主機A,贊成主機A的關閉請求
第三次揮手:主機B向主機A發送FIN=1報文段,ACK=1 ,seq=w,acl=u+1,請求關閉鏈接,同時進入LAST_ACK狀態
第四次揮手:主機A收到主機B發送的FIN報文段,向主機B發送ACK=1報文段,seq=u+1,ack=w+1,而後主機A進入TIME_WAIT狀態,主機B收到主機A的ACK報文段後,就關閉鏈接,此時,主機A等待2MSL(最大的數據生存段時間)後依然沒有收到回覆,則證實主機B以正常關閉,那麼,主機A也能夠關閉鏈接了網絡