Folks often ask what Jargon actually does, and I usually say it's like a JDBC driver underneath a high-level object library. The JDBC driver part refers to the fact that iRODS has a wire-level protocol that communicates commands and data between client and server (and this same protocol works server-to-server, it's a grid!). Anyhow, inside Jargon, there is an org.irods.jargon.core.packinstr package that models iRODS packing instructions.
This low-level protocol handling is meant to be 'under the covers' so you never need to worry about it. This is especially important because the protocols can change, and we might see future upgrade to use something like protobuf added.
At any rate, when developing Jargon implementations of the iRODS protocol, the actual procedure is to mine the C code, and hack at it until it works, via the creation of lots of unit tests. Fancy...
In this endeavor, it's often helpful to see the actual protocol interactions of various icommands, and here's how you can do this too...
Simple open a shell, and export these variables:
export irodsProt=1; export irodsLogLevel=9;
Now as you execute your icommands, you'll be able to peek at the protocol operations going back and forth. Be glad you don't really have to look at that, maybe you'll like Jargon now!