【golang基礎】socks編程相關的知識點

最近嘗試本身用go實現了ss,涉及到socks相關api,這裏總結一下socks編程中須要注意的知識點。編程

  • socks五元組:src_ip源ip src_port源端口 dst_ip目標ip dst_port目標端口 protocol傳輸協議(tcp/udp),這五個中任意一個不一樣就屬於不一樣的socks,不會衝突
  • 從上一條可知,tcp和udp能夠使用同一個端口互不影響,由於protocol不一樣
  • go語言中listen和dial的src_port必須是不一樣的端口,不然會報錯
  • read會阻塞,一直到鏈接端口或者eof(流結束)
  • 字節序有大端和小端,大端是正序,小端是反序,網絡傳輸通常按照大端序
  • 一次read的數據不必定就是一次write的數據,不要臆想數據包的大小,tcp只保證按順序送達,數據的界定須要在應用層本身處理,好比http的content-length
  • dial若是不指定端口則隨機一個1024--65535範圍內端口(想看看這個在go裏是如何實現的,扒了一通發現是填0而後系統級別去實現的)
  • go中tcp接口一方dial一方listen,創建socks讀寫比較好理解;咱們都知道udp是無鏈接的,但go中upd接口,dial和listen返回的是conn,和tcp同樣在conn上讀寫,這麼設計是爲了統一接口,方便使用,雖然和直覺有點不同
相關文章
相關標籤/搜索