My 2yr old son had leg xray and at the knee there is a large gap between upper and lower leg bones. Why is that?

Young bones. When we are born, our bones are not fully developed. Instead, where many of our bones should be there is cartilage, and there are also gaps in all the bones called physes (growth plates). This allows room to grow. The cartilage and grow plates do not show up on x-ray, until they calcify, a process which is not complete until 18. Young children look like they have fewer bones, and bigger "gaps".
Difficult to say. It is difficult to say but based on the information you provide this is likely the normal space between the femur and tibia that is occupied by the knee cartilage (meniscus). The cartilage cannot be seen on xrays.