블로그는 나의 힘!
[ Programing ]/Server2013. 9. 11. 14:54


문제

서버가 1개의 TCP 포트에 대해 listen하고 있을 때, 해당 포트로 몇 개의 TCP connection이 생성될 수 있는가.

 

 

결론

TCP/IP 디자인에는 제한이 없지만 다른 요인에 의해 최대 connection 수는 제한된다.

  1. 서버의 Memory 제한.
  2. 프로세스가 열 수 있는 최대 파일 디스크립터.

 

Google 검색을 해보니 "제한이 없다"라고 자신있게 얘기하는 문서는 있어도 "xxx 이상으로는 못만든다"라고 얘기하는 자료는 없는 것 같다.

 

 

상세

connection은 다음 5가지 요인에 의해 식별할 수 있다.

 

protocol (tcp) remote ip remote port local ip local port

 

여기서 protocol, local port는 고정된 값이고, local ip도 대개는 고정된 값이 된다.

만약 1 client가 서버로 붙는다면 해당 client는 port 번호가 1~64K까지 있으므로 64K개의 connection만 붙을 수 있지만,

multi client 상황에서는 remote ip도 같이 변하므로, 이론 상으로는 connection 수에 제한이 없다.

(세상에 존재하는 모든 client가 붙을 수 있다)

 

여기서 흔히 잘못 알고 있는 것이 서버가 listening socket을 accept하면 새로운 port를 할당해서 connection이 맺어지고,

서버측은 새로운 port는 64K 제한에 걸리기 때문에 서버측의 connection수는 제한된다는 것이다.

이러한 오해는 "accept()는 새로운 socket을 생성한다"라는 설명과, "socket은 local ip와 local port만으로 식별된다"는 잘못된 지식에서 나온다고 한다.

 

 

참고자료

stackoverflow.com/questions/2332741/what-is-the-theoretical-maximum-number-of-open-tcp-connections-that-a-modern-lin

 

stackoverflow.com/questions/3497528/is-there-a-way-to-overcome-the-port-limit-on-a-linux-system

 

stackoverflow.com/questions/4391847/what-is-the-practical-hard-limit-on-socket-connections-per-server

 

stackoverflow.com/questions/489036/how-does-the-socket-api-accept-function-work 

- accept()가 새로운 port를 할당하지 않는다는 글.

 

 

 

 

출처 : blog.daum.net/chaeyk09 만년채과장님 글

 

Posted by Mister_Q