TIL132. Network : 전송 계층(Transport Layer)

ID짱재·2022년 3월 4일
0

Network

목록 보기
5/6
post-thumbnail

📌 이 포스팅에서는 OSI 모델의 4계층인 전송 계층(Transport Layer)에 대해 정리하였습니다.



🌈 전송 계층(Transport Layer)

🔥 전송 계층의 역할

🔥 TCP의 구조

🔥 재전송 제어 및 포트번호의 구조

🔥 UDP의 구조



1. 전송 계층의 역할

🤔 전송계층의 두가지 역할

✔️ 물리계층, 데이터 링크 계층, 네트워크 계층의 3계층으로는 목적지에 데이터를 보낼 수 있지만, 데이터가 손실되거나 유실되더라도 이들 계층에서는 책임지지 않는다. 이에 신뢰할 수 잇는 방식으로 데이터를 전달하기 위해 전송 계층이 필요하다.

✔️ 전송 계층에서는 오류를 검증할 수 있는 기능이 있어 오류가 발생하면 데이터를 재전송하도록 요청한다. 즉, 목적지에 도달한 데이터가 제대로 도착했는지 확인을 거친다.

✔️ 또한 해당 데이터가 어떤 애플리케이션(웹브라우져, 메신저, 게임 등)에게 전달되어야할지 포트 번호를 통해 식별한다.

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

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

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

✔️ 연결형 통신은 신뢰성/정확성이 우선이기 떄문에 여러번 확인하고 데이터를 보내는데 반해, 비연결형 통신은 효율성이 우선이기 때문에 확인 절차 없이 일방적으로 데이터를 보낸다.

✔️ 일반적으로 정확한 데이터 전송보다 빠른 전송이 필요한 동영상 전송과 같은 경우 비연결 통신을 사용한다. 데이터가 약간 유실되더라도 버벅거리는 영상을 보는 것 보다 낫기 때문이다.

✔️ 서로 장단점이 존재하기 때문에 정확한 데이터 전송이 필요한 애플리케이션일 경우 연결형 통신을 사용하고, 효율적인 데이터 전송이 필요한 애플리케이션일 경우 비연결형 통신을 사용하면 된다.

🤔 포트 번호란?

✔️ 전송된 데이터의 목적지가 어떤 애플리케이션에 도달해야하는지 제어하는 것은 전송 계층의 역할 중 하나다.

✔️ TCP 헤더에 출발지 포트 번호와 목적지 포트 번호를 담기 때문에 포트 번호를 통해 웹 브라우저에 전달해야할지, 메신저 프로그램에 전달해야할지 알 수 있다.

✔️ 포트 번호는 0~65535번을 사용할 수 있고, 0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있다. 이러한 포트를 잘 알려진 포트(well-know posts)라 한다.

  • SSH : 22번
  • SMTP : 25번
  • DNS : 53번
  • HTTP : 80번
  • POP3 : 110번
  • HTTPS : 443번


2. TCP의 구조

🤔 TCP란?

✔️ TCP는 신뢰성과 정확성을 우선시하는 전송계층의 연결형 통신 프로토콜이다.

✔️ TCP로 통신할 때, 전송계층에서 TCP 헤더를 붙이는데 이 TCP 헤더가 붙은 데이터를 세그먼트라 한다.

✔️ TCP 헤더는 아래와 같은 다양한 식별 정보를 갖고 있다.

  • 출발지 포트 번호(16비트)
  • 목적지 포트 번호(16비트)
  • 일련번호(32비트)
  • 확인 응답 번호(32비트)
  • 헤더 길이(4비트)
  • 예약 영역(6비트)
  • 코드 비트(6비트) : URG, ACK PSH, RST, SYN, FIN
  • 윈도우 크기(16비트)
  • 체크섬(16비트)
  • 긴급 포인터(16비트)
  • 옵션

✔️ 연결형 통신은 꼼꼼하게 상대방을 확인하면서 데이터를 전송하는데, 데이터를 전송하기 위해 사전에 가상의 독점 통신로를 확보해야한다.

✔️ TCP 세그먼트 중 코드 비트(RG, ACK, PSH, RST, SYN, FIN)에는 연결과 관련한 정보가 기록된다.

✔️ 코드 비트는 각 비트별로 역할이 있는데, 초기값은 0이고 비트가 활성화되면 1로 변한다. 이 때, 가상의 독점 통신로를 확립하려면 SYN(연결요청)과 ACK(확인응답)가 활성화되어야 한다.

✔️ 데이터를 보내기 전 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way handshake라 하는데 이는 아래와 같은 3개의 과정을 거친다.

  1. 클라이언트에서 서버로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
  2. 서버는 클라이언트의 요청을 받은 후 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)과 함께 서버로 클라이언트에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
  3. 클라이언트는 서버의 요청을 받은 뒤, 서버를 허가한다는 응답으로 연결 확립 응답(ACK)를 보낸다.

✔️ 뿐만아니라, 연결을 확립할 떄는 SYN을 사용하고 연결을 종료할 때는 FIN을 사용한다. TCP 프로토콜은 신뢰성과 정확성을 중요시하기 때문에 연결을 종료할 때 마저 확인을 거친다.

🤔 재전송제어를 위한 일련번호 및 확인 응답 번호

✔️ TCP는 데이터를 분할해서 보내는데 일련번호는 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려주는 역할을 한다. 즉, 일련번호는 분할된 데이터의 순서 정보를 담고 있다.

✔️ 확인 응답 번호는 수신측이 몇 번 쨰 데이터를 수신했는지 송신측에 알려주는 역할과 다음 번호의 데이터를 요청하는 기능을 맡는다.

✔️ 이에 일련번호와 확인 응답 번호를 통해 데이터가 손상되거나 유실된 경우 데이터를 재전송 받을 수 있는데, 이를 재전송 제어라 한다.



4. UDP의 구조

🤔 UPD 헤더란?

✔️ UDP 헤더가 붙은 데이터를 UDP 데이터그램이라하고, UDP 헤더는 아래와 같은 식별 정보를 가진다.

  • 출발지 포트 번호(16비트)
  • 도착지 포트 번호(16비트)
  • 길이(16비트)
  • 체크섬(16비트)

✔️ UDP는 효율성을 중요시하는 프로토콜로 TCP 처럼 신뢰성과 정확성을 요구하지 않기 때문에 헤더가 간결하다.

✔️ 또한 UDP는 랜에 있는 PC나 스위치로 연결된 PC로 일괄적으로 데이터를 보낼 수 있는데 이를 브로드캐스트 통신이라 한다.

✔️ TCP는 3-way 핸드쉐이크를 통해 응답 확인을 일일이 거쳐야하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신에는 적합하지 않다.

profile
Keep Going, Keep Coding!

0개의 댓글