본문 바로가기

Computer Science/Network

<네트워크> 전송 계층

 

1. 전송 계층의 역할

* 전송 계층의 두 가지 역할

 - 이전 장까지 물리 계층, 데이터 링크 계층, 네트워크 계층을 살펴 보았다. 그러나 이 계층들은 목적지에 데이터를 보내는 중에 데이터가 손상되거나 유실되더라도 아무것도 하지 못한다.

 

 - 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 오류를 점검하고, 애플리케이션을 식별하는 기능을 가지고 있다.

 

 - 전송 계층은 오류가 발생하면 점검하여 데이터를 재전송하도록 요청한다.

 

 - 컴퓨터가 데이터를 받더라도 어느 애플리케이션에 전달해야할지 알아야 한다. 홈페이지인지 메일프로그램인지 등을 구분하도록 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별한다.

 

* 연결형 통신과 비연결형 통신

 - 연결형 통신 : 신뢰할 수 있고 정확한 데이터를 전달하는 통신으로, 상대편과 확인해 가면서 통신하는 데이터 방식

 

 - 비연결형 통신 : 데이터를 빠르고 효율적으로 전달하는 통신으로, 상대편을 확인하지 않고 일방적으로 데이터를 전송

 

 - 쉽게 말해 연결형 통신은 신뢰성과 정확성을 우선시하여 수신측에 데이터를 보내도되는지 요청하고, 수신측은 보내도된다고 답변하고, 송신측은 보낸다고하고, 수신측은 받았다고하는 등의 확인을 계속 거치게 된다. 그러나 비연결형 통신은 효율성이 우선이므로 그냥 송신측이 데이터를 보낸다고하며 보내버린다.

 

 - 일반적으로 연결형 통신을 이용하지만 스트리밍 동영상을 볼 때에는 비연결형 통신을 사용한다. 동영상은 정확한 데이터 전송보다 빠른 전송이 필요하기 때문이다.

 

 - 전송 계층의 연결형 통신 프로토콜에는 TCP(Transmission Control Protocol 전송 제어 프로토콜)가 사용된다.

 

 - 전송 계층의 비연결형 통신 프로토콜에는 UDP(User Datagram Protocol 사용자 데이터그램 프로토콜)가 사용된다.

 

 - TCP와 UDP 모두 OSI 표준모델과 TCP/IP모델의 전송계층에서 사용되는 프로토콜이다. 정확성이냐 신속성이냐로 구분된다고 생각하자.

 

2. TCP의 구조

* TCP란?

 - 전송 계층에서 TCP로 전송할 때 붙이는 헤더를 TCP헤더라고 하며, 이 헤더가 붙은 데이터를 세그먼트라고 한다.

 

TCP 헤더

 - TCP헤더의 구성은 위의 그림과 같다.

 

 - 따라서 세그먼트는 다음과 같이 그려진다.

 

 

 - 앞서 말했던대로 TCP는 연결형 통신에 사용되는 프로토콜이다. 이 때 전송하기 전에 해야하는 작업이 있다. 가상의 독점 통신로인 '연결(connection)'을 확보해야 한다.

 

 - TCP헤더의 107번째 비트부터 112번째 비트까지의 6비트로 구성된 코드비트는 다음과 같이 구성되어 있다.

 

URG ACK PSH RST SYN FIN
0 0 0 0 0 0

 

 - 코드 비트는 초깃값이 0이며 활성화되면 1이 된다. 이 때 각 비트별로 역할이 있는데, 연결을 확립하려면 이 중 SYN과 ACK가 필요하다.

 

 - SYN은 연결요청, ACK는 확인응답을 의미한다.

 

* 3-way 핸드셰이크

 - 연결은 SYN과 ACK를 사용하며 송신측의 연결 확립 허가를 받기위한 요청(SYN)을 보내는 것으로 시작한다.

 

 - 수신 측은 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)를 보내며, 동시에 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.

 

 - 요청을 받은 송신측은 허가한다는 응답으로 연결 확립 응답(ACK)를 보낸다.

 

 - 위처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드셰이크라고 한다.

 

 - 연결을 끊을 때는 FIN과 ACK를 사용한다.

 

 - 연결을 끊는 과정을 보면, 컴퓨터 1에서 연결 종료 요청(FIN)을 보낸다. 컴퓨터2에서 연결 종료 응답(ACK)을 반환한다. 또한 컴퓨터 1로 연결종료 요청(FIN)을 보낸다. 컴퓨터 1에서도 연결 종료 응답(ACK)을 반환한다.

 

 

3. 일련번호와 확인 응답 번호

* 일련번호와 확인 응답 번호

 - 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 받을 때는 TCP헤더에서 일련번호와 확인 응답 번호를 사용한다.

 

 - 일련번호 : TCP는 데이터를 분할해서 보내는데 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 번호

 

 - 확인 응답 번호 : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할.

 

 - 예를 들어 송신 측이 수신 측에 200바이트 씩의 데이터를 보낸다고 가정하자. 그럼 순서는 다음과 같다.

 

  ① 3-WAY 핸드셰이크로 연결 수립이 이루어질 때, 일련번호와 확인 응답 번호를 결정한다. (여기서는 각 3001, 4001)

  ② 송신 측이 수신 측에 200바이트의 데이터를 전송한다 (일련번호 : 3001, 확인응답번호 : 4001)

  ③ 수신측은 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 붙여 응답번호에 넣어서 요청한다.(일련번호 : 4001, 확인응답번호 : 3201) 다음 데이터는 3001 + 200 이므로 3201이다.

  ④ 송신 측은 수신 측에 3201번부터 200바이트의 데이터를 전송한다.

  ⑤ 수신 측은 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 붙여 응답번호에 넣어서 요청한다.(일련번호 : 4001, 확인응답번호 : 3401)

  ⑥ 데이터 전송이 완료될 때까지 위를 반복한다.

 

 - 여기서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하는데 이를 재전송 제어라고 한다.

 

* 윈도우 크기

 - 위에서 살펴본 전송은 세그먼트 하나를 보낼 때마다 확인 응답을 한 번 반환했다. 실제로는 매번 확인 응답을 기다리는 것은 비효율 적이므로, 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다.

 

 - 버퍼 : 받은 세그먼트를 일시적으로 보관하는 장소. 버퍼가 있어서 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있다.

 

 - 오버플로우 : 수신 측에 대량으로 데이터가 전송되면 보관하지 못하고 넘친다.

 

 - 윈도우 크기 : 오버플로우가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야한다. 이 것이 TCP 헤더의 윈도우 크기 값

 

 - 윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단한다. 송신측에서 연결확립 요청을 보낼 대 윈도우크기 값을 넣어서 보낸다. 그러면 수신측은 송신측의 윈도우 크기를 알게된다. 수신측도 연결확립응답+연결확립요청을 보낼 때 윈도우 크기에 자신의 값을 넣어서 보낸다. 이로써 송신 측과 수신 측 모두 서로의 윈도우 크기를 알게된다.

 

 - 서로의 버퍼 한계 값을 알았기때문에 세그먼트를 오버플로우되지 않는 선에서 연속으로 세그먼트를 보내면 된다. 확인 응답또한 연속해서 받을 수 있다.

 

4. 포트 번호의 구조

* 포트번호

 - 위에서 TCP의 오류 점검 기능에 대해서 알아 보았다. 이번에는 애플리케이션 식별 기능에 대해서 알아보자.

 

 - 전송된 데이터의 목적지를 제대로 식별하지 못하면 사용자가 원하는 프로그램이 아니라 다른 곳에 데이터가 전송될 수도 있을 것이다.

 

 - 따라서 여기서 쓰이는 것이 위에서 봤던 헤더 안에 있는 출발지 포트 번호와 목적지 포트 번호이다.

 

 - 포트 번호는 0~65535번을 사용할 수 있다. 0~1023번 포트는 잘 알려진 포트라 불리며 주요 프로토콜이 사용하도록 예약되어 있다. 1024번은 예약 되어 있지만 사용되지 않고, 1025번 이상은 랜덤 포트라고 불리며 클라이언트 측의 송신 포트로 사용된다.

 

 - 0~1023번 포트는 일반적으로 서버 측 애플리케이션에서 사용된다.

 

애플리케이션 포트 번호
SSH 22
SMTP 25
DNS 53
HTTP 80
POP3 110
HTTPS 443

 

 - 데이터를 전송할 때는 상대방의 IP주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요하다. 만약 포트 번호가 없다면 통신 시에 컴퓨터에 데이터가 도착하더라도 애플리케이션까지는 도착할 수 없다.

 

 - 참고로 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당된다. 그래서 서버 측은 포트 번호를 정해 둬야 하지만 클라이언트 측은 정할 필요가 없다.

 

5. UDP의 구조

* UDP

 - UDP는 비연결형 통신이다. 따라서 TCP처럼 시간이 걸리는 확인작업을 일일이 하지 않는다.

 

 - 데이터를 효율적으로 빠르게 보내는 것이 목적이므로 주로 스트리밍 동영상 서비스와 같은 곳에 사용된다.

 

 - TCP는 1:1 통신만 가능하지만 UDP는 1:1, 1:N, N:N 통신이 가능하다.

 

* UDP헤더

 - UDP도 TCP처럼 헤더가 존재한다. UDP헤더가 붙은 데이터를 UDP데이터 그램이라고 한다.

 

 - 여기에는 TCP보다 적은 정보가 담겨있다. 출발지 포트번호, 목적지 포트 번호, 길이, 체크섬이 전부이다.

 

 - 브로드캐스트 : UDP는 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다.

 

 


 

 

참고

 

 

[Network] TCP / UDP의 개념과 특징, 차이점

전송 계층에서 사용되는 프로토콜 (TCP / UDP) TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜입니다. 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP

coding-factory.tistory.com

 

 

모두의 네트워크

10일 만에 배우는 네트워크 기초

www.gilbut.co.kr