전송 프로토콜, TCP, UDP

  • 데이터 링크 계층: 이웃한(인접한) 노드와 노드 간의 프레임 전달에 관여.
  • 네트워크 계층: IP와 같은 두 호스트 사이의 패킷 전달에 관여. 어떤 경로를 통해 호스트에 도달하는지에 대한 라우팅이 핵심적인 기능.
  • 전송 계층 프로토콜: 프로세스 사이의 메시지 전달에 관여. 포트 번호가 프로세스 간의 전달에 사용

전송 프로토콜

호스트 내부에서 작동하는 프로그램들에게 데이터를 전달하는 것이 주 목적. 호스트 컴퓨터까지 데이터가 전달되는 것은 네트워크 계층이 관리해 주지만, 호스트 내에서 어떤 프로그램에 데이터를 전송을 관리하는 역할

프로세스 간의 통신

클라이언트/서버 구성을 통해서 이루어짐. 대표적으로 웹브라우저와 서버의 관계. 여기서 호스트 컴퓨터 내부에서 여러 프로세스가 작동하고 있는데, 프로세스를 구분하기 위해 포트번호를 사용. 여기서 말하는 포트번호란 컴퓨터에 꽂는 물리적인 포트가 아닌 논리적인 포트번호를 의미.

노드와 노드간 상대를 구별하는 것은 MAC주소 또는 하드웨어 주소, 네트워크상에서 상대를 구분하는 것은 IP주소가 있는 것처럼, 한 컴퓨터 내부에서 프로세스를 구분하는데 포트번호를 사용.

포트번호

클라이언트 프로그램의 포트번호는 운영체제에 의해 할당 됨. 이러한 포트번호를 일시적으로 할당되고 사라져서 임시포트번호(ephemeral port number)이라고 함.

서버 프로그램을 24시간 동작하고, 인터넷에서 식별되기 위해 동일한 포트번호를 가지고 있음. 이를 알려진 포트번호 (well-known port numbers)라고 함.

포트번호는 IANA에서 규정함.

  • Well-known ports: 0~1023이 할당되며 인터넷 서비스를 위해 사용
  • Registered ports: 1024~49151의 범위를 가지여 특정 응용을 위해 기업이 사용
  • Dynamic ports: 49152~65535의 범위를 가지며 등록되거나 통제되지 않고 임시 포트로 이용

UDP (User Datagram Protocol)

비연결형, 비신뢰성 프로토콜

에러가 검출되면 폐기

연결 설정이나 종료과정 없음

데이터그램들 사이의 서로 관련 없으며, 번호가 붙지 않음

각 UDP 데이터그램은 서로 다른 경로로 전달

송신자는 메시지가 유실되거나 중복되었는지 알 수 없음

UDP는 오버헤드가 적은 아주 단순한 프로토콜에 이용

대표적인 UDP를 사용하는 프로토콜

DNS (Domain Name Service)

SNMP (Simple Network Management Protocol)

UDP 구조

UDP는 8바이트의 고정된 크기의 헤더를 가짐

체크섬의 계산은 선택사항. 체크섬값이 계산되지 않으면 해당 필드의 값은 0

Checksum

UDP 체크섬은 IP 패킷의 송신자 IP주소, 목적지 IP 주소, 프로토콜 필드, 전체 길이 필드를 가져와 가상헤더를 구성하여 가상헤더, UDP헤더, 데이터에 대해 체크섬을 수행

이런 식으로 가상헤더를 구성하여 체크섬을 수행

언제 사용할까?

UDP는 간단한 요청-응답 서비스에 적합

  • 연결 설정/해제 과정의 오버헤드가 없음

프로세스 내부에서 내부 흐름제어와 에러제어를 갖는 경우 적합

  • 응용 프로그램이 자체적으로 갖고 있는 기능을 중복해서 가질 필요 없음

멀티 캐스팅에 적합

SNMP 같은 관리 시스템에서 사용

  • RIP에서 UDP를 사용한다.

TCP

기능

프로세스간 통신, 스트림 전달 서비스, 전이중 통신, 연결 지향 서비스, 신뢰성 있는 서비스를 제공

연결 설정과 해제과정이 존재

ACK를 사용하여 안전하게 도착했는지를 확인하여 신뢰성 있는 전송을 제공. TCP도 프로세스 간 통신을 위해 포트번호를 사용한다.

스트림 전달 서비스

TCP는 데이터를 바이트의 나열로 전달. 즉 바이트들이 물 흐르듯 순서대로 목적지 까지 전달하도록 하는 것

TCP는 모든 바이트에 번호를 부여한다. 번호는 흐름제어와 에러제어에 사용

ACK 번호는 수신해야할 다음 바이트 번호

  • ACK 번호는 누적값으로 해당 번호 이전의 모든 바이트를 안전하게 받았음을 의미
  • ACK번호가 1234라면 1233까지의 바이트까지 모두 받았음을 의미

세그먼트

TCP 메시지의 형태

  • Source port address, Destination port address: 송 수신자 포트 번호
  • Sequence number: 순서 번호
  • Acknowledgement number: Ack 번호
  • HLEN: 헤더 길이
  • Reversed: 나중에 사용하기 위한 비워진 필드
  • FLAG: 해당 TCP 메시지가 어떤 종류인지를 판단하기 위한 필드. 각 1비트씩 총 6비트.

  • window size: 수신자가 현재 받을 수 있는 데이터의 양
  • checksum: 체크섬 검사를 할 때 사용하는 필드. TCP에서 체크섬을 강제사항. UDP처럼 가상헤더를 포함하여 계산한다.
  • Urgent pointer: URG 포인터가 설정된 경우 사용. 16비트 필드는 시퀀스 번호로부터의 오프셋. 이 오프셋이 마지막 긴급 데이터를 가리킴.

헤더는 20바이트이며, 옵션이 있으면 60바이트까지 늘어남.

Three-way handshake

두 호스트간에 연결을 설정하는 과정

  1. 클라이언트에서 연결을 요청하는 SYN 세그먼트를 전송
  2. 서버는 SYN과 ACK를 포함하는 세그먼트로 응답
  3. 클라이언트는 ACK를 보냄

이 과정으로 시작할 Sequence number를 지정할 수 있음.

연결 종료

제어 필드의 FIN을 사용하려 연결 해제. three-way handshake를 이용하여 연결을 해제할 시 즉시 연결이 해제되고, four-way handshake를 이용할 시

threew-ay handshake

four-way handshake

클라이언트 측에서 FIN을 보낸 후 서버측에서 응답으로 ACK를 보냄. 이때 클라이언트 → 서버의 연결은 해제되었지만 서버 → 클라이언트 연결은 아직 남아있으므로, 데이터를 마저 전송 후 서버 측에서 FIN을 보낸 후 ACK를 받아 연결을 해제

흐름 제어

송신측에서 수신 측의 버퍼보다 많은 양의 데이터를 전송하거나, 송신 측과 수신 측의 데이터 처리속도 등과 같은 문제를 처리하기 위한 기법. 한 번에 하나의 세그먼트를 전송하는 정지-대기(stop-wait)와 한 번에 여러 세그먼트를 전송하는 슬라이딩 윈도(Sliding-window) 기법이 있다.

슬라이딩 윈도우

각 송수신의 데이터 전송, 수신을 하는 버퍼에서 수신 측이 설정한 윈도의 크기만큼 세그먼트를 전송할 수 있게 해 주어 데이터의 흐름을 제어

동작 방식

  1. 송신 측에서 데이터 window의 크기보다 적은 만큼 데이터 전송
  2. 전송한 데이터의 크기만큼 window의 크기는 작아짐. (보낼 수 있는 데이터의 수가 줄어듬)
  3. 수신자는 데이터가 받으면 받은 만큼 window의 크기가 줄어듦
  4. 받은 데이터에 관한 응답으로 ACK를 보낸다. 이때 다음에 전송해야 할 데이터 번호가 들어가 있음
  5. ACK를 보내면 그동안 보내 데이터가 정상적으로 도착했다는 뜻이니 송수신의 window의 마지막 받은 데이터 번호 - ACK의 번호 크기만큼 늘어남. 그림에서는 데이터 0,1을 보낸 두 다음에 보내야 할 데이터 ACK 2를 보냈으므로 이는 데이터 0,1이 정상적으로 도착했음을 의미. 해서 정상적으로 도착했음이 보장된 크기인 2만큼 window의 크기가 커짐.
    • 데이터 링크 계층: 이웃한(인접한) 노드와 노드 간의 프레임 전달에 관여.
    • 네트워크 계층: IP와 같은 두 호스트 사이의 패킷 전달에 관여. 어떤 경로를 통해 호스트에 도달하는지에 대한 라우팅이 핵심적인 기능.
    • 전송 계층 프로토콜: 프로세스 사이의 메시지 전달에 관여. 포트 번호가 프로세스 간의 전달에 사용

'네트워크' 카테고리의 다른 글

라우팅 프로토콜  (1) 2023.08.11
패킷 라우팅  (0) 2023.08.01
주소매핑과 네트워크 에러 보고  (0) 2023.07.27
DHCP와 NAT  (0) 2023.07.21
IP 주소, 서브넷, 가변길이 주소 지정  (0) 2023.07.19