6.4 connect() 함수 호출을 통한 성능향상 (tcp/udp 차이?장단점?) ːː tcp / ip ːː

6.4 connect() 함수 호출을 통한 성능향상 (tcp/udp 차이?장단점?)

1] udp 소켓에서 connect 함수의 의미

tcp 소켓에서 connect() 함수를 호출하는 경우 두가지 일이 진행되었다.
* 소켓에 호스트의 ip 와 임의의 port를 할당하고
* 그리고 서버에 연결요청을 한다.

udp 소켓에서의 connect() 함수 호출시
* 소켓에 호스트의 ip 와 임의의 port를 할당
이유는?


2] connect() 함수를 통해 얻어지는 이점

udp 소켓생성 후 sendto() 와 recvfrom() 함수 호출하여 데이터를 주고받을 때 어떠한 일들이 발생하는지 tcp 와 비교하여 알아보자.

<tcp 소켓으로 connect() 함수를 호출했을 때.>
: 네트워크를 통해 연결되어 있는 호스트와 데이터 송/수신을 하기 위해서는 소켓을 사용한다.
 tcp 소켓으로 통신하는 호스트가 데이터송신을 위해 write() 함수를 호출하면,
 커널은 연결되어 있는 소켓을 통해 데이터를 전송한다. read() 함수 호출시에도 마찬가지
 중요한 점은 커널은 소켓과의 연결을 유지한다는 것이다. 아래 그림의 연결상태는 connect()함수 호출 시 생성된다.

**클라이언트와의 연결 상태를 의미하고자 하는게 아니라, 데이터를 전송하기 위해서는 커널이 소켓과의 연결을 말하는것.

<udp 소켓으로 sendto() 나 receive() 함수를 호출했을 때.>
: udp 기반 호스트의 경우 sendto(), recvfrom() 함수를 호출하기 전에는 커널이 소켓에 연결되어 있지 않다가,
 함수 호출시에 연결을 설정한다. 그리고 함수 호출이 끝나는 경우에 연결을 종료한다.

별 것 아닌것 같은 이 작업이 udp 패킷을 송/수신하는 데 걸리는 전체 시간의 1/3을 차지한다. 
효율성을 높이기 위해서는 커널과 소켓의 연결상태를 유지해야 할텐데 어떻게 해야할까??

udp 소켓을 생성하여 사용할경우에도 connect() 함수를 호출해서 ip와 port를 소켓에 할당해 놓으면,
커널은 그 소켓과의 연결 상태를 계속 유지하게 된다. 뿐만 아니라, sendto(), recvfrom() 함수가 아닌
read(), write() 함수와 같은 tcp 소켓이 통신하는데 쓰이는 함수를 그대로 사용할 수 있게 된다.




공유하기 버튼

싸이월드 공감트위터페이스북
 

1 2 3 4 5 6 7 8 9 10 다음