2017年12月5日 星期二

[Network] TCP建立連線與關閉連線機制(connection establishment / termination)

TCP protocol屬於傳輸層(Transport Layer),提供可靠傳輸與流量控制,
host與host溝通需先建立連線,過程共需3次封包傳遞:

用2個封包,可能會發生:
第1次送出的封包delay,client等不到回應,只好再送出SYN封包,
server先收到第2個SYN封包,且完成工作並關閉連線了。
後來第1個SYN封包送到server了,server就會建立多餘的連線...
因此,使用3次封包來回較可靠,俗稱3向交握(3-way handshaking)機制。

交握流程如下圖:



圖中的SYN與ACK,代表該封包的旗標(flag),
在TCP封包的header中,用一6 bits的segment來表示:
[SYN]:000010。
[ACK]:010000。
[SYN,ACK]:010010。

其他segment:
seq:封包序號,由host自己維護,建立連線時+1。
len:封包的資料長度,不包含header。
ack:封包的確認號,建立連線時,為host接收到的序號+1。

對照使用Wireshark截取的封包。

Win:接收視窗,為該host陳述自己的可接受資料的快取byte。
MSS(Maximun Segment Size):表封包一次最大裝載資料byte。
同樣Win下,MSS愈大,傳遞的封包愈少。


下圖是關閉連線的機制。




參考資料:
http://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml

沒有留言:

張貼留言