개발하는 체대생

TCP와 UDP (3-way handshake, 4-way handshake) 본문

취업스터디

TCP와 UDP (3-way handshake, 4-way handshake)

개발하는체대생
질문 : TCP와 UDP의 공통점과 차이점을 설명해보세요.

답변 : TCP와 UDP는 인터넷에서 데이터를 주고 받는 데 사용되는 프로토콜입니다.둘 다 데이터 전송을 위해 사용되지만, TCP는 연결 지향적이며 신뢰성 있는 데이터 전송을 보장합니다. 반면에 UDP는 비연결 지향적이며 데이터 전송에 대한 보장성이 낮습니다. 그래서 TCP는 대용량의 데이터 전송이 필요한 애플리케이션에 적합하고, UDP는 실시간 데이터 전송이 필요한 애플리케이션에 적합합니다.

TCP(Transmission Control Protocol)

TCP는 신뢰성 있는 데이터 전송을 보장하는 연결형 프로토콜입니다. 이것은 마치 전화통화에서 상대방이 대답을 해야만 대화가 이루어지는 것과 유사합니다. TCP는 *3-way handshake 방식으로 연결을 맺고, 데이터 전송 후에는 반드시 연결을 종료해야 합니다.

예를 들어, 온라인 쇼핑몰에서 물건을 주문할 때, 주문서를 작성하고 주문 버튼을 누르면 해당 주문이 서버로 전송됩니다. 이때, TCP 프로토콜을 사용한다면, 주문서를 한 조각씩 나누어 전송하고, 전송 중에 어떤 조각이 손실되거나 오류가 발생하면 다시 보내는 등의 작업을 수행하여, 주문서가 정확하게 서버에 도착하는 것을 보장합니다.

 

UDP(User Datagram Protocol)

UDP는 비연결형 프로토콜로, TCP보다 간단하고 빠릅니다. UDP는 데이터를 전송하기 전에 연결 설정을 하지 않으며, 전송 중인 패킷의 손실 여부를 확인하지 않습니다.

예를 들어, 인터넷에서 동영상을 스트리밍하는 경우, UDP 프로토콜을 사용한다면, 동영상 파일을 한 번에 전송하는 것이 아니라, 작은 조각으로 나누어 전송하게 됩니다. 만약 전송 중에 일부 패킷이 손실되더라도, 다음 조각으로 넘어가면서 계속해서 스트리밍이 이루어지기 때문에, 사용자는 거의 끊김 없이 동영상을 시청할 수 있습니다.

 

TCP와 UDP의 공통점

TCP와 UDP의 공통점은 모두 인터넷 프로토콜 중에서 가장 많이 사용되는 프로토콜이라는 점입니다. 또한, 둘 다 패킷이라는 단위로 데이터를 전송합니다. 또한, 둘 다 IP 프로토콜을 기반으로 동작하며, 전송 제어 프로토콜이라는 공통적인 개념을 포함합니다. 그리고 둘 다 네트워크 계층에서 사용되는 프로토콜입니다.

 

TCP와 UDP의 차이점

TCP와 UDP의 가장 큰 차이점은 신뢰성 여부입니다. TCP는 연결 설정, 연결 종료 등의 작업으로 데이터 전송에 대한 신뢰성을 보장하지만, UDP는 손실된 패킷을 확인하지 않기 때문에 신뢰성이 낮습니다. 또한, TCP는 패킷 전송 후에 반드시 응답을 받아야만 다음작업을 수행할 수 있습니다. 그에 반해 UDP는 응답을 받지 않고도 계속해서 데이터를 전송할 수 있습니다.

TCP는 데이터를 전송하기 전에 반드시 연결을 설정하고, 데이터 전송 후에는 연결을 종료해야 합니다. 반면에 UDP는 연결 설정이나 연결 종료 과정이 없으며, 데이터를 전송하는 즉시 송신자는 다른 일을 수행할 수 있습니다.

 

 

*3-way handshake 방식이란?

3-way handshake는 TCP 연결 설정 방식 중 하나로, 데이터를 전송하기 전에 클라이언트와 서버 간에 논리적인 연결을 설정하는 과정입니다.

3-way handshake

1. 연결요청 (신호 보낼게 잘 받아) C -> S

클라이언트는 서버에 SYN 패킷을 보냅니다.

이때 SYN 패킷에는 클라이언트가 사용할 임의의 숫자(시작 순서 번호)가 포함되어 있습니다.

 

2. 연결요청 받고 대기 상태 (잘 받았어, 내 신호는 받아져?) S -> C

서버는 클라리언트의 SYN 팸킷을 받고, SYN/ACK 패킷을 클라이언트로 보냅니다.

이때 SYN/ACK 패킷 안에는 서버가 사용할 임의의 숫자와, 이전에 클라이언트가 보낸 숫자에 1을 더한 번호가 포함되어 있습니다.

 

3. 연결완료 (응 잘 받았어!!) C -> S

클라이언트는 서버로 부터 SYN/ACK 패킷을 받으면, ACK 패킷을 서버로 보내서 이전에 서버가 보낸 임의의 숫자에 1을 더한 숫자를 서버에게 알려줍니다.

 

* SYN (synchronize sequence numbers) - 연결 확인을 위해 보내는 무작위의 숫자값 (내 말 잘 들려?)
* ACK (acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK (잘 들려)
* ISN (Initial sequence numbers) - Client와 Server가 각각 처음으로 생성한 SYN

*4-way handshake 방식이란?

TCP 4-way handshake는 TCP 연결을 종료하는 방식입니다. 이 과정은 TCP 3-way handshake와 비슷하지만, 한 쪽에서 연결을 끝내는 것이기 때문에 좀 더 복잡합니다.

4-way handshake

1. 연결 종료 요청 (나 이제 신호다 보냈어 이제 갈게) C -> S

클라이언트에서 연결을 종료하기 위해, FIN(종료 요청) 플래그를 서버에게 보냅니다.

 

2. 종료 응답 (아 갈꺼야?) S -> C

서버는 FIN 플래그를 받으면, ACK(응답 확인) 플래그를 클라이언트에게 보내 응답합니다.

 

3. 서버 종료 요청 (그럼 나도 가야겠다. 안녕)  S -> C 

서버에서도 연결을 종료하기 위해, FIN 플래그를 클라이언트에게 보냅니다.

 

4. 클라이언트 종료 응답 (잘가!) C -> S

클라이언트는 FIN 플래그를 받으면, ACK 플래그를 서버에게 보내 응답합니다. 이제, 클라이언트와 서버는 모두 연결을 종료하게 됩니다.

* FIN(Finish) - TCP 연결을 종료하겠다는 메시지

결론

TCP와 UDP는 각각의 특징에 따라 다른 상황에서 사용됩니다. 만약 신뢰성 있는 데이터 전송이 필요한 경우에는 TCP를, 데이터 전송 속도가 중요한 경우에는 UDP를 사용하는 것이 적절합니다.

Comments