소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔트 포인트입니다.
소켓에 대해 잘 정리된 블로그
https://on1ystar.github.io/socket%20programming/2021/03/16/socket-1/
각각의 응용 프로그램에 이미 정해져있는 포트 번호를 이용하여, 전송 계층에서 응용프로그램을 구분 하는 것.
21 : FTP : File Transfer Protocal : 파일 전송 프로토콜 : 서버와 클라이언트 사이의 파일 전송을 하기위한 프로토콜
22 : SSH : Secure Shell : 시큐어 셀 : 다른 사용자가 세션을 엿듣지 못하도록 세션을 감싸 보안 및 안정성을 높임. 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 프로토콜. Linux 계열에서 사용함.
23 : TELNET : 텔넷 :
25 : SMTP : Simple Mail Transfer Protocol : 전자우편을 보낼 때 이용하는 프로토콜
53 : DNS : Domain Name System : 영문/한글 주소를 네트워크에서 찾아갈 수 있는 IP로 변환해 준다.
Web
61 : SNMP : Simple Network Management Protocol
80 : HTTP : HyperText Transfer Protocao
110 : POP3 : Post Office Protocol version 3
115 : SFTP
143 : IMAP : Internet Messaging Access Protocal
443 : HTTPS(SSL) : HyperText Transfer Protocol over Secure Socket Layer : 월드와이드웹 통신 프로토콜인 HTTP의 보안이 강화된 버전
3389 : RDP : 윈도우 PC 원격데스크탑 연결
출처: https://sevendollars.tistory.com/43 [SevenDollars:티스토리]
모든 네트워크 어플리케이션은 클라이언트-서버 모델이다. 이 클라이언트-서버 모델에서는 하나의 서버 프로세스와 하나 이상의 클라이언트 프로세스들로 구성되어있다. 서버는 클라이언트에게 서비스와 resource를 제공 혹은 조작해준다.
클라이언트가 request를 보내고 서버는 요청한 부분을 자원(db)와 통신하여 클라이언트에 response를 답해준다.
유닉스 시스템에서는 모든걸 파일이라고 한다는 요상한 말을 들어보았다. 리눅스는 일반적인 정규파일부터 디렉토리, 소켓, 파이프, 블록 디바이스, 케릭터 디바이스 등 모든 객체들을 파일로 관리한다.
프로세스가 실행 중에 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다. 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD)값을 이용해서 파일을 지칭할 수 있다.
스트림 소켓은 전화 통화와 같습니다. 한 쪽이 전화를 걸고, 다른 대답은 서로에게 인사하고 (TCP의 SYN / ACK) 정보를 교환합니다. 끝나면, 작별 인사 (TCP에서 FIN / ACK)라고 말합니다. 한쪽에서 작별 인사를 듣지 않으면 예상치 못한 이벤트이므로 다른 쪽에서 다시 전화를 겁니다. 일반적으로 클라이언트는 서버에 다시 연결합니다. 데이터가 전송 된 순서와 다른 순서로 도착하지 않을 것이라는 보장이 있으며 데이터가 손상되지 않을 것이라는 합리적인 보장이 있습니다.
데이터 그램 소켓은 클래스에서 노트를 전달하는 것과 같습니다. 메모를 전달하는 사람 옆에 직접 있지 않은 경우를 생각해보십시오. 메모는 사람과 사람 사이를 여행하게됩니다. 도착지에 도착하지 않을 수 있으며 도착할 때까지 수정 될 수 있습니다. 같은 사람에게 두 개의 노트를 전달하면 노트가 교실을 통과하는 경로가 같지 않을 수도 있고, 한 사람이 다른 사람처럼 빨리 노트를 통과하지 못할 수도 있으므로 의도하지 않은 순서로 도착할 수도 있습니다.
출처
서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션을 CGI라고 한다. CGI Program은 아래와 같이 작동한다.