When reading Data Communications and Network (5th edition) by Behrouz A. Forouzan, I have trouble with the explanation for NAT. On page 546, the book describes a modifying-IP-only NAT (a.k.a. basic NAT; not the commonly-used modifying-IP-and-port NAT or NAPT) with a pool of public IP addresses. It says "No private-network host can access two external server program (e.g., HTTP and TELNET) at the same time." But in my understanding, it can. Here's my argument:
Say the private-network host's IP address is 10.1.1.1, one of the NAT's public IP addresses is 22.214.171.124 (one is sufficient; a pool is overkill in this case), and the server's IP address is 126.96.36.199.
When the host visits the server's HTTP service, the outgoing packet from the host is [10.1.1.1:1111 -> 188.8.131.52:80]. After going through the NAT, the packet is changed to [184.108.40.206:1111 -> 220.127.116.11:80], that is, the source IP address is replaced by NAT with its public IP address, while leaving everything else untouched. The NAT also makes a new entry in its translation table, mapping 18.104.22.168 to 10.1.1.1. When the reply packet, which is [22.214.171.124:80 -> 126.96.36.199:1111], arrives, the NAT looks up the source IP address (188.8.131.52) in its translation table and find the just-made mapping entry which says the real destination is 10.1.1.1. The NAT thus translates the reply packet to [184.108.40.206:80 -> 10.1.1.1:1111].
If, at the same time, the host logins TELNET on the server, the outgoing packet is [10.1.1.1:1112 -> 220.127.116.11:23], and is translated to [18.104.22.168:1112 -> 22.214.171.124:23] by the NAT. Note that no new mapping entry is made this time because it would be the same as the previous one. The reply packet is [126.96.36.199:23 -> 188.8.131.52:1112], and is translated to [184.108.40.206:23 -> 10.1.1.1:1112] by the NAT in the same way.
So both the (translated) reply packet will reach the (single) correct host. And since their destination ports are different, they will each be delivered to its initiating program on the host correctly. Done.
Am I missing something? Thank you.
Addendum: Here is Data Communications and Network (4th edition) for your reference.