⌨️ CS 관련 지식 네트워크 관련 기술 면접 대비
CS 관련 기술면접을 대비한 준비를 기록해 두며, 해당 항목들에 대해 깊게 알아야 할 필요가 있는 경우 별도의 포스팅을 통해 추가로 작성하려 한다.
1. 웹 통신의 큰 흐름: https://www.google.com/ 을 접속할 때 일어나는 일
2. TCP와 UDP의 차이점에 대해서 설명
2.1. 연결 지향 방식과 비연결 방식
연결 지향 방식 -> TCP
송신자와 수신자가 1:1로 연결 상태를 유지하면서 통신하는 것을 의미
데이터를 보내기 전에는 연결 설정(Connection Establish) 단계를, 보낸 후에는 연결 종료(Connection Close) 단계를 거친다.
데이터를 교환하는 데 있어 좀 더 안전하고 신뢰성(reliable) 있는 환경을 제공하지만, 과정이 더 복잡
- 헤더에 목적지 정보를 포함해 시퀀스 넘버, 승인 넘버, 제어 필드 등 많은 데이터가 담겨 있음
- 신뢰성과 흐름제어
- 혼잡도 제어
비연결 방식 -> UDP
송신자와 수신자가 연결 상태를 유지하지 않고 통신하는 것을 의미
송신자는 수신자의 수신 여부와 상관없이 데이터를 전송, 데이터의 정확성과 순서 보장 x
- 체크섬 정도의 오류 검출 기능은 있지만, 복잡한 데이터를 검증하기는 어렵기 때문에 통신에서 발생하는 예외 처리 기능들을 직접 구현
- 데이터가 독립적인 패킷으로 전송되며 헤더 자체에 순서 정보가 없어 수신 측에서 순서를 재조립
- 중간에 패킷 손실 시 , 알아낼 방법이 없다 (프로토콜 자체적으로)
3. TCP 3, 4 way handshake 에 대해서 설명
SYN
(synchronize sequence numbers) - 연결 확인을 위해 보내는 무작위의 숫자값
ACK
(acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK 전달
ISN/SEQ
(Initial sequence numbers) - Client와 Server가 각각 처음으로 생성한 SYN
3.1. 3 way handshake
연결 설정 단계 에서는 3단계로 핸드셰이크 과정을 진행
연결 요청을 나타내는SYN
플래그를 클라이언트와 서버가 교환하는 것에 의의를 두는 단계,
데이터를 수신한 것을 알리기 위해 ACK
넘버를 함께 전송하는 데,
받은 seq
번호에 1을 더해서 보낸다.
데이터 교환 과정
이 과정에서도 클라이언트와 서버는 데이터를 잘 수신했다는 ACK
넘버를 상대에게 보내는데, 데이터 교환 가정에서는
상대방에게서 마지막으로 받은 seq
넘버에 수신한 데이터(세그먼트)의 바이트수 +1 만큼을 더 한 값을 보낸다.
TCP는 이 값을 이용해 통신 과정 중 어떤 부분에서 손실이 났는지를 파악한다.
3.2. 4 way handshake
연결 종료 단계는 4단계의 핸드셰이크 과정을 거친다.
종료 단계에서는 FIN
플래그를 교환하는 것에 의의를 두며, 연결 설정 단계처럼 상대방에게서 받은 seq 번호에 1을 더해 ACK넘버를 전송한다.
4. HTTP 와 HTTPS의 차이점에 대해서 설명
4.1. HTTP
서버/클라이언트 모델에 따라 데이터를 주고 받기 위한 프로토콜 80 포트를 사용
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동 , Stateless 프로토콜
4.2. HTTPS
HTTP에 보안 부분을 개선하여 암호화가 추가된 프로토콜 443 포트를 사용
SSL(Secure Soket layer) 를 활용하여 보안 개선
5. HTTPS에 대해서 설명하고 SSL Handshake에 대해서 설명
5.1. HTTPS
4.2에서 소개했듯이, HTTP 에 데이터 암호화가 추가된 프로토콜이며 대칭키 암호화 방식과
비대칭키 암호화 방식을 모두 사용하고 있다.
- 대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
- 키가 노출되면 매우 위험하지만 연산 속도가 빠름 - 비대칭키 암호화
- 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
- 키가 노출되어도 비교적 안전하지만 연산속도가 느림
5.2. SSL Handshake( TLS HandShake)
파란색 칸에 해당하는 것들이 3 way handshake에서 봤던 흐름이고 이에 더해
노란색 칸에 해당하는 것들이 SSL handshake이다.
각 부분들에 대해 간단히 알아보자.
서버는 CA에 사이트 정보와 공개 키를 전달하여 인증서를 받음 →
클라이언트는 브라우저에 CA 공개 키가 내장되어 있다고 가정 →
ClientHello(암호화 알고리즘 나열 및 전달) →
ServerHello(암호화 알고리즘 선택) →
Server Certificate(인증서 전달) →
Client Key Exchange(데이터를 암호화 할 대칭 키 전달) →
Client / ServerHello done (정보 전달 완료) →
Finished(SSL Handshake 종료)
*내용이 많으므로 별도의 포스팅을 통해 심화 고려 *
6. GET과 POST의 차이점에 대해서 설명
캐시 | ⭕️ | ❌ |
브라우저 기록 | ⭕️ | ❌ |
북마크 추가 | ⭕️ | ❌ |
데이터 길이 제한 | ⭕️ | ❌ |
HTTP 응답 코드 | 200(Ok) | 201(Created) |
언제 주로 사용하는가? | 리소스 요청 | 리소스 생성 |
리소스 전달 방식 | 쿼리스트링 | HTTP Body |
idempotent | ⭕️ | ❌ |
idempotent -> 멱등성
-> 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
7. HTTP 메서드와 이것이 하는 역할에 대해서 설명
🌟8. RESTful 이란 무엇이며, 이것에 대해서 아는대로 설명
🌟9. CORS란 무엇이며 이것에 대해서 설명
10. OSI 7계층과 그 존재 이유, TCP/IP 4 계층에 대해 설명
11. 웹 서버 소프트웨어(Apache, Nginx) 는 OSI 7 계층 중 어디서 작동하는지 설명
12. 웹 서버 소프트웨어(Apache,Nginx) 의 서버 간 라우팅 기능은 OSI 7 계층 중 어디서 작동하는지 설명
🌟REFERENCE
Github: https://github.com/ksundong/backend-interview-question