Network

모두의 네트워크 6장. 전송 계층: 신뢰할 수 있는 데이터 전송하기

전송 계층의 역할

물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 순 있다. 하지만 데이터가 손상되거나 유실되더라도 이들 계층에서는 아무것도 해 주지 않는다. 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요한 계층이 바로 전송 계층이다.

전송 계층에는 오류를 점검하는 기능이 있다. 오류 발생 시 데이터를 재전송하도록 요청한다.

즉, 네트워크 계층은 목적지까지 데이터를 전달하고, 전송 계층에서는 데이터가 제대로 도착했는지 확인한다.

또한 전송 계층에서는 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있다. 즉, 웹 브라우저로 전송하는 것인지 메일 프로그램으로 전송하는 것인지를 구별한다.

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

전송 계층의 특징은 신뢰성/정확성과 효율성으로 구분할 수 있다.

  • 신뢰성/정확성: 데이터를 목적지에 문제없이 전달하는 것 (연결형 통신)
  • 효율성: 데이터를 빠르고 효율적으로 전달하는 것 (비연결형 통신)

전송 계층의 연결형 통신 프로토콜에는 TCP가 사용되고, 비연결형 통신에는 UDP가 사용된다.

TCP의 구조

TCP(Transmission Control Protocol): 신뢰성과 정확성을 우선으로 하는 연결형 통신 프로토콜

TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 한다. TCP 헤더가 붙은 데이터를 세그먼트라고 한다.

TCP 헤더에는 다음과 같은 정보가 담겨있다.

1. 출발지 포트 번호 16비트
2. 목적지 포트 번호 16비트
3. 일련 번호 32비트
4. 확인 응답 번호 32비트
5. 헤더 길이 4비트
6. 예약 영역 6비트
7. 코드 비트 6비트
8. 윈도우 크기 16비트
9. 체크섬 16비트
10. 긴급 포인터 16비트
11 옵션

연결형 통신은 상대방을 확인하면서 데이터를 전송해야한다. 따라서 데이터를 전송하려면 연결을 확보해야한다. TCP 헤더의 7. 코드 비트는 총 6비트로 구성되어있는데, 연결의 제어 정보가 기록되는 곳이다.

URG, ACK, PSH, RST, SYN, FIN 으로 구성되어있다.

각 비트의 초깃값은 0이고 비트가 활성화되면 1이 된다. 연결 확립에는 SYN(연결 요청), ACK(확인 응답)이 사용된다.

3-way handshake

PC1과 PC2가 통신한다고 가정한다. 화살표는 방향을 나타낸다.

  1. 연결 확립을 요청한다. (SYN) [PC1 → PC2]
  2. 연결 확립을 응답하고, 연결 확립 요청을 한다. (SYN + ACK) [PC1 ← PC2]
  3. 연결 확립을 응답한다. (ACK) [PC1 → PC2]

4-way handshake

연결을 끊을 때에는 FIN(연결 종료), ACK이 사용된다.

PC1과 PC2가 통신한다고 가정한다. 화살표는 방향을 나타낸다.

  1. 연결 종료를 요청한다. (FIN) [PC1 → PC2]
  2. 연결 종료를 응답한다. (ACK) [PC1 ← PC2]
  3. 연결 종료를 요청한다. (FIN) [PC1 → PC2]
  4. 연결 종료를 응답한다. (ACK) [PC1 → PC2]

일련 번호와 확인 응답 번호의 구조

TCP 헤더에서 3. 일련번호와 4. 확인 응답 번호에 대해 알아보자.

TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 이 데이터가 몇번째 데이터인지 알려주는 역할을 한다. 전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇번째 데이터를 받았는지 알 수 있다.

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

윈도우 크기란?

세그먼트 하나를 보낼 때마다 확인 응답을 반환하면 효율이 높지 않다. 따라서 세그먼트를 연속해서 보내고 난 다음 확인 응답을 반환하여 효율을 높일 수 있다.

TCP 헤더의 8. 윈도우 크기는 얼마나 많은 용량의 데이터를 저장해둘 수 있는지를 나타낸다. 이 값의 초기값은 3-way 핸드셰이크를 할 때 판단한다. 이후, 여러 세그먼트를 연속해서 보낸 뒤 이를 버퍼에 저장하고, 확인 응답 또한 연속해서 받을 수 있다. 이때, 미리 알려준 버퍼의 크기 이내로 보낸다.

포트 번호의 구조

전송 계층에서는 목적지의 애플리케이션을 식별하는 역할을 수행한다고 했었다. 목적지가 어떤 애플리케이션인지 식별하지 못하면 어느 애플리케이션의 데이터인지 알 수 없기 때문에 엉뚱한 곳으로 데이터가 전송될 수 있다.

TCP 헤더의 1. 출발지 포트번호, 2. 목적지 포트번호를 사용해 이를 해결할 수 있다.

TCP 헤더에 포트 번호가 있기 때문에 어떤 애플리케이션인지 구분할 수 있다. 포트번호는 0~65535번을 사용할 수 있다. 

0~1023번 포트는 주요 프로토콜이 사용하도록 예악되어있다. 이를 well-known 포트라고 한다. 1024는 예약되어있지만 잘 사용하지 않는 포트고, 1025 이상은 랜덤 포트라고 해서 클라이언트측의 송신 포트로 사용된다.

UDP의 구조

UDP(User Datagram Protocol)는 비연결형 통신에 사용되는 프로토콜이다. 데이터를 효율적으로 빠르게 보내는 것을 목표로 한다. 스트리밍, 동영상 등에 사용된다.

UDP 헤더에는 다음과 같은 것들이 있다.

1. 출발지 포트 번호 16비트
2. 목적지 포트 번호 16비트
3. 길이 16비트
4. 체크섬 16비트

UDP를 사용하면 브로드캐스트로 세그먼트를 보낼 수 있다.

 

 

모두의 네트워크 정리하기