antony609 寫:1.TCP 三向交握建立連線的過程
TCP 被稱為可靠的連線封包,主要是透過許多機制來達成的,其中最重要的就是三向交握的功能。
封包連接模式當中,在建立連線之前都必須要通過三個確認的動作, 所以這種連線方式也就被稱為三向交握(Three-way handshake)。
那麼我們將整個流程依據上面的 A, B, C, D 四個階段來說明一下:
• A:封包發起
當用戶端想要對伺服器端連線時,就必須要送出一個要求連線的封包,此時用戶端必須隨機取用一個大於 1024 以上的埠口來做為程式溝通的介面。然後在 TCP 的表頭當中,必須要帶有 SYN 的主動連線(SYN=1),並且記下發送出連線封包給伺服器端的序號 (Sequence number = 10001) 。
• B:封包接收與確認封包傳送
當伺服器接到這個封包,並且確定要接收這個封包後,就會開始製作一個同時帶有 SYN=1, ACK=1 的封包, 其中那個 acknowledge 的號碼是要給 client 端確認用的,所以該數字會比(A 步驟)裡面的 Sequence 號碼多一號 (ack = 10001+1 = 10002), 那我們伺服器也必須要確認用戶端確實可以接收我們的封包才行,所以也會發送出一個 Sequence (seq=20001) 給用戶端,並且開始等待用戶端給我們伺服器端的回應喔!
• C:回送確認封包
當用戶端收到來自伺服器端的 ACK 數字後 (10002) 就能夠確認之前那個要求封包被正確的收受了, 接下來如果用戶端也同意與伺服器端建立連線時,就會再次的發送一個確認封包 (ACK=1) 給伺服器,亦即是 acknowledge = 20001+1 = 20002 囉。
• D:取得最後確認
若一切都順利,在伺服器端收到帶有 ACK=1 且 ack=20002 序號的封包後,就能夠建立起這次的連線了。
也就是說,你必須要瞭解『網路是雙向的』這個事實! 所以不論是伺服器端還是用戶端,都必須要透過一次 SYN 與 ACK 來建立連線,所以總共會進行三次的交談!
2. TCP 連線關閉的步驟
(1)A端要結束連線時會發送FIN給B端,B端會傳回ACK代表收到,但這時連線還未結束,B端仍可傳送資料給A端,直到B端傳回FIN給A端時,A端傳回FIN連線才結束。
4. TCP Segment 傳送如何確保正確抵達?
利用acknowledgement number做確認,確認序號為收到的序號+1
5.TCP Segments 未必依序抵達,接收端如何確保可依序將 Segments 還原成一個完整的訊息?
利用Sequence number field 去依序還原
6.TCP Header 裡的 Initial Squence Number 是如何取得的?
隨機產生
7.接收端胃納量及消化能力不足下,如何與連線另一頭發送端有默契地達成流量控制?
利用window size field做控制
8.甚麼是 MSS?
最大封包大小
9.甚麼是 TCP Fragmentation?
當TCP 的封包過大時,會做切割再組合的處理
10.TCP/IP Protocol Stack 裡是那一層負責完成TCP Fragmentation?
Transport層
11.Network Mask 是做啥用的?
網路遮罩又叫子網遮罩、地址遮罩、子網路遮罩(subnet mask),它是一種用來指明一個IP位址的哪些位標識的是主機所在的子網以及哪些位標識的是主機的位遮罩。
第三題和第十二題不太了解,可以請會的回答嗎QQ?
我第三題也不太懂QAQ
是這個嗎?
Demultiplexing(解多工)與Multiplexing(多工)
Demultiplexing:透過Transport Layer 將接收到的資料送給正確的Socket
Multiplexing:從Socket中接收資料,並且與Header一起封裝成Segment後丟給Network Layer。
其中,Header是用來解多工用的)。
Segment中會記載著要傳輸的訊息 以及對方的Port編號,Port用來區別同主機的不同應用程式或Socket