[Network] TCP & UDP

JISU LEE·2021년 12월 13일
1

Computer Science

목록 보기
1/2
post-thumbnail

오늘은 TCP와 UDP에 대해 알아보려고 한다. 역시 공식 문서는 잘 모르겠으니 wikipedia로!

TCP(Transmission Control Protocol)

우선 TCP부터 시작해보자. Transmission Control Protocol의 줄임말로 번역하면 전송 제어 규약이다.

Internet Protocol Suite의 핵심 프로토콜 중 하나라고 하는데 IP와 함께 TCP/IP라는 명칭으로도 불린다고 한다.

그렇다면 TCP가 IP에 소속되어 있다는 것인데, Internet Protocol Suite가 무엇인지부터 간단하게 알아봐야겠다.

Internet Protocol Suite

인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 통신 규약(Protocol)의 모음이며, 1960년대 말 방위고등연구계획국(DARPA)의 연구결과로 탄생하였다고 한다.

모음이니만큼 여러 규약들이 있는데, 응용 계층, 전송 계층, 인터넷 계층, 링크 계층으로 나뉜다. TCP/IP 모델을 기준으로 구분되어 있는 듯 하다.

순서계층예시
4응용BGP, DHCP, DNS, FTP, HTTP, HTTPS 등
3전송TCP, QUIC, UDP, DCCP, SCTP 등
2인터넷IP(IPv4, IPv6), ARP, ICMP, ECN 등
1링크NDP, OSPF, PPP, MAC 등

이 중 TCP와 IP가 가장 많이 사용되어, TCP/IP Protocol Suite라고 불리기도 한다.

TCP/IP

조금 더 자세히 알아보자면 TCP/IP는 말 그대로 IP와 TCP로 이루어져있다. IP는 인터넷 계층으로 패킷 전달 여부를 보장하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다(unreliable datagram service).

TCP는 IP 위인 전송 계층에서 동작하는 프로토콜로 데이터의 전달을 보장하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 수많은 응용 계층 프로토콜들이 IP 위에서 동작하기 때문에 이를 묶어 TCP/IP로 부르기도 한다.

TCP

다시 TCP로 돌아와서..

TCP는 컴퓨터에서 실행되는 프로그램 간에 일련의 바이트들을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. 이전에 언급했듯 전송 계층에 위치하고 있으며, 네트워크 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나이다.

World Wide Web(WWW, 인터넷상의 정보를 하이퍼텍스트 방식과 멀티미디어 환경에서 검색할 수 있게 해주는 정보검색 시스템)에서 서버에 연결할 때 사용되며, 이메일 혹은 파일 전송에도 사용된다.

TCP의 안정성을 필요로 하지 않는 앱의 경우 일반적으로 TCP 대신 UDP를 사용한다.

Origin

1974년 전기 전자 기술자 협회(IEEE)는 노드 간의 정보 공유를 위한 패킷 교환 방식의 internetworking protocol을 제안했다. 핵심 요소는 연결 지향 링크(connection-oriented links)와 호스트 간의 네트워크 패킷을 모두 포함하는 전송 제어 프로그램(Transmission Control Progam)이였다.

당시 단일한 구성 요소였던 전송 제어 프로그램이 이후 전송 계층의 TCP와 인터넷 계층의 IP로 나뉘어 모듈식 구조로 변경 되었다.

TCP Segment Structure

잠깐 Segment가 무엇인지부터 알아봤다. (PDU 참고)

Segment은 OSI 7계층 중 전송 계층의 data 단위이다. 즉 종종 사용되는 TCP 패킷은 정확한 표현이 아니다.

Segment에 대해서는 대충 이해가 갔으니 다시 TCP로 돌아오면..
TCP는 데이터를 받아 청크(png, mp3 같은 많은 멀티미디어 형식에서 사용되는 정보 조각) 단위로 분할한 뒤 TCP 헤더를 붙여 TCP 세그먼트를 생성한다. TCP 세그먼트는 IP 데이터그램에 캡슐화되어 상대방과 주고받게 된다.

TCP 세그먼트는 헤더 섹션과 데이터 섹션으로 구성된다. TCP 헤더는 10개의 필수 필드 및 옵션 확장 필드를 포함한다.
헤더 뒤에는 데이터 섹션이 따라온다. 데이터 섹션의 길이는 TCP 세그먼트 헤더에서 결정되지 않는다.

데이터 섹션의 길이 = 전체 IP 데이터그램의 길이 - TCP 헤더 - 캡슐화된 IP 헤더의 길이

즉 데이터 섹션의 길이는 IP 헤더에 의해 결정된다.

위 TCP 헤더 구조 중 중요하다 싶은 부분만 소개해보려고 한다.

  1. Source port(16 bits) : 송신 포트
  2. Destination port(16 bits) : 수신 포트
  3. Sequence number(32 bits)
    • SYN == 1 : 초기 시퀀스 번호로, 다음에 보낼 세그먼트의 ACK number는 이 값에 +1 한 값이 됨
    • SYN == 0 : 세그먼트 데이터의 최초 바이트 값의 누적 시퀀스 번호
  4. Acknowledgment number (32 bits)
    • ACK == 1 : 수신자가 예상하는 다음 시퀀스 번호
      선행된 바이트가 존재할 경우, 바이트들의 수신에 대한 확인 응답이 된다.
  5. Data offset(4 bits) : TCP 헤더 크기값
  6. Flags(9 bits) : 9개의 1 bit flag들
    • ACK
      • Acknowledgment 필드의 값이 유효함을 나타낸다.
      • SYN 패킷 이후 전송되는 모든 패킷은 이 플래그가 1로 설정되어 있어야 한다.
    • SYN
      • 동기화 시퀀스 번호, 양쪽이 보낸 최초의 패킷에만 이 플래그가 1로 설정되어 있어야 한다.
      • 다른 일부 플래그들의 의미가 이 플래그의 값에 따라 바뀐다.
    • FIN
      • 송신측에 남은 데이터가 없음을 나타낸다.
  7. Checksum : 헤더 및 데이터의 에러 확인을 위해 사용된다.
  8. Options : 데이터 오프셋 필드에 의해 결정된다.
  9. Padding : TCP 헤더의 종료 지점과 데이터의 시작 지점을 32 bit 단위에 맞추기 위해 사용되며, 값은 0이다.

How TCP works

TCP는 데이터를 주고 받을 양단 간에 연결을 먼저 설정하고, 설정된 연결을 통해 데이터를 전송한다.

작동은 크게 세가지 과정으로 구분된다.

  1. 연결 생성 (Connection establishment)
  2. 자료 전송 (Data Transfer)
  3. 연결 종료 (Connection termination)

차례대로 설명해보겠다.

연결 생성

연결을 생성하기 위해 3 way handshake를 사용한다.

3 way handshake

  1. SYN

    Client가 Server에게 SYN 메시지를 보낸다.
    이 메시지에 포함된 Sequence number는 클라이언트가 임의로 설정한 값 A이다.

  2. SYN-ACK

    Server가 Client에게 SYN-ACK 메시지로 응답한다.
    메시지에 포함된 Sequence number는 서버가 임의로 설정한 값 B이며, Acknowledgment number는 A + 1 이다.

  3. ACK

    Client가 Server에게 ACK 메시지를 보낸다.
    이 메시지에 포함된 Acknowledgment number는 B+1 이다.

SYN, ACK number에 대한 요약은 다음과 같다.

Seq(n) = Ack(n-1) , Ack(n) = Seq(n-1) + Segment_size

자료 전송

자료를 전송하는 과정은 너무 많은 시나리오들이 존재해서 추후에 따로 다뤄보겠다.

연결 종료

연결을 종료하기 위해 4 way handshake를 사용한다.

4 way handshake

  1. FIN1 : Client가 연결을 종료하겠다는 FIN 메시지를 보낸다.

    이 메시지에 포함된 Sequence number는 클라이언트가 임의로 설정한 값 A이다.

  2. ACK1 : Server가 FIN 메시지를 받고 Client에게 ACK 메시지를 보낸다.

    이 메시지에 포함된 Acknowledgment number는 A+1이다.
    이후 자신의 통신이 끝날때까지 기다린다.

  3. FIN2 : Server가 연결을 끝낼 준비가 되면 FIN 메시지를 Client에게 보낸다.

    이 메시지에 포함된 Sequence number는 클라이언트가 임의로 설정한 값 B이다.

  4. ACK2 : FIN 메시지를 받은 Client는 Server에게 ACK 메시지를 보낸다.

    이 메시지에 포함된 Acknowledgment number는 B+1이다.
    Server에서 FIN을 전송하기 전 보낸 패킷이 FIN 패킷보다 늦게 도착할 때를 대비하여 MSL(Max Segment Lifetime) * 2 동안 대기한 후 연결을 종료시킨다.

위 3 way handshake와 4 way handshake 자료를 만드는데 이 글를 참고하였다.

UDP(User Datagram Protocol)

다음은 UDP이다. 역시 Internet Protocol Suite의 주요 프로토콜 가운데 하나이다. TCP와 함께 네트워크 패킷을 교환하기 위해 사용된다. UDP는 Universal Datagram Protocol이라고 불리기도 한다.

UDP의 전송 방식은 매우 단순해서 신뢰성이 낮고, 도착 순서가 바뀌거나, 중복되거나, 심지어는 누락되기도 한다. 그래서 주로 오류의 검사와 수정이 필요 없는 애플리케이션에서 사용된다.

UDP는 DNS, IP 터널, 많은 온라인 게임 등에서 주로 사용된다.

UDP Segment Structure

  1. Source port(16 bits) : 송신 포트
  2. Destination port(16 bits) : 수신 포트
  3. length(16 bits) : UDP Segement 크기
  4. checksum(16 bits) : 헤더 및 데이터의 에러 확인을 위해 사용

데이터 섹션은 헤더 섹션 바로 뒤에 붙는다.

How UDP works

UDP는 연결을 설정하지 않고, 수신자가 데이터를 받을 준비가 되었는지 확인하는 단계를 거치지 않는다.
즉 단방향으로 정보를 전송한다.

UDP vs TCP

구분TCPUDP
신뢰성높음낮음
순서 보장OX
속도느림빠름
Sever : Client1 : 11 : 1 , 1 : N , N : N
전송 가능한
데이터 크기
무제한datagram 단위(65,535 bytes)
초과 시 잘라서 전송
헤더 크기
(bytes)
20 ~ 609
사용되는 경우
(중요도)
연속성 < 신뢰성연속성 > 신뢰성
사용 예시파일 전송 등실시간 서비스(streaming) 등

[TCP/UDP] TCP와 UDP의 특징과 차이, TCP/UDP 참고

[Unfinished] Packet Switching

자료를 찾다보니 패킷 교환방식에 대한 비교도 많아 이 부분도 짚고 넘어가려고 한다.

컴퓨터 네트워크와 통신의 방식 중 하나로, 작은 블록의 패킷으로 데이터를 전송하여 데이터를 전송하는 동안만 네트워크 자원을 사용하도록 하는 방법을 말한다.
데이터 연결 상의 모든 노드(통신 지점)들을 사이의 경로가 개별적으로 제어되어 짤막한 데이터 트래픽에 적합하다.

패킷 교환이 회선 교환과 대조되는 개념인 것 같은데 이번에는 Packet Switching에 대한 상세한 내용보다는 데이터그램 방식과 가상 회선 방식을 다루려고 한다.

가상 회선 방식과 데이터그램 방식

구분가상 회선 방식데이터그램 방식
정의관련된 패킷은 전부 같은 경로를 통해 전송하는 방법관련된 패킷도 따로 전송하는 방법
오버헤드Call Setup이 필요해 오버헤드가 있다.Call Setup이 필요없어 빠르고 오버헤드가 적다
경로네트워크 패킷이 들어오면 경로를 지정해줘야 한다.
보낼 데이터가 많아도 Call Setup은 한번만 하면 된다.
패킷마다 가는 경로가 다를 수 있다.
순서 보장패킷이 처음 출발한 순서대로 도착하기 때문에 오류 제어가 쉽다.망이 상황에 따라 달라지며 패킷의 도착 순서가 바뀔 수 있다.
장점각 노드에서 처리시간이 적게 소요된다.망 자원이 바쁠 경우 다른 경로로 보내 망 운용에 융통성이 있다.
망이 고장났을 때 최적하된 경로를 찾아갈 수 있어 신뢰성이 높다.

Call Setup : 라우팅 테이블에 등록하는 과정
오버헤드 : 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등

TCP는 가상 회선 방식을, UDP는 데이터그램 방식을 사용한다고 한다. 근데 이 부분이 몇몇 블로그에만 기재되어 있는 내용이라 정확한 정보인지 확신이 없다...

정확한 정보를 알게 된다면 여기 추가해두도록 해야겠다.

Summary

Commonality

  1. Internet Protocol Suite의 주요 프로토콜 가운데 하나이다.
  2. 포트 번호로 주소를 지정한다.
  3. 데이터 오류 검사를 위한 Checksum이 존재한다.

Difference(Characteristic)

UDP vs TCP 참고

profile
iOS / 🌊

0개의 댓글