본문 바로가기
네트워크

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

by Lizardee 2023. 8. 16.
23. 전송 계층의 역할
전송 계층의 두 가지 역할

※ OSI 모델의 전송 계층

  • 응용 계층
  • 전송 계층
  • 네트워크 계층
  • 데이터 링크 계층
  • 물리 계층

다른 네트워크로 데이터를 전송하려면 라우터(router)가 필요하고, 라우터의 라우팅(routing) 기능을 사용하여 전송할 수 있다. 그러나 라우팅 정보가 잘못될 수 있고, 많은 라우터를 경유하는 도중에 라우터에 문제가 생기거나 패킷이 손상된다면 라우터의 라우팅 기능을 통해 데이터를 전송하더라도 목적지에 도착하지 못할 수 있다.
▶ 전송 계층: 목적지에 신뢰할 수 있는 데이터를 전달한다.

  • 오류 점검 기능: 오류가 발생하면 데이터를 재전송하도록 요청한다.
  • 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능

 

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

▶ 연결형 통신: 신뢰할 수 있고 정확한 데이터를 전달하는 통신 

  • TCP(Transmission Control Protocol; 전송 제어 프로토콜)

▶ 비연결형 통신: 효율적으로 데이터를 전달하는 통신

  • UDP(User Datagram Protocol; 사용제 데이터그램 프로토콜)

연결형 통신 vs. 비연결형 통신

 

Lesson 23 정리
  • 전송 계층데이터를 제대로 전달하는 역할을 하며, 오류를 점검하는 기능도 한다.
  • 전송 계층은 전송된 데이터의 목적지가 어떤 애플리케이션인지 확인한다.
  • 연결형 통신은 신뢰할 수 있고, 정확하게 데이터를 전송하는 통신 방식이다.
  • 비연결형 통신은 신뢰성을 보장하지 않지만, 효율적으로 데이터를 전송하는 통신 방식이다.

 


24. TCP의 구조
TCP(Transmission Control Protocol)

캡슐화, 역캡슐화
세그먼트 = TCP 헤더 + 데이터

  • TCP 헤더: TCP로 전송할 떄 붙이는 헤더
  • 세그먼트(segment): TCP 헤더가 붙은 데이터

 
▶ TCP를 통한 데이터 전송:
1) 연결(connection)이라는 가상의 독점 통신로를 확보한다.

  • 코드 비트: 107번째 비트부터 112번째 비트까지 6비트로 연결의 제어 정보가 기록되는 곳
    - 초깃값 = 0, 비트가 활성화 되면 1이 된다. 
    - 연결을 확리하려면 SYN(연결 요청), ACK(확인 응답)가 필요하다.

코드 비트 --> SYN, ACK

 

3-way 핸드셰이크

SYN과 ACK를 사용한 연결 확립

▷ 3-way 핸드셰이크(three-way handshake)

  1. 통신을 하려면 컴퓨터2에게 허가를 받아야 하므로, 먼저 컴퓨터1에서 컴퓨터2로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
  2. 컴퓨터2는 컴퓨터1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동신에 컴퓨터2도 컴퓨터1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
  3. 컴퓨터2의 요청을 받은 컴퓨터1은 컴퓨터2로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.

 
FIN과 ACK을 사용한 연결 종료

FIN과 ACK를 사용한 연결 종료

  1. 컴퓨터1에서 컴퓨터2로 연결 종료 요청(FIN)을 보낸다.
  2. 컴퓨터2에서 컴퓨터1로 연결 종료 응답(ACK)을 반환한다.
  3. 또한 컴퓨터2에서 컴퓨터1로 연결 종료 요청(FIN)을 보낸다.
  4. 컴퓨터1에서 컴퓨터2로 연결 종료 응답(ACK)을 반환한다.

 

Lesson 24 정리
  • 전송 계층에서는 TCP 헤더가 붙는다.
  • TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.
  • 연결(connection)을 확립하기 위해 TCP 헤더에 있는 코드 비트를 사용한다.
  • 코드 비트 중 'SYN'은 연결 요청, 'ACK'는 연결 응답, 'FIN'은 연결 종료를 뜻한다.
  • 연결 확립을 위해 패킷 교환을 세 번 하는 데 이를 3-way 핸드셰이크라고 한다.
  • 연결을 확립할 떄는 'SYN'과 'ACK'를 사용하고, 연결을 종료할 때는 'FIN'과 'ACK'를 사용한다.

 


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

: 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용한다.

TCP 헤더의 일련번호와 확인 응답 번호

  • 일련번호(sequence number)
    : TCP는 데이터를 분할해서 보내는데, 일련번호(sequence number)는 송신 측에서 숫신 측에 '이 데이터가 몇 번째 데이터인지' 알려주는 역할
  • 확인 응답 번호(acknowledgement number)
    : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할, 다음 번호의 데이터를 요청하는 데도 사용된다(확인 응답).

일련번호(sequence number)와 확인 응답 번호(acknowledgement number)

  1. 컴퓨터1은 컴퓨터2로 200바이트의 데이터를 전송한다.
  2. 컴퓨터2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호(acknowledgement number)에 넣는다. 다음에 수신하고자 하는 데이터는 3001+200=3201 이므로, 3201번부터 보내달라고 요청한다.
  3. 컴퓨터1은 컴퓨터2로 3201번부터 200바이트의 데이터를 전송한다.
  4. 컴퓨터2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터의 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3201+200=3401 이므로, 3401번부터 보내달라고 요청한다.

--> 데이터 전송이 완료될 때까지 반복한다.
 
▶ 재전송 제어
: 데이터가 항상 올바르게 전달되는 것이 아니므로, 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송한다.
 

윈도우 크기(window size)

세그먼트(segment; 데이터) 하나를 보낼 때마다 확인 응답 한 번을 반환하는 통신은 효율이 높지 않다.
매번 확인 응답을 기다리는 대신, 세그먼트(segment)를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다. 받은 세그먼트를 일시적으로 보관하는 장소 즉, 버퍼(buffer)를 이용하면 세그먼트(segment)를 연속해서 보내도 수신 측은 대응할 수 있고, 확인 응답의 효율도 높아진다.

  • 오버플로(overflow): 수신 측에 대량으로 데이터가 전송되면 버퍼(buffer)가 이를 보관하지 못하고 넘쳐버리는 것
    --> 오버플로(overflow)가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 한다: 윈도우 크기(window size)

TCP 헤더 윈도우 크기(window size)

▶ 윈도우 크기(window size)
: 얼마나 많은 용량의 데이터를 저장해둘 수 있는지를 나타낸다. 윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단한다.

윈도우 크기(window size) 확인
세그먼트 하나 당 확인 응답 하나를 반환하는 송신 vs. 확인 응답을 하지 않는 세그먼트 송신

 

Lesson 25 정리
  • 3-way 핸드셰이크 이후 데이터를 전송할 때는 TCP 헤더의 일련번호(segment number)와 확인 응답 번호(acknowledgement number)가 사용된다.
  • 데이터를 재전송하는 것을 재전송 제어라고 한다.
  • 수신한 세그먼트(데이터)를 일시적으로 저장하는 장소를 버퍼(buffer)라고 한다.
  • 데이터 크기가 버퍼 크기를 넘어서는 것을 오버플로라고 한다.
  • 버퍼 용량의 크기를 윈도우 크기(window size)라고 한다.

 


26. 포트 번호와 구조
포트 번호(port number)

TCP 헤더의 출발지 포트 번호(source port number)와 목적지 포트 번호(destination port number)

: 전송된 데이터의 목적지가 어떤 애플리케이션(웹 브라우저, 메일 프로그램 등)인지 구분하는 역할

  • 출발지 포트 번호(source port number)
  • 목적지 포트 번호(destination port number)

 
포트 번호(port numebr)는 0~65535번을 사용할 수 있다.

  • 0~1023번 포트: 잘 알려진 포트(well-known ports) --> 주요 프로토콜이 사용하도록 예약되어 있다.
  • 1025번 포트: 랜덤 포트 --> 클라이언트 측의 송신 포트

애플리케이션과 포트 번호(port number)
TCP는 포트 번호로 애플리케이션을 확인한다.

: 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당된다. 그래서 서버 측에서는 포트 번호를 정해둬야 하지만, 클라이언트 측은 정하지 않아도 된다.
 

Lesson 26  정리
  • 포트 번호(port number)는 어떤 애플리케이션인지 구분하는 역할을 한다.
  • 포트 번호는 0~65535번을 사용한다. 0~1023번은 잘 알려진 포트(well-know ports)라고 하고, 1025번 이후는 랜덤 포트라고 한다.

 


27. UDP의 구조
UDP(User Datagram Protocol)

▶ TCP(Transmission Control Protocol)
: 연결형 통신, 3-way 핸드셰이크로 연결이 확립된 후에 데이터를 전송하고 그때 확인 응답을 한다. 데이터 전송 도중에 오류가 발생하면 재전송하거나 포트 번호로 애플리케이션을 구분하여 데이터를 정확하게 전달하기 위한 기능도 있다.
 
▶ UDP(User Datagram Protocol)
: 비연결형 통신, 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다. 데이터를 효율적으로 빠르게 보낼 수 있기 때문에 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳에 사용된다.

TCP 통신 vs. UDP 통신

 

UDP 헤더

UDP 데이터그램 = UDP 헤더 + 데이터

▶ 브로드캐스트(broadcast)
: 랜(LAN)에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보내는 것

UDP에서는 브로드캐스트를 이용한 일괄 통신이 가능하다.

Cf) TCP =/= 브로드캐스트
: TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트(broadcast)와 같이 불특정 다수에게 보내는 통신에는 적합하지 않다.
--> UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보내지만, TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없다.
 

Lesson 27 정리
  • UDP는 데이터를 효율적이고 빠르게 보낼 때 사용되는 프로토콜이다.
  • UDP는 UDP 헤더가 있지만 TCP 헤더에 비해 간단하다.
  • UDP 헤더가 있는 데이터를 UDP 데이터그램(datagram)이라고 한다.
  • UDP는 랜(LAN)에서 불특정 다수에게 브로드캐스트(broadcast)로 데이터를 일괄 전송한다.