23. 전송 계층의 역할

전송 계층의 두 가지 역할

  • 물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있음
    • 데이터가 손상 or 유실되면 이들 계층에서는 아무것도 해주지 못함

전송 계층 : 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요

전송 계층의 2가지 역할

1. 오류를 점검하는 기능

  • 오류가 발생하면 데이터를 재전송하도록 요청함
  • 네트워크 계층은 목적지까지 데이터를 전달, 전송 계층은 데이터가 잘 도착했는지 확인

2. 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능

  • ex) 홈페이지에서 사용하는 데이터인지 메일 프로그램에서 사용하는 것인지

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

전송 계층의 특징

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

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

  • 상대편과 여러 번 확인해 가면서 통신하는 방식
  • TCP(Transmission Control Protocol) 프로토콜이 사용

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

  • 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식
  • ex) 동영상
    • 신뢰할 수 있고 정확한 데이터 전송보다 빠른 전송이 중요
    • 데이터가 늦게 도착해서 화면이 버벅거리는 것보다 데이터가 유실되더라도 원활하게 보는게 좋음
  • UDP(User Datagram Protocol) 프로토콜이 사용

24. TCP의 구조

TCP란?

TCP 헤더

  • TCP로 전송할 때 붙이는 헤더
  • 목적지까지 데이터를 제대로 전송하기 위해 필요한 정보가 포함되어 있음

세그먼트(segment)

  • TCP 헤더가 추가된 데이터
    • 세그먼트 = TCP 헤더 + 데이터

TCP 통신에서 데이터를 전송하기 전에 해야하는 작업

  • 데이터를 전송하려면 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야함

TCP 헤더의 코드 비트

  • 연결을 확립하기 위해 TCP헤더의 코드비트를 사용
  • TCP 헤더의 107 ~ 112번째 비트까지의 6비트연결의 제어 정보가 기록되는 곳
  • 각 비트별로 역할이 있음, 초깃값은 0이고 활성화되면 1이 됨

3-way 핸드셰이크란?

연결을 확립할 때

  • 연결을 확립하려면 SYNACK를 사용
    • SYN : 연결 요청
    • ACK : 확인 응답
  • 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷 요청을 세 번 교환함
    3-way 핸드셰이크(three-way-handshake)

연결을 종료할 때

  • 연결을 끊을 때는 FINACK를 사용
    • FIN : 연결 종료

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

일련번호와 확인 응답 번호란?

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

일련번호

  • TCP는 데이터를 분할해서 보냄
  • 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할

확인 응답 번호

  • 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
  • 이 번호는 다음 번호의 데이터를 요청하는 역할도 함
    • ex) 10번 데이터를 수신 했으면 11번 데이터를 송신 측에 요청

재전송 제어 : 데이터를 전송하는 도중에 오류가 발생하면 일정 시간 동안 대기한 후에 재전송하는 것

윈도우 크기란?

  • 앞에 설명한 것은 세그먼트(데이터) 하나를 보낼 때 마다 확인 응답을 한 번 반환하는 통신
    • 효율이 좋지 않음
  • 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아짐

버퍼(buffer) : 세그먼트를 일시적으로 보관하는 장소

  • 버퍼 덕분에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있고 확인 응답의 효율도 높아짐
    • 하지만 수신 측으로 대량으로 데이터가 전송되면 넘침 -> 오버플로우(overflow)
  • 오버플로우가 발생하지 않으려면 버퍼의 한계 크기를 알고 있어야 함
    • TCP 헤더의 윈도우 크기(window size) 값에 해당

윈도우 크기 : 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지 나타냄

  • 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터 크기
  • 윈도우 크기는 3-way 핸드셰이크를 할 때 판단됨
    • 3-way 핸드셰이크 하는 동안에 서로의 윈도우 크기를 확인함
  • 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속해서 전송 가능

26. 포트 번호의 구조

포트 번호란?

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

  • TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있음
    • ex) 포트 번호를 사용하면 웹 브라우저인지 메일 프로그램인지 구분 가능
  • 포트 번호는 0~65535번을 사용 가능
    • 0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있음 -> 잘 알려진 포트(well-known ports)
      • 일반적으로 사용하는 서버 측 애플리케이션에서 사용
    • 1024번은 예약되어 있지만 사용되지는 않는 포트
    • 1025번 이상은 랜덤 포트라고 함
      • 클라이언트 측의 송신 포트로 사용됨

애플리케이션과 포트 번호

애플리케이션 포트 번호
SSH 22
SMTP 25
DNS 53
HTTP 80
POP3 110
HTTPS 443
  • 애플리케이션은 각각 포트 번호가 있어서 다른 애플리케이션과 서로 구분됨
    • 데이터를 전송할 때는 상대방의 IP 주소가 필요
    • 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요
  • 포트 번호를 붙이지 않고 통신하면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지 도착할 수 없음

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

27. UDP의 구조

UDP란?

  • UDP는 비연결형 통신
    • 데이터를 전송할 때 TCP 처럼 시간이 걸리는 확인 작업 하지 않음
  • UDP는 TCP와 달리 효율성을 중요시하는 프로토콜

UDP의 장점

  • 데이터를 효율적으로 빠르게 보냄
    • ex) 스트리밍 방식으로 전송하는 동영상 서비스

UDP 헤더란?

UDP 헤더

  • 올바른 목적지의 애플리케이션으로 데이터를 전송하기 위해 필요한 정보가 포함되어 있음

UDP 데이터그램

  • UDP 헤더가 추가된 데이터
    • UDP 데이터그램 = UDP 헤더 + 데이터
  • TCP는 여러 번 확인 응답을 보내면서 전송
  • UDP는 효율성과 빠른 속도가 중요해서 상대방을 확인하지 않고 연속해서 데이터를 전송

브로드캐스트(broadcast)

  • UDP를 사용하여 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄적으로 보내는 것
    • UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보낼 수 있음
    • TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신할 수 없음

reference

모두의 네트워크