iSCSI Protocol Data Unit (PDU) – A PDU is the basic “Information Unit” of the iSCSI world. PDUs are used to communicate between iSCSI Initiators and iSCSI Targets. These communications include making iSCSI connections and establishing iSCSI sessions, performing iSCSI Discovery, sending SCSI commands, moving SCSI Data, receiving SCSI Status, and controlling SCSI Task Management functions.
iSCSI Basic Header Segment (BHS)
Almost all iSCSI Protocol Data Units fit within a Basic Header Segment (BHS). The format is shown below, with the Operation Code (OpCode) highlighted. That is the field that tell you what the PDU is all about.
iSCSI Operation Code (OpCode) List
List of operation codes for iSCSI initiators:
Notice that most of these codes are listed as “request”. All codes are shown as hexadecimal (hex) by having the “0x” prefix.
- 0×00 - NOP-Out
- 0×01 - SCSI Command
- 0×02 - SCSI Task Management function request
- 0×03 - Login Request
- 0×04 - Text Request
- 0×05 - SCSI Data-Out
- 0×06 - Logout Request
- 0×10 - SNACK Request
- 0×1C-0×1E - Vendor specific codes
List of operation codes for iSCSI Targets:
- 0×20 - NOP-In
- 0×21 - SCSI Response
- 0×22 - SCSI Task Management function response
- 0×23 - Login Response
- 0×24 - Text Response
- 0×25 - SCSI Data-In
- 0×26 - Logout Response
- 0×31 - Ready To Transfer (R2T)
- 0×32 - Asynchronous Message
- 0×3C-0×3E - Vendor specific codes
- 0×3F - Reject
To find the details of each iSCSI Protocol Data Unit, you will have to “look up” the PDU, either in some reference book, or on this site, as details will be added in the future.
If you have any preferences for which PDUs are covered first, please leave a comment below.