글 작성자: Sowhat_93

네트워크 프로그래밍을 처음 공부할때에 가장 막막한 점은

막연한 이론은 어느 서적에서나 볼 수 있다는 점이지만,

실제로 프로그램을 만든다고 할때에 이를 코드로 어떻게 구현해야 하는가? 이다.

그래서 많은 전문가들이 보통 Socket Programming부터 차근차근 하나씩 경험하기를권한다.

 

Socket이란 무엇인가?

통신시 필요한 발신지(Source)와 목적지(Destination) 에 관한 정보와

통신 진행상황, 또 통신시 필요한 정보들을 기입해둔 데이터블럭을 이야기한다.

App은 어찌 되었던 원격으로 데이터를 송신하기 위해서 Network Adapter에 접근해야 한다.

 

결국 하드웨어와 관련된 이야기이며, 이를 관리하는, OS 그리고 Driver를 거쳐야 하는 것이다.

정리하면 다음과 같다.

App에서 통신에 필요한 정보를 OS에 건네주면, OS는 이를 바탕으로 Network Adapter(랜카드)에 접근하고,

Network Adapter는 요청받은 작업을 수행하고 결과를 OS에 건네준다. OS는 결과를 App측에 통보한다. 

 

위와 같은 App과 OS 사이 요청과 결과통보를 수행하기 편하게 만들어 둔 것이 바로 Socket이다.

Socket Programming을 통해, 우리는 원격과의 통신을 수행하는 프로그램을 만들 수 있는것이다.

 

Socket은 OS의 Kernel에서 관리된다. 다시말해 OS꺼다. 마음대로 손대면 안된다.

그 말인 즉슨 OS측으로 Socket을 하나 달라고 요청하면 OS는 너는 XXX번 소켓을 쓰면된다.

하는 OS Resource에 대한 Descripter의 형태로 준다는 것이다.

때문에 Socket의 정보를 열람할때에도 Kernel 안의 해당 메모리 블럭을 직접 열람할수는 없고, OS에게 물어봐야한다. 

App이 Socket을 다 사용했음또한 OS에게 보고해야한다. (물론 잘 지키지 않는 개발자가 많아 OS는 알아서 가져간다...)

 

Windows의 경우에는 Handle로 준다.

LINUX의 경우에는 File Descripter의 형태로 준다.

 

Socket

여기까지가 Socket에 대한 대략적 개념이다.

개념은 상당히 심플하지만 그 내용은 결코 적지 않으며,

알고있는 네트워크 이론을 조금 더 가깝게 느껴보고 싶다면, 

Socket Programming 을 경험 해보는 것을 추천한다.

(내 동기나 친구들도 그랬고 ... 그 형도 그랬고 ... 그 교수님도 그랬고 ... 나 또한 그렇다...) 

머리로 익힌 막연한 지식을 조금은 생동감있게 느낄 수 있을 것이다.

Socket Programming에 관련해서 책을 추천하자면, 

역시나 명불허전... 윤성우씨의 열혈강의 TCP/IP , (Linux, Windows 관련 내용 둘다 수록)

TCP/IP 윈도우 소켓 프로그래밍 (Windows) ,

Network Programming for Microsoft Windows 2E (Windows) 

위 세권을 추천한다.

 

이 블로그에도 Socket Programming 에 관한 내용이 언젠....가는 포스팅 될 예정이다. (OS는 Windows, 언어는 C++...)