본문 바로가기

Network

TCP와 UDP

 

전송계층에서 사용되는 프로토콜

 

 

TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜이다. 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어 등을 담당하는 계층이다. (쉽게 말해 데이터의 전달을 담당하는 계층이라고 할 수 있다.)

 

TCP와 UDP는 포트 번호를 이용하여 주소를 지정하는 것(TCP와 UDP 모두 포트 번호로 서비스를 식별한다)과 데이터 오류검사를 위한 체크섬이 존재하는 두가지 공통점을 가지고 있지만 정확성(TCP)을 추구할지 신속성(UDP)을 추구할지를 구분하여 나뉜다.

 


 

TCP (Transmission Control Protocol)란

 

TCP는 신뢰성있는 데이터 전송을 지원하는 연결형 프로토콜이다. 일반적으로 TCP는 IP(Internet Protocol)와 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리하는 역할을 수행한다.

 

패킷 (Packet)이란

패킷은 네트워크를 통해 전송되는 형식화된 데이터 덩어리이다. 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해 데이터를 여러 개의 조각들로 나누어 전송을 하는데 이때 이 조각을 패킷이라고 한다.

 

패킷을 추적하고 관리하는 방법

예를 들어 전송하려는 데이터를 3조각 A, B, C로 나누어서 전송한다고 가정해보자. 수신측에 어떤 패킷이 도착해야 되는지 알려주지 않으면, A, B 패킷만 도착해도 다 도착한 것으로 판단하여 데이터 유실이 일어난 상태로 전송이 완료된다. 따라서 TCP는 패킷에 1, 2, 3과 같이 번호를 부여해서 분실된 패킷이 있는지 확인한다.

 


 

TCP의 특징

 

  • 연결형 서비스
    연결형 서비스로 가상 회선 방식을 제공한다. 가상회선 방식이란 데이터를 패킷 단위로 나누어 전송하고 모든 패킷의 경로를 일정하게 유지하는 것을 의미한다. 따라서 패킷의 출발/도착 순서가 일정하다 (먼저 출발한 패킷이 먼저 도착)
    - 3-way handshake 방식으로 연결을 설정하고, 4-way handshake 방식으로 연결을 해제한다.

  • 흐름제어
    - 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.

  • 혼잡제어
    - 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지한다.

  • 신뢰성이 높은 전송
    - 패킷 이상을 감지하거나, 일정시간동안 수신을 못 할 경우 재전송을 요청한다.

  • 전이중/점대점 방식 지원 (브로드캐스팅 지원안함)
    - 전이중(Full duplex): 전송이 양방향으로 동시에 일어날 수 있다.
    - 점대점(point to point): 각 연결이 정확히 2개의 조단점을 가지고 있다.

 

TCP의 단점

 

  • 데이터로 보내기 전에 반드시 연결이 형성되어야한다.
  • 1 : 1 통신만 가능하다.
  • 고정된 통신 선로가 최단선(네트워크 길이)이 아닐 경우 상대적으로 UDP보다 데이터 전송속도가 느리다.

 


 

3-way handshake

 

TCP 통신을 위한 네트워크 연결은 3 way handshake 라는 방식으로 연결된다. 3 way handshake 방식은 서로의 통신을 위한 관문(port)을 확인하고 연결하기 위하여 3번의 요청/응답 후에 연결이 되는 것을 말한다. (이 과정에서 가장 많은 시간이 소요되어 UDP방식보다 속도가 느려지는 주요 원인으로 지목된다.)

 

 

 

연결 과정

  1. 클라이언트는 접속을 요청하는 SYN 패킷을 보낸다. 이때 클라이언트는 응답을 기다리기 위해 SYN_SENT 상태로 변한다.

  2. LISTEN 상태였던 서버는 SYN 요청을 받으면, 클라이언트에게 요청을 수락하는 ACK 패킷과 SYN 패킷을 보낸다. (서버도 클라이언트에 접속해야 양방향 통신이 되기 때문에)그리고 SYN_RCVD(SYN_RECEIVED)상태로 변하여 클라이언트가 ACK 패킷을 보낼 때까지 기다리게 된다.

  3. 클라이언트는 다시 서버에 ACK 패킷을 보내고, 이 후 ESTABLISHED 상태가 되어 데이터 통신이 가능하게 된다.

 

4-way handshake

 

 

연결 해제 과정

  1. 서버와 클라이언트가 TCP 연결이 되어있는 상태에서 클라이언트가 접속을 끊기 위해 CLOSE() 함수를 호출한다. 그러면 FIN 플래그를 보내게 되고 클라이언트는 FIN_WAIT1 상태로 변한다.

  2. 서버는 클라이언트가 CLOSE() 한다는 것을 알게 되고 CLOSE_WAIT 상태로 바꾼 후 ACK 플래그를 전송한다.만일 서버에서 클라이언트로 보낼 남은 데이터가 있을 경우 이때 나머지를 모두 전송한다.

  3. ACK를 받은 클라이언트는 FIN_WAIT2로 변환되고, 이때 서버는 CLOSE() 함수를 호출하고 FIN 플래그를 클라이언트에게 보낸다.

  4. 서버도 연결을 닫았다는 신호를 클라이언트가 수신하면 ACK 플래그를 보낸 후 TIME_WAIT 상태로 전환된다. 이후 모든 것이 끝나면 CLOSED 상태로 변환된다.

 

TCP 헤더 정보

 

 

 

필드 크기(bit) 내용
송수신자의 포트 번호 16 TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당되는 포트 주소
시퀀스 번호
(Sequence Number)
32 송신자가 지정하는 순서 번호, 전송되는 바이트 수를 기준으로 증가
SYN = 1 : 초기 시퀀스 번호가 된다. ACK 번호는 이 값에 1을 더한값
SYN = 0 : 현재 세션의 이 세그먼트 데이터의 최초 바이트 값의 누적 시퀀스 번호
응답 번호
(ACK Number)
32 수신 프로세스가 제대로 수신한 바이트 수를 응답하기 위해 사용
데이터 오프셋
(Data Offset)
4 TCP 세그먼트의 시작 위치를 기준으로 데이터의 시작 위치를 표현(TCP 헤더의 크기)
예약 필드(Reserved) 6 사용을 하지 않지만 나중을 위한 예약 필드이며 0으로 채워져야한다.
제어 비트(Flag Bit) 6 SYN, ACK, FIN 등의 제어 번호
윈도우 크기(Window) 16 수신 윈도우의 버퍼 크기를 지정할 때 사용. 0이면 송신 프로세스의 전송 중지
체크섬(Checksum) 16 TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터에 대한 오류 검출 용도
긴급 위치(Urgent Pointer) 16 긴급 데이터를 처리하기 위함, URG 플래그 비트가 지정된 경우에만 유효

 

 

TCP 제어 비트 (Flag Bit) 정보

 

종류 내용
ACK 응답 번호 필드가 유효한지 설정할때 사용하며 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷. 클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷은 이 플래그가 설정되어야 한다.
SYN 연결 설정 요구. 동기화 시퀀스 번호. 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 한다.TCP 에서 세션을 성립할 때  가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호를 보내게 된다.
PSH 수신 애플리케이션에 버퍼링된 데이터를 상위 계층에 즉시 전달할 때 사용
RST 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용
URG 긴급 위치를 필드가 유효한지 설정 (긴급한 데이터는 다른 데이터에 비해 우선순위가 높음)
FIN 세션 연결을 종료시킬 때 사용되며 더 이상 전송할 데이터가 없을 때 연결 종료 의사 표시

 

 


 

 

UDP(User Datagram Protocol)란

 

UDP는 데이터를 데이터그램 단위로 처리하는 프로토콜을 의미한다. TCP가 연결형 프로토콜인 반면 UDP는 비연결형 프로토콜이다.

 


 

UDP의 특징

 

  • 비연결형 서비스
    - TCP가 가상회선 방식으로 패킷의 경로가 일정하게 유지되고, 순서가 유지되었다면 UDP는 데이터그램 방식으로 패킷을 독립적으로 각각 다른 경로를 이용해서 전송한다. 따라서 먼저 출발한 패킷이 먼저 도착한다는 보장이 없다.

  • 빠른 속도
    - 흐름제어를 하지 않고, 연결이나 해제과정에서 3-way, 4-way handshaking 과정이 없기 때문에 상대적으로 데이터 전송이 빠르다.

  • 비신뢰성 데이터 전송
    - 수신자에게 답이 없어도 데이터 재전송하지 않는다.

  • 브로드캐스팅, 멀티캐스팅 지원
    - 브로드캐스팅(Broadcasting): 1:N
    - 멀티캐스팅(Multicasting): N:N
    - 일대일도 지원

 

 

UDP의 단점

 

  • 데이터의 신뢰성이 없다.
  • 의미 있는 서버를 구축하기위해서는 일일이 패킷을 관리해주어야 한다.

 


 

UDP 헤더 정보

 

 

필드 크기(bit) 내용
송신자의 포트 번호 16 데이터를 보내는 어플리케이션의 포트 번호
수신자의 포트 번호 16 데이터를 받을 어플리케이션의 포트 번호
데이터의 길이 16 UDP 헤더와 데이터의 총 길이
체크섬(Checksum) 16 데이터 오류 검사에 사용

 

 


출처 : 
https://www.youtube.com/watch?v=ikDVGYp5dhg&t=594s
https://www.youtube.com/watch?v=ad4AO1shXsY&t=366s

https://jhyonhyon.tistory.com/58
https://mangkyu.tistory.com/15
https://coding-factory.tistory.com/614
https://inpa.tistory.com/entry/NW-%F0%9F%8C%90-%EC%95%84%EC%A7%81%EB%8F%84-%EB%AA%A8%ED%98%B8%ED%95%9C-TCP-UDP-%EA%B0%9C%EB%85%90-%E2%9D%93-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EC%9E%90#%F0%9F%A4%9D_3-way_handshake_%EA%B3%BC%EC%A0%95

 

'Network' 카테고리의 다른 글

TLS(Transport Layer Security)  (2) 2024.07.14
OSI 모델, TCP/IP 모델  (0) 2023.12.09
HTTP 버전별 차이  (1) 2023.09.09