[TIL] WEEK07 - Keywords

woo__j·2024년 5월 8일
0

TIL - Today I Learned

목록 보기
22/23

네트워크 계층(OSI 7 Layer, TCP/IP Layer)

OSI 7계층: 네트워크 통신이 일어나는 과정을 7단계로 나눠 정의한 네트워크 표준 모델

7계층(응용): 응용 프로세스와 직접 관계해 응용 서비스 수행 (사용자와의 인터페이스 제공)
6계층(표현): 전달하거나 받는 데이터의 표현방식을 결정 (데이터 변환, 압축, 암호화 등)
5계층(세션): 세션 연결/해제, 세션 메세지 전송 등
4계층(전송): 컴퓨터간 신뢰성 있는 데이터를 주고 받을 수 있도록 함
3계층(네트워크): 실제 네트워크 간 데이터 라우팅
2계층(데이터 링크): 네트워크 기기 간 데이터 전송 및 물리 주소 결정
1계층(물리): 시스템 간 물리적인 연결과 전기 신호 변환/제어

[라우팅?: 네트워크 안에서 통신 데이터를 최대한 빠르게 보낼 최적의 경로를 선택하는 과정]

[데이터 송수신 과정]

송신측에서 각 계층을 지날 때마다 header가 붙고, 최종적으로 물리 계층에서 비트 단위로 전송
수신측에서는 역순으로 헤더를 떼면서 분석해서 응용 계층에선 최종적으로 data를 볼 수 있음
(encapsulation & decapsulation, 상자에 넣고 넣고 넣고,, 보낸 다음 빼고 빼고 빼고)

클라이언트-서버 프로그래밍 모델 - CS:APP 11.1

모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초한다. 응용 프로그램은 이 모델을 사용해 한 개의 서버 프로세스와 여러 개의 클라이언트 프로세스로 구성된다.

클라이언트-서버 모델의 동작방식은 트랜잭션이다.

[클라이언트-서버 트랜잭션]
1. 클라이언트가 서버에 요청(request)을 보내 트랜잭션 개시

ex) 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청을 보냄
  1. 서버가 요청을 받고 해석/조작
ex) 웹 서버가 브라우저로부터 요청을 받을 때, 디스크 파일 읽음
  1. 서버가 요청에 대한 응답을 클라이언트에게 보낸 후, 다음 요청을 기다린
ex) 웹 서버는 이 파일을 다시 클라이언트로 돌려보냄
  1. 클라이언트는 응답받은 결과를 처리함
ex) 웹 브라우저가 서버로부터 페에지를 받은 후, 스크린에 디스플레이함

클라이언트와 서버는 프로세스며, 한 개의 호스트는 서로 다른 많은 클라이언트/서버를 동시 실행 가능하다. 또한 트랜잭션은 동일하거나 다른 호스트에 존재할 수 있다. 모델은 클라이언트와 서버의 호스트로의 매핑과 관계없이 동일하다.

[호스트?: 네트워크에 연결된 컴퓨터]

소켓(socket, bind, listen, accept, connect, close) - CS:APP 11.4

인터넷 클라이언트와 서버는 connection을 통해 연속된 바이트(바이트 스트림)을 주고 받는 방식으로 통신한다.
이 connection은 두 개의 프로세스를 연결한다는 점에서 point-to-point 연결이며, 데이터가 동시에 양방향으로 흐를 수 있다는 의미로 완전양방향(full-duplex)다.

여기서 소켓(socket)이 연결의 종단점
각 소켓은 IP 주소, port로 이루어진 소켓 주소를 가진다 (address:port)
클라이언트의 소켓 주소 내 포트는 클라이언트가 연결 요청을 할 때 커널이 자동으로 할당 = 단기 포트
반면 서버의 소켓 주소 내 포트는 대개 잘 알려진 포트(well-known port)며 서비스 이름과 영구적으로 연결되어있음

연결은 두 개의 종단점의 소켓 주소에 의해 유일하게 식별된다.
이 두 개의 소켓 주소는 소켓 쌍 = Tuple로 나타냄

(clientaddr:clientport, serveraddr:serverport)

약간 쉽게 말하면 socket = port를 식별하기 위한 주소

소켓 생성과 통신



+) TCP의 ‘3-way handshake’
1. 클라이언트가 서버에 SYN 패킷을 보내 연결 요청
2. 서버는 SYN-ACK 패킷으로 응답해 연결 요청 받았음+연결 준비 되었음을 알림
3. 클라이언트는 ACK 패킷을 서버로 보내 연결 확정

파일 디스크립터 - CS:APP 10장

운영체제에서 파일이나 다른 입출력 리소스에 대한 접근을 추상화하는데 사용되는 정수.
리눅스 체제 내에서는 모든게 파일로 관리됨
그 때 파일을 관리하기 위해 할당해주는 고유 번호

이 파일 디스크립터를 통해 운영체제는 파일/파이프/소켓 등 다양한 입출력 리소스를 일관된 방식으로 관리 가능

UNIX/Linux 시스템에서의 파일 디스크립터 번호
표준 입력 = 0
표준 출력 = 1
표준 에러 = 2

((추가 공부필요))

Datagram Socket vs Stream Socket

CGI / WebServer / MIME Type

WebServer?
: 클라이언트로부터 HTTP(프로토콜) 요청을 받아들이고, 그에 따른 응답을 제공하는 소프트웨어

[웹 브라우저 요청 흐름]

  • 웹 브라우저에서 HTTP 요청 메세지 생성
  • 소켓 라이브러리는 이 메시지를 TCP/IP 연결 후 데이터 전달
  • TCP/IP는 HTTP 메세지가 포함된 패킷 생성
  • 이 패킷은 LAN 드라이버를 통해 인터넷을 타고 서버로 전달

((+) WAS 추가공부하기))

[웹 컨텐츠]

  • 정적 컨텐츠: 웹 서버에 미리 저장되어 있는 파일, 수정 없이 서버가 파일을 그대로 클라이언트에게 제공
ex) HTML, CSS, 이미지 파일, 비디오 파일 등
  • 동적 컨텐츠: 서버 측에서 클라의 요청에 따라 동적으로 생성되는 컨텐츠
ex) 장바구니, 조회수 등
  • MIME: 웹 서버가 클라이언트에게 제공하는 컨텐츠의 종류를 식별하기 위한 라벨
ex) type/subtype 구조 (= 파일 종류/파일 포맷)
  • CGI: 웹 서버와 외부 프로그램 간 표준 인터페이스
CGI를 사용하면 웹 서버는 클라이언트의 요청을 받아들이고, 해당 요청을 처리하는 외부 프로그램을 호출
-> 외부 프로그램은 요청을 처리하고 동적 컨텐츠 생성 후, 결과를 웹 서버에 반환
-> 서버는 CGI 프로그램의 실행 결과를 MIME 타입 설정해 클라이언트에 전달한다

HTTP (요청/응답, 헤더, 메소드, 상태코드, HEAD 메소드)

[읽어보기]

HTTP?
: Hyper Text Transfer Protocol, 즉 HTML 같은 하이퍼 미디어 문서를 전송하기 위한 응용 계층에 있는 통신 프로토콜로 Stateless Protocol이다.
= 인터넷에서 데이터를 주고 받을 수 있는 통신 규약

Stateless?
: 서버가 두 요청 간 어떠한 데이터(상태)도 유지하지 않음을 의미

헤더?

요청(request)
: 클라이언트가 서버로 전달해 서버의 액션이 일어나게끔 하는 메시지
응답(response)
: 요청에 대한 서버의 답변

<상태코드/HEAD 메소드 추가 정리하기>

Proxy

클라이언트와 서버 사이 중계기로 통신 수행
클라이언트가 직접적으로 end server와 연결해 리소스를 얻는 것 대신 프록시와 연결되어 통신 수행
-> 프록시는 클라이언트로부터 받은 요청을 end server에게 보내 응답을 받은 후, 해당 응답을 클라이언트에게 보냄

end server?
: 클라이언트 입장에선 중간에 있는 proxy를 서버라고 착각하기 때문에 모든 리소스를 가지고 있는 원천 server를 end server로 통칭]

Forward Proxy
클라이언트가 서버로 요청할 때 직접 요청하지 않고 먼저 프록시 서버를 통해 요청하는 방식

[특징]
1. 클라이언트가 요청한 내용 캐싱

이전에 요청을 통해 얻은 리소스를 저장해놓고 추후에 다시 서버로 요청하지 않아도 해당 리소스를 얻을 수 있음 
-> 전송시간 절약, 불필요한 외부전송x -> 네트워크 병목 현상 방지
  1. 클라이언트가 누구인 지 end server에게 감출 수 있음 = 익명성 보장
실제로는 클라이언트가 요청을 보냈지만, end server 입장에선 마치 프록시가 요청한 것처럼,
요청한 대상에 대한 정보를 프록시 정보라고 인식하게 할 수 있음

Reverse Proxy
클라이언트가 서버를 호출할 때 Reverse Proxy를 호출하게 되고 프록시 서버가 서버를 요청해 받은 응답을 클라이언트에게 전달하는 방식

[특징]
1. 클라이언트가 요청한 내용 캐싱
2. 서버정보를 클라이언트로부터 숨겨 보안성 제공

클라이언트는 reverse proxy를 실제 서버라고 생각하고 요청을 보내기 때문에 실제 서버 IP가 클라이언트에게 노출되지 않음
  1. Load Balancing 기능 제공
Load Balancing?: 클라이언트의 요청으로부터 서버 측에 쌓이는 부하를 분산시켜주는 기능
하나의 인터넷 서비스에 발생하는 트래픽이 많을 때, 여러 대의 서버들이 적절히 분산처리해 해결해주는 것

0개의 댓글

관련 채용 정보