簡體   English   中英

在 linux(Ubuntu 18.04)上設置用 java 編寫的 DCHP 服務器時出現問題

[英]Problems setting up DCHP server written in java on linux (Ubuntu 18.04)

我是 linux 和網絡新手,所以我可能在此過程中犯了一些愚蠢的錯誤。

是我正在嘗試設置的“網絡”的當前“拓撲”。

所以,我在 linux 機器和 afaik 上設置 DHCP 服務器,DHCP 的工作方式是這樣的(從服務器的角度來看).. 它接收客戶端廣播的 DHCPDISCOVER,然后它為客戶端提供來自分配的“池”的地址(DHCPOFFER) 也通過廣播,然后客戶端請求地址 (DHCPREQUEST),最后服務器確認 (DHCPACK 或 NACK,如果出現錯誤)。 目前我被困在 DHCPOFFER 步驟,因為當我將 linux 筆記本電腦(服務器)與我的 windows 筆記本電腦(客戶端)連接時,它會收到 DHCPDISCOVER 並在嘗試廣播 DHCPOFFER 時引發異常。

我目前正在為網絡使用此配置,但到目前為止我已經嘗試了多種變體

....DHCPMessage.BROADCAST_ADDR = InetAddress.getByName("255.255.255.255")....
....DHCPMessage.CLIENT_PORT = 68....

try {
        byte[] data = back.msgToByteArr();
        socket.setBroadcast(true);
        
        
        var pack = new DatagramPacket(data, data.length,
                DHCPMessage.BROADCAST_ADDR, DHCPMessage.CLIENT_PORT);
        
        var arr = new byte[]{1};
        var pack1 = new DatagramPacket(arr, arr.length,
                DHCPMessage.BROADCAST_ADDR, DHCPMessage.CLIENT_PORT);
        
        var pack2 = new DatagramPacket(arr, arr.length,
                InetAddress.getByName("192.168.0.255"), DHCPMessage.CLIENT_PORT);
        
        // after next line "java.io.IOException: Network is unreachable" is raised
        // regardless of trying to send pack, pack1 or pack2 (or many other variations I've tried so far)
        socket.send(pack2);

    } catch (IOException e) {
        return;
    }

現在,這些只是我在成功接收 DHCPDISCOVER 后嘗試發送的最后幾個

pack  <<-- the real DHCPOFFER message, 
pack1 <<-- one of other attempts I've made, with just one byte sending  
pack2 <<-- another attempt where I tried to broadcast keeping in mind the mask

可能值得一提的另一件事是,一旦我在服務器筆記本電腦上打開 wifi(現在 eth 和 wifi 都已啟動),DHCPOFFER 就會通過,但現在我從來沒有從客戶端收到 DHCPREQUEST,它卡在 DHCPDISCOVER / DHCPOFFER 循環中幾次。

最后一件事是,當服務器筆記本電腦上的 wifi 開啟時,當我連接手機時,整個通信都通過 DHCPDISCOVER->DHCSPOFFER->DHCPREQUEST->DHCPACK (此時我的手機停止訪問互聯網,但是我猜這是因為分配的私有 IP 對公共領域不利)。 這對我來說是最不重要的事情,因為我想讓以太網連接的網絡工作,而不是 wifi 網絡,但它可能包含一些重要信息。

好吧……盡管我仍然不能 100% 解釋為什么廣播會拋出上述異常,但是! 我設法找到了讓一切正常的方法 事實證明,沒有必要更改代碼

而是linux 本身的網絡設置。

如果像我這樣不幸的靈魂偶然發現類似的東西,我將發布我如何修復它。 此外,肯定有一些知識淵博的人,他們中的一些人可能會花時間解釋正在發生的事情。

我的猜測:(請注意,這只是一個猜測)服務器筆記本電腦沒有辦法在網絡上進行通信,並且正在搜索 IP 本身 - (從另一個 DHCP 讀取)所以當它被自動分配一個地址時,地址對所需的網絡不利,因此問題出在網絡設置(可能傳播到套接字)而不是代碼本身(或接收部分 - 255.255.255.255 BROADCAST)中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM