Ok let's start, I've a bit of confusion in my head.
SEND: it is blocking. The sender will waits until the receiver has posted the corresponding RECV.
SSEND: it is blocking and the sender will NOT ONLY waits until the receiver has posted the corresponding RECV, but it will wait for the ack of the RECV. It means the RECV run fine.
BSEND: it is non blocking. The process can go ahead to execute its part of code. The data is stored in a buffer properly allocated before.
ISEND: it is non blocking. The process can go ahead to execute its part of code. The data is NOT stored in a buffer: you must not overwrite the data you're sending until you're sure the ISEND has run fine (WAIT/ TEST).
So.. do ISEND and BSEND only differs for the buffer?