-
1 # 傳智播客
-
2 # 程式碼飼養員天齊
Java開發需要哪些TCP/IP知識,可能題主是想做一些Java網路程式設計方面的開發。本人做過一些網路程式設計的專案,對網路程式設計有比較深入的瞭解。個人感覺可能需要以下幾方面的知識:
第一、Java網路程式設計的基礎。TCP相關的Socket、ServerSocket,UDP相關的DatagramSocket的使用,這是基礎。透過這些的使用可以對Java網路程式設計有基礎的瞭解。
第二、IP地址、埠號的基礎知識。瞭解什麼是IP地址,什麼是埠號。既然做網路程式設計開發,就需要知道IP地址,知道埠號。服務端都有自己的監聽埠。客戶端連線服務端需要知道服務端的IP地址和埠號。
第三、基本的命令使用。例如IP地址檢視命令,埠對應TCP連線情況檢視命令。ifconfig(Linux)\ipconfig(windows)。埠號檢視netstat等。telnet(windows)檢測埠監聽是否成功。ping檢測對端IP地址是否通。
第四、防火牆的開關和簡單配置。很多情況下會發現明明對端IP地址是可以ping通,但是就是連線不上,這個時候很有可能是防火牆配置問題。這個時候可以關閉防火牆,配置簡單的路由規則,或者清空防火牆的理由規則。
第五、TCP/IP協議的基礎知識。瞭解TCP/IP協議之間的不同層次之間是如何工作的,有助於理解訊息的傳送。瞭解IP協議、TCP協議格式。瞭解TCP協議的三次握手和四次握手。瞭解網路連線的不同狀態CLOSE_WAIT、LISTEN等。
第六、IO只是基礎,NIO使用採用更廣泛。官方認為NIO為新IO,但很多人將其理解為Non-block。大部分網路程式設計會使用netty或者mina框架來代替使用jdk的nio程式設計。
第七、心跳的使用。大部分網路連線透過心跳來檢測連線的狀態,這個也是一個基礎知識。
第八、netty框架的使用。學會使用netty框架。netty框架使用更為廣泛。
第九、拆包和粘包的使用。資料從一臺機器傳送另一臺機器,中間需要使用拆包和粘包來完整的接收和處理業務訊息。
第十、編解碼的使用。可以使用多種編解碼技術。例如protobuf、avro、thrift等等等,也可以自定義。還有以下大小端的概念,還有資料型別之間的轉換,例如int與byte陣列互轉,long與byte陣列的互轉等等。
第十一、抓包工具的使用。透過抓包工具可以分析不同的協議,像HTTP、SSL、TCP等等。
第十二、執行緒池的使用。
第十三、流量控制。像netty自帶流量控制功能。
第十四、網路程式設計讓人頭疼的開啟檔案控制代碼數過多問題的解決。
......
總之,網路程式設計的知識不止這些,網路程式設計時網際網路的基礎,只是我們大部分人做應用開發,或者是框架已經將這些內容進行了封裝,讓我們感覺不到它的存在。
本人正在進行網路程式設計方面知識的整理,後續將以文章的形式進行分享,希望有興趣的同學互相關注,多提問題,共同進步。
本人具有多年的java開發經驗,熟悉多種框架,熟悉網路程式設計,熟悉java安全程式設計,熟悉大資料,熟悉多種安全協議,熟悉併發程式設計,有興趣的同學可以互相關注,互相學習!!!
回覆列表
Java開發需要那些TCP/IP知識:
TCP/IP模型
資料鏈路層
網路層
ping
Traceroute
TCP/UDP
DNS
TCP連線的建立與種植
TCP流量控制
TCP擁塞控制
以上內容就是Java開發當中所需要的TCP/IP的所需知識點。首先是TCP/IP模型,概念的話可以參考書籍和百科。基於TCP/iP的參考模型將協議分成四個層次,它們分別是鏈路層、網路層、傳輸層和應用層。下圖表示TCP/IP的與OSI模型各層的對照關係。
TCP/IP協議族按照層次由上到下,層層包裝。最上面的應用層,也就是我們很熟悉的協議,有http,ftp等。第二層則是傳輸層,著名的TCP和UDP協議就是在這個層次。第三層是網路層,我們所熟悉的IP協議就在這裡。它負責對資料加上IP地址和其他的資料一確定傳輸的目標。第四層就是資料鏈路曾,這個層次為待傳送的資料加入一個乙太網協議頭,並且進行CRC編碼,為最後的資料傳輸做準備。