TCP란?    

 

 TCP는 신뢰성과 정확성을 우선으로 하는 연결형 통신 프로토콜이다. TCP 헤더를 붙여 세그먼트를 만드는 캡슐화 과정을 진행한다. 그리고 데이터를 전송하기 위해 필요한 가상의 독점 통신로를 확보하는 작업인 연결이라는 작업을 수행한다. 연결은 TCP 헤더의 코드비트 부분의 SYN와 ACK를 통해 3-way 핸드셰이크라고 하는 패킷 요청을 세 번 교환하는 행동을 하여 연결을 확립한다. 그리고 FIN와 ACK를 통해  4-way 핸드 셰이크를 진행해 연결이 끊어진다. 

 

 

 [참고]

 TCP 헤더에 관한 내용은 전 포스트 글을 참조하세요.

 

 

 

8. 전송 계층 - 1 (신뢰 데이터 전송)

전송 계층 물리 계층, 데이터 링크 계층, 네트워크 계층 이 세 개의 계층만 있으면 목적지에 데이터를 보낼 수 있다. 하지만, 데이터가 손상되거나 유실되면 이 세 개의 계층에서는 아무것도 해��

almotjalal.tistory.com

 

 


    일련번호와 확인 응답 번호란?    

 

  3-way 핸드셰이크를 통해 연결이 확보되어 실제 데이터를 보내거나 데이터를 받을 때에는 TCP 헤더의 일련번호(Sequence number)와 확인 응답 번호(Acknowledgement number)를 사용한다. 

 

 

TCP 헤더

 

 

  TCP는 데이터를 분할해서 보내는데 일련번호 송신 측에서 수신 측에 이 데이터가 "몇 번 째 데이터인지" 알려 주는 역할을 한다. 즉, 전송된 데이터에 일련번호를 부여해 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다. 

 

 확인 응답 번호수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려 주는 역할을 한다. 그래서 이 번호는 다음 번호의 데이터를 요청하는데 사용한다. 예를 들어, 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청한다. 이 과정을 확인 응답이라고 한다. 

 

 데이터를 전송하기 전 단계에서 3-way 핸드셰이크로 연결 수입이 이루어지고 데이터를 전송하기 위해 이번 통신에 사용하는 일련번호인 3001번과 확인 응답 번호인 4001번으로 가정해보면

 

 

 

 

  1. 컴퓨터 1은 컴퓨터 2로 200바이트의 데이터를 전송한다.
  2. 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번화를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3001+200=3201이므로 3201번부터 보내 달라고 요청한다.
  3. 컴퓨터 1은 컴퓨터 2로 3201번부터 200바이트의 데이터를 전송한다. 
  4. 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터의 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3201+200=3401번부터 보내 달라고 요청한다. 

  

 위 과정을 데이터 전송이 완료될 때 까지 반복된다. 데이터가 항상 올바르게 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에는 같은 데이터를 재전송하게 되어 있는데 이것을 재전송 제어라고 한다. 

 

 


    윈도우 크기란?    

 

   위에서 설명한 과정은 세그먼트(데이터) 하나를 보낼 따마다 확인 응답을 한 번 반환하는 통신이라서 비효율적이다. 위 방식 대신에 매번 확인 응답을 기다리는 대신 세그먼트 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다. 

 

  수신 측에서 받은 세그먼트를 일시적으로 보관하는 장소가 있는데 그 장소를 버퍼(Buffer)라고 한다. 이 버퍼 덕분에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있고 확인 응답의 효율도 높아진다. 하지만, 세그먼트를 대량으로 받아 버퍼가 처리하지 못하는 경우가 생기는데 이 현상을 오버플로(Over flow)라고 한다. 

 

 그래서 오버플로가 발생하지 않도록 버퍼의 한게 크기를 알고 있어야 하는데 그것을 TCP 헤더에서 윈도우 크기 값에 해당한다. 윈도우 크기(Window size)얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 즉, 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터의 크기를 말한다. 

 

 

 그럼 송수신측은 서로의 윈도우 크기를 어떻게 확인할 수 있을까? 바로 3-way 핸드셰이크를 할 때 판단한다. 

 

 컴퓨터2는 컴퓨터 1의 윈도우 크기가 3000이라는 것을 알게 되며 컴퓨터1은 컴퓨터 2의 윈도우 크기가 2000이라는 것을 알게 된다.

 

 

 오른쪽과 같은 방식으로 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속적으로 전송할 수 있다.

 


    포트 번호란?    

 

   전송 계층에서 연결 확립, 재전송 제어, 윈도우 제어 등과 같은 기능에 의해 TCP는 데이터를 정확하게 전달할 수 있었다.  전송 계층은 데이터를 정확하게 전달하는 기능뿐만 아니라 전송된 데이터의 목적지가 어떤 애플리케이션(웹 또는 메일 등)인지 구분하는 역할도 수행한다.

 

 목적지가 어떤 애플리케이션인지 구분하지 못하는 것을 방지하기 위해서는 출발지 포트 번호(Source port number)목적지 포트 번호(Destination port number)가 필요하다. 

 

 

 포트 번호는 0~65535번을 사용할 수 있는데 0~1023번은 주요 프로토콜이 사용되도록 예약되어 있으며 잘 알려진 포트(Well-known ports)라고 한다. 1024번은 예약되어 있지만 사용되지 않는 포트이고, 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용된다. 아래 표에 해당하는 포트번호는 서버에서 주로 사용되는 애플리케이션 번호이다. 

 

 

 이처럼 동작하는 애플리케이션은 각각 포트번호가 있어서 다른 애플리케이션과 서로 구분된다. 데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요하다. 

 

 

 

 


    UDP란?    

  UDP는 TCP와 다르게 비연결형 통신으로 데이터를 전송할 때 TCP 처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다. 또한, 신뢰성과 정확성을 중요시 한 TCP와는 다르게 UDP는 효율성을 중요시 한다. 

 

 UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이라서 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳이 사용된다. 동영상을 TCP로 전송하게 되면 수신 확인하는 데 시간이 너무 오래 걸려서 동영상을 원활하게 볼 수 없다. 

 

 TCP는 TCP 헤더가 붙은 데이터를 세그먼트라고 했는데 UDP 에서는 UDP 헤더가 붙은 데이터UDP 데이터그램이라고 한다. UDP 헤더는 올바른 목적지의 애플리케이션으로 데이터를 전송하기 위해 필요한 정보가 기록되어 있다. 

 

 

 또한 UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다. 이것을 브로드캐스트(Broadcast)라고 하는데 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 통보를 보낼 수 있어 가능하다. TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신은 적합하지 않을 뿐더러 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없다. 

 


   TCP와 UDP 비교