At this point, the terminology may be getting a bit confusing. The confusion results from the use of 2 previously separate technologies (mass storage and networking) by a single subsystem (iSCSI). From a mass storage perspective, transport drivers such as Parallel SCSI, Fibre Channel, and iSCSI transmit SCSI operations. But for networking, the Transport Layer (TCP) is a layer of the network stack, not the mass storage transport driver. A mass storage host refers to an initiator; however, a network host is any connectivity endpoint. Servers are typically host systems, but SCSI servers are iSCSI targets. For these reasons, in any discussion about iSCSI, you must be aware of the context in which terms are used.
In Figure 2, from an application on the initiator side (Host A), mass storage I/Os are performed through a variety of system calls. When these I/Os reach the SCSI Protocol layer, device specific SCSI Command Descriptor Blocks (CDBs) are constructed to perform the requested operation. A host memory buffer descriptor for transmission or receipt of data (if necessary) is constructed. The SCSI info is then passed to the iSCSI Initiator Protocol layer where iSCSI constructs a Protocol Data Unit (PDU) containing the CDB and SCSI data (if data is to be transmitted/written). The PDU is then passed to the TCP/IP layer, where packetization for TCP segments and IP datagrams is performed. Next, the IP datagram is passed to the link layer, where Ethernet frame packetization is performed. Finally, the Ethernet frames are placed on the network.
When the target side (Host B) receives Ethernet frames, it will remove the frame encapsulation and pass the results up to the TCP/IP Protocol Layer. The IP protocol will remove the IP datagram encapsulation, and the TCP Protocol will remove the TCP segment encapsulation, leaving a PDU to be passed up to the iSCSI Target Protocol Layer. The iSCSI Target Protocol Layer will remove the SCSI CDB and data (if present) from the PDU and pass them to the SCSI Target Layer for interpretation. Finally, the requested mass storage operation will be performed at the SCSI Target Layer.
The operations described in the example above have been greatly simplified. The important thing to note is that each layer of the stack, on either the initiator or the target side, is not dependent on any layer above it in the stack. Functionality defined at the lower levels of the stack will continue to work as defined, regardless of the protocol used in the upper layers of the stack. In effect, existing conformant network functionality is not impacted by the addition of iSCSI.
3.Hardware/Software Separation
At any stack layer below the application layer on Host A in Figure 2, the protocol may be implemented in hardware. Hardware is meant to include tangible components as well as the firmware that runs on those components. Similarly, at any stack layer below the actual SCSI logical units on Host B, the protocol implementation may be in hardware. Layers below the first hardware implementation in either stack must also exist in hardware.
Hardware currently available for offloading protocol processing include
Network Interface Cards (NICs) for offloading the Physical and Data Link Layer
TCP Offload Engines (TOE cards) for offloading TCP, IP, and the Physical and Data Link Layers
iSCSI Host Bus Adapters (iSCSI HBAs) for offloading the iSCSI, TCP, IP, and the Physical and Data Link Layers
NICs, TOE cards, and iSCSI HBAs may be used on the initiator or target side of the connection. There is no iSCSI requirement that corresponding layers of the stack on the initiator or target side both be implemented in hardware/firmware or software. An example would be a target that uses a NIC and an initiator that uses an iSCSI HBA.
4