1118 - TIL(csapp-11.1~11.4, 키워드-client/server, socket, FD, proxy, etc)

그로밋·2023년 11월 20일
0

krafton jungle

목록 보기
32/58

Socket

소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔트 포인트입니다.

소켓에 대해 잘 정리된 블로그
https://on1ystar.github.io/socket%20programming/2021/03/16/socket-1/

socket, bind, listen, accept, connect, close

port

각각의 응용 프로그램에 이미 정해져있는 포트 번호를 이용하여, 전송 계층에서 응용프로그램을 구분 하는 것.

well known port

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:티스토리]

Client/Server model

모든 네트워크 어플리케이션은 클라이언트-서버 모델이다. 이 클라이언트-서버 모델에서는 하나의 서버 프로세스와 하나 이상의 클라이언트 프로세스들로 구성되어있다. 서버는 클라이언트에게 서비스와 resource를 제공 혹은 조작해준다.
클라이언트가 request를 보내고 서버는 요청한 부분을 자원(db)와 통신하여 클라이언트에 response를 답해준다.

출처

File Descriptor

유닉스 시스템에서는 모든걸 파일이라고 한다는 요상한 말을 들어보았다. 리눅스는 일반적인 정규파일부터 디렉토리, 소켓, 파이프, 블록 디바이스, 케릭터 디바이스 등 모든 객체들을 파일로 관리한다.

프로세스가 실행 중에 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다. 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD)값을 이용해서 파일을 지칭할 수 있다.

참고

Datagram/Stream socket

스트림 소켓은 전화 통화와 같습니다. 한 쪽이 전화를 걸고, 다른 대답은 서로에게 인사하고 (TCP의 SYN / ACK) 정보를 교환합니다. 끝나면, 작별 인사 (TCP에서 FIN / ACK)라고 말합니다. 한쪽에서 작별 인사를 듣지 않으면 예상치 못한 이벤트이므로 다른 쪽에서 다시 전화를 겁니다. 일반적으로 클라이언트는 서버에 다시 연결합니다. 데이터가 전송 된 순서와 다른 순서로 도착하지 않을 것이라는 보장이 있으며 데이터가 손상되지 않을 것이라는 합리적인 보장이 있습니다.

데이터 그램 소켓은 클래스에서 노트를 전달하는 것과 같습니다. 메모를 전달하는 사람 옆에 직접 있지 않은 경우를 생각해보십시오. 메모는 사람과 사람 사이를 여행하게됩니다. 도착지에 도착하지 않을 수 있으며 도착할 때까지 수정 될 수 있습니다. 같은 사람에게 두 개의 노트를 전달하면 노트가 교실을 통과하는 경로가 같지 않을 수도 있고, 한 사람이 다른 사람처럼 빨리 노트를 통과하지 못할 수도 있으므로 의도하지 않은 순서로 도착할 수도 있습니다.
출처

Web server

Web contents(MIME type, 정적, 동적, CGI), HTTP, Proxy)

CGI(Common Gateway Interface, CGI)

서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션을 CGI라고 한다. CGI Program은 아래와 같이 작동한다.

장단점

CGI 장점

  • 언어, 플랫폼 독립적이다(스펙만 준수하면 된다).
  • 매우 단순하고 다른 server-side 프로그래밍 언어에 비해 advanced task를 훨씬 쉽게 수행할 수 있다.
  • 재사용할 수 있는 CGI 코드 라이브러리가 풍부하다.
  • CGI가 웹서버에서 실행될 때 안전하다.
  • CGI 코드를 수행하는데 특정 라이브러리가 필요하지 않기 때문에 매우 가볍다.

CGI 단점

  • 느리다(요청이 올 때마다 DB connection을 새로 열어야 한다).
  • HTTP 요청마다 새로운 프로세스를 만들기 때문에 서버 메모리를 많이 잡아먹는다.
    (servlet은 요청마다 스레드를 만든다.)
  • 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없다.

참고

profile
Work as though your strength were limitless. <S. Bernhardt>

0개의 댓글