본문 바로가기
TCP/IP

TCP/IP 열혈 강의

by 상레알 2009. 8. 12.
네트워크 프로그래밍은 다른 말로  소켓 프로그래밍 이라고도 한다.  이는 맞는 말이다.

네트워크 프로그래밍이란, 멀리 떨어져 있는 호스트들이 서로 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것이다.
다만 차이가 있다면 파일과 달리 데이터를 주고 받을 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트들간에 연결을 해주는 장치가 필요할 뿐이다.

이러한 기능을 해주는 장치를 소켓(Socket)이라 한다. 그래서 일반적으로 소켓 프로그래밍이라는 용어와 네트워크 프로그래밍이라는 용어는 같은 의미로 사용되고 있다. 네트워크 프로그래밍은 소켓을 이용해서  프로그래밍을 하는 것이기 때문이다 그럼  소켓이란 무엇일까 ?

소켓을 한 디로 표현하면 " 네트워크 프로그램을 쉽게 개발 할 수 있도록 운영체제에서 제공하는 인터페이스 " 라고 정의할 수 있다. 인터페이스라고 하니까 어려운 얘기라고 생각할 수 있는데, 그냥 일종의 프로그램이라고 생각하면 된다.

즉, 우리가 소켓이 필요하면 운영체제에 요청하고 운영체제는 자신에게 있는 이 인터페이스(프로그램)를 이용해서 소켓을 생성해주는 것이다. (멀리 덜어져 있는 두 개체를 연결시켜주는 도구..이다..(소켓이란 멀리 떨어져 있는 두개의 호스트를 연결시켜 주는 매개체 역활을 한다.))


소켓 생성 -> 소켓에 주소 할당 -> 연결 요청 가능한상태.... -> 연결 요청 수락
Socket() - > bind() - > linsten() - > accept()

파일 조작하기

리눅스 (유닉스 계열 운영 체제)는 모든 것(콘솔, 소켓, 파일 등등)을 파일로 간주한다.

소켓 또한 예외는 아니다. 우리가 생성하는 소켓도 사용하는 방식이나 내부적으로 처리되는 방식이 파일과 상당 부분 유사하기 떄문에 (파일 입.출력 함수를 소켓 입.출력에 사용할 수 있다.), 본격적으로 소켓을 공부하기 전에 파일에 대해 이해하는 것이 된다.
- 윈도우즈에서는 리눅스와 달리 소켓과 파일을 구분짓고 있다. 물론 상호 호환성(compatibility)을 위해서 윈도우즈 소켓을 파일 처럼 다루는 방법이 제공되고 있지만 그러한 방법 자체가 큰 의미를 지니지는 않는다.

1) 저 수준 파일 입. 출력( Low-Level File Access)

여기서 언급하는 Low-Level의 의미는 단순히 "시스템이 직접 제공하는 의미~ " 로 받아들이면 된다. 즉 이 후 설명하는 함수 들은 리눅스에서 제공해 주는 함수이지 ANSI표준 C에서 정의된 함수는 아니다는 말이다.


2] 파일 디스크립터(File Descriptor)

파일 디스크립터란 시스템으로 부터 할당 받은 파일이나 소켓을 대표하는 정수를 의미한다. 또한 표준 입력과 표준 출력도 파일 디스크립터로 표현이 되는데 이들은 프로그램이 시작되자 마자 기본적으로 열리고 종료시에 자동적으로 닫히게 된다.
즉, 파일 디스크립터란 시스템이 만들어 놓은 것을 가리키기 좋게 하기 위해 시스템이 우리들에게 건네주는 숫자에 지나지 않는다.


 파일 디스크립터 대상 
 0 표준 입력 : Standard Input 
 1 표준 출력 : Standard Output
 2 표준 에러 출력 : Standard Error


'TCP/IP' 카테고리의 다른 글

Nagle 알고리즘  (0) 2011.05.02
getsockopt() , setopt () 함수  (0) 2011.05.02
ioctl : 장치 제어 함수  (0) 2011.04.29
소켓 함수 및 헤더들  (0) 2011.02.07
sendto()  (0) 2010.03.28
SOCKADDR_IN 구조체  (0) 2010.03.28
SOCKET() 함수  (0) 2010.03.25
Linux: SOCK_PARCKET  (0) 2009.12.03
ICMP 프로토콜  (0) 2009.11.16
인터넷 소켓 활용  (0) 2009.08.31