기술면접/네트워크

[기술면접] 네트워크 2

[dev] hiro 2024. 11. 8. 15:47
제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
접은 글을 통해 먼저 답변을 해보시고 제가 정리한 답을 확인해보시기 바라겠습니다!!

면접 리스트

소켓이란 무엇인가요?

더보기

응용 프로그램에서 TCP/IP 기반으로 생성하는 것으로 응용프로그램과 transport layer를 연결해주는 역할로, 두 머신이 네트워크를 통해 서로 통신할 수 있도록 양쪽에 생성되어 서로 다른 프로세스가 양방향, 실시간 통신을 할 수 있게 해주는 interface입니다.

소켓이 구현됨으로써, 네트워크 및 전송 계층의 캡슐화가 가능해집니다.

쿠키와 세션의 차이를 설명해주세요

더보기

HTTP 프로토콜은 connectionless를 지향하고 stateless protocol로써 리소스의 낭비를 줄여주지만 매 통신마다 클라이언트가 인증이 필요합니다.

 

쿠키와 세션은 이 단점을 보완하는 기술인데 두 기술의 가장 큰 차이는 저장위치로, 쿠키는 클라이언트세션은 서버에 저장됩니다. 그래서 쿠키는 빠르지만 보안에 취약하고, 세션은 느리지만 상대적으로 보안성이 좋습니다.

 

또 쿠키는 브라우저가 종료되어도 남아있지만 세션은 삭제된다는 차이가 있습니다. 따라서 보안성이 중요할때에는 세션을, 종료시에 유지되기 위해서는 쿠키를 사용해야합니다. 하지만 세션의 경우 서버의 자원을 사용하는 것이므로 사용자가 많아지면 자원 관리면에서 문제가 발생할 수 있습니다.

세션과 JWT Token을 비교해서 설명해주세요

더보기

세션은 서버에서 사용자의 id와 pw를 비교하여 세션 저장소에서 세션 id를 넘겨주고 사용자의 정보를 저장합니다. 클라이언트가 서버에게 정보를 보낼때 쿠키에 세션 id를 포함해서 같이 보내 서버는 세션 저장소에서 사용자임을 알 수 있고, 이전에 사용자가 했던 통신을 이어서 할 수 있게 합니다.

 

JWT는 서버에서 발급하는 것으로, 따로 저장소 없이 사용자의 고유 id 값을 보유하고 서버는 토큰을 검증 이후 조작 여부와 유효기간을 확인합니다. 검증이 완료되면 payload를 디코딩하여 사용자의 id에 맞는 데이터를 가져옵니다.

 

가장 큰 차이는 Session 저장소에 유저의 정보를 넣는 반면 JWT는 토큰 안에 유저의 정보를 넣습니다.

TCP가 어떻게 신뢰성을 보장하나요?

더보기
  1. 연결 설정: TCP 3방향 핸드셰이크는 송신자와 수신자 사이의 연결을 설정하는 데 사용됩니다. 여기에는 송신자의 SYN(동기화) 패킷, 수신자의 SYN-ACK(동기화-확인) 패킷 및 송신자의 ACK(확인) 패킷이 포함됩니다.
  2. 시퀀스 번호: TCP는 전송된 각 데이터 바이트에 고유한 시퀀스 번호를 할당합니다. 이렇게 하면 수신기가 올바른 순서로 데이터를 재구성할 수 있습니다.
  3. ACK: 수신기는 ACK 패킷을 전송하여 데이터의 성공적인 수신을 확인합니다. 보낸 사람이 지정된 시간 초과 기간 내에 ACK를 수신하지 않으면 승인되지 않은 데이터를 재전송합니다.
  4. Selective ack 및 Go-Back-N: TCP는 선택적 반복 또는 Go-Back-N 메커니즘을 사용하여 손실되거나 순서가 잘못된 패킷을 처리할 수 있습니다. Selective ack 을 통해 수신기는 특정 손실 패킷을 승인하고 재전송할 수 있는 반면 Go-Back-N손실된 패킷 이후 모든 후속 패킷을 재전송해야 합니다.

TCP가 어떻게 흐름제어를 구현하나요? 그리고 윈도우 사이즈는 무엇인가요?

더보기

TCP는 Sliding window를 이용하여 흐름제어를 구현합니다. 수신 측에서 설정한 윈도우 크기만큼 송신측에서 ACK 없이 세그먼트를 전송할 수 있게 데이터를 동적으로 조절하는 기법입니다. 수신측은 윈도우 사이즈가 바뀔때마다 송신측에게 윈도우 사이즈를 보낼 수 있고, 송신측은 그에 따른 데이터 바이트 크기만큼 확인 응답없이 계속해서 보낼 수 있습니다. 만약 ACK가 왔다면 그만큼 윈도우를 이동하면 됩니다.

 

윈도우 사이즈는 수신측에서 받을 수 있는 바이트 수를 의미하는데 호스트들은 데이터를 보내기 전에 윈도우 사이즈 크기를 수신 호스트의 윈도우 사이즈 크기에 맞춥니다.

 

따라서 TCP는 window size에 따라 sliding window로 흐름 제어를 구현합니다.

TCP 재전송 매커니즘을 설명해보세요

더보기

먼저 타임아웃이 있습니다. 송신측에서 설정한 RTO보다 RTT가 더 크면 패킷이 타임아웃되어 손실되었다고 생각하여 패킷을 다시 보냅니다. 해당 방법은 동작이 느리므로 네트워크의 지연을 초래할 수 있습니다.

 

그 대안으로 Fast Retransmission이 있습니다. Fast Retransmission은 중복된 ACK가 세개가 되었을 시에 송신측에서 패킷이 유실되었다고 하여 패킷을 다시 보내는 것을 말합니다. 또 패킷을 보낼때에는 Go-back-N 방식이 아닌 Selective Retransmission으로 네트워크 리소스를 절약하고 효율성을 향상 시킬 수 있습니다.

TCP 혼잡제어를 어떻게 관리하나요? 네트워크 혼잡을 예방하기 위한 메커니즘은 무엇인가요?

더보기

TCP는 혼잡제어를 AIMD와 slow start가 있습니다.

 

AIMD는 처음 패킷을 하나씩 보내고 문제없이 도착하면 window size를 1씩 증가시켜 전송하는 방식입니다. 만약 패킷 전송에 실패하면 그때의 패킷을 절반으로 줄이고 다시 window 사이즈를 1씩 증가합니다. 하지만 이 방법은 초기 네트워크에 많은 리소스를 사용하지 못하므로 많은 시간이 걸립니다.

 

slow start는 전송 속도를 늦게 올리는 AIMD와 다르게 window size를 지수형태로 증가합니다. 만약 혼잡현상이 발생하면 window 사이즈를 1로 떨어뜨리고 다음 1씩 증가합니다. fast recovery도 있는데 혼잡현상이 발생했을 때 window 사이즈를 1로 낮추는 것이 아닌, window 사이즈를 반으로 낮추어 그 window size에서 1씩 증가하는 방법입니다.