TCP/UDP와 3 -Way Handshake & 4 -Way Handshake

김민지·2022년 9월 24일
0

백엔드로드맵

목록 보기
3/13

Transport Layer

  • 전송계층 중 잘 알려진 프로토콜이 UDP, TCP이다

TCP란 & TCP 특징

  • TCP는 애플리케이션에게 신뢰적이고 연결지향성 서비스를 제공한다. 일반적으로 TCP와 IP는 함께 사용되며 IP는 배달을, TCP는 패킷의 추적 및 관리를 하게 됩니다.
  • TCP는 연결형 서비스로, 신뢰적인 전송을 보장하기에 hanshaking하고 데이터의 흐름제어와 혼잡제어를 수행합니다. 하지만 이러한 기능으로 인해 TCP의 속도는 느립니다.
  • 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
  • 흐름 제어 및 혼잡 제어.
  • 높은 신뢰성을 보장한다.
  • UDP보다 속도가 느리다.

흐름제어 & 혼잡제어

  • 흐름제어는 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것입니다. 예를 들어 송신하는 곳에서 감당이 안되게 데이터를 빠르게 많이 보내면 수신자에서 문제가 발생하기 때문입니다.
  • 혼잡제어는 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것입니다. 만약 정보의 소통량이 과다하면패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막습니다.

UDP

  • 데이터를 데이터그램 단위로 처리하는 프로토콜
  • UDP는 비연결형 프로토콜이다. 즉, 할당되는 논리적인 경로가 없고 각각의 패킷이 다른 경로로 전송되고 이 각각의 패킷은 독립적인 관계를 지니게 되는데, 이렇게 데이터를 서로 다른 경로로 독립 처리하는 프로토콜을 UDP 라고 합니다.
  • UDP는 연결을 설정하고 해제하는 과정이 존재하지 않는다. 서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립하거나 흐름제어 및 혼잡제어를 수행하지 않아 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만 데이터 전송의 신뢰성이 낮다. 연속성이 중요한 실시간 서비스(스트리밍)에 좋다.

UDP 특징

  • 비연결형 서비스로 데이터그램 방식을 제공한다
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 신뢰성이 낮다
  • TCP보다 속도가 빠르다

3-way handshaking

Client > Server : SYN #1
Server > Client : SYN ACK #2
Client > Server : ACK #3

  • TCP의 연결을 초기화할 때 사용한다
  • 마지막 ACK가 필요한 이유 : #2번 패킷이 중간에 소실될 수도있다. 일정시간동안 #2번패킷에 대한 응답이 안오면 패킷이 소실된것으로 간주하고 다시 패킷을 보내야하니 #3번 패킷 전송이 필요하다 즉, 연결할거냐는 물음에 응이라고 답까지 해준것을 확인 해야하기때문

4-way handshaking

Client > Server : FIN
Server > Client : ACK
Server > Client : FIN
Client > Server : ACK

  • 세션을 종료하기 위해 사용한다

TCP와 HTTP의 관계

  • HTTP는 응용계층 프로토콜, TCP는 전송계층 프로토콜이다. HTTP는 TCP 기반 위에서 만들어졌기 때문에 TCP 성격을 모두 포함한다.

TCP 특징은 다음과 같다.

  • 3 way handshaking으로 신뢰성 있는 작업을 보장 -> 동기적이며 속도 느림
  • TCP는 패킷 순서도 보장
  • byte array(binary)로 정보 통신
  • Stateful하다. 3way handshaking 과정에서 세션을 서버에 저장해두기 때문이다.
  • Stateful하기 때문에 서버 scale out시 추가적인 작업 과정이 든다. (서버1이 끊기면 서버2로 연결해야하는데 세션을 옮겨줘야 하는 문제 등)

HTTP 특징은 다음과 같다.

  • Stateless하다.(Connection Keep-Alive를 통해 Stateful하게 사용가능)
  • 비연결성(Connectionless)
  • 클라이언트 서버 구조

질문 1

Q. TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?

  • A. Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메시지를 보내기 때문이다.

질문 2

Q. 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?

  • A. 이러한 현상에 대비하여 Client는 Server로부터 FIN 플래그를 수신하더라도 일정시간 동안 세션을 남겨 놓고 잉여 패킷을 기다리는 과정을 거친다.

질문 3

Q. 3 way handshake를 할때 syn패킷을 전송하잖아요
ack패킷은 내가 잘 받았다! 에 대한 패킷인데 syn패킷은 무슨패킷인가요?
패킷을 보낼때 syn+1을 해가며 전송하던데 무슨용도죠,...?

  • 내가 받은 ack패킷이 어느 패킷에 대한 ack패킷인지를 구분하는 용도

정리

TCP, UDP, 3way handshake, 4way handshake에 대해 설명해 보세요

  • TCP와 UDP는 전송계층의 프로토콜중 잘 알려진 프로토콜입니다.
    TCP는 UDP와는 다르게 연결을 지향하는 프로토콜로 핸드쉐이킹 방식을 이용해서 서로의 연결이 잘 되었음을, 잘끊겼음을 확인하는 과정이 들어가게 됩니다. 그렇기 때문에 UDP보다는 느리다는 단점이 있습니다. 하지만 높은 신뢰성을 유지하기 때문에 신뢰성이 필요한 곳에서 TCP를 사용합니다. 그 외에도 흐름제어나 혼잡제어같은 일을 합니다. 흐름제어는 받는쪽 버퍼 오버플로우를 방지하기 위해 데이터 처리 속도를 제어하는 것이고, 혼잡제어는 전송하는 패킷수를 조절하여 혼잡이 일어나는 것을 막는 일입니다. UDP는 그에 반해 데이터를 받았음을 확인하는 과정이 없습니다. 그렇기때문에 신뢰성은 낮지만 빠르다는 장점이 있습니다. 그래서 UDP는 신뢰성보단 연속성이 중요한곳에 쓰입니다.
  • 3 way handshake는 TCP의 연결을 초기화할때 사용합니다. 연결 요청에 대한 SYN을 보내고 그에 대한 답장으로 SYN에 1을 더해서 ACK와 함께 답장을 보냅니다. 그리고 또 그에 대한 답장으로 ACK를 보냅니다.
  • 4 way handshake는 세션을 종료하기 위해 사용됩니다. Client가 FIN 패킷을 보내면 서버는 FIN을 잘받았다는 의미로 ACK를 보냅니다. 그리고 서버는 남은 데이터들을 다 보냈을때 FIN을 보냅니다. client는 서버에게로부터 FIN이 도착하면 잘받았다는 의미로 ACK를 보내게 됩니다.

흐름제어와 혼잡제어에 대해 좀 더 자세히 설명해주세요

  • 흐름제어는 sender와 receiver의 데이터 처리 속도 차이를 제어하기 위한 기법으로, receiver의 버퍼가 감당할 수 없는 속도로 데이터가 전송되어 버퍼 오버플로우가 생기는 것을 방지하기 위해 데이터 전송 속도를 제어하는 것이 흐름제어이다..

  • 혼잡제어는 sender의 데이터 전달 속도와 네트워크 데이터 처리 속도 차이를 해결하기 위한 기법이다.
    한 라우터에 데이터가 몰려 모든 데이터를 처리할 수 없는 경우, 각 sender들은 데이터를 라우터에 재전송 하게되고 이로인해 혼잡이 가중되어 오버플로우나 데이터 손실이 발생한다.
    이와 같은 네트워크 혼잡을 방지하기 위해 sender의 데이터 전송 속도를 제어하는 것이 혼잡제어이다.

  • 흐름제어와 혼잡제어의 차이는 결국
    호스트(컴퓨터)와 호스트간의 데이터 처리인가, 호스트와 네트워크 상의 데이터 처리인가의 차이.

TCP와 HTTP의 관계

  • HTTP는 응용계층 프로토콜, TCP는 전송계층 프로토콜이다. HTTP는 TCP 기반 위에서 만들어졌기 때문에 TCP 성격을 모두 포함한다.

출처
https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake
https://mangkyu.tistory.com/15
https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshak
https://roadofdevelopment.tistory.com/76

profile
안녕하세요!

0개의 댓글