본문 바로가기
Develop/Network

[윤성우의 열혈 TCP/IP 소켓 프로그래밍] Chapter09 - 내용 확인 문제 풀이

by Tarra 2023. 6. 29.

 

 

 

 

 [윤성우의 열혈 TCP / IP 소켓 프로그래밍] 책을 기반으로 개인적으로  문제 풀이 및 개념을 정리한 내용입니다.

모든 소스 코드와 강의, 확인 문제의 정확한 답안은 (23년 7월 1일부터 전면 무료화 예정)

http://www.orentec.co.kr/

 

====== 오렌지 미디어 ======

 

www.orentec.co.kr

에서 확인할 수 있습니다.

 

 


 

 

01. 다음 중 Time-wait 상태에  대해서 잘못 설명한 것을 모두 고르면?

 

Time-wait 상태는 TCP 연결 종료 과정에서 발생하는 상태이다.

이 상태는 ACK 세그먼트를 수신한 후 일정 시간 동안 유지되는데, Time-wait 상태에 있는 소켓은 이전 모든 세그먼트를 처리하고 일정 시간 동안 다시 연결을 시작하는 세그먼트를 기다리는 상태이다. 

 

Time-wait 상태의 주요 목적은 이전 연결의 모든 세그먼트가 네트워크에서 완전히 소멸하고, 잠재적인 중복 세그먼트가 도착하지 않도록 하는 것으로써, 이를 통해 연결과 현재 연결 사이의 충돌을 방지하고 TCP 통신의 신뢰성과 안정성을 보장한다.

 

a. Time-wait 상태는 서버 프로그램에서 생성한 소켓에서만 발생한다.

Time-wait 상태는 클라이언트와 서버 모두에서 발생할 수 있다. 

TCP 연결 종료 후에도 송신된 세그먼트들이 일정 시간 동안 네트워크 상에서 유지되기 때문에 발생한다.

서버 측에서만 발생하는 것이 아니며, 클라이언트 소켓에서도 발생할 수 있다.

 

b. 연결종료의 Four-way handshaking 과정에서 먼저 FIN 메시지를 전달한 소켓이 Time-wait 상태가 된다.

 

c. 연결요청 과정에서 전송하는 SYN 메시지의 전송순서에 따라서 Time-wait 상태는 연결종료와 상관없이 일어날 수 있다.

Time-wait 상태는 연결 종료 과정에서 발생하는 상태이다.

SYN 메시지는 연결 요청 과정에서 사용되는 메시지이고, SYN 메시지의 전송 순서는 Time-wait 상태와 관련이 없다.

 

d. Time-wait 상태는 불필요하게 발생하는 것이 대부분이므로, 가급적이면 발생하지 않도록 소켓의 옵션을 변경해야 한다.

Time-wait 상태는 TCP 프로토콜에서 필요한 상태이며, 불필요하게 발생하는 것은 아니다.

TCP 연결 종료 과정의 안정성과 정상적인 흐름을 보장하는 것이므로, 가급적이면 Time-wait 상태에 대해 소켓의 옵션을 변경하지 않는 것이 좋다.

 

정답 a, c, d

 

 

02. 옵션 TCP_NODELAY는 Nagle 알고리즘과 관련이 있다. 이 옵션을 사용해서 Nagle 알고리즘을 해제할 수도 있는데, 그렇다면 어떠한 경우에 한해서 Nagle 알고리즘의 해제를 고민해 볼 수 있는가? 이를 송수신하는 데이터의 특성과 관련해서 설명해보자.

 

Nagle 알고리즘은 TCP에서 지연을 최소화하기 위해 사용되는 알고리즘이다.

이 알고리즘은 작은 패킷을 여러 번 전송하는 것을 방지하여 네트워크 대역폭을 효율적으로 사용하려는 목적으로 동작한다.

Nagle 알고리즘은 작은 패킷을 버퍼링하고, 지연되는 패킷을 충분히 채워서 전송하는 방식으로 동작한다.

 

그러나 Nagle 알고리즘은 일부 상황에서 성능 저하를 유발할 수 있다. 특히, 실시간 통신이나 대화형 애플리케이션에서 작은 크기의 데이터도 빠른 전송이 필요한 경우가 있는데, 이 경우에는 Nagle 알고리즘의 동작으로 인해 작은 데이터 조각이 버퍼링되어 지연이 발생할 수 있으며, 이는 지연감과 응답성 저하를 발생시킬 수 있다.

 

따라서, Nagle 알고리즘의 해제는 작은 크기의 데이터를 신속하게 전송해야 하는 경우에 고려될 수 있다. 

예를 들어, 실시간 스트리밍, 게임, 실시간 채팅 등에서는 작은 크기의 패킷을 빠르게 전송해야 하므로 Nagle 알고리즘의 영향을 최소화하기 위해 TCP_NODELAY 옵션을 사용하여 알고리즘을 해제할 수 있다.

 

하지만 해당 옵션을 사용할 때에는 주의가 필요하다. 작은 패킷을 즉시 전송하게 되므로 패킷의 수가 증가하여 네트워크 대역폭을 과도하게 사용할 수 있다. 

 

더보기

모범 답안

전송하는 데이터의 특성을 따라서 Nagle 알고리즘의 적용 여부에 따른 트래픽의 차이가 크지 않으면서도 Nagle 알고리즘을 적용하는 것보다 데이터의 전송이 빠른 경우가 Nagle 알고리즘의 해제를 고민할 만한 상황이다.

그리고 이러한 상황은 한 세션 내에서 (한 번 연결될 때마다), 전송해야 할 데이터의 양이 많은 경우에 발생한다.

출력버퍼로 전달되는 데이터의 양이 많으면, Nagle 알고리즘의 적용 여부에 상관없이 충분히 버퍼링 되어서 데이터가 전달되기 때문이다.

 

 

 


출처 : [윤성우의 열혈 TCP / IP 소켓 프로그래밍] / 윤성우 저 / 오렌지 미디어

https://cafe.naver.com/cstudyjava

 

윤성우의 프로그래밍 스터디그룹 [C/... : 네이버 카페

윤성우의 스터디 공간입니다. C와 JAVA를 공부하시는 분들은 모두 들어오세요. ^^

cafe.naver.com