第四層的目的是為數據傳輸提供可靠性、流量控制、壅塞控制、多路複用等服務,這一層之上的應用也有了port的概念,除了要指定ip address之外,還需要指定port才能到達網路服務的接收端,如果說ip address是電腦的地址的話,那port就是電腦裡應用的地址。
第四層中以UDP和TCP最有名,UDP不提供任何可靠性、流量控制等服務,他只管送,所以他相較TCP更快,但是傳輸過程中可能會掉數據,經常用在視訊或live等要求即時但中途掉數據也沒關係的應用。打個比方來說,TCP就像是匯款,一定要確定對方的帳戶存在才會真的匯錢過去,UDP就像是郵差,亂填一個地址郵差還是會送,只是找不到目的包裹會被退回(丟失封包)
到目前為止,我們解析了長度為14的第二層鏈接層header以及長度為20的第三層ip層header,UDP的header長度為8bytes,分別代表source port, destination port, udp長度以及checksum,各佔2bytes
src_port, dest_port, udp_len, checksum = struct.unpack('!4H', packet[34:42])
測試及驗證可以用這個指令echo "This is my data" > /dev/udp/172.17.0.3/3000 # 172.17.0.3就是目的地ip
UDP比較簡單,所以他的header也沒有蘊含什麼資料,下一個TCP將會非常精彩他的header有許多資料保證了在不可靠的網路下能保證穩定傳輸
系列的成果將會放在這:https://github.com/kaichiachen/pytcpdump
文章配合著程式碼有助於學習 :)