본문 바로가기

Computer Science/네트워크

[쉽게 배우는 데이터 통신과 네트워크] CH9. TCP 프로토콜

반응형
SMALL

01. 전송 계층의 기능

전송 계층과 데이터 링크 계층의 차이

  • 데이터 링크 계층은 단순히 물리적인 선로를 통해 데이터를 직접 전달하기 때문에 네트워크 계층의 중개 기능이 필요 없다.
  • 전송 계층은 중간에 위치한 논리적 네트워크의 중개 기능을 사용해 전송 기능을 수행한다. (다양한 논리적 자원 사용)

 

1. 전송 계층의 주요 기능

1.1 흐름 제어

  • 양 끝단의 호스트에서 실행되는 네트워크 프로세스가 데이터를 주고받는데, 이 과정에서 필요한 주요 기능 중 하나이다.
  • 송신 프로세스가 보낼 수 있는 패킷의 한계를 지정하는 방법으로 문제를 해결한다.

 

1.2 오류 제어

  • 전송 오류가 발생하여 수신 데이터의 내용이 깨지거나 분실되면 데이터 재전송에 의한 오류 제어 기능에 의해 복구 절차가 진행된다.
  • 전송 계층에서 발생하는 오류는 논리적으로 구축된 각 계층의 소프트웨어가 동작하는 과정에서 데이터를 분실하는 경우가 대부분이다.

 

1.3 분할과 병합

  • 상위 계층에서 전송을 요구한 데이터의 크기가 전송 계층에서 처리할 수 있는 데이터 크기보다 크면 데이터를 쪼개 전송해야 한다.
  • 데이터를 전송하기 전에 적합한 크기로 나누는 과정을 분할이라 한다.
  • 수신 프로세스가 수신한 데이터를 원래 크기로 다시 모으는 과정을 병합이라 한다.

 

1.4 서비스 프리미티브(Primitive)

  • 서비스 프리미티브는 전송 계층 사용자가 전송 계층 서비스를 사용하기 위한 인터페이스이다.
  • 전송 계층에서는 비연결형 서비스뿐 아니라, 신뢰성이 향상된 연결형 서비스도 제공한다. (네트워크 계층은 비연결형만 지원)

 


2. 전송 계층 설계 시 고려 사항

2.1 주소 표현

  • 전송 계층의 주소를 보통 TSAP(Transport Service Access Point)라 한다.
  • 주소는 구조적 또는 비구조적으로 표현할 수 있다.
    • 구조적 표현: 하나의 주소를 여러 개의 계층적인 필드로 구분한다. (Ex. 도메인 주소)
    • 비구조적 표현: 주소 값만 해석해서는 컴퓨터의 논리적인 위치를 파악하기 어렵다. (Ex. IP 주소)

 

2.2 멀티플렉싱

멀티플렉싱

  • 상방향 멀티플렉싱
    • 다수의 전송 계층 연결에 대해 하부의 네트워크 계층에서 연결이 하나 형성된다.
    • 여러 전송 계층의 연결에서 발생한 데이터가 동일한 경로로 전송되면 하나의 네트워크 연결에 묶어 전송할 수 있다.
    • 일반적인 연결 구조보다 네트워크 계층에서 만들어지는 가상 회선 연결의 개수를 줄일 수 있어 연결 설정 시간이 단축된다.
  • 하방향 멀티플렉싱
    • 하나의 전송 연결 설정을 의미하는 포트에 다수의 가상 회선을 할당한다.
    • 전송 속도뿐 아니라, 전송 계층에서 발생하는 데이터의 특성에 따라 개별 가상 회선을 할당하여 효과적인 통신이 가능하다.

 

2.3 연결 설정

개념적 연결 설정 절차

  • 연결을 요청하는 프로세스의 Conn_Req(연결 설정 요구)와 상대편 프로세스에서 Conn_Ack(연결 수락)의 회신으로 완료된다.
  • 연결 요청은 양자의 합의에 의해서만 가능하다. (Req 요구 받고 연결 요청 거부 가능)

 

3단계 설정 절차

  • 오류가 발생하지 않은 정상 상태에서의 3단계 설정의 동작 과정이다.
  • A 프로세스는 임의의 송신 순서 번호 x를 지정하여 연결 설정을 요청한다.
  • 수신하는 B 프로세스는 연결 설정 요구에 대한 순서 번호 x에 대해 응답을 보낸다. 이때 순서 번호 y는 자신의 초기 송신 번호를 왼쪽 프로세스에 알려주기 위해 사용한다.
  • A 프로세스는 Data_Req로 데이터 전송과 함께 응답 정보를 보낸다.
    • 자신이 설정한 순서 번호 x를 사용해 데이터를 전송하고, B 프로세스가 설정한 순서 번호 y에 대해서도 응답해야 한다.

 

2.4 연결 해제

일방적 연결 해제 절차

  • 한쪽 프로세스가 일방적으로 Data_Req를 전송해 연결 종료를 선언할 수 있다.
  • Disc_Req에 대한 상대 프로세스의 동의가 없어도 연결이 끊기는 방식이다.
  • 한쪽 프로세스가 Disc_Req를 전송한다는 의미는 중앙 사각형의 기능을 정지시켜, 둘 사이의 연결이 해제되는 것을 의미한다.
  • A 프로세스가 B 프로세스에 전송할 데이터가 남거나, 전송 중이지만 아직 완료되지 않은 시간 t에 상대 프로세스와 연결 종료가 이루어진다. 그러면 데이터 전송을 지원하는 기능이 정지되어 데이터 전송을 완료할 수 없는 문제가 발생한다.

 

점진적 연결 해제 절차

  • 하나의 연결에 2개의 단방향 연결을 지원하는 공간이 존재하는 것과 같다.
  • A 프로세스의 데이터 전송 과정 중 B 프로세스의 연결 해제 요구가 발생해도 아래쪽 기능만 정지하고, 위쪽 기능은 여전히 정상적으로 수행한다.
  • 두 프로세스 사이의 연결을 완전히 종료하려면 양쪽에서 자신에게 할당된 단방향의 기능을 명시적으로 정지해야 한다.
  • 연결을 해제하려면 두 프로세스 모두 Disc_Req를 전송해야 한다.

 


02. TCP 프로토콜

  • 연결형 서비스를 제공한다.
  • 전이중 방식의 양방향 가상 회선을 제공한다.
  • 신뢰성 있는 데이터 전송을 보장한다.

 

TCP/IP 구조

  • IP 프로토콜 위에서 실행되는 전송 계층 프로토콜은 서비스의 유형에 따라 2 종류로 구분한다.
    • TCP: 연결형 서비스를 지원하는 프로토콜
    • UDP: 비연결형 서비스를 지원하는 프로토콜
  • 전송 계층 프로토콜은 운영 체제의 내부 기능을 구현된다.
  • 해당 서비스를 사용하려면 상위 계층에서 시스템 콜이라는 프로그램 호출 방식을 이용해야 한다.

 

1. TCP 헤더 구조

TCP 헤더의 구조

 

1.1 TCP 헤더의 필드

  • Source Port/Destination Port(송신 포트/수신 포트): TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당된 네트워크 포트 주소
  • Sequence Number(순서 번호): 송신 프로세스가 지정하는 순서 번호
  • Acknowledgement Number(응답 번호): 수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용한다.
  • Data Offset(데이터 옵셋): TCP 세그먼트가 시작되는 위치를 기준으로 데이터의 시작 위치를 나타내므로 TCP 헤더의 크기가 된다.
  • Reserved(예약): 예약 필드
  • Window(윈도우): 슬라이딩 윈도우 프로토콜에서 수신 윈도우의 버퍼 크기를 지정하려고 사용한다.
  • Checksum(체크섬): TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터 모두에 대한 변형 오류를 검출하려고 사용한다.
  • Urgent Pointer(긴급 포인터): 긴급 데이터를 처리하기 위한 것으로, URG 플래그 비트가 지정된 경우에 유효하다.

 

1.2 TCP 헤더의 플래그 비트

  • URG: Urget Pointer 필드가 유효한지 나타낸다.
  • ACK: Acknowledgment Number 필드가 유효한지 나타낸다.
  • PSH: 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달하도록 지시할 때 사용한다.
  • RST: 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용한다.
  • SYN: 연결 설정 요구를 의미하는 플래그 비트이므로 가상 회선 연결을 설정하는 과정에서 사용한다.
  • FIN: 한쪽 프로세스에서 더는 전송할 데이터가 없어 연결을 종료하고 싶다는 의사 표시를 상대방에게 알리려고 사용한다.

 

1.3 혼잡 제어

  • TCP는 ECN 기능을 지원하기 위해 CWR 필드와 ECE 필드를 정의한다.
    • ECN 기능: 라우터가 송신 프로세스에 명시적으로 혼잡 발생을 알려주어 송신 프로세스 스스로 트래픽을 완하하는 기술
    • CWR(Congestion Window Reduced): ECE 비트를 수신한 송신 프로세스가 전송 윈도우 크기를 줄였음을 통지
    • ECE(Explicit Congestion Notification Echo): 네트워크 트래픽이 많아질 때 라우터가 송신 프로세스에 명시적으로 혼잡을 알리기 위해 사용

 

1.4 캡슐화

TCP 세그먼트의 캡슐화

  • 상위 계층에서 내려온 전송 데이터는 TCP 헤더 뒤에 추가되어 TCP 세그먼트를 구성한다.
  • TCP 세그먼트는 다시 IP 프로토콜로 보내지고, IP 헤더에 캡슐화되어 데이터 링크 계층으로 보내진다.

 


2. 포트 번호

  • 포트 번호는 TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식이다.
  • 유닉스 환경에서 소켓으로 포트를 구현하므로, TCP/UDP 프로토콜을 사용하려면 시스템 콜의 인터페이스를 알아야 한다.
  • 소켓 시스템 콜을 이용해 TCP 연결 설정이 되면 통신 양단의 프로세스가 사용하는 고유 주소는 해당 호스트의 IP 주소와 호스트 내부의 포트 번호가 조합된 형태이다.
  • 사용자가 연결을 원하는 서버의 호스트 IP 주소만 클라이언트 프로그램에 알려주고, 포트 번호 선택은 프로그램에서 자동으로 해준다.
  • TCP, UDP 두 프로토콜에서 동일한 포트 번호를 할당해도 서로 다른 포트로 간주된다.

 

서비스 포트 번호
FTP(데이터 채널) 20
FTP(제어 채널) 21
Telnet(텔넷) 23
SMTP 25
DNS 53
TFTP 69
HTTP 80
rlogin 513
rsh 514
portmap 111

Well-known 포트

  • 인터넷 환경에서 많이 사용하는 네트워크 응용 서비스의 서버 프로세스에 할당된 포트 번호를 Well-known 포트라 한다.
  • 전 세계 모든 컴퓨터가 동일한 포트 번호를 사용하도록 권고받고 있다.
  • 인터넷에서 자주 사용하는 응용 서비스는 모두 고정된 포트 번호를 사용한다.

 


03. TCP 프로토콜을 이용한 데이터 전송

1. 연결 설정

TCP 연결 설정

  • A 프로세스가 연결 설정을 요구하고, B 프로세스가 이를 수락하는 형식이다.
  • A 프로세스는 먼저 TCP 헤더의 SYN 플래그를 지정한 세그먼틀르 전송함으로써 연결 설정을 요구한다.
  • 연결 설정 요구를 받은 B 프로세스가 연결을 수락하려면 이에 대한 긍정 응답을 해야 한다. (SYN, ACK)
  • 마지막 3번째 세그먼트는 B 프로세스가 전송한 연결 수락 세그먼트가 제대로 도착했음을 알린다.

 


2. 데이터 전송

2.1 정상적인 데이터 전송

TCP 데이터 전송

  • TCP 데이터 전송은 양쪽 프로세스가 동시에 데이터를 전송할 수 있는 전이중 방식을 지원한다.
  • A 프로세스가 B 프로세스에 전송할 데이터가 있으면 3번째 세그먼트에 데이터를 실어서 전송할 수 있다.
  • A 프로세스가 먼저 순서 번호 11번부터 5바이트의 데이터를 전송하고, B 프로세스는 순서 번호 51부터 10바이트의 데이터를 전송한다. (순서 번호와 응답 번호의 조합은 전송되는 데이터 양에 따라 적절히 조정됨)
  • TCP 흐름 제어는 프로토콜 헤더의 Window 필드를 사용한다.
    • Window 필드에 지정한 값 이상으로 데이터를 전송할 수 없으므로 수신 프로세스는 자신의 처리 능력에 맞는 값으로 지정해 송신 프로세스의 전송 속도를 제어한다.

 

2.2 데이터 전송 오류

전송 오류

  • 순서 번호가 동일한 데이터가 도착하면 중복으로 판단하여 해당 데이터를 버리고, 중간의 순서 번호가 빠지면 데이터를 분실했다고 판단한다.
  • TCP는 데이터 변형에도 수신 프로세스가 응답하지 않아 데이터 분실과 동일하게 처리(재전송)된다. (NAK 미사용)
  • A 프로세스가 TCP 세그먼트 3개를 연속으로 전송하고, 이 중 3번째 세그먼트에 오류가 발생했다고 가정한다.
    • A 프로세스가 번호 11~20번, 21~30번, 31~40번 데이터 세그먼트를 전송하고, 이들이 모두 정상적으로 수신되면 41번 응답 번호를 긍정 응답으로 회신받는다.
    • 31~40번 데이터 세그먼트에 오류가 발생했으므로 31번 응답 번호를 긍정 응답으로 회신받았다.
    • A 프로세스는 31~40번 데이터에 대한 긍정 응답을 받지 못했으므로 타임아웃 기능을 통해 해당 세그먼트를 재전송해야 한다.
  • 세그먼트가 중복으로 수신될 수도 있기 때문에 수신 프로세스는 순서 번호를 기준으로 중복 여부를 처리할 수 있어야 한다.

 


3. 연결 해제

TCP 연결 해제

  • 연결 해제 단계는 연결을 해제하고자 하는 쪽에서 FIN 플래그를 지정해 요구한다.
  • 연결 해제 세그먼트를 받은 프로세스가 FIN 플래그로 응답할 때까지 연결은 계속 유지된다.
  • 그림에서는 5바이트의 데이터를 전송한 후 FIN 플래그를 사용해 연결 종료에 합의하고 있다.

 


4. 혼잡 제어

  • ECN 기능을 사용하려면 TCP 연결 설정 단계에서 ECN 기능을 사용할 것인지 여부를 협상해야 한다.
  • 데이터 전송 단계에서는 혼잡을 인지한 라우터가 수신 프로세스에 혼잡을 통지한다. 그러면 수신 프로세스는 다시 송신 프로세스에 혼잡을 통지함으로써 송신 프로세스가 전송하는 데이터의 양을 줄이는 방식으로 혼잡 제어가 이루어진다.

 

TCP 연결 설정(ECN)

  • TCP 연결 설정 단계에서 ECN 사용에 대한 동의 절차를 거쳐야 한다.
  • A 프로세스에서 SYN 플래그와 함께 CWR, ECE 플래그를 지정하여 ECN 기능이 동작하는 연결 설정 요청을 보낸다.
  • 요청을 받은 B 프로세스에서 ECN 기능을 사용할 의사가 있으면 (a)처럼 ECE 플래그를 함께 보내고, 없으면 (b)처럼 SYN, ACK 플래그만 지정하여 응답한다.

 

ECN의 동작 원리

  • ECN 기능이 동작하는 TCP 연결을 사용하여 데이터를 전송하는 과정의 혼잡 제어 처리이다.
  • (a) 먼저 TCP 세그먼트를 전송하려는 A 프로세스의 IP 프로토콜은 IP 헤더 내의 ECN 필드 값을 ECT(01 혹은 10)로 설정하여 전송한다.
    • 전송되는 모든 데이터는 항상 이 값이 설정된 상태로 전송된다.
    • IP 헤더에 ECT가 설정되었다는 것은 TCP가 ECN 기능을 지원한다는 의미이다.
  • (b) 이후 임의의 시점에서 네트워크에 혼잡이 발생하고, 라우터가 이를 감지했다.
    • (c) 라우터가 수신 프로세스인 B 프로세스에 통신한다.
    • 수신 프로세스의 중개를 거쳐 간접적으로 송신 프로세스에 혼잡을 통지한다.
  • (d) 라우터로부터 IP 헤더의 CE 값을 받은 B 프로세스는 모든 TCP 세그먼트에 대해 TCP 헤더의 ECE 플래그를 지정하여 라우터가 감지한 혼잡을 A 프로세스에 알려준다.
  • (e) 혼잡을 인지한 A 프로세스는 송신 윈도우를 조절하여 전송되는 데이터의 양을 줄이고, (f) TCP 헤더의 CWR 플래그를 지정함으로써 혼잡에 적절한 조치를 취했음을 통지한다.

 


References

반응형
LIST