三次握手建立連接配接 第一次握手:主機A發送位碼為syn=1,随機産生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機; 第二次握手:主機B收到請求後要确認聯機資訊,向A發送ack number=(主機A的seq+1),syn=1,ack=1,随機産生seq=7654321的包 第三次握手:主機A收到後檢查ack number是否正确,即第一次發送的seq number+1,以及位碼ack是否為1,若正确,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後确認seq值與ack=1則連接配接建立成功。 四次握手斷開: 由于 TCP 連接配接是全雙工的,是以每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料發送任務後就能發送一個FIN 來終止這個方向的發送通道。收到一個 FIN 隻意味着這一方向上沒有資料流動,一個 TCP 連接配接在收到一個 FIN 後仍能發送資料。首先進行關閉的一方将執行主動關閉,而另一方執行被動關閉。
( 1 )用戶端 A 發送一個 FIN ,用來關閉客戶 A 到伺服器 B 的資料傳送(封包段 4 )。
( 2 )伺服器 B 收到這個 FIN ,它發回一個 ACK ,确認序号為收到的序号加 1 (封包段 5 )。和 SYN 一樣,一個FIN 将占用一個序号。
( 3 )伺服器 B 關閉與用戶端 A 的連接配接,發送一個 FIN 給用戶端 A (封包段 6 )。 ( 4 )用戶端 A 發回 ACK 封包确認,并将确認序号設定為收到序号加 1 (封包段 7 )。 問題1: 為什麼建立連接配接協定是三次握手,而關閉連接配接卻是四次握手呢? 這是因為服務端的 LISTEN 狀态下的 SOCKET 當收 到 SYN 封包的建立連接配接請求後,它可以把 ACK 和 SYN ( ACK 起應答作用,而 SYN 起同步作用)放在一個封包裡來發送。但關閉連接配接時, 當收到對方的 FIN 封包通知時,它僅僅表示對方沒有資料發送給你了;但未必你所有的資料都全部發送給對方了,是以你可以未必會馬上會關閉 SOCKET, 也即你可能還需要發送一些資料給對方之後,再發送 FIN 封包給對方來表示你同意現在可以關閉連接配接了,是以它這裡的 ACK 封包 和 FIN封包多數情況下都是分開發送的。 HTTP 請求響應常見狀态碼 100~199:表示成功接收請求,要求用戶端繼續送出下一次請求才能完成整個處理過程。
200~299:表示成功接收請求并已完成整個處理過程。常用200
300~399:為完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新位址、常用302(意味着你請求我,我讓你去找别人),307和304(我不給你這個資源,自己拿緩存)
400~499:用戶端的請求有錯誤,常用404(意味着你請求的資源在web伺服器中沒有)403(伺服器拒絕通路,權限不夠) 500~599:伺服器端出現錯誤,常用500
轉載于:https://www.cnblogs.com/ljlkfx/p/4825499.html