Memory is divided in blocks. Fragmentation is the phenomena where a block or hole of memory is wasted that can not be used.
When a program is allocated to a memory block, if that program is lesser than this memory block and remaining space goes wasted, this situation is called internal fragmentation. Generally, internal fragmentation memory partition is static or fixed.
When total memory is enough available to a process but can not be allocated because of memory blocks are very small. That means program size is more than any available memory hole. Generally, external fragmentation occurs in dynamic or variable size partitions. External fragmentation can be solved using compaction technique. Also external fragmentation can be prevented by paging or segmentation mechanisms.