1982년 BSD(BerkeleySoftwareDistribution) Unix 4.1에서 처음 소개되으며, 현재 널리 사용되는 것은 1986년의 BSD Unix 4.3에서 개정된 것이다. NetworkProgramming에 있어서 가장 중요한부분.
소켓은 TCP/IP 프로토콜의 프로그래머 인터페이스이다. 소켓은 존재하는 프로세스들 사이의 대화를 가능하게 하는 프로세스간 상호 통신방식이다. 이들 프로세스는 동일한 컴퓨터 내에 있거나 다른 컴퓨터에 있어도 된다. 소켓이 대단히 유용하게 사용되는 이유는 바로 이러한 네트워크를 통한 통신 능력 때문이다.
소켓을 경유한 프로세스 통신은 ClientServer모델에 기초하고 있다. 서버 프로세스로 알려진 프로세스는 그 컴퓨터에서 유일하게 할당된 번호의 소켓을 생성한다. 클라이언트 프로세스는 이 번호의 소켓을 통해서 서버 프로세스와 대화할 수 있다.
연결에 성공하면 서버와 클라이언트 모두에게 각각 하나의 소켓 기술자가 반환되는데 이것을 이용하여 읽기/쓰기를 한다. 다른 프로세스와 통신하기 위해 사용되는 파이프는 단방향 즉, 읽고 쓰는 파일 기술자를 별도로 필요로 하는데 반해서 소켓은 양방향(bidirectional)이다.
소켓은 특별히 보안에 대해 고려하지 않으면, Sniffing되어, 내가 통신하는 내용들이 모두 공개된다. 이를 막기 위한 보안대책은 다음과 같다.
소켓서버에서, accept()로 접속을 받고 나서, 어떻게 처리하는지에 따라 다음으로 구분된다.
- forking : 현재 프로세스의 완전한 복제.
- threading : 프로세스보다 많이 가벼운 thread를 사용
IoMultiplexing : 비동기 소켓 프로그래밍
참고자료
관련도서