TCP/UDP 면접 질문 - TCP/UDP myeonjeob jilmun


Solution/면접

2022. 3. 19. 11:00

Q. TCP와 UDP의 차이에 대해서 설명해보세요.

TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램단위로 전송하는 프로토콜입니다.

TCP는 가상 회선을 만들어 신뢰성을 보장하도록(흐름 제어, 혼잡 제어, 오류 제어) 하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느린편입니다.

TCP는 그래서 파일전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 스트리밍, RTP와 같이 연속성이 더 중요한 서비스에 사용됩니다.

+) 하지만 UDP도 신뢰성을 UDP자체에서 보장하지 않는 것 뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있습니다. 그래서 HTTP/3QUIC이라는 프로토콜을 기반으로 하는데, QUICUDP를 기반으로 합니다. , UDP 자체는 신뢰성을 보장하지 않지만, 추가적인 정의를 통해 신뢰성을 보장받을 수 있습니다.

'Solution/면접' Related Articles


TCP와 UDP에 대해 설명해주세요

OSI 7계층에서 전송계층(Transport layer)에 속하는 데이터 전송 프로토콜입니다.

TCP가 뭔가요?

TCP는 Transmission Control Protocol의 약자로

데이터가 반드시 전달되는 것을 보장하는 프로토콜로 연결지향, 높은 신뢰성, 전 이중 방식, 바이트 스트림 등의 특징이 있습니다.

연결지향(Connection-oriented) | 2개의 호스트가 통신을 하기 전 연결이 이루어져야 한다
높은 신뢰성(Reliability)와 순차전송(in-order-delivery)를 보장
- 흐름 제어(Flow control)을 통해 송신자의 데이터 양을 조절한다
- 혼잡 제어(Congestion control)을 통해 네트워크 상황을 감지하고 송신자의 데이터 양을 조절한다
- 에러 감지(Error detection)을 통해 잘못 전송되었을 경우 재전송한다
전 이중 방식(Full duplex)으로 두 호스트 모두 송신자 / 수신자가 될 수 있다
바이트 스트림(Byte stream)을 사용하여 데이터를 연속적인 바이트로 보고, 세그먼트라는 단위의 패킷으로 쪼개 보낸다
HTTP, FTP, SMTP, TELENT 등에서 사용된다
TCP와 호스트 간 연결을 설정하는 방법에 대해 설명해주세요

TCP와 호스트 간 연결 설정 방법은 SYN/ACK 패킷이 있습니다.

SYN 패킷은 동기화(synchronize)를 의미하며 ACK 패킷은 확인(acknowledgement)를 의미합니다

순서?
1. 일단 서버는 클라이언트의 연결요청을 기다립니다.
2. 클라이언트가 서버에게 연결요청을 하기 위해 시퀀스 번호를 생성하여 SYN 패킷에 담아 보냅니다(syn_sent)
3. syn 패킷을 받은 서버는 자신만의 시퀀스 번호를 생성하여 syn 패킷에 담고 클라이언트의 syn 패킷에 있는 시퀀스 번호에 1을 더해 ack 패킷에 담아 같이 보냅니다(syn_received)
4. syn+ack 패킷을 받은 클라이언트는 ack 패킷의 시퀀스 번호를 보고 자신이 보낸 시퀀스 번호와의 차이를 확인합니다. 차이가 1이라면 정상 연결로 판단하고 서버의 syn 패킷에 있는 시퀀스 번호에 1을 더해 ack 패킷에 담아 보냅니다(클라이언트 established)
5. 클라이언트의 ack 패킷을 받고 그 안의 시퀀스 번호가 보냈던 syn 패킷의 시퀀스 번호 +1 이라면 연결이 되었다고 판단합니다. 이후 본격적인 통신을 할 수 있게 됩니다
UDP가 뭔가요?

TCP와 달리 데이터의 신뢰성을 보장하지 않는 프로토콜입니다

비연결성(connection-less)로 연결을 설정하고 해제하는 과정이 없다
신뢰성이 없고 전송되는 데이터의 순서를 보장하지 않는다
- 흐름제어, 혼잡제어가 없다
- 에러감지는 헤더의 체크섬(checksum)을 이용한 정도밖에 없다
패킷의 단위가 데이터그램(datagram)으로 경계가 분명하여 수신자는 송신자가 보낸 그대로의 크기를 받는다
서버와 클라이언트는 유니캐스트(1:1), 브로드캐스트(1:N), 멀티캐스트(1:M)이 가능하다
TCP에 비해서 하는 작업이 작기 때문에 속도가 빠르다
DNS, DHCP, 비디오/오디오 스트리밍 등에 사용된다
HTTP란?

HTTP는 클라이언트-서버 모델을 따르는 프로토콜로 TCP/IP 위에서 동작하며, well-known 포트인 80번 포트를 사용하여 통신합니다.

첫 번째 표준은 HTTP/1.1이며 이후로 HTTP/2및 HTTP/3이 등장하였습니다.

HTTP의 특징

비-연결 지향(Connectionless)과 무상태성(Stateless)라는 특징을 가집니다.

1. 비연결 지향은 클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊는 특징입니다.

이를 통해 서버의 부담을 줄일 수 있지만, 리소스 요청마다 연결해야 하는 오버헤드 비용이 발생할 수 있습니다.

해결

(해결을 위해서는, 요청 헤더의 Connection : keep-alive 속성으로 지속적 연결 상태를 유지할 수 있습니다.

즉, 요청을 할 때마다 연결하지 않고 기존의 연결을 재사용하는 방식입니다. HTTP 1.1부터는 지속적 연결 상태가 디폴트 상태입니다)

2. 무상태성은 요청이 독립적으로 여겨지는 특징으로, 서버는 클라이언트의 상태를 유지하지 않기 때문에 클라이언트에 맞게 리소스를 응답하는 것이 불가능합니다 .해결을 위해 쿠키나 세션 또는 토큰 방식의 OAuth및 JWT가 사용됩니다

비연결성(비연결지향)의 장단점?

서버가 다수의 클라이언트와 연결을 유지하면서 생기는 오버헤드를 방지할 수 있습니다.

그러나 동일한 클라이언트가 다시 접근해도 항상 새롭게 연결을 시도하고 해제해야 하는 비용이 발생합니다.

KeepAlive란?

지정된 시간동안 서버와 클라이언트 사이의 패킷 교환이 없을 경우 상대방의 안부를 묻기 위해 패킷을 보내지만, 패킷에 반응이 없으면 접속을 끊게 됩니다.

무상태성이란?

비연결성으로 인해 서버가 클라이언트를 식별할 수 없는 상황을 말합니다.

클라이언트에 접근할 때 마다 계속 새롭게 인증을 해야 하는 번거로움이 발생하기 때문에 쿠키와 세션, 토큰 등으로 이를 예방합니다.

쿠키
서버가 클라이언트를 식별할 수 있게 합니다
사용자 정보가 브라우저에 저장되어 보안에 취약합니다
세션
서버에서 사용자 정보를 저장합니다. (하지만 보안에 완벽하지는 않습니다!)
서버의 메모리를 차지하게 되고, 서버 과부하의 원인이 될 수 있습니다
OAuth, JWT(토큰 기반의 인증 방식)
보호할 데이터를 토큰으로 치환해서 원본 데이터 대신 토큰을 사용합니다.
탈취다아더라도 어차피 토큰이라 보안성이 높습니다
HTTP method / CRUD

GET | 서버에게 조회할 리소스를 요청합니다 _ READ

POST | 서버에게 body에 생성할 데이터를 삽입하여 전송합니다 _ CREATE

PUT | 서버에게 본문에 수정할 데이터를 삽입하여 전송합니다 _ UPDATE

DELETE | 서버에게 삭제할 리소스를 요청합니다 _ DELETE

PATCH | 일부만 수정합니다 

응답 상태코드에 대해 아는 대로 말씀해주세요 / 경험해본 상태코드가 있나요?

1xx | (요청에 대한 정보) 요청을 받았으면 작업을 계속한다

2xx | (성공) 요청을 성공적으로 수행했다

3xx | (리다이렉션) 클라이언트가 요청을 마치기 위해 추가적인 동작을 취해야 한다

4xx | (클라이언트 오류) 클라이언트에 오류가 있다

5xx | (서버 오류) 서버에 오류가 있다

💛 

🙈[HTTP] HTTP 특성(비연결성, 무상태)과 구성요소 그리고 Restful API🐵

취준생이 반드시 알아야 할 프론트엔드 지식들