Skip to content

TCP와 UDP

TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결지향적 프로토콜이다. TCP는 흐름제어, 혼잡제어 등을 통해 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(데이터, 메세지, 세그먼트라는 블록 단위)을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.

TCP의 특징

연결지향

  • TCP는 통신 과정에서 클라이언트와 서버간에 3-way handshaking으르 통해 연결을 확립한 후에 전송을 시작하기 때문에 두 호스트가 논리적으로 연결되어있음을 보장할 수 있다.

흐름제어(Flow control)

  • 흐름제어는 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 흐름제어를 수행한다. 수신자가 데이터를 받을 수 있는 Window의 사이즈를 지정해 수신자가 전송 속도를 제어할 수 있는 매커니즘을 제공하여 송신하는 쪽에서 데이터를 빠르게 전송할 수 있더라도 수신하는 곳에서 문제가 일어나는 것을 방지한다.

혼잡제어(Congestion control)

  • 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 혼잡제어를 수행한다. 한 라우터에 데이터가 몰려 지연이 생길때, 호스트들이 계속해서 데이터를 재전송하는 경우 혼잡이 더 가중되기 때문에 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이는 작업을 의미한다.

신뢰성이 높은 전송(Reliable transmission)

  • ACK 값이 정상적으로 전송되는 경우에만 연결이 확립된 것으로 간주하여 신뢰성 높은 전송이 이뤄질 수 있도록 한다.

전이중, 일대일(Unicast) 통신

  • 전이중 (Full-Duplex)
    전송이 양방향으로 동시에 일어날 수 있다.
  • 일대일(Unicast)
    각 연결이 정확히 2개의 종단점을 가지고 있다.

TCP 헤더

필드내용
발신지, 목적지의 포트 번호송,수신 프로세스에 할당되는 포트 주소
시퀀스 번호(Sequence Number)연속된 데이터의 순서 번호
응답 번호(ACK Number)수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용
데이터 오프셋(Data Offset)데이터가 시작되는 위치가 어디부터인지를 표시
예약 필드(Reserved)나중을 위해 예약해놓은 필드
제어 비트(Flag Bit)SYN, ACK, FIN 등의 제어 번호, 3-way handshaking에 사용
윈도우 크기(Window)수신 윈도우의 버퍼 크기를 지정할 때 사용(흐름제어를 위함)
체크섬(Checksum)송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값
긴급 포인터(Urgent Pointer)URG 플래그 비트가 1인 경우 이 포인터에 있는 데이터를 우선처리함

UDP(User Datagram Protocol)

UDP는 전송계층의 비연결지향적 프로토콜이다. 비연결지향적이란 데이터를 주고받을 때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미한다. 연결 과정이 없기 때문에 TCP보다는 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어진다.

UDP의 특징

비연결지향

  • 수신자가 데이터를 수신했는지 확인하거나 통신 과정에서의 에러를 검출하는 과정 없이 일방적으로 데이터를 전송한다.

낮은 신뢰성

  • 중간에 패킷이 유실되었거나 순서가 섞여도 에러를 검출하고 복구하는 작업을 수행하지 않는다.

빠른 전송

  • 확인 절차가 없고 전송하는 데이터의 약이 적기 때문에 데이터를 빠르게 전송할 수 있다.

일대다(Broadcast), 다대다(Multicast) 통신

  • 신뢰성은 적지만 데이터를 빠르게 전송할 수 있다는 특징 때문에 브로드캐스트와 멀티캐스트에 주로 이용된다.

UDP 헤더

필드내용
발신지, 목적지의 포트 번호송,수신 프로세스에 할당되는 포트 주소
데이터 길이(Total Length)전송하는 데이터의 길이
체크섬(Checksum)송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값