OSI 7 계층에 대하여 설명해 주세요.
- OSI 7계층이란 네트워크에서 통신이 일어나는 과정을 7단계로 나누어 일어나는 과정을 단계별로 알 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있게 한 것입니다.
- 물리(Physical)
- 단지 데이터 전기적인 신호로 변환해서 주고받는 기능을 진행하는 공간
- 즉, 데이터를 전송하는 역할만 진행한다.
- 리피터, 케이블, 허브 등
- 데이터 링크(Data Link)
- 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와주는 역할
- Mac 주소를 통해 통신한다. 프레임에 Mac 주소를 부여하고 에러검출, 재전송, 흐름제어를 진행한다.
- 브릿지, 스위치 등
- 네트워크(Network)
- 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 담당한다.
- 라우터를 통해 이동할 경로를 선택하여 IP 주소를 지정하고, 해당 경로에 따라 패킷을 전달해준다.
- 라우팅, 흐름 제어, 오류 제어, 세그먼테이션 등을 수행한다.
- 라우터, IP
- 전송(Transport)
- TCP와 UDP 프로토콜을 통해 통신을 활성화한다. 포트를 열어두고, 프로그램들이 전송을 할 수 있도록 제공해준다.
- TCP : 신뢰성, 연결지향적
- UDP : 비신뢰성, 비연결성, 실시간
- TCP, UDP
- 세션(Session)
- 데이터가 통신하기 위한 논리적 연결을 담당한다. TCP/IP 세션을 만들고 없애는 책임을 지니고 있다.
- API, Socket
- 표현(Presentation)
- 데이터 표현에 대한 독립성을 제공하고 암호화하는 역할을 담당한다.
- 파일 인코딩, 명령어를 포장, 압축, 암호화한다.
- JPEG, MPEG 등
- 응용(Application)
- 최종 목적지로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.
- 사용자 인터페이스, 전자우편, 데이터베이스 관리 등의 서비스를 제공한다.
- HTTP, FTP, DNS 등
TCP와 UDP에 대하여 설명하고 차이점에 대하여 이야기해 주세요.
- Transmission Control Protocol의 약자로 연결형 서비스를 지원하는 전송계층 프로토콜입니다.
- host간 신뢰성있는 데이터 전달과 흐름제어 및 혼잡제어를 제공합니다.
- 신뢰성이 없는 인터넷을 통해 종단간에 신뢰성 있는 바이트 스트림을 전송 하도록 특별히 설계되었습니다.
- User Datagram Protocol의 약자로비연결형 프로토콜입니다.
- 신뢰성은 낮지만 TCP보다는 속도가 빠릅니다.
- HTTP/3에서 QUIC이라는 프로토콜과 함께 사용됩니다.
- UDP를 사용하는 것들 중 DNS가 있습니다.
TCP에서의 3 way handshake 와 4 way handshake에 대하여 설명해 주세요.
- 3 way handshake은 연결 성립 과정이며 4 way handshake는 연결을 해제하는 과정을 말합니다.
- 클라이언트가 서버에게 SYN 플래그를 보냄 (sequence : x)
- 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 플래그를 보냄 (sequence : y, ACK : x + 1)
- 클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 플래그를 받고, ACK(y+1)를 서버로 보냄
- 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
- 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 서버는 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 되며 소켓을 닫는다 (Closed))
- 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
- 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다. TIME_WAIT 시간이 끝나면 클라이언트도 닫는다.)
흐름제어(Flow Control)에 대하여 설명해 주세요.
- 흐름제어란 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법입니다.
- 수신측이 송신측보다 데이터 처리 속도가 빠르면 문제없지만, 송신측의 속도가 빠를 경우 문제가 생깁니다. 수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실 될 수 있으며, 만약 손실 된다면 불필요하게 응답과 데이터 전송이 송/수신 측 간에 빈번히 발생합니다. 이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절해야합니다.
- Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
- Sliding Window (Go Back N ARQ) : 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
혼잡제어(Congestion Control)에 대하여 설명해 주세요.
- 혼잡제어란 전송하는 데이터 양을 조절하여 혼잡을 피하는 기법
- 송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달된다. 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 된다. 이런 경우 호스트들은 또 다시 재전송을 하게되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시키게 된다. 따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡제어라고 한다.
- 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 하며, 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어라고 한다. 흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다루게 된다.
- AIMD(Additive Increase / Multiplicative Decrease) : 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법
- 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄인다.
- 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형상태로 수렴하게 되는 특징이 있다.
- 문제점은 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못한다. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식이다.
- Slow Start (느린 시작)
- Slow Start 방식은 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려준다. 즉, 한 주기가 지나면 window size가 2배로 된다.
- 전송속도는 AIMD에 반해 지수 함수 꼴로 증가한다. 대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨리게 된다.
- 처음에는 네트워크의 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있다.
- 그러므로 혼잡 현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킨다.
- Fast Retransmit (빠른 재전송)
- 빠른 재전송은 TCP의 혼잡 조절에 추가된 정책이다.
- 패킷을 받는 쪽에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보내게 된다.단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보내게 되므로, 중간에 하나가 손실되게 되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 된다. 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송 해줄 수 있다.
- 중복된 순번의 패킷을 3개 받으면 재전송을 하게 된다. 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지하고 window size를 줄이게 된다.
- Fast Recovery (빠른 회복)
- 혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법이다. 이 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 된다.
HTTP에 대하여 설명해 주세요.
- HyperText Transfer Protocol의 약자로 인터넷에서 데이터를 주고받을 때 사용하는 통신 규약입니다.
- OSI 7 layer 중 7계층에서 사용하는 프로토콜입니다.
- HTTP/1.1, HTTP/2는 TCP를 사용하며 HTTP/3는 UDP를 사용합니다.
- Client-Server 구조
- 무상태성(Stateless)
- 서버가 클라이언트의 상태를 저장하지 않는다는 것
- Request를 보낼 때 Client가 추가 데이터를 전송해야한다는 문제점이 존재
- 항상 같은 서버에 연결될 필요가 없으므로 Scale-Up에 유리
- 비연결성(Connectionless)
- 요청을 한 후 응답을 받으면 바로 연결을 종료합니다. 즉, 불필요한 연결을 하지 않아 서버 유지 자원이 감소합니다.
- 서버 유지 자원을 효율적으로 사용 가능합니다.
- 단순/확장 가능
대칭키 및 비대칭키에 대하여 설명해 주세요.
-
대칭키(Symmetric Key)
- 암호화와 복호화에 같은 암호키(대칭키)를 사용하는 알고리즘
- 장점
- 동일한 키를 주고받기 때문에, 매우 빠르다
- 단점
- 대칭키 전달과정에서 해킹 위험에 노출
-
비대칭키(Asymmetric Key)
- 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘
- 대칭키의 키 분배 문제를 해결하기 위해 고안되었다.
- 자신이 가지고 있는 고유한 암호키(비밀키)로만 복호화할 수 있는 암호키(공개키)를 대중에 공개함
- 단점
- 대칭키에 비해 암호화 복호화가 매우 복잡합니다.(속도가 느리다.)
-
공개키 암호화 방식 진행 과정
- A가 웹 상에 공개된 'B의 공개키'를 이용해 평문을 암호화하여 B에게 보냄
- B는 자신의 비밀키로 복호화한 평문을 확인, A의 공개키로 응답을 암호화하여 A에개 보냄
- A는 자신의 비밀키로 암호화된 응답문을 복호화함
이 방식은 Confidentiallity만 보장해줄 뿐, Integrity나 Authenticity는 보장해주지 못함
-> 이는 MAC(Message Authentication Code)나 전자 서명(Digital Signature)으로 해결 (MAC은 공개키 방식이 아니라 대칭키 방식임을 유의! T=MAC(K,M) 형식)