250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[Network] TCP/IP Transport layer(전송 계층) 본문

[Snow-ball]프로그래밍(컴퓨터)/네트워크

[Network] TCP/IP Transport layer(전송 계층)

Snow-ball 2023. 5. 11. 21:36
반응형

 

 

TCP/IP Transport Layer(전송 계층)은 OSI 7 Layer의 Transport Layer와 동일한 계층이다.

전송 계층은 네트워크계층에서 데이터 전송에 대한 신뢰성을 보장할 수 없다. 그러나 전송 계층은 수신지에 신뢰할 수 있는 데이터를 전송하는 데 필요한 계층으로, 오류를 점검하여 데이터에 오류가 발생하면 재전송을 요청함으로써 신뢰성을 제공한다.

 

즉, 네트워크 계층(L3)에서는 데이터를 전송하지만, 전송 계층(L4)에서는 데이터가 제대로 전송되었는지 확인한다. 또한 전송 계층은 수신지가 어떤 애플리케이션인지를 식별하는 기능을 가진다.

 

 

 


 

 

 

전송 계층

 

전송 계층 프로토콜

전송계층은 UDP(User Datagram Protocol, 비연결형 통신)과 TCP(Transmission Control Protocol, 연결형 통신)와 관련된 계층으로 오류복구와 흐름제어(flow control)를 통해 두 시스템 간에 신뢰성 있는 데이터를 전송한다. 

 

현재 인터넷을 사용하는 데 가장 많이 사용하는 두 프로토콜이 전송 계층의 대표 프로토콜이다. 전송 계층은 시스템 종단에서 투명한 데이터를 양방향으로 전달하는 계층으로, 네트워크 계층에서 전송한 데이터가 실제 운영체제의 프로그램에 연결되는 통신 경로라고 할 수 있다.

 

전송 계층은 4가지의 기능을 가진다.

1) 패킷을 하나의 경로로 보낼 것인지 결정하는 연결제어

2) 수신지에서 데이터의 모든 패킷 전송과 도착을 검사하는 수신지로의 데이터 전송

3) 데이터를 전송 가능한 단편(세그먼트)으로 나누고 순서를 기록하는 단편화

4) 순서번호에 따라 데이터를 올바르게 재조립하는 재조립 기능

 

 

 

 

 

전송 계층의 통신 방식

전송 계층은 데이터를 수신지까지 문제없이(신뢰성) 빠르고 정확하게 효율적으로 전송해야 한다.

신뢰할 수 있고 데이터를 정확하게 전달하는 통신 방식을 연결형 통신이라 한다.(TCP)

반면 효율적으로 데이터를 전송하는 통신 방식은 비연결형 통신이다.(UDP)

 

연결형 통신은 서로 확인하고 요청과 으답을 주고받으면서 통신하고, 비연결형 통신은 일방적으로 데이터를 전송한다.

비연결형 통신에서는 UDP 프로토콜이 사용되고, 연결형 통신에는 TCP 프로토콜이 사용된다.

 

 

 


 

 

 

UDP

UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)는 TCP/IP 응용 계층과 IP 계층 사이에 있으며, 비연결성과 비신뢰적 특징을 갖는 전송 계층의 프로토콜이다. 따라서 기본적인 IP 데이터 전달 서비스에 프로세스 간 통신이 추가된 형태로 볼 수 있다. UDP는 연결성 보장과 신뢰적 전송에 소요되는 오버헤드가 발생하지 않기 때문에 간단한 메시지를 송수신하는 데 유리한 프로토콜이다.

 

 

 

UDP 비연결형 서비스

응용 프로그램은 UDP를 사용하여 IP 데이터그램을 다른 응용 프로그램에게 전송할 수 있다. 이 때 UDP가 전송하는 데이터를 UDP 사용자 데이터그램이라고 한다. UDP는 동일한 호스트 내에서 실행되는 프로세스들을 구별하기 위해 포트 번호를 사용한다. (process identification number = port number)

 

UDP는 하위 계층의 IP를 이용하여 메시지를 전송하며, IP와 동일한 신뢰성이 없는(unreliable) 비연결형(connectionless) 전송 서비스를 제공한다.

 

UDP는 1) 전송한 메시지가 최종 목적지에 수신되었는지를 확인하지 않고, 2) 메시지의 도착순서를 재조정하지 않으며, 3) 호스트 사이에 정보흐름의 속도를 제어하는 피드백(feedback) 메커니즘도 제공하지 않는다. 

그러므로 UDP 메시지는 손실될 수 있고, 중복되어 수신될 수 있으며, 순서가 뒤바뀌어 도착할 수도 있다. 또한 UDP 메시지들이 수신자가 처리할 수 있는 용량의 한계를 초과하여 더 빨리 도착할 수도 있다.

 

UDP는 기본적으로 비연결형 IP 전달 서비스에 최소한의 신뢰성을 위한 오류제어 메커니즘으로 검사합(checksum) 기능을 옵션으로 제공할 뿐이다. UDP는 TCP와 비교하여 데이터 전송속도가 빠르고 응용 프로그램이 간단해지는 장점이 있지만, 메시지 손실, 중복 수신, 수신지연, 잘못된 순서 등을 위한 별도의 신뢰성 제어 기능을 제공해야 하는 단점이 있다.

 

 

 

UDP 사용자 데이터그램

UDP 사용자 데이터그램은 UDP헤더와 UDP 데이터 부분으로 구성된다.

 

 

 

 

UDP 헤더

메시지의 발신지 포트(Souce Port), 메시지의 목적지 포트(Destination Port), 메시지 길이(Length), UDP 검사합(Checksum)등으로 구성된다.

 

- Souce Port (16bit)

UDP 데이터그램을 생성한 발신자 호스트에서 UDP 전송 서비스를 사용하는 프로세스를 식별하는 데 사용되는 UDP 포트 번호이다. 이 필드는  옵션이며, 명시하지 않으면 기본값으로 '0'을 가진다.

 

- Destination Port (16bit)

UDP 데이터그램을 수신하는 목적지 호스트의 프로세스를 식별 하는 데 사용되는 UDP 포트 번호이다.

 

- Length (16bit)

UDP 데이터그램 헤더와 데이터 필드를 포함하는 UDP 데이터그램의 전체 길이를 바이트로 나타낸다. 최솟값은 8바이트이다.

 

UDP 데이터그램의 전체 길이 = IP 데이터그램 길이 - IP 헤더 길이

 

- Checksum (16bit)

옵션으로 UDP 데이터그램의 헤더와 데이터 부분의 오류를 검사한다. UDP 데이터그램의 길이는 홀수 바이트 크기가 될 수 있으므로, 검사합(checksum)을 위해 데이터 끝에 '0'으로 패딩(padding)할 필요가 있다.

 

 

 

 

UDP 가짜 헤더

UDP는 Checksum을 계산하기 4가지 절차가 필요하다.

1) 12바이트의 가짜 헤더(psudo-header)를 UDP 데이터그램에 덧붙이고(가짜 헤더의 값은 IP 헤더로부터 얻는다)

2) 데이터그램이 16비트의 배수가 되도록 '0'으로 패딩한 후 전체 UDP 데이터그램의 검사합을 계산한다. 

3) 가짜 헤더와 패딩 부분은 실제로는 전송되지 않으므로 길이에는 포함되지 않는다. 

4) UDP 데이터그램을 전송받은 수신자는 검사합 필드를 '0'으로 저장하고, 가짜 헤더, UDP 헤더 및 사용자 뎅터를 모두 포함하여 검사합을 계산한다.

 

 

(1) 가짜 헤더의 목적

가짜 헤더의 사용 목적은 UDP 데이터그램이 정확하게 목적지에 도착했는지를 이중으로 인증하는 것이다.

UDP 헤더는 단지 포트 번호만 가지고 있으므로 UDP는 수신된 데이터그램의 전송 중에 발생한 IP 헤더 오류를 인지할 수 없다. 따라서, 가짜 헤더에 포함된 송신자와 수신자의 IP 주소 등의 정보를 활용하여 수신자가 전송받은 UDP 데이터그램이 정상적으로 도착했는지를 인증하기 위해 가짜 헤더를 사용한다.

 

(2) UDP 가짜 헤더 형식

UDP 가짜 헤더는 12바이트로 구성된다.

 

- 발신지 IP 주소와 목적지 IP 주소

UDP 데이터그램 전송 시에 사용되는 발신지 IP 주소와 목적지 IP 주소를 나타낸다.

 

- 프로토콜

IP가 사용하는 UDP 프로토콜 타입(17, 밑에 이미지상 8-bit protocol 자리)을 가진다.

 

- UDP 길이

가짜 헤더를 포함하지 않은 UDP 데이터그램의 길이를 나타낸다.

 

 

 

UDP 포트 번호

UDP는 IP가 제공하는 비연결형 데이터 전달 서비스를 이용한다. UDP는 응용 프로그램 또는 서비스를 UDP 포트 번호를 사용하여 식별한다. 

 

 

 

 


 

 

 

TCP

TCP/IP에서 제공되는 신뢰성이 보장되는 데이터 전송 서비스를 TCP(Transmission Control Protocol)라고 한다.

TCP는 UDP와 마찬가지로 프로세스 대 프로세스 통신을 위한 프로토콜로서 포트 번호를 이용한다.

TCP는 연결 지향이므로 데이터 전송 이전에 먼저 연결이 설정되어야 하며, 흐름제어를 위해 슬라이딩 윈도우 프로토콜을 이용하고, 오류제어를 위해 확인 응답 패킷, 시간 - 초과, 재전송 방식을 이용한다.

 

 

 

전송제어 프로토콜

IP는 비신뢰성 전송 서비스를 제공하는 네트워크 계층 프로토콜이다. 전송 중인 패킷이 다른 패킷과 충돌하거나 네트워크 내에 과부하 트래픽이 존재하면 전송되는 패킷이 손실되거나 손상될 수 있다. 패킷을 동적으로 라우팅하는 네트워크상에서는 패킷들이 전송되는 순서와 다르게 수신되거나 전송속도가 낮거나, 중복하여 동일한 패킷을 수신할 수도 있다. 또한 네트워크 특성에 따라서 효율적인 데이터 전송을 위하여 적합한 패킷 크기나 다른 제한들이 있을 수 있다. 

 

한편, 응용 프로그램들은 방대한 양의 데이터를 전송하는 경우도 있다. UDP와 같은 비신뢰성 전송 계층 프로토콜을 사용하면 방대한 양의 데이터를 제대로 전송하기가 어렵기 때문에 프로그래머가 UDP를 이용하여 이러한 데이터를 전송할 수 있는 응용 프로그램을 구현하는 것은 쉬운 작업이 아니다. 따라서 사용자가 신뢰성을 위한 오류제어 기능을 제공하는 것보다는 전송 계층이 신뢰성 있는 데이터 전송 서비스를 제공할 필요가 있다.

 

 

 

신뢰성 제공

TCP는 신뢰성 있는 연결형(connection-oriented) 데이터 전송 서비스를 제공한다. 연결형 데이터 전송 서비스란 발신지 호스트의 프로세스와 목적지 호스트의 프로세스 사이에 연결(connection)이라는 논리적인 관계가 설정된다는 뜻이다.

 

TCP는 목적지로 전송할 데이터를 전송에 알맞은 최대 세그먼트 크기(Maximum Segment Size: MSS)로 전달한다. TCP가 절단하여 전송하는 데이터를 세그먼트(segment)라고 한다. 세그먼트 전송에 기반한 TCP는 다음과 같은 방법으로 신뢰성을 제공한다.

 

 

1) TCP는 세그먼트를 전송할 때 수신자의 세그먼트 수신 여부를 확인하기 위하여 타이머를 유지한다. 타이머가 종료되기 전에 수신자의 응답을 수신하지 못하면 송신자는 세그먼트를 재전송한다.

2) TCP가 상대방 호스트로부터 데이터를 수신하면, 수신 응답을 전송한다. 이 수신 응답은 바로 전송되지 않고, 일반적으로 1초 이내의 임의 시간 동안 지연된 후에 전송된다. 위 그림은 패킷 손실과 응답 손실이 발생한 경우에 수행되는 재전송 과정을 보여준다.

3) TCP는 세그먼트의 헤더와 데이터에 대한 검사합을 계산한다. 이 검사합은 전송 도중 발생하는 데이터의 변경을 감지하기 위해 종단 간에 수행된다. TCP는 수신한 세그먼트에서 검사합 오류가 발생하면 수신한 세그먼트를 조용히 버린다(즉, 이 경우에는 수신 응답 세그먼트를 보내지 않는다). 송신자는 자신이 보낸 세그먼트에 대한 수신 응답 세그먼트를 기다리고 있다가 타이머가 종료되면 세그먼트를 재전송한다.

4) IP는 TCP 세그먼트를 IP 데이터그램으로 전송한다. IP 데이터그램은 전송 도중에 순서가 변경될 수 있으므로 수신자 호스트의 TCP는 잘못된 순서로 TCP 세그먼트를 수신할 수 있다. TCP는 수신한 세그먼트들의 순서를 재조정하여 상위의 응용 프로그램에게 전달하는 기능을 제공한다.

5) IP 데이터그램은 중복되어 수신될 수 있으므로 TCP는 중복된 세그먼트를 버린다.

6) TCP는 흐름제어 기능을 제공한다. 발신지와 목적지 호스트는 한정된 버퍼 용량을 가지고 있으며, 발신지 호스트는 목적지 호스트의 버퍼 용량을 고려하여 세그먼트를 전송한다. 

 

 

 

TCP 세그먼트 형식

TCP를 이용하여 2개의 장치 사이에 전달되는 데이터 단위를 세그먼트(segment)라고 한다. 세그먼트는 20~60바이트의 헤더와 응용 프로그램의 데이터로 구성되어 있다.

 

옵션이 없는 경우에 헤더는 20바이트로 구성되며, 옵션을 포함하는 경우에는 최대 60바이트로 구성된다.(20byte~60byte)

TCP는 상용자에게 연속된 스트림의 데이터 전달 서비스를 제공하며, 데이터 스트림을 세그먼트 단위로 절단하여 IP에게 전달한다. 따라서 TCP가 전송하는 데이터는 특정한 구졸르 갖지 않고 단순히 연속되 스트림이며, TCP 사용자들에게 데이터의 투명성을 제공한다.

 

 

 

(1) Souce Port(발신지 포트 - 16bit)

세그먼트를 전송하는 호스트에 있는 응용 프로그램의 포트 번호를 정의한다. 발신지측 TCP 사용자 프로세스를 식별하는 데 사용된다.

 

(2) Destination Port(목적지 포트 - 16bit)

세그먼트를 수신하는 목적지 호스트의 TCP 사용자 프로세스를 식별하는 데 이용되는 TCP 포트 번호이다.

 

(3) Sequence Number(순서번호 - 32bit)

Segment 데이터 필드의 첫 번째 데이터 바이트의 순서번호이다. TCP는 신뢰성 있는 연결을 보장하기 위해 전달되는 각 바이트마다 번호를 부여한다. 순서번호는 목적지 TCP에게 세그먼트의 첫 번째 바이트가 이 순서번호에 해당하는 바이트라는 것을 알려준다. TCP의 연결설정 단계에서 난수 발생기를 이용하여 초기 순서 번호(Initial Sequence Number: ISN)를 만들며, 이때 사용되는 ISN는 각 방향에 따라 서로 다른 번호가 사용된다. 

 

(4) Acknowledgment number(응답번호 - 32bit)

세그먼트의 발신지 노드가 상대편 노드로부터 수신하고자 하는 바이트의 번호를 정의한다. 수신자가 송신자에게 응답하기 위해 다음에 수신하기를 기대하는 순서번호를 응답번호로 사용한다.

예를 들어, 수신자가 송신자로부터 순서 번호 x를 갖는 세그먼트를 수신했다면, 수신자는 응답번호로 x+1을 사용한다.

 

(5) Header Length(헤더 길이 - 4bit)

4byte 단위로 표시된 TCP 헤더의 길이를 나타낸다. 옵션 필드의 사용 여부에 따라 가변적이며, 5(5x4=20byte)~15(5x15=60byte) 사이의 값을 가진다.

 

(6) Reserved(예약 - 6bit)

향후 사용될 수 있는 서비스를 위해 남겨 놓은 필드이다.

 

(7) 6개의 Flag bits or Code bits (제어 - 6bit)

6개의 서로 다른 제어 비트 또는 플래그를 나타내며, 동시에 여러 개의 비트가 1로 설정될 수 있다. 프로토콜의 동작을 제어하는 데 사용되는 비트 단위의 플래그로서, 각 플래그의 기능은 다음과 같다.

 

1) URG: 긴급 포인터(urgent pointer) 필드가 유효함을 나타낸다.

2) ACK: 응답번호가 유효함을 나타낸다.

3) PSH: 수신자는 가능한 한 빨리 현재 세그먼트의 데이터를 상위 계층에 전달해야 한다.

4) RST: 연결을 재설정(reset)한다.

5) SYN: 연결설정 요구나 연결을 초기화하기 위해 순서번호를 동기화 시킨다.

6) FIN:  데이터 전송 종료나 송신자가 보내는 마지막 데이터임을 나타낸다.

 

(8) Window(윈도우 크기 - 16bit)

수신자가 흐름제어를 위해 명시하는 바이트 단위의 윈도우 크기(버퍼 크기)이며, 이 필드의 길이는 16비트이므로 윈도우의 최대 크기는 6만 5,535바이트(2^16)가 된다.

 

(9) Cehcksum(검사합 - 16bit)

전체 세그먼트의 오류를 검사하기 위해 사용한다.

 

(10) Urgent(긴급 포인터 - 16bit)

URG 플래그가 '1'로 설정되면, 긴급 데이터(urgent data)의 마지막 바이트의 순서번호는 이 포인터 값과 순서번호 값의 합으로 계산된다.

 

긴급번호 + 순서번호 = 긴급 데이터의 마지막 바이트의 순서번호

 

(11) Options(옵션)

송신자가 수신하기를 원하는 세그먼트의 최대 크기(Maximum Segment Size, MSS), 윈도우 크기를 증가시키기 위한 값, 타임스탬프 등의 옵션 정보를 나타내기 위해 사용된다. TCP 헤더에는 최대 40바이트의 옵션 정보가 있을 수 있다.

 

 

 

TCP 연결형 서비스

TCP는 연결-지향 프로토콜이므로 TCP 사용자가 데이터를 전송하기 전에 발신지와 목적지 간에 가상결로를 설정하고 데이터 전송이 끝나면 이를 해제해야 한다. 

 

TCP의 모든 세그먼트는 가상경로를 통하여 전송된다. 전체 메시지를 하나의 단일 가상경로를 이용하여 전송함으로써 손상 또는 손실된 세그먼트의 재전송뿐만 아니라 확인 응답의 처리도 가능하다.

 

 

(1) TCP 연결

UDP는 포트 번호만 사용하여 응용 프로그램을 식별하지만 TCP는 연결을 맺고 응용 프로그램을 식별한다. TCP는 송신자 또는 수신자와 같은 종단(endpoint)을 호스트 IP 주소와 포트 번호로 정의한다. TCP 연결은 종단 간에 양방향으로 데이터가 동시에 전송될 수 있는 전이중(full-duplex) 데이터 전송 서비스를 제공한다.

 

 

(2) TCP 연결 설정

TCP는 연결설정을 위하여 3-Way Handshake 방식을 사용한다. 

 

1. 연결 요청자는 일반적으로 클라이언트이다. 

SYN 세그먼트 1을 서버로 전송한다. 세그먼트 1의 ISN(Initial Sequence Number) 값을 보내고 데이터 크기가 0임을 보낸다.

 

2. 서버는 SYN Segement 1에 대한 응답으로 서버의 ISN 값을 포함한 세그먼트 2를 전송한다.

 

3. 클라이언트가 SYN 세그먼트 2에 대한 응답 세그먼트 3을 전송하면, 연결성정이 완료된다.

 

 

 

(3) TCP 연결종료

TCP 연결은 전이중 방식으로 2개의 독립된 스트림 전송 흐름을 가지고 있으므로 양방향에 대해 모두 연결종료를 해야 한다.

 

한 방향으로 연결을 종료하면, 그 방향으로는 데이터를 전송할 수 없지만, 다른 방향으로는 여전히 데이터를 전송할 수 있다. TCP는 양 방향의 연결이 모두 종료되면 TCP 연결에 대한 기록을 삭제한다.

 

 

1. TCP 응용 계층의 사용자가 close를 실행하면 클라이언트의 TCP는 FIN 세그먼트를 서버에 전송한다.

 

2. 서버의 TCP는 클라이언트의 연결종료 요청에 대해 서버의 응용 계층 사용자에게 EOF를 전달한 후 클라이언트에게 연결종료 요청에 응답한 후 다른 방향에 대한 연결종료를 FIN 세그먼트를 전송함으로써 요청한다.

 

3. 클라리언트가 서버의 연결종료 요청에 응답하면 TCP 연결은 완전히 종료된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

reference

* 정보통신기술용어해설, UDP. User Datagram Protocol

* Network Urge, TCP Header Details

* 손진곤, 길준민, 박지수 공저, 정보통신망, 한국방송통신대학교출판문화원 

* OZEKI VOIP SIP SDK, User Datagram Protocol (UDP)

* Ques10, How is checksum computed in UDP?

* sjlim5092, TCP 3 way handshake

* TCP Connectio Termination

* 정보통신기술용어해설, TCP Header Transmission Control Protocol Header  TCP 헤더

반응형
Comments