It all begins with the fact that SOAP is XML. And when you send anything other than text, for instance, an image - it has to be converted into a datatype that an XML processor can understand.
Without MTOM, your image will be converted to base64Binary and placed smack in the middle of your SOAP envelope. This conversion process makes the data fat.
<tns:data>A very looooooooooooooooooooooong base64Binary string</tns:data>
Here's a simple illustration:
With MTOM, the image will be transmitted outside the envelope as a MIME attachment - in short, it's sent according to its original datatype: a jpg, png, or gif. Of course it's still transmitted as binary data, but this time, there's no XML-related conversion, avoiding the computational overhead. XOP comes into the picture as it's the one that gives the location of the externalized image.
<soap:Envelope>
<soap:Body>
<tns:data>
<xop:include href="SomeUniqueID-ThatLeadsToTheImage"/>
</tns:data>
</soap:Body>
</soap:Envelope>
Content-id: "SomeUniqueID"
Content-Type: image/png
image binary data here
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…