전송 계층은 OSI 7 계층에서 4번째 계층에 해당하며,
데이터 및 전송의 신뢰성, 흐름 제어, 오류 복구 등을 담당하는 계층이다.
개념
전송 계층은 데이터의 신뢰성을 보장하면서, 두 호스트 간의 통신을 논리적으로 연결하는 역할을 한다.
이 계층에선 주요 단위인 세그먼트(Segment) 단위로 데이터를 나누어 송수신 및 재조립하게 된다.
이 과정에서 데이터의 흐름이 제어하고 오류를 복구하며, 데이터의 순서를 보장한다.
1. 세그멘테이션 (Segmentation)
응용계층의 데이터를 세그먼트로 분할
2. 오류 제어 (Error Control)
통신 중 발생한 오류를 감지하고, 필요시 데이터를 재전송한다.
3. 흐름 제어 (Flow Control)
송수진자 간의 데이터 흐름을 제어한다.
4. 신뢰성 보장
데이터를 목적지에 정확한 순서로 전달하고, 그 데이터의 신뢰성도 보장한다.
5. 포트 관리
포트를 통한 여러 프로그램의 동시 통신을 위해 데이터 흐름을 구분한다.
1. TCP (Transmission Control Protocol)
TCP는 연결형(Connection-Oriented) 프로토콜로, 신뢰성 있는 데이터 전송을 보장하는 것이 핵심이다.
데이터의 순서 보장, 데이터 손실 복구, 흐름 제어 등의 기능을 갖고 있다
TCP의 주요 특징
연결 설정 및 해제
데이터 전송 이전에 ``3-Way-Handshake`` 방식으로 연결을 설정한다.
- 송신자가 SYN 패킷을 보내 연결 요청
- 수신자가 SYN-ACK로 응답
- 송신자가 ACK를 보내 연결 수립
의 과정을 거쳐 연결하게 된다.
신뢰성 있는 데이터 전송
TCP는 데이터가 정상적으로 도착했는지 확인하며,
그렇지 않을 경우 재전송한다.
흐름 제어
송수신시 각각의 처리 능력에 맞게 전송 속도를 조절하여 혼잡을 방지한다.
혼잡 제어와 같이 볼 수 있다.
오류 검출 및 복구
TCP는 체크섬(Checksum)을 활용하여 오류를 검출하고, 필요시 재전송한다.
데이터의 순서 보장
패킷을 ``1, 2, 3, 4``의 순서대로 보냈다면, 수신 측도 ``1, 2, 3, 4``의 순서대로 받는 것을 보장한다.
TCP의 동작
1. 연결 설정
``3-Way-Handshake``를 통해 연결을 설정한다.
2. 데이터 송수신
송신 측은 데이터를 세그먼트로 분할해 전송하고,
수신 측은 ACK 패킷을 보내 수신을 알린다.
3. 오류 복구 및 순서 제어
수신 측은 오류가 있는 데이터를 확인해 재전송을 요청하고
송신 측은 이를 확인 후 해당 데이터를 다시 보낸다.
4. 연결 해제
데이터 전송이 완료되면 ``4-Way-Handshake``를 통해 연결을 종료한다.
TCP는 이러한 신뢰성을 바탕으로 웹 브라우징(HTTP/S), 파일 전송(FTP), 게임 서버 등의
무결성이 중요한 프로그램들에 사용된다.
세그먼트 구조 (Segment Structure)
TCP는 세그먼트라는 구조를 통해 데이터를 주고받는다고 했다.
먼저 세그먼트의 구조에 대한 이미지를 보자.
전부 알긴 힘들지만, 몇 개는 알아볼 수 있을 것 같다.
소스 포트, 데스티네이션 포트, ACK, SYN, FIN 정도는 알아볼 법하다.
생각보다 헤더가 많이 복잡하다.
생소하지만 주요하게 사용되는 몇 가지만 알아보자.
1. Sequence Number
데이터의 순서를 나타내는 값이다.
TCP는 순서를 보장하는 프로토콜이라고 했는데, 이러한 것들로 인해 가능해진다.
2. Acknowledgment Number
수신 측이 송신 측에서 데이터를 받은 값을 다음 데이터로 기대하는 시퀀스 넘버를 알려주는 값이다.
"다음은 시퀀스 넘버가 2번인 데이터야~" 하는 것과 같다.
이전 데이터가 성공적으로 전송된 것을 확인(ACK) 해 주는 것과 같다.
3. Window Size
한 번에 전송할 수 있는 데이터의 크기(윈도우의 크기)를 나타내는 값이다.
"일단 NNKb의 사이즈만큼 받을 수 있으니 알아둬라~" 하는 것이다.
4. Checksum
해당 세그먼트에 문제가 없는지 확인하는 것이다.
MD5와 같은 해시를 활용한 값 검증을 좋은 예시 중 하나로 들 수 있겠다.
2. UDP (User Datagram Protocol)
UDP는 비연결형(Connectionless) 프로토콜로, TCP와 달리 신뢰성을 보장하지 않으며,
번거로운 과정 없이 빠르게 데이터를 보낼 수 있다.
IP의 특성을 그대로 물려받았다는 생각이 들지 않는가?
UDP의 주요 특징
비연결형
송수신자 상호 간의 연결을 설정하지 않는다.
신뢰성 없음
데이터 전송의 오류나 손실이 발생할 수 있으나,
복구 및 재전송을 하지 않는다.
빠른 전송
별도 연결 설정이나 흐름 제어가 없으므로 전송 속도가 빠르다.
적은 오버헤드
연결 설정도 없고 헤더의 크기도 작으므로 오버헤드가 적다.
데이터의 순서 보장 없음
패킷을 ``1, 2, 3, 4``의 순서대로 보냈다면, 수신 측도 ``1, 2, 3, 4``의 순서대로 받는 것을 보장하지 않는다.
UDP의 동작
1. 데이터 전송
데이터그램 단위로 나눠서 전송한다.
2. 오류 복구 및 순서 제어 없음
오류가 생기든 손실되든 신경 쓰지 않는다.
그저 무식하게 보내고 받기만 할 뿐...
3. 확인 없음
데이터 전송이 완료되더라도, 잘 받았다고 인사해 주지 않는다.
그냥 보냈으면 그만이고, 받았으면 그만이다.
이러한 특성으로 인해 실시간 스트리밍이나 인터넷 전화 등에 사용된다.
스타의 UDP 모드를 기억하는가?
그땐 UDP가 뭔지도 몰랐는데 지금 생각하니 개발진의 배려를 느낀다.
로컬 네트워크에서 굳이 TCP를 쓸 이유가 크게 없기도 하다.
전송 계층의 주요 기능
1. 세그먼트 분할 및 재조립
전송 계층은 상위 계층에서 받은 데이터를 세그먼트라는 단위로 쪼개어 전송한다.
수신 측은 이 세그먼트들을 모아 재조립하여 원래의 데이터를 얻는다.
이것은 TCP의 기능이기도 하다.
2. 포트
포트 번호를 통해 여러 프로그램이 동시에 네트워크를 사용할 수 있도록 통신을 구분한다.
공항을 생각해 보자.
내가 타야 할 비행기로 가기 위해 탑승구 번호를 따라 찾아가지 않던가.
수많은 탑승구가 있지만 내가 가야 할 곳은 단 한 곳이다.
내 컴퓨터는 한대지만 프로그램은 수십수백 개일 수 있다.
거기서 데이터가 올바른 프로그램을 찾아가기 위해 포트 번호로 구분하는 것이다
대표적으로 22번 포트를 사용하는 SSH, 443번 포트를 사용하는 HTTPS 요청이 있다.
3. 오류 제어
TCP 기능이기도 하다.
데이터 전송 중 문제가 있었다면 이를 확인하고 해당 데이터를 재전송한다.
4. 흐름 제어
수신 측이 감당할 수 있는 정도의 속도로 데이터 전송 속도를 조절하는 기능이다.
이것도 TCP의 기능인데...
TCP에 해당하는 기능이 많다고 생각되지 않은가?
정말 뭐 아무것도 없는 UDP에 대해서 설명할 게 없어서 그렇다...
결론
전송 계층은 데이터 전송의 신뢰성 및 효율성을 위해 중요한 역할을 하는 계층이다.
TCP와 UDP는 각자의 영역에서 적절히 사용되고,
우리 일상생활에서도 그 활용을 심심찮게 목격할 수 있다.
Reference
Services and Segment structure in TCP
'Camp > Standard' 카테고리의 다른 글
컴퓨터에서의 메모리란? (0) | 2024.10.06 |
---|---|
[OSI 7계층] 응용 계층 (0) | 2024.09.23 |
[OSI 7계층] 네트워크 계층 (0) | 2024.09.06 |
[OSI 7계층] 데이터 링크 계층 (0) | 2024.09.03 |
[OSI 7계층] 물리 계층 (0) | 2024.09.03 |