The iSCSI protocol enables accessing SCSI I/O devices over an IP network. TCP is used as a transport for SCSI I/O commands. We describe the design considerations and decisions in defining the iSCSI protocol: why we use TCP, how multiple TCP connections can be used to increase performance and reliability, why we require allegiance of a command to a particular TCP connection, the importance of Direct Data Placement, various levels and complexity of error recovery, security and naming issues.