https://luckyyowu.tistory.com/71



* 본 포스팅은 한국소프트웨어진흥원 출처의 리눅스 네트워크 프로그래밍 PDF 파일을 토대로 작성되었습니다.

* 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.





소켓(Socket) 정의


※ TCP나 UDP 같은 트랜스포트(전달) 계층을 이용하는 API



- 모든 유닉스 운영체제에서 제공됨

- 윈도우에서는 Winsock 이라는 이름으로 소켓 API를 제공

- 자바 플렛폼에서도 소켓을 이용하기 위한 클래스 제공

- 응용 프로그램에서 TCP/IP를 이용하는 창구 역할을 함

- 소켓 인터페이스 : 응용 프로그램과 소켓 사이의 인터페이스






소켓 번호


※ 새로운 소켓을 개설했을 때 이를 대표하는 int 타입의 번호



○ 파일 디스크립터

- 리눅스에서 파일을 open과 같은 함수로 열면 파일 디스크립터(fd)를 리턴

- 프로그램이 파일을 액세스 할때 할당된 파일 디스크럽터를 사용

- 리눅스에서는 모든 파일, 하드웨어 장치, 파이프, 소켓 등을 파일로 취급

- 파일 디스크립터 테이블 : 파일 오픈시 시스템은 파일에 대한 정보를 가질 구조체를 할당, 테이블의 인덱스 값이 파일 디스크립터


○ 소켓 디스크립터

- 소켓 번호라고 함

- 소켓을 만들고 얻은 파일 디스크립터

- 프로그램이 네트워킹을 할때 소켓 디스크립터를 사용






프로그램과 소켓, TCP/IP의 관계



○ 기본적으로 할당된 디스크립터

- fd 0번 : 표준 입력(키보드)

- fd 1번 : 표준 출력

- fd 2번 : 표준 에러

○ 3번 부터는 사용자가 개설하는 소켓이나 불러오는 파일에 의해 배정된다.

○ 디스크립터는 하나의 프로그램에서만 유일하게 배정됨(지역성을 가짐)






포트(Port) 번호


※ IP 데이터그램에 실린 데이터를 최종적으로 전달할 프로세스를 구분

※ 호스트 내의 통신 접속 지점을 구분하기 위해 사용

※ 통신 시 프로그램을 구분하기 위한 번호


○ 포트번호의 사용 : TCP, UDP 헤더에 실려 16 bit로 표현. 1~65535의 값


○ 지정포트 번호(well-known 포트) 

- 1023이하가 배정되며, 사용자 정의 포트는 1024이 상의 포트번호. 

(그런데 절대적인 것은 아닌 것같다. 실제로 1024 이하의 포트 번호를 지정해서 사용하고 있다.)

- ftp(21번), ssh(22번), telnet(23번), mail(25번) http(80) 등.