Java Networking: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 82: Line 82:
==Wildcard Address==
==Wildcard Address==


An address chosen by the kernel.
An address chosen by the kernel. Java network API indicates that a wildcard address is desired by specifying "0.0.0.0".


==DatagramSocket==
==DatagramSocket==

Revision as of 17:12, 16 March 2017

Internal

Concepts

InetAddress

https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html

This class represents an Internet Protocol (IP) address. Its subclasses represent either 32 bit IPv4 addresses (Inet4Address) or an 128 bit IPv6 addresses (Inet6Address). The instances incapsulate the numeric address (4 bytes or 16 bytes) and possibly a host name, but not netmask information. The class has accessors that characterize the IP address (isMulticastAddress() etc.).

Inet4Address

https://docs.oracle.com/javase/8/docs/api/java/net/Inet4Address.html

Inet6Address

https://docs.oracle.com/javase/8/docs/api/java/net/Inet6Address.html

SocketAddress

https://docs.oracle.com/javase/8/docs/api/java/net/SocketAddress.html

Is an immutable representation of a socket address. It does not have any association with any protocol. The values are used by sockets for binding, connecting or as returned values.

InetSocketAddress

https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html

Represents an IP socket address (IP address + port or hostname + port).

NetworkInterface

https://docs.oracle.com/javase/8/docs/api/java/net/NetworkInterface.html

The JVM representation of a network interface available on the host. It is identified by a name, the same name returned by ifconfig -a or ip addr, if the host runs a Unix system. The NetworkInterface instance can be used to get the list of addresses associated with the interface and other characteristics of the interface.

Comparison between the information visible from JVM and directly from the system with ip addr:

1. lo <LOOPBACK, UP> mtu 65536
        hardware address:    N/A
        interface addresses: 0:0:0:0:0:0:0:1%lo/128, 127.0.0.1/8
2. eth0 <UP, MULTICAST> mtu 1500
        hardware address:    08:00:27:2c:e2:de
        interface addresses: fe80:0:0:0:a00:27ff:fe2c:e2de%eth0/64, 10.0.2.15/24
3. eth1 <UP, MULTICAST> mtu 1500
        hardware address:    08:00:27:95:52:f2
        interface addresses: fe80:0:0:0:a00:27ff:fe95:52f2%eth1/64, 172.20.1.11/16
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:2c:e2:de brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 84095sec preferred_lft 84095sec
    inet6 fe80::a00:27ff:fe2c:e2de/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:95:52:f2 brd ff:ff:ff:ff:ff:ff
    inet 172.20.1.11/16 brd 172.20.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe95:52f2/64 scope link
       valid_lft forever preferred_lft forever

NetworkInterface code in GitHub:

https://github.com/NovaOrdis/playground/blob/master/java/network/NetworkInterface/src/main/java/io/novaordis/playground/java/network/ni/Main.java

InterfaceAddress

https://docs.oracle.com/javase/8/docs/api/java/net/InterfaceAddress.html

Represents a NetworkInterface address. For an IPv4 address, It consists of an IP address, a subnet mask and a broadcast address. For an IPv6 address, it consists in an IP address and a network prefix length.

Wildcard Address

An address chosen by the kernel. Java network API indicates that a wildcard address is desired by specifying "0.0.0.0".

DatagramSocket

https://docs.oracle.com/javase/8/docs/api/java/net/DatagramSocket.html

Binding a DatagramSocket

getLocal...

Connecting a DatagramSocket

MulticastSocket

https://docs.oracle.com/javase/8/docs/api/java/net/MulticastSocket.html

A MulticastSocket is a DatagramSocket, the class inherits from DatagramSocket.