이번 포스팅에서는 전송 계층의 역할에 대해 알아보도록 할 것이다.
전송 계층(transport layer, 트랜스포트 계층)
- OSI 모델 7계층 중 4계층
- 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 반드시 필요
- 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할
- 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않도록 함
- 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리
- 주요 기능으로는 오류 점검 기능, 전송된 데이터의 목적지 애플리케이션 식별 기능 존재
- 목적지 애플리케이션 식별 기능
- 컴퓨터에는 여러 애플리케이션 존재
- 해당 데이터가 어느 애플리케이션인지 식별 필요
- 목적지 애플리케이션 식별 기능
- 연결형 통신, 비연결형 통신 존재
전송 계층의 특징에 따라 연결형 통신과 비연결형 통신이 존재한다.
두 가지 통신 모두 장단점이 있기 때문에, 필요에 따라 선택적으로 사용하면 된다.
아래에서는 연결형 통신과 비연결형 통신에 대해 설명해보도록 하겠다.
연결형 통신
- 신뢰할 수 있고 정확한 데이터를 전달하는 통신 (신뢰성, 정확성)
- 데이터를 교환하기 전에 연결을 맺음
- 데이터를 교환하는 동안 계속 연결 관리(확인 여러 번 수행-)
- 비연결형 통신에 비해 비교적 느린 속도
- 신뢰할 수 있고 정확한 데이터 전송이 필요한 애플리케이션의 경우 연결형 통신 사용
- 대표적인 연결형 통신 프로토콜: TCP (Transmission Control Protocol)
- 신뢰할 수 있는 데이터 전송을 보장하는 프로토콜
비연결형 통신
- 연결에 대한 초기화 과정이 없는 통신
- 효율성 우선의 통신
- 연결형 통신과 달리, 확인 과정 없이 일방적으로 데이터 전송
- 신뢰성/정확성이 연결형 통신보다는 낮지만, 빠른 전송의 효율적 통신
- 신뢰/정확성보다 속도가 우선시되는 애플리케이션의 경우 비연결형 통신 사용
- EX) 동영상 시청
- 대표적인 비연결형 통신 프로토콜: UDP (User Datagram Protocol)
- 송신측에서 일방적으로 데이터를 전달하는 통신 프로토콜
- 연결을 맺을 필요X
- 정보를 보내거나 받는다는 신호 필요X
<TCP의 구조>
TCP (Transmission Control Protocol, 전송 제어 프로토콜)
- 연결형 통신 방식의 프로토콜
- 신뢰할 수 있는 데이터 전송 보장
- TCP 헤더
- TCP로 전송할 때 붙이는 헤더
- TCP 헤더 + 데이터 ==> 세그먼트(계층마다 헤더를 붙인 데이터의 이름이 다름)
- (네트워크 - 패킷, 데이터링크 - 프레임)
- 출발지 포트 번호(16), 목적지 포트 번호(16), 일련번호(32), 확인 응답 번호(32), 헤더 길이(4), 예약 영역(6), 코드 비트(6), 윈도우 크기(16), 체크섬(16), 긴급 포인터(16), 옵션 으로 구성됨
- 연결
- TCP 통신에서 정보를 전달하기 위해 사용되는 가상의 독점 통신로
- 연결을 확립한 후에 데이터 전송 가능
- 반드시 데이터 전송 전에 이루어져야 함
- HOW? => TCP 헤더의 코드 비트!
- 코드 비트에는 연결의 제어 정보가 기록되어 있음
- 총 6개의 비트로 구성되어 있으며, 각 비트마다 역할 존재
- URG, ACK, PSH, RSH, RST, SYN, FIN
- 이 중 연결 확립을 위해서는 => SYN, ACK가 사용됨
- SYN - 연결 요청
- ACK - 확인 응답
- 각 코드 비트의 초깃값은 0이며, 비트 활성화시 1로 변경됨
- 3-way 핸드셰이크(three-way handshake)
- TCP 통신에서 사용하는 신뢰성을 제공하기 위한 통신 방식
- 컴퓨터 간에 연결을 맺기 위한 초기화 과정으로 3단계로 되어 있음
- 연결을 확립하기 위해 패킷 요청을 3번 교환하는 것
- 1. 연결 확립 요청 (송신측 -> 수신측)
- 2. 연결 확립 응답 + 연결 확립 요청 (수신측 -> 송신측)
- 3. 연결 확립 응답 (송신측 -> 수신측)
- 연결을 끊을 때 => FIN, ACK 사용
- 1. 연결 종료 요청 (송신측 -> 수신측)
- 2. 연결 종료 응답 (수신측 -> 송신측)
- 3. 연결 종료 요청 (수신측 -> 송신측)
- 4. 연결 종료 응답 (송신측 -> 수신측)
- 브로드캐스트 적합X
- TCP는 확인 응답을 보내는 방식이므로 불특정 다수에게 보내는 통신에는 적합하지X
- TCP는 목적지를 지정하지 않으면 안 되므로 일괄 통신 불가능
<일련번호와 확인 응답 번호의 구조>
일련번호(sequence number)
- TCP는 데이터를 분할해서 보내는데, 각 데이터의 고유한 번호
- 이 일련번호를 이용하여 TCP 패킷의 순서 제어 가능
- 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할
확인 응답 번호(acknowledgement number)
- 일련번호와 더불어 TCP 패킷의 순서를 제어하는 기능을 함
- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
- 다음 번호의 데이터를 요청하는데도 사용됨
재전송 제어
- 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하는 것
- 문제 발생시, 같은 데이터를 다시 한 번 보내는 것
위에서는 TCP 프로토콜을 이용하여 신뢰성과 정확성 높은 통신을 하기 위한 과정들을 살펴보았다.
데이터 전송 전 연결 확립부터 데이터 전송, 연결 맺음 의 과정들을 보면 다 세그먼트(데이터) 하나를 보낼 때마다 확인 응답을 한 번씩 반환하는 통신이었다. 데이터가 많을텐데 이러한 방식은 시간이 굉장히 오래 걸린다.
즉, 매우 비효율적이다.
아무리 신뢰성과 정확성이 높은 전달 방식이라고 해도 효율이 좋지 않으면 불편하다.
이러한 TCP 통신의 비효율성을 낮추기 위해 세그먼트 하나가 아닌, 연속적으로 여러 세그먼트를 보내는 방식을 사용한다.
버퍼(buffer)
- 받은 세그먼트를 일시적으로 저장하는 장소
- 세그먼트를 대량으로 받을 경우, 보관하지 못하고 넘쳐버림 => 오버플로우(overflow)
- 오버플로우가 발생하지 않도록 버퍼의 한계 크기(윈도우 크기)를 알고 있어야 함
- 윈도우 크기
- 버퍼 용량의 크기
- 얼마나 많은 용량의 데이터를 저장해둘 수 있는지를 나타냄
- 윈도우 크기의 초깃값은 3-way 핸드셰이크 때 판단
- 연결 확립 요청을 하면서 윈도우의 크기를 같이 보냄
- 윈도우 크기
- 송신 측은 수신 측의 윈도우 크기를 확인하고 버퍼의 윈도우 크기를 고려하여 세그먼트를 전송하면 오버플로우 방지가 가능함
- TCP 통신의 효율성을 높여줌(but, UDP가 더 효율적 ㅇㅇ)
<포트 번호의 구조>
포트번호(port number)
- 전송된 데이터의 목적지가 목적 컴퓨터의 어떤 애플리케이션인지 식별하는데 쓰임
- TCP 헤더에 출발지 포트번호, 목적지 포트 번호를 넣어 애플리케이션 식별
- 통신하고자 하는 네트워크의 서비스나 특정 프로세스를 식별하는 논리 단위
- 하나의 컴퓨터 안에서 여러 애플리케이션을 식별하는데 쓰이는 번호
- 포트 번호는 0 ~ 65535번 사용 가능
- 0 ~ 1023번은 잘 알려진 포트로, 특정 애플리케이션이 사용할 수 있도록 예약된 번호임
- 일반적으로 서버 측 애플리케이션에서 사용되고 있음
- 1024번은 예약되어 있지만 사용되지는 않는 포트 번호
- 1025번 이상은 랜덤 포트로, 클라이언트 측의 송신 포트로 사용됨
- 웹 브라우저로 접속할 때, 웹 브라우저에는 임의의 포트가 자동으로 할당됨
- 메일 송신 SMTP의 포트 번호는 25이나, 새 정책과 보안을 적용하기 위해 587번으로 사용-
<UDP의 구조>
UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜)
- 송신 측에서 일방적으로 데이터를 전달하는 통신 프로토콜
- 비연결형 통신 프로토콜
- 연결을 맺을 필요 X
- 정보를 보내거나 받는다는 신호도 필요X
- 전송 계층의 효율적인 전송을 위한 프로토콜
- 빠른 속도
- EX) 동영상 서비스 (스트리밍)
- UDP 헤더
- 출발지 포트 번호(16), 목적지 포트 번호(16), 길이(16), 체크섬(16)로 구성됨(간단)
- UDP 헤더 + 데이터 ==> UDP 데이터그램 (TCP는 세그먼트)
- 브로드캐스트 가능
- 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 전송 가능
- 목적지에 관계없이 랜에서 일괄적으로 전송
'네트워크' 카테고리의 다른 글
모두의 네트워크 - 8장. 네트워크의 전체 흐름 살펴보기 (0) | 2023.01.25 |
---|---|
모두의 네트워크 - 7장. 응용 계층: 애플리케이션에 데이터 전송하기 (0) | 2023.01.24 |
모두의 네트워크 - 5장. 네트워크 계층: 목적지에 데이터 전달하기 (0) | 2023.01.22 |
모두의 네트워크 - 4장. 데이터 링크 계층: 랜에서 데이터 전송하기 (0) | 2023.01.21 |
모두의 네트워크 - 3장. 물리계층: 데이터를 전기 신호로 변환하기 (0) | 2023.01.20 |