bash can do TCP and UDP sockets. They are represented as a special file in /dev, like

/dev/tcp/192.168.0.1/1234
/dev/udp/192.168.0.2/2345

even though those /dev files do not exist. However, bash only do active connection but not listen. That is, we can use this to replace telnet. This is an example:

On machine A, run netcat (say) and listen to a port:

machine_a$ nc -l -p 1234

On machine B, for convenience, build the socket as a file handle, then cat the file to stdout and at the same time, cat the stdin to the file:

machine_b$ exec 9<>/dev/tcp/machine_a/1234
machine_b$ cat <&9 &
[1] 6543
machine_b$ cat >&9

Then machine_a and machine_b are connected.