- Jenkins listens on a TCP/IP port configured under "TCP port for JNLP agents" in the system configuration page. This single port is used for both agents and CLI.
- Jenkins advertises this port number as a special HTTP header (if disabled, this header will not be present).)
- CLI client will make an HTTP request to the top page of Jenkins, looking for this header.
- If the header is found and the TCP/IP port is identified, the client will attempt to connect to this URL.
- If that fails (for example, if there's a reverse proxy and Jenkins runs on a different host, or if a firewall blocks access to this TCP/IP port), or if the header is not found, it will fall back to the communication mechanism that uses two simultaenous HTTP connections.