티스토리 뷰

728x90
반응형

TCP란?


  • Transmission Control Protocol(전송 제어 프로토콜)의 약자입니다.
  • 주로 클라이언트와 서버간에 데이터를 신뢰성 있게 전달하기 위해 사용합니다.
  • 네트워크를 4계층으로 나눌때 네트워크 엑세스 계층, 인터넷 계층, 트랜스포트 계층, 어플리케이션 계층으로
    나뉘는데 TCP는 트랜스 포트 계층의 대표적인 프로토콜에 속합니다.
  • TCP는  웹이나 이메일 같이 데이터가 제대로 전달되어야 하는 통신에 주로 사용됩니다.
  • 통신을 맺고 끊는 과정에서 클라이언트와 서버간에 확인 절차를 거치는데 이러한 특징으로 연결지향 프로토콜이라고 합니다.

 

 

TCP의 특징


  • point-to-point - 하나의 송신 측과 하나의 수신 측이 통신하는 1:1 통신입니다.
  • reliable - 신뢰성 있는 데이터를 전송합니다. 수신 확인(Ack)을 통하여 신뢰성 있는 통신을 수행합니다. 주어진 시간에 확인 응답이 도착하지 않으면 ACK를 재전송합니다.
  • pipelined - TCP 흐름 제어와 혼잡 제어가 window size를 설정합니다.
  • full duplex(전이중 통신) - 쌍방향 통신이 가능합니다. 즉 데이터를 주고 받을 수 있습니다.
  • connection-oriented - 연결 지향적입니다. 송신 측과 수신 측이 데이터를 교환하기전 hand-shaking을 합니다.
  • flow-control - 흐름 제어를 합니다.
    • 상대방이 받을 수 있는 만큼만 데이터를 효율적으로 전송하는 것입니다. 내가 데이터를 보내는 속도가 상대방이 데이터를 받는 속도보다 빠르다면 데이터는 계속 쌓이게 될것입니다. 이렇게 데이터가 쌓이는 공간을 버퍼라고 하는데 이 버퍼의 크기는 한정되어 있습니다. 한정되어 있기 때문에 버퍼의 크기보다 더 많은 데이터가 쌓이게 된다면 데이터는 손실, 즉 없어질 것입니다. 그러면 나는 분명 보냈는데 상대방은 데이터의 존재를 모르는 경우가 발생할 수 있는데 이러한 경우를 방지하기 위하여 흐름제어가 있습니다. 그렇기 때문에 내가 자료를 보낼 때 버려지지 않을 정도로만 데이터를 보낼 수 있습니다.
  • congestion control - 혼잡 제어를 합니다.
    • 네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어하는 것을 말합니다. 혼잡의 정도에 대한 판단 기준은 데이터의 손실 발생 유무로 판단합니다. 전송한 데이터에 대해 손실이 발생하게 된다면 네트워크가 혼잡한 상태로 판단하여 전송량을 조절하게 됩니다.
  • 오류 제어
    • 데이터의 오류나 손실없이 안전한 전송을 보장하는 것을 말합니다. 만약 오류나 손실이 발행하면 재전송을 수행하여 이를 보정하는 것입니다.
  • 바이트 스트림 통신 - 데이터의 의미에 상관없이 데이터를 나눠서 전송합니다.

 

TCP의 헤더


💡 Flags 비트 표 (1 또는 0)

 

  • URG - 긴급 포인터가 있음을 표시
  • ACK - 확인 응답번호가 기술되어 있음을 표시 
  • PSH - 데이터를 가능한 빨리 응용계층에 보내야함을 표시
  • RST - 연결을 재설정하기 원함을 표시
  • SYN - 연결을 초기화하기 위해 순서번호를 동기화
  • FIN - 송신측이 데이터의 전송을 종료함

 

💡 3 way hand shake

 

  • TCP 통신은 커넥션을 맺는 단계는 3단계로 진행되며 이를 3방향 핸드셰이크라고 부릅니다.
  • 커넥션이 맺어지면 데이터를 전송할 수 있는 상태가 되고 데이터 전송이 끝나면 커넥션을 끊게 됩니다.

  • LISTEN[서버] - 포트가 열린 상태로 연결 대기 요청
  • STN_SENT[클라이언트] - SYN을 요청한 상태
  • SYN_RECEIVED[서버] - SYN 요청을 받고 클라이언트의 응답 대기
  • ESTABLISHED[클라이언트, 서버] - 연결이 잘 성립된 상태

 

1단계: 잘 지내니?

  • 클라이언트가 연결 요청 메시지(SYN)을 전송합니다 클라이언트는 Synchronize Sequence Number(SYN)라는 임의의 난수를 함께 전송합니다.

 

2단계: 응 잘지내! 너는 잘 지내니?

  • 사버가 요청을 수락하며, 클라이언트에게도 잘 지내냐는 연결 요청 메시지를 전달합니다. 그 메시지에는 Acknowledgement number(ACK)를 포함하고 있으며, 이 번호는 전달 받은 SYN보다 +1한 값을 가집니다.

 

3단계: 응 나도 잘지내!

  • 클라이언트가 서버로부터 받은 ACK에 +1하여 전송합니다.

 

💡 왜 2 way hand shake는 안되는 걸까?

 

  • TCP는 양방향 연결이기 때문에 클라이언트가 서버에게 자신의 존재를 알리고 서버도 클라이언트에게 자신의 존재를 알리고 대답을 얻어와야 합니다. 그렇기 때문에 총 4단계가 필요하며, 축약을 한것이 3단계 입니다. 

 

💡 4 way hand shake

 

  • TCP가 연결을 끊는 과정입니다.

1단계: 나 연결 그만 하고싶어

  • 클라이언트가 서버에 연결을 종료하고 FIN 플래그 전송, 클라이언트는 종료신호를 기다리는 FIN WAIT 1상태

 

2단계: 응 알겠어, 그래도 보내던 것은 마저 보낼게

  • 서버는 일단 확인했다는 메시지(ACK)를 보내고 자신의 통신이 끝날때까지 기다리게 함, 서버는 CLOSE WAIT상태이고 클라이언트는 FIN WAIT 2상태로 전환

 

3단계: 다 보냈어 이제 연결 그만하자!

  • 서버가 통신이 끝나면 이제 종료해도 된다는 FIN 플래그를 클라이언트에게 전달, 서버는 LAST ACK 상태로 전환되고 클라이언트는 TIME WAIT상태로 전환

 

4단계: 응 고생했어!

  • 클라이언트는 연결 종료를 했다는 응답(ACK) 플래그를 보내고 서버는 CLOSED 상태가 됩니다.
  • 마지막 연결 종료의 ACK를 서버로 보내는데 이때 서버는 클라이언트로부터 받은 ACK를 잘 받았다고 다시 클라이언트에게 알려주지 않습니다. 그렇기 때문에 클라이언트는 잠시동안 Timewait을 하게 됩니다. 기다리면서 서버가 문제가 있는지 파악합니다. 만약 서버가 문제가 발생하게되면 다른 패킷을 보내는데 혹시나 문제가 발생하여 패킷을 보내지 않을까 잠시동안 Timewait을 하게되는 것입니다.

 

UDP란?


  • User Datagram Protocol의 약자입니다.
  • 여기서 Datagram은 독립적인 관계를 지니는 패킷을 뜻합니다.
  • 각각의 패킷은 독립적이기 때문에 패킷마다 서로 다른 경로로 독립적으로 처리하게 됩니다.

 

UDP의 특징


  • 비연결형 서비스입니다.
  • 비연결형이기 때문에 정보를 주고 받을 때 TCP의 3 way handshaking과 같은 연결절차를 밟지 않습니다.
  • 비연결형이기 때문에 TCP보다 속도가 빠릅니다.
  • UDP는 수신자가 패킷을 제대로 받던, 받지 않던 상관하지 않고 그저 데이터를 전송합니다.
  • TCP의 세그먼트 헤더는 20바이트이지만 UDP의 세그먼트는 8바이트밖에 되지 않습니다.

 

UDP의 헤더


 

TCP와 UDP의 공통점


  • 포트 번호를 이용하여 주소를 지정합니다.
  • 데이터 오류 검사를 위한 체크섬이 존재합니다.

 

TCP와 UDP의 차이점


 

 

 

 

 

 

728x90
반응형

'Network' 카테고리의 다른 글

TCP 커넥션 관리  (0) 2023.04.04
HTTP 메시지  (0) 2023.03.26
URL과 리소스  (0) 2023.03.18
HTTP에 대해  (0) 2023.03.18
Network - HTTP 메서드와 안정성, 캐시가능성 그리고 멱등성  (0) 2022.01.01