iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 24
0
Software Development

那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析系列 第 24

Day24 自幹TCP四向揮手(1)

四向揮手顧名思義,就是要和TCP連線說byebye了,為什麼要說byebye呢?client需求結束直接斷開不就好了嗎?如果client直接斷開,不和server說,server會認為client還活著,就會綁著connection不放,這樣就造成server的資源浪費。

這裡再複習一下四向揮手的流程

  1. Client發送ACK和FIN對server說我這裡沒東西了,可以準備byebye了
  2. Server收到FIN,對Client發送ACK回去,說我收到了,等我把最後的訊息傳給你
  3. Server發出最後的訊息,並發了ACK和FIN給Client,通知Client可以關閉連接了
  4. Client對Server發送ACK後關閉連接,Server收到ACK也關閉連接

所以接下來也是透過這三個函數_buildEthHeader()_buildIPHeader()_buildTCPHeader(tcp_len, seq, ack_num, flags, window) 來建立header,建議打開https://gist.github.com/kaichiachen/283f1b57e517f9ed558de6c2d15daf62 配合著看

第一步,Client發送ACK和FIN

packet = eth_header + ip_header + _buildTCPHeader(tcp_len=5, seq=self.seq, ack_num=self.ack_num, flags=17, window=29200)
sock.send(packet)

第二步,中途可能會收到來自server的flag==16,也就是ACK,這代表server還有東西還沒送來,直到收到flag==17,也就是ACK和FIN,代表結束,就回傳ACK

packet = eth_header + ip_header + _buildTCPHeader(tcp_len=5, seq=self.seq, ack_num=self.ack_num, flags=16, window=29200)
sock.send(packet)

接下來明天講如何實驗


上一篇
Day23 題外話 - 如何利用TCP四向交握取得鄰居的Wi-Fi密碼
下一篇
Day25 自幹TCP四向揮手(2)
系列文
那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析30

尚未有邦友留言

立即登入留言