日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapy ip地址 tcp time out_TCP的运作流程(一)——“三次握手”

發(fā)布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scrapy ip地址 tcp time out_TCP的运作流程(一)——“三次握手” 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

?看過前面有關(guān)兩篇HTTP的文章的同學,想必對HTTP已經(jīng)有了一定的了解。在HTTP初始(一)中提到過TCP/IP四層網(wǎng)絡模型,這次我們就來詳細了解一下TCP傳輸。因為時間和篇幅所限,本篇講分為兩章,本章講TCP的三次握手,下章講TCP的四次揮手,以及一些常見問題。

TCP的狀態(tài)轉(zhuǎn)化

先知全貌再看細節(jié)是很不錯的學習方法,以后我的寫作風格也盡量向這方面靠攏。所以在具體講解TCP的三次握手和四次揮手前,我們先來整體看下TCP是如何運作的。??????

???????????????????????????????? ?(該圖片來源自網(wǎng)絡)我們先來具體了解下各個狀態(tài)的具體含義和關(guān)系,前5步是TCP三次握手,后六步是TCP四次揮手:

  • CLOSED:起始點,在超時或者連接關(guān)閉時進入此狀態(tài);Client和Server的初始態(tài)都應是CLOSED。

  • LISTEN:Server端在等待連接時的狀態(tài),Server端為此要調(diào)用Socket、bind、listen函數(shù),就能進入此狀態(tài)。這稱為應用程序被動打開(等待客戶端來連接)。

  • SYN-SENT:客戶端發(fā)起連接,發(fā)送SYN給服務器端。如果服務器端不能連接則進入CLOSED狀態(tài)。

  • SYN-RCVD:與3對應,服務器端接受客戶端的SYN請求,服務器端由LISTEN狀態(tài)進入SYN-RCVD狀態(tài)。同時服務器端要回應一個ACK,發(fā)送一個SYN給客戶端;另一種情況是,客戶端在發(fā)起SYN的同時接收到服務器端的SYN請求,客戶端會由SYN-SEBT轉(zhuǎn)換到SYN-RCVD狀態(tài)。

  • ESTABLISHED:服務器端和客戶端在完成3次握手后進入狀態(tài),說明已經(jīng)可以開始傳輸數(shù)據(jù)了。

  • FIN-WAIT-1:主動關(guān)閉的一方,由狀態(tài)5進入此狀態(tài)。具體動作是發(fā)送FIN給對方。

  • FIN-WAIT-2:主動關(guān)閉的一方,接收到對方的FIN ACK,進入此狀態(tài)。由此不能再接收對方的數(shù)據(jù),但是能夠向?qū)Ψ桨l(fā)送數(shù)據(jù)。

  • CLOSE-WAIT:接收到FIN以后,被動關(guān)閉的一方進入此狀態(tài)。具體動作是再接收到FIN的同時發(fā)送ACK。

  • LAST-ACK:被動關(guān)閉的一方,發(fā)起關(guān)閉請求,由狀態(tài)8進入此狀態(tài)。具體動作是發(fā)送FIN給對方,同時再接收到AKC時進入CLOSED狀態(tài)。

  • CLOSING:兩邊同時發(fā)起關(guān)閉請求時,會由FIN-WAIT-1進入此狀態(tài)。具體動作是接收到FIN請求,同時響應一個ACK。

  • TIME-WAIT:這個狀態(tài)比較復雜,也是我們最常見的一個連接狀態(tài),有3個狀態(tài)可以轉(zhuǎn)化為此狀態(tài)。

    • 由FIN-WAIT-2轉(zhuǎn)換到TIME-WAIT,具體情況是:在雙方不同時發(fā)起FIN的情況下,主動關(guān)閉的一方在完成自身發(fā)起的關(guān)閉請求后,接收到被動關(guān)閉一方的FIN后進入的狀態(tài)。
    • 由CLOSING轉(zhuǎn)換到TIME-WAIT,具體情況是:在雙方同時發(fā)起關(guān)閉,都做了發(fā)起FIN的請求,同時接收到了FIN并做了ACK的情況下,這時就由CLOSING狀態(tài)進入TIME-WAIT狀態(tài)。
    • 由FIN-WAIT-1轉(zhuǎn)換到TIME-WAIT,具體情況是:同時接收到FIN(對方發(fā)起)和ACK(本身發(fā)起的FIN回應),它與CLOSING轉(zhuǎn)換到TIME-WAIT的區(qū)別在于本身發(fā)起的FIN回應的ACK先于對方的FIN請求到達,而由CLOSING轉(zhuǎn)換到TIME-WAIT則是FIN先到達。

    TCP報文

    TCP報文是TCP傳輸?shù)臄?shù)據(jù)單元,也叫做報文段、數(shù)據(jù)包。

  • 端口號:用來標識同一臺計算機的不同的應用進程。
  • 源端口(16位):與源主機IP地址一起標識源主機的一個應用進程。
  • 目的端口(16位):和源主機IP地址一起標識目的主機的一個應用進程。IP報文中的源主機IP地址、目的主機的IP地址和源端口、目的端口確定了唯一一條TCP連接。
  • 序列號seq(32位):標識從TCP源端向TCP目的端發(fā)送的數(shù)據(jù)字節(jié)流,表示這個報文段中的第1個字節(jié)的數(shù)據(jù)編號。在TCP傳送的流中,每一個字節(jié)一個序號。比如:一個報文段的序號為300,此報文段數(shù)據(jù)部分共有100字節(jié),則下一個報文段的序號為400。
  • 確認號ack(32位):存儲發(fā)送確認的一端所期望收到的下一個序列號seq。確認號ack是上次已成功收到的數(shù)據(jù)字節(jié)的序列號seq+1。只有ACK標志為1時確認號字段才有效。TCP為應用層提供全雙工服務,這就意味著數(shù)據(jù)能在兩個方向上單獨進行傳輸。因此,連接的兩端都必須保持每個方向上的傳輸數(shù)據(jù)的序列號。
  • 同步序號SYN:在連接建立時同步序列號。SYN=1、ACK=0表示:這是一個連接請求報文段。若同意連接,則在響應報文段中,SYN=1,ACK=1。而且,SYN這個標志位只在”三次握手階段“,也就是TCP建立連接階段才會為1,完成后被置0.
  • 確認號標志ACK:當ACK=1時,確認號字段才有效。
  • 終止標志FIN:用于釋放連接,FIN=1表示:數(shù)據(jù)發(fā)送方的數(shù)據(jù)已發(fā)送完畢,并關(guān)閉本方數(shù)據(jù)流。
  • TCP三次握手

    其實三次握手就是用來建立TCP連接的,TCP數(shù)據(jù)在傳輸之前需要進行3次通信,一般被稱為“三次握手”。這種建立連接的方式可以防止產(chǎn)生錯誤的連接,TCP使用的流量控制協(xié)議時可變大小的滑動窗口協(xié)議。

    • 第一次握手:客戶端發(fā)送SYN(seq=x)報文到服務器端,并進入SYN_SENT狀態(tài)。
    • 第二次握手:服務器端收到來自客戶端的SYN報文,向客戶端回應一個SYN(seq=y)和ACK(ack=x+1)報文,并進入SYN_RCVD狀態(tài)。
    • 第三次握手:客戶端收到來自服務器端的SYN+ACK報文,向服務器端回應一個確認報文ACK(ack=y+1),發(fā)送完畢后,客戶端和服務器端都進入ESTABLISHED狀態(tài)。

    在三次握手完成后,TCP客戶端和服務器端成功建立連接,就可以傳輸數(shù)據(jù)了。

    如此教科書般的回答,我也不是很滿意,下面我們來從西瓜籽和大西瓜的對話中的了解下,什么是TCP三次握手:第一次:
    西瓜籽:我是西瓜籽,大西瓜你真帥!
    說明:西瓜籽會夸人。第二次:
    大西瓜:我收到了你的夸贊,我是大西瓜,其實西瓜籽你也挺不錯的!
    說明:大西瓜可以接受別人的夸贊,也會夸人。第三次:
    西瓜籽:我也收到了你的夸贊,我現(xiàn)在越看你越帥!
    說明:西瓜籽也能接受別人的夸贊。

    這倆人簡直志同道合,然后就開始了雙方的互夸Time.......(數(shù)據(jù)傳輸)

    總結(jié),我認為TCP三次握手有兩個目的:一:是為了確保連接的兩端都做好了發(fā)送和接收數(shù)據(jù)的準備工作二:每方都具有雙方傳輸數(shù)據(jù)的序列號

    總結(jié)

    以上是生活随笔為你收集整理的scrapy ip地址 tcp time out_TCP的运作流程(一)——“三次握手”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。