반응형

이 게시물은 다음 링크를 참조하여 학습했습니다.

 

GitHub - WeareSoft/tech-interview: 🙍 tech interview

:loudspeaker:🙍 tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.

github.com

OSI 7계층(물데네전세표응)

1. 물리 계층

- 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다.

- 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다.

- 전송 단위는 Bit이다.

 

2. 데이터 링크 계층

- 포인트 투 포인트(Point to Point) 간 신뢰성 있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어흐름 제어가 필요하다.

- 주소 값은 물리적으로 할당, 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다.

- 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다.

- 데이터 전송 단위는 Frame이다.

* Frame -> Flag - Header Data Trailer Flag

* 흐름제어 -> 송신자와 수신자의 처리 속도간의 차이를 해결하기 위한 제어. Buffer에 대한 Feedback

* 에러제어 -> Framing한 데이터가 01의 비트로 되어있는데, 전기적 신호이므로 취약함.

==> 에러 직접 수정 or 재요청

*CRC(Cyclic Redundancy Check) -> 순환 중복 검사. 데이터에 CRC 계산 값 포함. 이 값으로 오류 확인

** https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=twers&logNo=50116953315

*** 프레임 = 패킷 + Header(+MAC address), Trailer( for CRC)

 

3. 네트워크 계층

- 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다.

- 네트워크 계층은 라우팅, 흐름 제어(?), 세그멘테이션(segmentation/desegmentation), 오류 제어(?), 인터네트워킹(Internetworking) ( -> 네트워크 끼리의 연결) 등을 수행한다.

- 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적(hierarchical)이다.

- 데이터 전송 단위는 Datagram(Packet)이다.

* 라우팅 -> 어떤 데이터를 보낼 때 최적의 경로를 선택

** Segment? Packet?

https://velog.io/@hidaehyunlee/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8-%ED%8C%A8%ED%82%B7-%ED%97%B7%EA%B0%88%EB%A6%B4-%EB%95%90-PDU%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

*** 패킷 = 세그먼트 + 네트워크 계층 정보

 

4. 전송 계층

- 양 끝단(End to end)의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다.

- 시퀀스 넘버 기반의 오류 제어 방식을 사용한다.

- 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful), 연결 기반(connection oriented)이다. (이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다.)

- 가장 잘 알려진 전송 계층의 예는 TCP이다.

- 데이터 전송 단위는 Segment이다.

**TCP Segment Structure https://nogan.tistory.com/20

*** 세그먼트 = 세그먼트 헤더(TCP Header) + Data

 

5. 세션 계층

- 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다.

- 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다.

- 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.

=> 연결 복구, 연결 제거, 연결 재개 등

 

6. 표현 계층(데이터 번역자)

- 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다.

- MIME 인코딩이나 암호화, 압축, 번역 등의 동작이 이 계층에서 이루어진다.

* MIME(Multiplepose Internet Mail Extensions) : 전자 우편을 위한 인터넷 표준 포맷

 

7. 응용 계층

- 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.

- 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다.

 

** OSI 7계층 https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

TCPUDP( 전송 계층 )

TCP(Transmission Control Protocol)

데이터를 메시지 형태(Segment)로 보내기 위해 IP와 함께 사용

연결형 서비스로 가상 회선 방식 제공

=> 가상 회선 방식 vs 데이터그램 방식

- 데이터 그램 방식은 매 순간마다 최적의 경로를 선택 vs 가상 회선 방식은 한 번의 라우팅

- 데이터 그램 방식은 네트워크 혼잡을 피할 수 있으나 신뢰성이 낮다

- 반면에 가상 회선 방식은 신뢰성이 높지만 데이터 그램 방식에 비해 느리다.

=> 3-way handshaking 연결 성립, 4-way handshaking 연결 해제

전이중(Full-Duplex), 점대점(Point to Point) 방식

=> 전이중 : 양방향 전송, 점대점 : 각 연결 정확히 2개의 종단점

연속성보다 신뢰성있는 전송이 중요할 때 사용

 

UDP(User Datagram Protocol)

데이터를 데이터그램 단위로 처리

비연결형 서비스로 데이터 그램 방식 제공

정보를 주고 받을 때 신호 절차 X

UDP 헤더를 통해 최소한의 오류만 검출

연속성이 중요한 서비스, 예를 들면 실시간 서비스(streaming)에 사용

++ UDPTCP는 각각 별도의 포트 주소 공간을 관리. UDP TCP 간 같은 포트 번호를 할당해도 다른 포트로 간주.

 

TCP Header vs UDP Header

TCP HeaderUDP Header와 비교했을 때, 양방향 송수신을 위한 플래그 비트가 있다

종류 내용
URG 긴급 위치 필드 유효 여부 설정
ACK 응답 유효 여부 설정. 최초의 SYN 패킷 이후 모든 패킷은 ACK 플래그 설정 필요.
데이터를 잘 받았으면 긍정 응답으로 ACK(=SYN+1) 전송
PSH 수신측에 버퍼링된 데이터를 상위 계층에 즉시 전달할 때
RST 연결 리셋 응답 혹은 유효하지 않은 세그먼트 응답
SYN 연결 설정 요청. 양쪽이 보낸 최초 패킷에만 SYN 플래그 설정
FIN 연결 종료 의사 표시
 

TCP 3-way handshake4-way handshake

- TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다.

 

3-way handshake(연결 성립)

- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.

- 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

ex) A 프로세스(Client)B 프로세스(Server)에 연결을 요청

1. A -> B: SYN

- 접속 요청 프로세스 A가 연결 요청 메시지 전송 (SYN)

- 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.

- PORT 상태 - B: LISTEN, A: CLOSED

 

2. B -> A: SYN + ACK

- 접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어 달라는 메시지 전송 (SYN + ACK)

- 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, SYNACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.

- PORT 상태 - B: SYN_RCV, A: CLOSED

 

3. A -> B: ACK

- PORT 상태 - B: SYN_RCV, A: ESTABLISHED

- 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺음 (ACK)

- 이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.

- PORT 상태 - B: ESTABLISHED, A: ESTABLISHED

 

4-way handshake(연결 해제)

ex) A 프로세스(Client)B 프로세스(Server)에 연결 해제를 요청

1. A -> B: FIN

- 프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송

- 프로세스 BFIN 플래그로 응답하기 전까지 연결을 계속 유지

2. B -> A: ACK

- 프로세스 B는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. (이 상태가 TIME_WAIT 상태)

- 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.

- 그리고 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다.

3. B -> A: FIN

- 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송

4. A -> B: ACK

- 프로세스 A는 확인했다는 메시지를 전송

 

*포트 상태 정보

- CLOSED: 포트가 닫힌 상태

- LISTEN: 포트가 열린 상태로 연결 요청 대기 중

- SYN_RCV: SYNC 요청을 받고 상대방의 응답을 기다리는 중

- ESTABLISHED: 포트 연결 상태

 

HTTPHTTPS

HTTP(Hyper Text Transfer Protocol) : 웹 상에서 클라이언트-서버간 정보를 주고 받을 수 있는 프로토콜

주로 HTML 문서를 주고받는 데에 사용

TCP, UDP 사용, 80번 포트 사용

비연결(Connections), 무상태(Stateless)의 특징을 갖는다.

=> 요청을 보내고 응답을 받으면 연결이 바로 끊기며, 연결을 끊는 순간 통신이 끝나며 정보 유지 X

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer) : HTTP의 보안 강화 버전

HTTPS의 기본 TCP/IP 포트로 443번 포트 사용

일반 텍스트가 아닌 암호화된 텍스트 사용( SSL or TLS )

따라서 데이터의 보호를 보장

공개키 알고리즘 방식 사용

HTTP에 비해 상대적으로 안전하지만, 속도가 느리고 추가 비용이 발생한다.

 

HTTP 요청 응답 헤더

HTTP 헤더는 일반 헤더(General Header), 엔티티/개체 헤더(Entity Header), 요청 헤더(Request Header), 응답 헤더(Response Header)로 구성된다.

일반 헤더(General Header) : 일반 목적의(기본적인) 헤더 항목

엔티티 헤더(Entity Header) : Entity(콘텐츠, 본문, 리소스 등)에 대한 설명 헤더

요청 헤더(Request Header) : HTTP 요청 메시지 내에서만 나타나며 가장 방대

응답 헤더(Response Header) : 특정 유형의 HTTP 요청이나 특정 HTTP 헤더를 수신했을 때 응답

 

* Cookie / Sesstion

HTTPStateless를 극복하기 위해 사용하는 방식이다.

Cookie에 클라이언트에 대한 정보를 저장해뒀다가 사용하거나 Session을 등록해서 유지하는 방식으로 극복한다.

쿠키 : , 값이 들어있는 데이터파일. 이름, 값 만료 날짜, 경로 정보 등이 들어가있다. 클라이언트에 저장. 로그인 유지나 사용자 정보 일정 시간 저장할 때 사용

세션 : 서버 메모리에 저장되는 정보. 서버 메모리 저장되지만 세션 ID가 쿠키에 저장됨.

 

HTTPHTTPS 동작 과정

HTTP 동작 과정

서버 접속 -> 클라이언트 -> 요청 ->서버 -> 응답 -> 클라이언트 -> 연결 종료

 

1. 사용자가 웹 브라우저에 URL 주소 입력

 

2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청

 

3. 웹 서버와 TCP 연결 시도

- 3way-handshaking

 

4. 클라이언트가 서버에게 요청

- HTTP Request Message = Request Header + 빈 줄 + Request Body

- Request Header

-> 요청 메소드 + 요청 URI + HTTP 프로토콜 버전

=>GET /background.png HTTP/1.0 POST / HTTP 1.1

=> Header 정보(key-value 구조)

- 빈 줄

-> 요청에 대한 모든 메타 정보가 전송되었음을 알리는 용도

- Request Body

-> GET, HEAD, DELETE, OPTIONS처럼 리소스를 가져오는 요청은 바디 미포함

->데이터 업데이트 요청과 관련된 내용 (HTML 폼 콘텐츠 등)

 

5. 서버가 클라이언트에게 데이터 응답

- HTTP Response Message = Response Header + 빈 줄 + Response Body

- Response Header

-> HTTP 프로토콜 버전 + 응답 코드 + 응답 메시지

=> ex. HTTP/1.1 404 Not Found.

-> Header 정보(key-value 구조)

- 빈 줄

-> 요청에 대한 모든 메타 정보가 전송되었음을 알리는 용도

- Response Body

->응답 리소스 데이터

=> 201, 204 상태 코드는 바디 미포함

 

6. 서버 클라이언트 간 연결 종료

- 4way-handshaking

 

7. 웹 브라우저가 웹 문서 출력

 

HTTPS(SSL) 동작 과정

공개키 암호화 방식과 대칭키 암호화 방식의 장점을 활용해 하이브리드 사용

==> 데이터를 대칭키 방식으로 암복호화하고, 공개키 방식으로 대칭키 전달

** HTTPS 동작 원리 + 대칭키, 공개키 알고리즘 https://mysterico.tistory.com/30

 

1. 클라이언트가 서버 접속하여 Handshaking 과정에서 서로 탐색

1.1. Client Hello

- 클라이언트가 서버에게 전송할 데이터

-> 클라이언트 측에서 생성한 랜덤 데이터

-> 클라이언트-서버 암호화 방식 통일을 위해 클라이언트가 사용할 수 있는 암호화 방식

-> 이전에 이미 Handshaking 기록이 있다면 자원 절약을 위해 기존 세션을 재활용하기 위한 세션 아이디

1.2. Server Hello

- Client Hello에 대한 응답으로 전송할 데이터

-> 서버 측에서 생성한 랜덤 데이터

-> 서버가 선택한 클라이언트의 암호화 방식

-> SSL 인증서

1.3. Client 인증 확인

- 서버로부터 받은 인증서가 CA에 의해 발급되었는지 본인이 가지고 있는 목록에서 확인하고, 목록에 있다면 CA 공개키로 인증서 복호화

- -서 각각의 랜덤 데이터를 조합하여 pre master secret 값 생성(데이터 송수신 시 대칭키 암호화에 사용할 키)

- pre master secret 값을 공개키 방식으로 서버 전달(공개키는 서버로부터 받은 인증서에 포함)

- 일련의 과정을 거쳐 session key 생성

1.4. Server 인증 확인

- 서버는 비공개키로 복호화하여 pre master secret 값 취득(대칭키 공유 완료)

- 일련의 과정을 거쳐 session key 생성

1.5. Handshaking 종료

 

2. 데이터 전송

- 서버와 클라이언트는 session key를 활용해 데이터를 암복호화하여 데이터 송수신

 

3. 연결 종료 및 session key 폐기

 

 

 

 
반응형

'CS' 카테고리의 다른 글

DB(DataBase)  (0) 2022.01.21
OS(Operating System)  (0) 2022.01.21

+ Recent posts