리눅스 소켓에서 backlog에 대하여...
글쓴이: toy / 작성시간: 수, 2004/03/24 - 12:25오후
UNP에 보면 listen()의 backlog는 아직 연결이 확립되지 않은 큐의 길이+
연결이 확립된 큐의 길이를 말하고 있습니다.
(즉, syn received 상태+ established상태)
그런데, 리눅스 네트웍책을 보면 연결이 확립된 상태의 큐를 말하고 있네요..
어느것이 맞는것입니까...?
실제로 리눅스에서는 어떻게 규현되어있는지도 궁금합니다.
연결이 확립된 상태의 큐와 연결이 확립되지 않은 큐를 따로 관리하는지요.
Forums:
Re: 리눅스 소켓에서 backlog에 대하여...
http://man.kldp.org/wiki/FrontPage?action=GetManPage&sec=2&man=listen
라고 나와 있군요.
http://redage.net
Re: 리눅스 소켓에서 backlog에 대하여...
제가 알기론 listen 의 backlog 만큼은 즉 단순히 telnet 으로 연결했을때
connect 어쩌고 나오는 상태까지를 말합니다. 실제로 accept는 일어나지 않았더라도 TCP 상에서는 어느정도 접속이 이뤄진거죠. 반대로 backlog를 넘어서게 되면 그런 메시지도 볼 수 없습니다. 그럼 고운 하루...
책의 상태표를 보면서 설명을 해야하는데 죄송합니다. ^^ 고운 하루
=========================
CharSyam ^^ --- 고운 하루
=========================
네트워크 프로그래밍을 공부하고 있는 학생입니다.제가 아는대로 설명을
네트워크 프로그래밍을 공부하고 있는 학생입니다.
제가 아는대로 설명을 드린다면,
서버측 소켓이 열려있는 상태에서..
클라이언트가 서버측으로 connect 요청을 한다고 할때,
하나하나의 클라이언트의 접속요청은..
서버측에 커넥션 큐 같은것이 있어서, 그 큐에 하나씩 추가되게 되는것으로
알고있습니다. 이 큐가 없다면, 하나의 클라이언트의 접속요청을 accept() 하는 도중에 새로운 클라이언트의 접속시도가 있다면, 문제가 생기게 됩니다.
그 큐에 얼마만큼의 접속요청을 가지게 할것인가가 backlog 값으로 정해지는것 같습니다. accept를 계속하지 않은상태에서 클라이언트의 접속요청이 계속 들어온다면, backlog 값이 넘는 연결요청은 무시됩니다.
서버가 accept() 하는것은 그 큐에서 하나씩 빼내어 연결을 accept 하는것 으로 알고있습니다.
확실한 답인지는 모르겠지만, 도움이 될까해서 써봅니다;
아래 페이지에 가셔서 다음 제목의 thread들을 읽어보시기 바랍니다.
아래 페이지에 가셔서 다음 제목의 thread들을 읽어보시기 바랍니다.
Weirdness with AF_INET listen() backlog [2.4.18]
http://www.ussg.iu.edu/hypermail/linux/kernel/0207.3/index.html#1690
간단하게 말하자면, syn flooding attack등을 막기 위하여 2.2 이후부터는 listen()의 backlog가 크게 의미없습니다.
man 7 tcp 해서 tcp_max_syn_backlog 에 대해서도 읽어보시면 도움이 될 것입니다. :)
그러면...메모리가 허용하는범위안에서는 syn패킷이 많이 와도 괜찮다
그러면...
메모리가 허용하는범위안에서는 syn패킷이 많이 와도 괜찮다는건지요...
댓글 달기