본문 바로가기

CS지식/컴퓨터네트워크

컴퓨터 네트워크와 인터넷 (3)

1.5 네트워크 성능 지표 _ 지연, 손실률, 전송률

 

 다양한 네트워크들이 있을 때 네트워크의 성능을 평가하는 주요한 성능 지표는 세가지 Delay(지연시간), Packet Loss(손실률), 전송률(Throughput) 이다.

 

지연시간 (Delay)

 데이터를 발생시키는 source 부터 목적지까지의 패킷이 전달하는 데 걸리는 시간이 평균적으로 얼마나 되는가에 대한 지표이다. 라우터의 버퍼에 패킷들이 큐잉되는데, 패킷 도착률이 출력 링크의 용량을 넘으면 패킷은 큐에서 자기 차례를 기다리게 된다. 이러한 상황에서 지연이 발생할 수 있는데 지연이 발생하는 원인으로 크게 네가지를 구분한다. 

 processing delay는 패킷이 도달했을 때 라우터에서 패킷의 에러를 검사하고 목적 주소를 확인하고 출력할 링크를 설정하는 것을 판단하면서 생기는 delay 이다. 이 딜레이는 상황마다 달라지지 않고, 언제든 발생하는 딜레이 시간이다.

 queueing delay는 어떤 패킷이 도달했을 때 이전에 미리 도착한 패킷이 있다면 queue에 들어가서 전송을 기다리는데 이때 걸리는 시간이다. 중간 라우터에 도착해서 다음 hop으로 전달되기 까지 버퍼에서 얼마나 기다리는가 하는 것이다. 라우터의 혼잡 정도에 따라 달라진다.

 transmission delay는 패킷 길이가 L bit 이고 링크 대역폭이 R(bps)라면 L/R 값을 갖는 딜레이로, 링크의 전송률에 따라서, 패킷 사이즈에 따라서 달라진다.

propagation delays는 링크를 통해 패킷을 전송하는데에 걸리는 전파 시간을 이야기한다. (데이터가 날아가는 속도) 물리링크의 길이를 d라고 하고, 전파 속도를 s라고 하면 d/s의 값을 갖는다. 전파속도는 보통 2*10^8 m/sec 로 측정한다. 빛은 전파 속도는 30*10^8m/sec 로 측정되는데 이 빛의 속도의 2/3가 전선의 신호전파속도가 된다. 

 이 네가지 딜레이를 다 합쳐서 총 패킷 지연 시간을 구한다. 이 중에서 processing delay와 propagation delay는 속도가 전체의 딜레이에서 큰 부분을 차지하지도 않고, 예상이 가능해 지연 시간을 얻는 데에 있어 중요하지 않다. processing delay는 하드웨어의 속도가 빨라짐에 따라 매우 빠른 속도로 작업을 처리할 수 있어 하드웨어적으로 처리하면 시간이 많이 단축된다. propagation delay도 bit들이 하나하나씩 연달아 도착하기 때문에 실질적으로 첫 비트의 지연시간이지 그 뒤로는 전혀 영향을 끼치지 않는다.

 중요한 것은 queueing delay와 transmission delay 이다. queueing delay는 라우터에 얼마나 많은 데이터가 도착해 있느냐에 의존적인 딜레이다. 사용자의 행동에도 관련이 있어 정확히 얼만큼 걸릴것이다라는 보장을 할 수 없다. 큐에 데이터가 많아지면 많아질 수록 queueing delay가 급격히 증가한다. 패킷이 초당 평균 몇개 도착하느냐를 a로 둔다면 초당 처리해야 하는 비트 수La이고, La개의 데이터를 R bps로 처리하면 처리하는데 걸리는 속도는 La/R이다. 0에 가까울 수록 queueing 딜레이가 작아지고, 1에 가까울 수록 queueing delay가 커진다. 1보다 커지면 서비스할 수 있는 작업보다 더 많이 queue에 들어오게 되므로 평균 지연 시간이 무한대가 된다. 따라서 a 값, 즉 평균 패킷 도착률이 적을수록 좋다. 

 transmission delay는 위에서 말했듯이 링크의 대역폭에 따라 달라진다. 이러한 딜레이를 제어하기 위해서는 네트워크의 혼잡률을 잘 조절해야한다. 

queueing delay

손실률 (Packet Loss)

 손실률이란 보낸 패킷 중에 분실되는 패킷의 비율이다.네트워크에서 packet loss는 중간의 라우터에서 일어난다. 링크의 queue(or buffer) 의 용량은 유한하다. 다시말해, 버퍼의 사이즈가 제한적이다. 라우터에 갑자기 할당량을 넘어서는 데이터가 한꺼번에 도착하면 용량을 넘어서는 패킷들은 손실된다. 손실된 패킷은 직전 노드나 송신 측 end system에서 재전송될 수도 있고, 그렇지 않을 수도 있다. 

PDR(Packet Delivery Ratio)라는 것을 평가하기도 한다. 이것은 손실률과 반대되는 지표로 전체 전달한 패킷 중에 얼마만큼이 성공적으로 전달되었는지의 비율이다.

전송률(Throughput)

 전송률은 단위 시간 동안에 전달될 수 있는 트래픽의 총량을 말한다. 단위 시간 당 전달 되는 패킷의 양. throughput에는 크게 두가지가 있다. 순간 전송률, 그리고 평균 전송률이다. 가장 피크일 때 어느정도의 전송률이냐 하는 것이 순간 전송률이고, 전체 시간의 평균을 가지고 계산하는 것이 평균 전송률이다. throughput을 결정하는 주요 요소는 병목링크(bottleneck link) 이다. 경로상에서 처리율을 제한하는 링크이다. 여러 링크가 있을 때 전송량이 낮은 링크가 전체 패스의 용량을 결정하는데, 이 링크가 병목링크이고, 이것을 없애는 것이 throughput을 높이는 방법이다. 

 

 

1.6 프로토콜 계층, 서비스 모델

 통신 프로토콜은 많은 기능을 하는데, 그 기능들을 영역으로 나누어 프로토콜 계층을 만들었다. 

프로토콜 계층을 항공 서비스에 비유해볼 수 있다. 

항공 서비스의 계층화

  비행기를 타고 여행할 때에 출발 공항에서 서비스를 받고 또 도착한 공항에서도 서비스를 받게 된다. 맨 먼저 출발하는 공항의 창구에서 티켓을 구매하고, 짐을 붙이고, 게이트에서 탑승을 한다. 비행기가 활주로에서 이륙을 하고, 비행기는 항로를 따라 도착 공항으로 이동한다. 그런 후에 도착 공항에 도착하면 활주로에 착륙을 하고, 승객이 게이트를 통해 비행기에서 내린다. 짐을 되찾고 다시 창구에서 불편사항에 대해 클레임을 건다. 출발 공항에서의 서비스와 도착공항에서의 서비스를 살펴보면 각 서비스가 대응되고 있다는 것을 확인할 수 있다. 또한, 대응되는 서비스들은 티켓정보, 짐과 같이 같은 정보를 가지고 작업이 이루어진다. 비행기와 마찬가지로 통신 프로토콜도 송신자 측과 수신자 측의 서비스가 대응된다. 따라서 이를 계층으로 만들었다.

 프로토콜을 계층화 하는 이유

 모듈화로 인해 시스템의 관리와 갱신이 용이해졌다. 한 계층의 구현을 변경해도 시스템의 다른 부분에 영향을 주지 않는다. 프로토콜을 계층화하여 각 서비스를 모듈화 하면 각 계층의 기술자들은 자신이 맡은 모듈만을 관리, 개발, 수정하면 된다. 만약 모듈화가 되지 않는다면 한 계층이 바뀌었을 때 전체 모듈을 변경해야하는 복잡한 시스템이 될 수 있다. 모듈화를 함으로써 각 계층을 각자 개발해 개발 속도를 빠르게 할 수 있고, 시스템을 수정하기도 편해진다.

 복잡한 시스템의 경우 시스템 요소들을 식별하기 쉽게 해주고, 각 서비스들의 관계를 분명하게 해주는 도 계층화의 장점이다.

 

Five Layer Internet protocol stack

 

 인터넷 프로토콜은 다섯가지 계층을 가지고 있다. Application layer, Transport layer, Network layer, Link layer, Physical layer 이다. 

 가장 상위 계층은 application layer 즉, 응용 계층이다. 우리가 인터넷을 사용하기 위해 쓰는 응용 프로그램 서비스를 지원하는 계층이다. ex) 파일을 전송하는 FTP, 웹서비스를 이용하기 위한 HTTP 등이 있다.

 Transport layer(전송계층)는 프로세서간 데이터 전송을 한다. 패킷을 목적지까지 안전하게 전달하는 서비스를 제공하는 계층이다. ex) TCP, UDP 등

 Network layer는 데이터에 보내는 소스에서부터 목적지까지의 길을 찾아주는 기능을 하는 계층이다. 출발지에서 도착지까지의 datagram을 라우팅한다. ex) IP, routing protocols

 Link layer는 이웃한 네트워크 요소들 간의 데이터를 전송한다. source에서 destination까지 전송될 때 여러 계층을 거치는데, 하나의 호스트와 그 다음 호스트 간의 데이터를 전송하는 역할을 맡는다. ex) ethernet, wifi 등

 Physical layer(물리 계층) 은 실제로 데이터를 전달할 때 비트를 어떤 방식으로 전달할 것이냐를 결정하는 계층이다. 유선 링크를 사용한다면 각 케이블에서의 비트 정보를 어떤 식으로 처리할 것인가 하는 것을 알려주고, 무선 링크를 사용한다면 무선 전파를 어떤 식으로 송수신 할 것인가를 결정한다.

 

 

 

OSI 7 layer

 ISO(International Standard Organization)(국제표준화기구)에서 결정한 표준 네트워크 통신 프로토콜이다. OSI는 Open System Interconnection의 약자이다.open은 개방형이라는 뜻이고 폐쇄적인 기관 내에서만 사용하는 네트워크가 아니라 모두가 연결할 수 있는 개방적인 이라는 의미이다. 이러한 개방형 네트워크에 접속하려면 OSI 프로토콜을 따라야 한다는 것이다. 

 위에서 봤던 프로토콜 보다 Presentation layer와 Session layer 두 가지 레이어가 추가되었다. 이 두가지 계층은 사실 Application layer에 포함되어 있던 계층이다. 국제 표준화 기구에서는 응용계층을 좀 더 세분화해서 프로토콜을 만든 것이다. . 

 응용계층 바로 아래에 있는 Presentation layer는 응용 프로그램이 데이터를 해석하게 도와주는 역할을 한다. 암호화, 데이터 압축, 데이터 인코딩, 데이터 부호화 방식을 결정해준다. 그 아래에는 Transport layer가 있다. 연결의 데이터 동기화,연결 관리등 연결을 관리해 주는 역할을 한다. 

 

계층화의 단점

 위에서 살펴봤듯 계층화를 하면 관리, 보수가 쉽다는 장점이 있다. 만약 물리 계층에서 이용하던 케이블을 변경한다면(쌍꼬임선 -> 동축케이블), 전체 프로토콜에서 물리계층만 변경해주면 된다. 바로 위의 링크계층과의 인터페이스만 잘 지켜주면 그렇게 해도 링크 계층에 아무 영향을 미치지 않는다. 

 어떤 상황에서는 계층화가 비효율적일 수도 있다. 하나의 레이어의 서비스를 구현할 때 다른 계층의 정보를 알면 더 효율적인 서비스를 구현할 수 있다. 위에서 말한 네트워크 프로토콜 계층화는 계층을 정확히 구분하여 정해진 정보만을 주도록 설계가 되어있기 때문에 효율적인 서비스를 제공할 수가 없게 된다. 상위계층에서 하위계층의 정보를 이용할 수 있으면 좀 더 나은 서비스가 될 수 있다. 그래서 요즘에는 계층의 엄격한 구분을 없앤 프로토콜도 많이 제안되고 있다. 

 

캡슐화(Encapsulation)

 송신측에서 수신측으로 패킷을 전송할 때를 그림으로 나타내면 위와 같다.

 source의 응용계층에서 transport 계층에 메세지를 내려주면 트랜스포트 계층은 데이터 전송을 위해 필요한 정보들을 메세지 앞에 붙이게 된다. 제어정보를 담고있는 이러한 부분을 헤더라고 한다. 트렌스포트 계층에서 헤더가 붙으면 그것을 세그먼트(segment)라고 부른다. (ex. tcp segment, udp segment)

 그렇게 해서 만들어진 전체의 세그먼트는 네트워크계층에 전달된다. 네트워크 계층에서는 destination 까지 길을 찾는데에 필요한 목적지 주소 등의 제어정보를 맨 앞에 붙인다. 이렇게 만들어진 정보를 데이터그램(datagram)이라고 한다.(ex. IP datagram) 

 데이터그램은 다시 링크계층에 내려지고 링크계층은 이더넷 주소같은 주소를 앞에 붙인다. 이렇게 만들어진 것을 프레임(frame)이라고 한다.(ex. 이더넷 frame) 

응용 계층에서 만들어준 메세지에 각 계층의 헤더가 붙어서 물리계층을 통해 유선 혹은 무선으로 전송된다. 전송될 때는 곧바로 destination 에 연결되어 있지 않고 중간에 interconnecting device를 거치게 된다. 스위치와 라우터가 있는데, 스위치는 내부적인 연결을 도와준다. 따라서 링크계층까지만 동작한다. 라우터는 외부로 나갈 때의 연결을 도와주는데 라우터는 네트워크 계층의 정보까지 이용한다. 각 디바이스에서 새로 헤더를 붙여 목적지까지 전달하고, 목적지에 도달하면 각 계층이 헤더에 담긴 정보들을 이용해 원래 송신측이 보내고자 했던 메세지와 동일한 형태를 응용계층에 전달해준다. 

 응용프로그램들은 아래 계층에서 어떤 일이 벌어지고 있는지 알 수 없다. 그저 송신측과 수신측이 서로 메세지를 주고받았다는 것만 확인할 수 있다. 이렇게 어떤 메세지에 헤더가 붙는 작업을 캡슐화 한다고 한다.