Computer Science/네트워크

[컴퓨터네트워크] 10. 전송계층 프로토콜(1)

lumana 2024. 5. 19. 00:02

전송계층 프로토콜(1)


전송계층 프로토콜 소개

전송계층 프로토콜 서비스

  • UDP
    • 비신뢰적 비연결형
    • 간단. 효율적 : 에러처리는 응용계층에서 수행
  • TCP
    • 신뢰적인 연결지향
  • SCTP
    • UDP와 TCP의 특징을 결합

포트번호(Port Numbers)

  • TP 계층 프로토콜은 프로세스간 통신 지원
  • 포트 번호는 전송계층에서 종단간 종단간 주소를 지원
    • 프로세스를 구분할 때 구분자를 제공해준다
  • 다중화/역다중화 지원

 

참고)

0~65535 까지 할당이 가능하다

0~1023은 잘 알려진 포트로, 사용하지 않는 것이 좋음

UDP

  • User Datagram Protocol
  • UDP는 비연결, 비신뢰적 전송 프로토콜
  • 최소한의 오버헤드를 가지는 단순 프로토콜

User Datagram

cf) TCP : segment, UDP : datagram

  • UDP 패킷 (데이터그램)은 8바이트 고정 헤더
    • 2바이트(16비트) 필드 4개
  • 소스 포트번호
  • 목적지 포트번호
  • Total Length
    • 헤더+데이터
    • 0 - 65535(65k bit)
  • Checksum
    • optional

Example 10.1

UDP 헤더값의 16비트 값이 다음과 같을때

CB84000D001C001C

a. source port number => (CB84)16 or 52100

b. destination port number = > (000D)16 or 13
참고로 13번은 보통 서버에서 쓰는 번호다

c. total length => (001C)16 or 28 바이트

d. length of the data => 28-8=20 바이트

e. packet direction => client to server (포트번호 13을 보고 알 수 있음)

f. client process => DayTime client
13번 -> 시간 정보를 요구할 수 있는 프로토콜을 사용한 것

UDP 서비스

  • Process-to-Process 통신 : 소켓주소 (IP주소+포트번호)
  • 비연결 서비스
  • 흐름 제어 : 없다
  • 오류 제어 : 체크섬 틀리면 버림
  • 체크섬 : 패킷 에러검사
  • 혼잡제어 : 없다
  • 인캡슐레이션/디캡슐레이션 : 상위계층 데이터 서비스

UDP Checksum

  • 3 부분 : Pseudoholder+UDPheader+UDPdata
  • Pseudoholder : IP 헤더의 부분
  • 모두 더한 다음 1의 보수 -> Checksum

Example 10.2

다음과 같은 경우에 체크섬의 값은?

a. 송신측에서 안 보내기로 함 => 모두 0

b.체크섬 결과가 모두 1=> 보수를 취하면 모두 0 => 다시 보수를 취해 모두 1로 해서 보냄

c.체크섬의 값이 모두0 => 이런 경우는 절대 없음

UDP 응용

  • UDP 신뢰적인 전송 프로토콜이 아니지만, UDP는 몇몇 응용에서 선호되고 있다.
  • 여러 요인 중에서 최적을 찾아야 한다.
  • 예를 들어, 하루내 배송이라는 것과 비용 간의 관계에서 접접을 찾아야 한다.

Example 10.3

DNS 같은 클라이언트/서버 응용은 UDP를 이용하는데,
왜냐하면 클라이언트는 서버에게 짧은 요청을 하고, 서버로부터 빠른 응답을 받기 위함이다.
요청과 응답은 하나의 데이터그램에 딱 들어간다.
--> 각 방향으로 하나의 메시지만을 교환하므로 비연결 속성은 문제가 아니다.
--> 클라이언트/서버는 데이터의 순서가 바뀌는 것이 문제 되지 않는다.

Example 10.4

클라이언트/서버 응용인 SMTP는 전자메일에 사용되는 프로토콜로서, 그림이나 소리, 비디오를 포함하는 멀티 미디어를 보낼 수 있는 e-메일 메시지를 보내기에는 적합하지 않다.
만일 Application이 UDP를 사용하고 메시지가 하나의 UDP 데이터그램에 들어가지 않으면, 데이터는 Application에 의해 여러 데이터그램으로 분할해야한다.
이런 경우에 비연결형 서비스는 문제를 야기한다. 순서가 바뀌어 도착하면 수신자는 정렬이 불가능하다. 이것은 비연결형 서비스는 긴 메시지의 전송에 불리하다는 것을 말한다.

Example 10.5

인터넷에서 긴 텍스트 파일을 다운로드한다고 하자.

이 경우 신뢰적인 전송 서비스가 절대적으로 필요하다. 파일의 부분이 유실되거나 손상되는 것은 안된다.
데이터를 교환하는 부분 사이의 지연은 큰 문제가 아니다. 파일의 모든 데이터가 모아져 볼 수 있을 때까지 기다려야 한다.
이런 경우에 UDP는 전송 계층에 적합하지 않다.

Example 10.6

스카이프 같은 실시간 인터낵티브(real-time interactive) 응용을 사용한다고 하자.

오디오나 비디오는 프레임에 나누어 들어가고 순서대로 보내진다. 만일 전송계층이 손상되거나 유실된 데이터를 재전송하면 전체 송신의 동기를 잃어버린다. 갑자기 빈 화면이 뷰어의 화면에 보일 것이고 다음 프레임이 올 때까지 기다려야 한다. 만일, 각각의 부분이 하나의 데이터그램으로 보내진다면, 수신 UDP는 손상되거나 유실된 패킷을 무시하고 나머지를 보낼 것이다. 그때의 화면은 잠시 빈 화면일 것이고, 대부분의 뷰어는 알아채지도 못할 것이다.

 

참고)

최근에 HTTP 3에서 TCP의 SYN, SYN+ACK, ACK와 같은 동작을 최적화 하기 위해서 UDP가 각광받고 있다고 한다

TCP

  • Transmission Control Protocol (TCP)는 연결지향형신뢰적인 프로토콜
  • TCP는 명확하게 연결지향 서비스를 제공하기위해 연결설정, 데이터 전달, 연결종료 등의 단계를 제공한다.
  • TCP는 신뢰성을 제공하기 위해 GBN과 SR 프로토콜을 조합하여 이용한다.

TCP 서비스

  • 프로세스간 통신
  • 스트림 전달 서비스 (스트림 형의 데이터란 부분 부분이 연관되어 있는 데이터를 말함)
    • 송수신 버퍼
    • 세그먼트(Segment) : 패킷에 넣은 일련의 바이트 (자른 것 하나 하나)
  • 전이중 통신 (full-duplex를 말함. Rx와 Tx와 모두 송수신이 가능함)
  • 멀티플렉싱/디멀티플렉싱
  • 연결지향 서비스
  • 신뢰적 서비스

 

 

TCP 특징

  • TCP Numbering System
    • Segment 번호가 아닌 바이트 번호 (Octets)

부연설명 하자면, 100MB 중에서 처음 값(랜덤)이 1000번(Byte)이고, 세그먼트 크기가 2000Byte일 때, 두 번째 Sequence number는 3000, 그 다음은 5000....

즉 처음 데이터로부터 얼마나 offset이 떨어져 있는지를 말한다(단순 0, 1, 2, 3 과 같은 번호가 아님)

  • Sequence number
    • 보내는 데이터 바이트 번호
    • 처음 값은 랜덤 값
  • Acknowledge number
    • 다음에 받기를 기다리는 번호
    • 보통 Offset 번호 다음 번호임(1000이라면 1001)

Example 10.7

세그먼트

  • 세그먼트 : TCP 패킷 데이터
  • 구성 : 헤더 + 데이터
  • 헤더길이 : 20바이트(옵션없음) 에서 60바이트(최대)
  • 헤더필드
    • Source/destination port address (16+16 bits)
    • Sequence number (32bits), Acknowledge number (32bits)
    • HLEN (4bits) : 헤더 크기의 word 값(4바이트 배수)
    • Reserved(6), Control(6) : 플래그
    • Window size(16bits) : 송신측 윈도우의 최대 크기 (max 65535바이트)
    • Checksum(16bits) : (IP Placeholder + TCP Header) 체크섬
    • Urgent Pointer(16bits) : 세그먼트내 데이터내의 마지막 긴급데이터 오프셋값
    • Options : 40바이트까지 가능

 

 

TCP 연결

  • TCP는 연결지향이고, 하나의 메시지에 속하는 모든 세그먼트는 이 논리채널로 보내진다.
  • 하나의 논리 채널을 통해 모든 메시지의 전송 및 확인응답과 손상되거나 유실된 프레임의 재전송을 수행한다.
  • 비연결형인 IP를 이용하는 TCP가 어떻게 연결지향이 되는가
    • TCP 연결은 물리적이 아닌 논리적인것이다. TCP는 더 높은 수준에서 동작한다. TCP는 IP가 각각의 세그먼트를 수신자에게 전달하는 서비스를 이용하지만, 연결 그 자체를 제어한다.
    • 부연설명 하자면, TCP는 IP를 통해서 통신하는데, IP는 Connectin less임(고정된 경로가 아님). 이걸 가지고 Connection less가 아니냐고 물어본다면, 연결형이 맞다. 가상적인 채널을 통해 흐름, 오류제어를 하고, 신뢰성 있게 전달하기 때문

 

 

 

 

Urgent Data

  • 헤더내 URG 비트가 1이면, 세그먼트내의 처음부터 urgent pointer 값까지 urgent data이고, 그 이후가 정상적인 데이터임

상태 전이 다이어그램

  • 연결 설정, 데이터 전송, 연결 해제 간에 발생하는 모든 이벤트를 추적하기 위해, TCP는 유한기계상태(finite state machine, FSM)을 정의하여 사용