1) 우리가 사용하는 인터넷은 패킷 스위치 방식으로 소포에 주소를 써서 목적지에 보내는 것 처럼 작동하는 네트워크 입니다.
2) 인터넷 프로토콜의 계층도에 대해 알아보았습니다.
- app : 우리가 실제로 사용하는 서비스를 제공하는 계층입니다. http, smtp, ftp등이 있습니다.
- transport : 데이터를 어떻게 보낼지 결정하는 계층입니다. 데이터를 어떻게 묶어서 보낼지, 오류처리는 어떻게 할지에 대해 결정합니다. TCP/UDP등이 있습니다.
- ip : 호스트와 호스트, 즉 출발지에서 목적지까지 데이터 묶음(패킷)을 전달하는 역할을 합니다. 라우터가 있습니다. -> 소켓은 이 계층!
- link : 노드와 노드간에 데이터를 주고받는 역할을 합니다. 스위치, 브릿지등이 포함됩니다.
- physical : 비트들을 물리적으로 이동시키는 역할을 합니다. 유선의 경우 다양한 케이블, 무선일 경우 공기가 매체가 되겠네요.
3) 하지만 우리가 이 모든것을 반드시 알아야 통신 프로그램을 할 수 있는것은 아닙니다.
- 이런 기능들을 단계별로 나눈 이유는, 자신의 하위 계층의 구현내용이 어떤지 잘 몰라도 그 기능을 사용할 수 있도록 하기 위해서입니다.
- 즉, 소켓 프로그래밍도 해당 함수와 하위 함수들의 작동원리를 잘 모르더라도 어떤 기능을 하는지만 알면 쉽게 통신 프로그래밍을 할 수 있습니다.
4) 그럼 소켓은 무엇인가요?
- 인터넷 소켓(Internet socket, socket' 혹은 network socket 라고 부르기도 한다)은 네트워크로 연결되어 있는 컴퓨터의 통신의 접점에 위치한 통신 객체다.
네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. - wikipedia
- 는 훼이크고 :P 간단히 설명하면 서버와 클라이언트가 byte stream을 주고 받는 것을 마치 파일 입출력을 하듯 해주는 것입니다.
파일입출력 | 소켓 |
파일구조체생성 | 소켓 생성 |
fopen() | connect() |
read()/write() | read()/write() |
close() | close() |
5) 자세한 사항은
http://forum.falinux.com/zbxe/?document_srl=441104 를 참고하세요.