이 게시물은 다음 링크를 참조하여 학습했습니다.
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한 데이터가 0과 1의 비트로 되어있는데, 전기적 신호이므로 취약함.
==> 에러 직접 수정 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?
*** 패킷 = 세그먼트 + 네트워크 계층 정보
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
TCP와 UDP( 전송 계층 )
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)에 사용
++ UDP와 TCP는 각각 별도의 포트 주소 공간을 관리. UDP – TCP 간 같은 포트 번호를 할당해도 다른 포트로 간주.
TCP Header vs UDP Header
TCP Header는 UDP Header와 비교했을 때, 양방향 송수신을 위한 플래그 비트가 있다
종류 | 내용 |
URG | 긴급 위치 필드 유효 여부 설정 |
ACK | 응답 유효 여부 설정. 최초의 SYN 패킷 이후 모든 패킷은 ACK 플래그 설정 필요. 데이터를 잘 받았으면 긍정 응답으로 ACK(=SYN+1) 전송 |
PSH | 수신측에 버퍼링된 데이터를 상위 계층에 즉시 전달할 때 |
RST | 연결 리셋 응답 혹은 유효하지 않은 세그먼트 응답 |
SYN | 연결 설정 요청. 양쪽이 보낸 최초 패킷에만 SYN 플래그 설정 |
FIN | 연결 종료 의사 표시 |
TCP 3-way handshake와 4-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)로 지정하고, SYN과 ACK 플래그 비트를 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 플래그를 전송
- 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
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: 포트 연결 상태
HTTP와 HTTPS
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
HTTP의 Stateless를 극복하기 위해 사용하는 방식이다.
Cookie에 클라이언트에 대한 정보를 저장해뒀다가 사용하거나 Session을 등록해서 유지하는 방식으로 극복한다.
쿠키 : 키, 값이 들어있는 데이터파일. 이름, 값 만료 날짜, 경로 정보 등이 들어가있다. 클라이언트에 저장. 로그인 유지나 사용자 정보 일정 시간 저장할 때 사용
세션 : 서버 메모리에 저장되는 정보. 서버 메모리 저장되지만 세션 ID가 쿠키에 저장됨.
HTTP와 HTTPS 동작 과정
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 |