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

진예·2023년 12월 18일
0

Network

목록 보기
6/8
post-thumbnail
post-custom-banner

💡 전송 계층 (Transport Layer)

OSI 모델 4계층 : 신뢰할 수 있는 데이터 전달

앞서 공부했던 물리, 데이터 링크, 네트워크 계층을 통해 데이터를 보낼 수 있지만, 해당 계층들은 데이터에 문제가 생겨도 아무것도 하지 않는다.

더욱 신뢰성 있는 데이터를 전달하기 위해서, 전송 계층에서는 오류를 점검하여 오류가 발생하면 데이터를 재전송한다. 또한, 해당 데이터가 어떤 애플리케이션에서 사용되는지 구분하는 역할도 수행한다.


💡 연결형 & 비연결형 통신

  • 연결형 통신 : 정확한 데이터를 목적지에 문제없이 전달 = TCP
  • 비연결형 통신 : 데이터를 빠르고 효율적으로 전달 = UDP


📒 TCP

Transmission Control Protocol : 전송 제어 프로토콜

전송 계층에서 TCP로 전송할 때 캡슐화 과정에서 TCP 헤더를 붙인 데이터를 세그먼트라고 한다. TCP 헤더에는 출발지/목적지 포트 번호, 일련 번호, 확인 응답 번호, 코드 비트, 윈도우 크기 등이 포함되어 있다.


📝 3 - way 핸드셰이크

신뢰성을 제공하기 위한 통신 방식

TCP연결형 통신 방식이므로 정확한 데이터를 전달하기 위해 상대방을 확인하면서 데이터를 전송한다. 데이터를 전송하기 전 연결(Connection)을 확보해야 하는데, 연결이란 데이터를 전달하기 위해 사용되는 가상의 통신로이다.

TCP 헤더에 코드 비트라는 부분이 있는데, 이는 연결의 제어 정보가 기록된다. 이 중 연결을 확립하기 위해 사용되는 코드 비트는 SYNACK 이다.

  • SYN : 연결 확립 요청
  • ACK : 연결 확립 응답

(컴퓨터) 1이 2에게 데이터를 전달하기 위해 SYN을 보내면, 2에서는 해당 요청에 대한 응답 ACK를 보내고, 동시에 2도 1에 데이터를 전송하기 위해 SYN를 보낸다. 1이 2의 요청에 응답 ACK를 보냄으로써 연결이 확립된다.

이와 같이, 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드셰이크라고 한다.

연결을 끊을 때는 응답 요청 SYN 대신 종료 요청 FIN을 보내고, 그에 대한 응답 ACK를 보낸다.


📝 일련번호 & 확인 응답 번호

  • 일련 번호 : 데이터를 분할해서 전송할 때, 해당 데이터의 순서를 알려주는 번호

  • 확인 응답 번호 : 수신 측에서 다음 번호의 데이터를 요청하는 역할

(컴퓨터) 1에서 2로 3001번 데이터를 보냈을 때, 수신 측에서 문제 없이 해당 데이터를 받았다면 다음 순서인 3201번 데이터를 요청한다. 1이 2의 요청에 따라 3201번 데이터를 전송하면 2에서는 해당 데이터를 전달 받고, 또 다음 순서인 3401번 데이터를 요청한다. 이러한 과정을 모든 데이터가 정확하게 전송될 때까지 반복한다.

만약, 데이터가 전송되는 과정에서 문제가 발생했다면 일련번호와 확인 응답 번호를 통해 재전송한다. 이를 재전송 제어라고 한다.

위 그림의 방식은 하나의 세그먼트를 보낼 때마다 확인 응답을 한 번 반환하는데, 이러한 방식은 효율이 낮다. 그래서 세그먼트를 연속해서 여러 번 보내고 응답을 확인하는 방식을 사용한다.

수신 측에서는 연속적으로 전송된 세그먼트버퍼(Buffer)에 저장한다. 하지만, 너무 대량의 세그먼트를 전송할 경우 버퍼가 이를 감당하지 못해 오버플로우(Overflow)가 발생할 수 있다. 이러한 오버플로우가 발생하지 않도록 TCP 헤더윈도우 크기 부분에 버퍼의 한계 크기를 포함하고 있다. 윈도우 크기의 초기값은 3-way 핸드셰이크 과정에서 서로 주고받는다.


📝 포트 번호

통신하고자 하는 네트워크 서비스특정 프로세스식별하는 단위

전송 계층은 신뢰성 있는 데이터 전송 외에도 데이터어떤 애플리케이션에서 사용될지 식별하는 역할을 한다. TCP 헤더에는 애플리케이션을 구분하는 출발지/목적지 포트 번호가 포함되어 있다.

✔️ 애플리케이션과 포트 번호

  • 잘 알려진 포트번호 : 0 ~ 1023 ➡️ 서버 측 애플리케이션

    애플리케이션포트 번호
    SSH22
    SMTP25
    DNS53
    HTTP80
    POP3110
    HTTPS443

웹 브라우저에는 임의의 포트자동으로 할당되므로, 서버 측의 포트 번호는 정해야 하지만 클라이언트 측의 포트 번호는 정하지 않아도 된다.


📒 UDP

User Datagram Protocol : 사용자 데이터그램 프로토콜

UDP비연결형 통신으로 데이터를 효율적으로 빠르게 전송해야 하므로 상대방을 확인하지 않고 데이터를 전송한다. 동영상/음악 스트리밍 서비스와 같이 데이터를 빠르게 전송받아야 하는 서비스에서 사용한다.

UDP로 통신하는 경우에는 캡슐화 과정에서 UDP 헤더를 붙인 UDP 데이터그램을 전송한다. UDP 헤더는 TCP 헤더와 달리 신뢰성을 확인하지 않아도 되므로 비교적 간단한 정보만 포함하고 있다.


📝 브로드캐스트 (Broadcast)

같은 랜 상에 존재하는 모든 장치데이터를 일괄 전송하는 것

UDP는 각 장치를 확인하지 않고 일괄적으로 데이터를 전송하여 전송 속도가 빠르기 때문에 브로드캐스트가 가능하지만, TCP는 각 장치에 일일이 연결 요청을 보내야하므로 브로드캐스트에 적합하지 않다.


✔️ 요약

  • TCP는 연결형 통신이고 UDP는 비연결형 통신이다.

  • TCP 헤더가 있는 데이터를 세그먼트라고 하고, UDP 헤더가 있는 데이터를 UDP 데이터그램이라고 한다.

  • 연결 확립을 위해 사용하는 코드 비트는 SYNACK다.

  • 연결을 확립하기 위한 세 번의 통신 교환을 3-way 핸드셰이크라고 한다.

  • 연결을 종료하기 위해 사용하는 코드 비트는 FINACK다.

  • 데이터를 재전송하는 것을 재전송 제어라고 한다.

  • 받은 세그먼트(데이터)를 일시적으로 저장하는 장소를 버퍼라고 한다.

  • 데이터가 넘치는 것을 오버플로우라고 한다.

  • 포트 번호는 목적지가 어떤 애플리케이션인지 구분하는 역할을 한다.

  • 포트 번호는 0부터 65535까지 사용할 수 있다.


출처 : 모두의 네트워크

profile
백엔드 개발자👩🏻‍💻가 되고 싶다
post-custom-banner

0개의 댓글