Skip to content

Latest commit

 

History

History
47 lines (29 loc) · 2.38 KB

protocols.md

File metadata and controls

47 lines (29 loc) · 2.38 KB

Remoting protocols

The Remoting library provides APIs which allow custom communication protocols to be implemented.

This section describes only the protocols available within the remoting library.

Active protocols

This section lists all actively maintained protocols offered in Remoting. There may be other actively maintained protocols in other Jenkins and 3rd-party components.

JNLP4-connect

This protocol uses the SSLEngine provided by the Java Cryptography Architecture to perform a TLS upgrade of the plaintext connection before any connection secrets are exchanged. The subsequent connection is then secured using TLS.

The encryption algorithms and cyphers used by the SSLEngine when using Oracle JDK 1.8 are described in Java Cryptography Architecture Standard Algorithm Name Documentation for JDK 8) If stronger algorithms are needed (for example, AES with 256-bit keys), the JCE Unlimited Strength Jurisdiction Policy Files can be obtained on Oracle website and installed in the JDK/JRE.

Protocol uses non-blocking I/O wherever possible which removes the performance bottleneck of the JNLP3-connect protocol.

The protocol stack starts with the network layer, proceeds to an arbitrary number of filter layers, and ends with the application layer. It is represented as a doubly-linked list:

Protocol Stack

WebSocket

  • Introduced in: Remoting version 4.0, JEP-222
  • At initial release, this protocol is considered a beta release and has not yet undergone extensive testing.

Uses WebSocket over an HTTP(S) port to handle handshakes, encryption, framing, etc.

Plugin protocols

Remoting Kafka Plugin

  • Remoting Kafka Plugin uses Kafka as fault-tolerant communication layer to support command invocation between Jenkins controller and agent.
  • The plugin gets rid of current direct TCP connection between controller and agent.
  • More info can be found in the technical documentation of the plugin.