소켓 인터페이스는 TCP/IP 네트워크 스펙에 대한 API(Application Proramming Interface)로, 네트워크 애플리케이션이 쉽게 작성될 수 있도록 해주는 운영체제 차원에서 제공되는 인터페이스입니다. 옛날의 Dos와 같은 운영체제에서는 API의 도움없이도 프로그래머의 노력으로 네트워크 프로그래밍이 가능했을지도 모릅니다. 왜냐하면, Dos는 프로그래머가 코드상에서 직접 인터럽트를 호출하는 것을 허용하고, 프로그래머는 직접 하드웨어에 접근할 수 있었기 때문에 네트워크 카드를 제어하는 것도 가능했을 것이기 때문입니다. (현재 Dos에서는 네트워킹이 불가능하다고 합니다. 앞의 말은 운영체제의 성격을 이야기 하기 위한 것!)
아무튼..소켓이란 운영체제에서 제공되는 APi들 중에서 특별히 네트워킹을 위한 API들에서 사용하는 것으로, 많은 핸들 중의 하나입니다.
소켓은 파일 디스크립터(descriptor)와 유사하다고 볼 수 있는데요.. 파일 입출력을 구현하기 위해서는 파일 객체를 만들고, 그 겍체의 핸들이 해당하는 파일을 가리켜야 합니다. 그다음 그 핸들을 사용해서 파일 IO에 관련된 일을 하고, 작업이 끝나면 그 핸들을 닫습니다.
소켓도 마찬가지로, 네트워크 통신을 하고자 한다면 맨 처음 소켓 객체를 만들고 그 핸들을 얻어야 합니다. 통신이 끝나면 그 핸들을 닫아주면 됩니다.
소켓은 두가지의 대표적인 형태를 갖고 있습니다.
1. 데이터 그램 소켓
: UDP 데이터그램을 사용해 데이터를 전송합니다.
이 데이터 전송방식은 자기 딴에서는 최선을 다해 데이터의 정확성을 보장할려고 하지만, 모든 경우에 대해서 보장하지 못합니다. 데이터가 분실될 수도 있으며, 데이터의 순서가 뒤바뀔수도 있습니다.왜냐하면 데이터 전송 명령이 떨어지면 무조건 보내고자 하는 컴퓨터의 IP 주소를 향해 데이터를 날리기 때문입니다. 그리고 나서는 보낸 데이터는 신경쓰지 않습니다.
하지만 데이터그램 소켓은 전송속도에서 이득을 얻을 수 있습니다.
2. 스트림 소켓
: TCP 연결을 사용해 데이터를 전송합니다.
TCP는 기록된 데이터에 에러가 없도록 하고, 전송 순서에 맞추어 정확히 전송되는 것을 보장합니다. TCP는 전송 중 문제가 발생하면 그 문제를 인식하고 데이터의 재전송이나 재정렬을 통해 적절히 보상해줍니다.
스트림 소켓은 연결지향의 소켓으로 전송측과 수신측이 연결되어 있지 않으면 동작하지 않습니다.
댓글 없음:
댓글 쓰기