프로그래밍/네트워크

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

말랑공룡 2020. 10. 25. 18:13

전송 계층의 역할


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

 

전송 계층의 두 가지 기능

 

역할을 수행하기 위해 전송 계층은 두 가지 기능을 가지고 있다.

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

 

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

 

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

전자는 '연결형 통신', 후자는 '비연결형 통신'이라고 한다.

 

 

그림처럼 비연결형 통신은 일방적으로 데이터를 보내버린다.

일반적으로 신뢰성과 정확성이 보장되지 않는 비연결형 통신은 사용하지 않지만 동영상을 볼 때는 사용한다.

데이터가 약간 유실되더라도 원활한 재생이 필요하기 때문이다.

 

연결형에는 TCP가, 비연결형에는 UDP가 사용된다.

 

TCP의 구조


TCP란?

 

위에 써있듯이 TCP는 신뢰성/정확성을 특징으로 갖는 연결형 통신에 사용되는 프로토콜인데 그러기 위해서 데이터를 전송 전, 해야 하는 작업이 존재한다. 바로, 연결(connection)이라는 가상의 독점 통신로를 확보하는 것이다.

 

어떻게 연결을 확립하는가?

 

확립을 확인하는 부분은 TCP헤더의 코드 비트 부분을 봐야한다.

 

TCP헤더의 코드비트

 

코드 비트에는 연결의 제어 정보가 기록된다.

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

 

이처럼 연결 확립을 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드셰이크(three-way handshake)라고 한다.

 

데이터 전송이 완료된 후에도 연결을 끊기 위한 요청을 교환해야 한다.

 

 

정리하면, 연결 확립에는 'SYN'과 'ACK', 연결 종료에는 'FIN'과 'ACK'를 사용한다.

 

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


3-way 핸드셰이트 이후, 데이터 전송에 사용되는 일련번호와 확인 응답 번호에 대해 알아본다.

 

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

 

  • 일련번호 : TCP는 데이터를 분할해서 보내는데, 일련번호는 '이 데이터가 몇 번째 데이터인지' 알려 주는 역할을 한다.
  • 확인 응답 번호 : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다. (=확인 응답)

 

TCP 헤더

 

 

윈도우 크기란?

 

위의 TCP헤더 사진에 있는 '수신 윈도우 크기'란 무엇일까?

이렇게 매번 확인 응답을 보내고 기다리고 하는 것 보다 데이터를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다.

이 받은 데이터를 일시적으로 보관하는 장소를 버퍼(buffer)라고 하는데 이 버퍼 덕분에 데이터를 연속해서 보내도 수신 측은 대응할 수 있고 효율도 높아진다.

하지만 대량으로 전송되어 보관되지 못하고 넘쳐 버리는 경우가 있는데 이 것을 오버플로(overflow)라고 한다.

이 오버플로를 방지하기 위해 버퍼의 한계 크기를 알고 있어야 하는데 이 것이 바로 '수신 윈도우 크기'값에 해당한다.

 

포트 번호의 구조


포트 번호는 데이터의 목적지가 어떤 프로그램인지 구분하는 역할을 한다.

 

포트 번호(port number)의 구조

 

전송 계층의 두 번째 기능(전송된 데이터의 목적지가 어떤 애플리케이션인지 구분하는 기능)과 연관이 있다.

위의 TCP헤더 그림에서 Source Port와 Destination Port로 애플리케이션 구분이 가능하다.

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

그 중에, 0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있다.

 

예약 포트들

 

1025번 이후는 랜덤 포트고 1024번은 비워둔 포트다.

 

UDP의 구조


UDP(User Datagram Protocol)

 

UDP에서는 UDP헤더가 붙은 데이터를 UDP 데이터그램이라고 한다.

 

UDP 헤더

 

UDP헤더가 TCP헤더에 비해 정보량이 적은 이유는 TCP에 비해 신뢰성과 정확성이 필요하지 않기 때문이다.

브로드캐스트도 UDP를 통해 가능하다. (=일괄 전송)