2, 3계층의 목적
4계층에서 동작하는 프로토콜의 목적
실제 서비스는 출발지에서 목적지까지의 경로를 찾는 것에서 끝이 아니라 정상적으로 돌아가기 위한 다양한 작업에 문제가 없어야 정상적인 서비스를 제공할 수 있습니다.
인캡슐레이션과 디캡슐레이션에서 각 계층에서 정의하는 헤더가 추가되고, 여러 정보가 들어갑니다.
다양한 정보 중 가장 중요한 두 가지는
입니다.
각 계층에서 정의하는 정보는 수신 측의 동일 계층에서 사용하기 위한 정보입니다.
예시
4계층에선 이런 정보로 시퀀스 번호, ACK 번호가 있습니다.
상위 프로토콜 지시자 정보는 디캡슐레이션 과정에서 상위 계층의 프로토콜이나 프로세스를 정확히 찾아가기 위한 목적으로 사용됩니다.
TCP/IP 프로토콜 스택의 4계층은 TCP와 UDP가 담당합니다.
4계층의 목적은 다음과 같습니다.
패킷을 잘 분할/조립하기 위해 TCP 프로토콜에선 시퀀스 번호와 ACK 번호를 사용합니다.
위의 헤더에 저장된 정보를 나타낸 표를 보면, 상위 프로토콜 지시자가 2, 3계층에선 출발지와 도착지를 구분하지 않고 하나만 사용하지만 4계층에선 출발지 포트 번호와 목적지 포트 번호를 구분해 처리합니다.
일반적으로 TCP/IP에서 클라이언트-서버 방식으로 서비스를 제공하고 클라이언트용 프로그램-서버용 프로그램을 구분해 개발하기 때문입니다.
클라이언트 (서비스 요청)
출발지 포트 | 목적지 포트 |
---|---|
13959 | 80 |
서버 (서비스 응답)
출발지 포트 | 목적지 포트 |
---|---|
80 | 13959 |
서버 측에서 클라이언트 측의 요청에 대한 응답을 할 때는 출발지 포트가 서버의 포트, 도착지 포트가 클라이언트의 포트가 되어 전송됩니다.
평소 우리가 표현하는 포트 번호의 기준은 서버의 포트입니다.
위와 같이 잘 알려진 포트를 웰 노운(Well Known) 포트라고 합니다.
이 포드들은 이미 인터넷 주소 할당기구인 IANA(Internet Assigned Number Authority)에 등록되고 1023번 이하의 포트 번호를 사용합니다.
다양한 애플리케이션에 포트 번호를 할당하기 위해 Registered Port 범위를 사용합니다.
동적, 사설, 임시 포트
TCP 프로토콜은 신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해
하는 기능이 있습니다.
패킷에 번호(Sequence Number)를 부여하고 잘 전송되었는지에 대해 응답(Acknowledge Numebr)합니다. 또, 수신자가 안정적으로 처리할 수 있는 전송 크기(Window Size)까지 고려해 통신합니다.
TCP의 여러 역할 덕분에 네트워크 상태를 심각하게 고려하지 않고 쉽고 안전하게 네트워크를 사용할 수 있습니다.
TCP는 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여합니다.
패킷에 부여한 순서가 시퀀스 번호이고, 응답 번호가 ACK 번호입니다.
두 번호의 상호작용에 의해 순서가 바뀌거나 패킷이 유실되는 것을 파악할 수 있습니다.
TCP는 패킷을 보낸 후 상대방이 잘 받았는지 확인하기 위해 ACK 번호를 확인하고 다음 패킷을 전송합니다.
패킷이 잘 전송되었는지 확인하기 위해 별도 패킷을 받는 것 자체가 통신 시간을 늘립니다. 추가적으로 송신자와 수신지가 멀리 떨어져 있으면 왕복 지연시간이 늘어나므로 응답을 기다리는 시간이 더 길어집니다.
최대 효율을 위해 최대한 한꺼번에 많은 패킷을 보내고, 응답을 하나만 받습니다.
하지만 네트워크 상태가 좋지 않으면 패킷 유실 가능성이 커지므로 적절한 송신량을 결정해야 하는데 한 번에 데이터를 받을 수 있는 데이터 크기를 윈도 사이즈라고 하고 네트워크 상황에 따라 이 윈도 사이즈를 조절하는 것을 슬라이딩 윈도라고 합니다.
TCP 헤더에서 윈도 사이즈로 표현할 수 있는 최대 크기는 2^16입니다.
이런 방법을 사용하면 기존 숫자의 10배, 100배로 윈도 사이즈가 커집니다.
TCP는 데이터에 유실이 발생하면 윈도 사이즈를 절반으로 떨어뜨리고 정상적인 통신이 되는 경우, 서서히 하나씩 늘립니다.
네트워크에 경합이 발생해 패킷 드롭이 생기면 작아진 윈도 사이즈로 인해 데이터 통신 속도가 느려져 회선을 제대로 사용하지 못하는 상황이 발생할 수 있습니다.
위와 같은 방법을 사용해 문제를 해결할 수 있습니다.
TCP에선 유실없는 안전한 통신을 위해 통신 시작 전, 사전 연결작업을 진행합니다.
TCP 프로토콜은 통신 전, 데이터를 안전하게 보내고 받을 수 있는지 미리 확인하는 작업을 거칩니다.
목적지가 데이터를 받을 준비가 안 된 상황에서 일방적으로 전송하면 목적지에서는 데이터를 정상적으로 처리할 수 없어 데이터가 버려지기 때문입니다.
TCP에서는 3번의 패킷을 주고받으며 통신을 서로 준비합니다. (3way handshake)
패킷 네트워크에선 동시에 많은 상대방과 통신하므로 정확한 통신을 위해서는 통신 전, 각 통신에 필요한 리소스를 미리 확보하는 작업이 중요합니다.
TCP는 3방향 핸드셰이크 진행 상황에 따라 상태 정보를 부르는 이름이 다릅니다.
Syn, Ack는 플래그의 종류로 아래에 나옵니다.
3방향 핸드셰이크 과정이 생기면서 기존 통신과 새로운 통신을 구분해야 합니다.
어떤 패킷이 새로운 연결 시도이고 기존 통신에 대한 응답인지 구분하기 위해 헤더에 플래스(Flag)라는 값을 넣어 통신합니다.
Flag의 종류는 다음의 6가지 입니다.
연결의 시작 용도로 사용합니다. 연결이 시작될 때 SYN 플래그에 1로 표시해 보냅니다.
ACK 번호가 유효할 경우, 1로 표시해 보냅니다.
초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1로 표기됩니다.
연결 종료 시 1로 표시됩니다. 데이터 전송을 마친 후 정상적으로 양방향 종료 시 사용됩니다.
연결 종료 시 1로 표시됩니다. 연결 강제 종료를 위해 연결을 일방적으로 끊을 때 사용됩니다.
긴급 데이터인 경우, 1로 표시해 보냅니다.
서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용됩니다.
TCP와 달리 UDP는 4계층 프로토콜에서 가져야 할 특징이 거의 없습니다.
4계층에서는 신뢰성 있는 통신을 위해…
이런 특징들로 신뢰성 있는 통신을 수행하는 것은 TCP만 해당됩니다.
UDP에는 이런 기능이 전혀 없습니다.
UDP는 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용됩니다.
위는 응답 시간에 민감한 경우입니다.
실 세계 데이터를 디지털화할 때는 시간을 다른 일반 데이터처럼 취급하면 시간 지연에 따른 어려움이 발생합니다.
중간에 데이터 몇 개쯤 유실되는 것보다 재전송하기 위해 잠시 동영상이나 음성이 멈추는 것을 사용자는 네트워크 품질이 떨어진다고 느낄 수 있습니다.
30프레임 동영상에서 1프레임이 잘린 29프레임만으로도 사람들의 눈에는 이질감이 없지만 프레임을 재전송하기 위해 일싲거으로 화면이 멈출 경우, 사용자는 네트워크 품질이 떨어진다고 느낍니다.
이렇게 데이터를 전송하는 데 신뢰성보다 일부 데이터가 유실되더라도 시간에 맞추어 계속 전송하는 것이 중요한 화상회의 시스템과 같은 서비스인 경우, UDP를 사용하게 됩니다.
UDP는 TCP의 3방향 핸드셰이크와 같이 통신 전, 연결을 확립하는 절차가 없습니다.
그대신 UDP에서 첫 데이터는 리소스를 확보하기 위해 인터럽트(Interrupt)를 거는 용도로 사용되고 유실됩니다.
그래서 UDP 프로토콜을 사용하는 애플리케이션 대부분이 이런 상황을 인지하고 동작하거나 연결 확립은 TCP 프로토콜을 사용하고 애플리케이션끼리 모든 준비를 마친 후 실제 데이터만 UDP를 이용하는 경우가 대부분입니다.
TCP | UDP |
---|---|
연결 지향(Connection Oriented) | 비연결형(Connectionless) |
오류 제어 수행 | 오류 제어 수행 안 함 |
흐름 제어 수행 | 흐름 제어 수행 안 함 |
유니캐스트 | 유니캐스트, 멀티캐스트, 브로드캐스트 |
전이중(Full Duplex) | 반이중(Half Duplex) |
데이터 전송 | 실시간 트래픽 전송 |
- 전이중: 쌍방향 통신으로 두 지점 사이에서 정보를 주고 받는 전자 통신 시스템
- 반이중: 한 쪽이 송신하는 동안 다른 쪽에서 수신하는 통신 방식으로, 전송 방향을 교체한다. 마스터 슬레이브 방식의 센서 네트워크가 대표적이다.
참조: https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A4%91%ED%86%B5%EC%8B%A0
[IT 엔지니어를 위한 네트워크 입문] 도서를 참조해 공부한 내용입니다.
감사합니다.
Photographs by Chaelin, Unsplash.