(네트워크) 2. 전송과 패킷

한중일 개발자·2023년 9월 21일

Computer Network

목록 보기
2/7

본 포스트는 작성자가 중국 북경대학교에서 23-24년도 1학기 计算机网络与Web技术 수업을 들으며 배운 내용을 복습하며 정리한 포스트입니다. 중국어, 한국어, 영어가 뒤섞인 본인이 알아보기 위해 작성한 필기를 정리하는만큼 다른분들이 읽기엔 조금 불친절할수 있습니다.

전송 매체

데이터 통신 시스템은 신호원, 정보싱크와 신호 통로 3개의 요소로 이루어진다. 네트워크의 로우레벨 차원에서 모든 컴퓨터들은 모종의 방식을 사용하여 데이터를 에너지화 인코딩 하고 에너지 형식으로 전송한다. 전송되는 정보의 실체인 데이터는 아날로그 데이터와 디지털 데이터 두 종류로 나뉜다. 그리고 데이터는 인코딩되어 신호가 되고, 아날로그 신호/디지털 신호 형식으로 변환된다.

신호와 시스템에서 배웠듯, 아날로그 데이터/신호는 연속된 정보이며, 음성과 이미지 등이 포함되고, 디지털 데이터/신호는 이산 정보이며, 글자, 부호 등 데이터가 포함된다.

신호는 유선/무선 방식으로 전송이 가능하다.

유선 통신

导线 (Wire)


익숙한 케이블이다. 주로 3가지 종류가 있다.

双绞线 (Twisted Pair)

트위스티드 페어 케이블이라고 한다. 서로 절연된 2개의 구리선이 꼬여서 만들어진 선이고, 매 구리선은 1mm정도의 두께를 가진다. 두개의 선은 서로 동일한 전기 성능을 가지고, 서로의 전자파 방사를 상쇄하며 노이즈를 줄여 전송 퀄리티를 높힌다. 디지털/아날로그 신호 전송에 모두 적합하다. 이더넷 케이블이 바로 이 형태다.

비차폐 트위스티드 케이블

이중 차폐되지 않은 케이블은 非屏蔽双绞线(Unshielded Twisted Pair, UTP)라고 하며, 전송 거리는 100미터정도 된다. 가성비가 좋아 많이 쓰이고, 직경도 작아 공간도 많이 먹지 않는다.

차폐 트위스티드 케이블

屏蔽双绞线(Shielded Twisted Pair)은 트위스티드 케이블이 주변에 전자파를 방사해대니 도청의 위험이 있는데, 이를 방지하기 위해 차폐를 추가하는 선이다. 선의 외층에 포일등으로 감싸서 방사를 줄이지만 완벽히는 못 없앤다. 속도가 빠르고, 10키로 넘게 커버 되기 때문에 원거리 전송에 쓰인다. 다만 가격이 좀 있고 설치도 어렵다.

동축 케이블


중심축에 내부 도체가 있고 이를 절연체로 둘러 싼 뒤, 여기에 외부 도체를 원통의 그물 형태로 씌우고, 최종적으로 피복으로 감싼 형태의 케이블이다. 트위스티드 케이블에 비해 간섭 저항 능력도 높고, 안정적으로 전송도 잘 되고 거리도 멀리 갈 수 있다.

광케이블

광섬유를 사용해 만든 케이블이고, 작은 광섬유가 플라스틱 안에 포장되어있다. 케이블 한쪽엔 발광 다이오드/레이저로 광을 발사하고 끝쪽에는 光敏元件을 사용해 光脉冲을 감지한다.

장점으로는 전자 간섭이 없고, 손실이 적어 멀리 전송이 가능하지만 케이블 가운데 고장이라도 나거나 하면 고치기가 힘들다.

무선통신

이젠 무선의 시대다. 라디오, 마이크로파, 적외선, 레이저등을 사용해서 통신한다.

무선 전자통신


저주파수대역은 속도가 느리고, 지형에 의해 저해당한다. 중간 구간은 속도가 좀 올라가지만 대기권등에서 반사되어 버리고, 고주파수 구역은 속도는 높은데 직선 전파라 장애물에 막혀버린다. 우리나라에서도 그렇듯 정부에서 주파수를 용도별로 할당중이니 막쓰면 철컹철컹당한다.

로컬 비동기 통신

보내는 쪽과 수신하는 쪽에서 데이터를 보내기 전에 따로 조정을 거치지 않아도 된다면, 이런 통신은 비동기한 통신이라고 한다. 비동기 방식에선 전송 사이에 유휴 시간이 있어도 되도록 허용하기에, 수신측이 신호와 동기화할수 있도록 매번 전송하기 전에 추가 정보(프리앰블 비트 또는 시작 비트라고 함)를 전송해야 한다. 이메일이 비동기 통신의 좋은 예시인데, 서로 시간을 맞출 필요 없이 원하는때에 답장하고 하면 되기 때문이다.

가장 전통적인 전자 통신법은 위처럼 전류로 0과 1을 표시해 인코딩하는 방식인데, 발송측이 1 전류를 얼마나 유지해야 1로 간주되고 등 기준이 명확하게 잡혀야 통신이 되든 말든 할 수 있다. 그래서 통신 표준이 존재한다.

RS-232 표준


RS-232표준은 단거리 비동기 직렬 통신을 가능하게 하는 표준이다. 이 표준에서는 매 문자 전에 1자리 시작 비트를 넣고 매 글자 후에는 최소 한비트의 중지 비트를 넣으며 매 비트간 동일한 시간으로 전송한다.

이 표준은 위같은 문제를 해결했다. 한 전압을 순식간에 다른 전압으로 변환할 수 있는 전자 장치는 없고, 전류를 완벽하게 전달할 수 있는 도선도 없기에 이 표준은 하드웨어의 문제를 잘 파악해서 송신기가 표준 파형과 얼마나 차이가 나는 파형을 보내야 하는지, 수신기가 어떤 내결함성을 갖추어야 표준에 부합하는지 표준에 설명했다.

비트율, 보오율

비트율 (Bit rate)는 매 초마다 전송되는 2진법 자릿수를 뜻한다. 보오율 (Baud rate, 波特率)는 초당 하드웨어가 만드는 전기 신호가 변화하는 횟수를 나타낸다.

속도를 높히려면, 그럼 비트 신호가 유지되는 시간을 줄여서 비트율을 화악 올려버리면 되는거 아녀? 라는 무식한 생각을 할 수 있는데, 이 경우 하드웨어의 제약도 있고, 소프트웨어적으로도 너무 짧으면 인식도 못해버릴 수도 있다.

RS-232같은 경우 2개의 신호 레벨을 사용하니 주어진 시간 내에 하나의 비트만 전송 가능한데, 오른쪽처럼 레벨이 2개인 경우 한번에 비트를 2개 보낼 수 있다.

비트율=보오율log2(레벨수)비트율=보오율*log_2(레벨수)가 되겠다.

하드웨어 대역폭, 노이즈

모든 전송 시스템에는 아날로그 대역폭이 있고, 이 대역폭은 물리적 특성에 보통 제약받는다.

니이퀴스트 정리 에서, 대역폭이 B고 K가지 전압으로 인코딩을 진행하는 시스템의 가장 큰 데이터 전송률 D는 위와 같이 정의된다.

노이즈도 통신에 영향을 미친다. Shannon 정리에 의하면 C가 초당 비트로 표시된 채널 용량의 실제 제한값이고, B는 하드웨어 대역폭, S는 평균 신호 전력, N은 평균 소음 전력일때 위처럼 공식이 성립한다.

전송 방식

송수신 양쪽의 정보 교환 방향성에 따라 심플렉스, 반 이중과 전체 듀플렉스 전송으로 갈린다.

심플렉스 전송


위 그림처럼 한 방향으로만 전송이 가능하다.

반 이중 (듀플렉스) 전송


양쪽으로 데이터 전송이 가능하지만, 한번에 데이터는 하나의 방향으로만 흐를 수 있다. 무전기를 생각하면 된다.

전체 듀플렉스 전송


어떤 순간에도 모두 양방향 전송이 가능하다. 전화를 생각하면 된다.

직렬 전송(串行传输)

비트들이 동시에 전송이 되는지 아닌지 여부에 따라 직렬/병렬 전송으로 나뉜다.

직렬 전송에서는 비트들이 일렬로 하나하나 전송된다. 전송 속도가 느리고, 효율도 떨어지지만 길이 하나만 필요하기도 하고 해서 비용이 낮고, 장거리 전송도 가능해 현재 컴퓨터 네트워크에선 모두 직렬 전송을 사용한다.

병렬 전송


반대로 병렬 전송에서는 비트별로 나눠서 전송이 진행된다. 당연히 같은 시간 내에 더 많은 전송이 가능하지만, 길을 그만큼 더 많이 뚫어야 하니 비용이 더들고 장거리 전송도 힘들어진다. 컴퓨터 내부에서만 보통 병렬 전송이 일어난다.

원거리 통신

보통 신호 전류가 전송 될수록 신호 손실이 발생한다. 이중 연속 진동 신호는 다른 신호에 비해 더 오래 전송이 가능한데, 이는 장거리 통신의 기반이 된다. 원거리 통신은 연속된 진동 신호를 보내는데, 이를 반송파 (载波) 라고 한다.

변조 (Modulation, 调制)

데이터 전송을 위해 발송측에서는 캐리어에 대한 조절을 진행하는데, 이를 변조라고 한다.

  • 진폭 변조 (调幅): 전송할 정보에 따라 반송파의 신호 강도를 변경하는 것.

    위의 그림이 예시다. 반송파는 원래 신호의 2/3만큼의 진폭으로 1을 표현, 1/3의 진폭으로 0을 표현한다.

  • 주파수 변조 (调频): 전송할 정보에 따라 반송파의 중심 주파수를 변경하는 것.

  • 위상 편이 변조 (移相调制):

비트율로 돌아와서, 위에서 봤듯 나이키스트 정리에 따르면 인코딩 방식이 단일 반송파 주기 내에 여러 개(bit) 데이터를 인코딩할 수 있도록 허용하면 단위 시간 내에 전송할 수 있는 데이터 비트(bit)가 증가한다.

비트레이트 = 보오률 * 단일 변조 상태에 해당하는 이진 자릿수

  • 직교 진폭 변조 (正交调幅, QAM)
    반송파의 크기와 위상을 동시에 바꿔서 정보를 표현하는 방식이다.

    위같은 星座图로 QAM을 표시하고, 원점과의 거리는 진폭 量度, 각도는 위상 오프셋을 나타낸다.

모뎀


데이터를 받고, 값에 따라 반송파를 변조하는 하드웨어 회선은 Modulator이고, 똑같이 수신 후 변조된 비트를 재구성하는 하드웨어 회선을 Demodulator라고 한다. 다들 모뎀, 모뎀 하는게 바로 위의 두개가 한번에 있는 장치다.

주파수 분할 다중화 (FDM, 多路复用)


신기하게도 서로 다른 반송파 주파수를 이용하는 2개 이상의 신호는 같은 매체에서 서로 간섭 없이 전송이 가능하다. FDM이 이를 가능하게 하고, 각 송신/수신기에 사용되는 반송파는 각자 서로 간섭이 없는 주파수 상에서 작동한다. 광대역 기술을 사용해 더 높은 대역폭에서 처리율도 높힌다.

FDM에는 신뢰성을 높이기 위해 여러 개의 반송파를 사용하는 특수 케이스도 있는데, 기술은 확장 스펙트럼 (spread spectrum, 扩展频谱) 으로 불리며 다양한 목적으로 사용된다. 이는 일부 주파수에서 간혹 간섭이 발생하는 전송 시스템에서 신뢰성을 높이기 위해서이다.

파장 분할 다중화 (WDM, 波分多路复用)


빛의 FDM이라고 보면 된다. 파분 복용 설비를 이용하여 서로 다른 채널의 신호를 서로 다른 파장의 빛으로 변조하여 광섬유 채널에 복용하고, 수신측에서 다시 프리즘 등을 사용해 파장이 다른 빛을 분리한다.

시분할 다중화 (TDM, 波分多路复用)


각 소스가 동일한 공유 통신 매체를 번갈아 사용하는 방식이다. 두가지로 나뉜다.

  • STDM (동기식/비통계적 시분할다중화): 라운드로빈 방식으로 매체를 공유한다.
  • 통계적 시분할다중화: 똑같이 돌아가며 데이터를 보내는데, 만약 하나의 소스에서 더 보낼 데이터가 없다면 그 소스의 시간대는 그냥 생략하고 보낸다. 대다수 네트워크가 채용하는 방식이다.

코드분할 다중화 (CDM, 码分多路复用)

2G로 알려진 CDMA의 기초다. 나무위키의 CDMA문서가 요약을 아주 잘해놨다.

직교 벡터 공간의 값은 서로 간섭하지 않고 복합하고 분리할 수 있기 때문에 코드 구조에 따라 신호 분할을 실현할 수 있다.

CDM에서 발송측은 데이터를 동시에 발송하고 발송 시 스스로의 코드 시퀀스와 데이터값을 곱하고 발송한다. 수신측은 동시에 오는 모든 신호의 합을 수신하고, 이 수신 시퀀스를 벡터로 처리하여 자신의 코드 시퀀스에 곱하면 정확한 값을 풀 수 있다.

모든 사용자가 동일한 주파수를 사용하고, 동일한 대역폭을 차지하며, 각 사용자는 동시에 신호를 보내거나 수신할 수 있으며, 각기 다른 코드 시퀀스로 구분할 수 있으며, 각 사용자는 서로 간섭하지도 않는다.

장점

신축성에 장점이 있다. 통계적 TDM에선 한번 데이터를 보내고 다른 애들이 전송할때까지 기다려야 하지만, CDM에서는 언제나 동시에 데이터를 보낼 수 있고, 지연이 낮다. 다만 이용율이 낮으면 TDM보다 못할수도 있긴 하다.

전송 지연이 낮으면 통화 서비스에 매우 매력적이고, 그래서 CDMA가 존재한다.

인코딩

NRZ (Non-Return to Zero)


높은 신호가 1, 낮은 신호가 0을 나타낸다.

2가지 문제가 존재한다.

  • 매우 긴 비트열은 基线漂移 (Baseline wander)를 일으키는데, 수신측은 들어오는 신호의 평균값을 유지해서 높고 낮은 신호를 구별하는데, 만약 비트열이 길어지면 이 평균값에 변화가 생길 수 있다.
  • 时钟漂移가 발생한다. 1에서 0, 혹은 그 반대로 跳变 발생 시 수신측은 클럭 주기의 끝임을 알게 되는데, 만약 장시간동안 跳变이 없다면 수신측은 时钟漂移가 발생하여 발송측과 클럭 동기화가 제대로 안 될수도 있다.

NRZI (Non-Return to Zero Inverted)


0은 현재 신호 유지, 1은 전 비트의 반전을 뜻한다. 연속되는 1에 대한 문제는 해결했지만, 연속되는 0에 대한 문제는 해결치 못했다.

맨체스터 인코딩


NRZ 인코딩의 데이터와 클럭의 XOR값으로 인코딩 하는 방식이고, 0은 낮은곳에서 높은곳으로, 1은 높은곳에서 낮은곳으로 跳变하는것으로 나타내는 방식이다. 0과 1이 모두 跳变을 나타내니 수신측에서 클럭 회복을 빠르게 할 수 있고, 베이스라인 이동도 일어날 일이 없다. 하지만 효율이 반토막난다.

차등 맨체스터 인코딩 (Differential Manchester)

위의 문제를 고치기 위한 방법이다. 신호의 첫 절반이 이전 비트의 뒤 절반 신호와 같으면 1, 반대라면 0이다. 변화가 더 적어서 고속 정보 전송에 적합하고, 신호를 보내는 도선을 거꾸로 해도 결과는 여전히 정확하다.

4B/5B 인코딩

基线漂移, 时钟漂移를 모두 해결하기 위한 방법이다. 비트 스트림에 추가 비트를 삽입해서 0이나 1이 연속되는걸 끊는 방식이다. 예를 들어 5개의 비트로 4개의 비트 데이터를 인코딩된다. 규칙은 다음과 같다:

  • 각 코드에는 리드 0이 최대 1개, 테일링 0이 최대 2개 있다.
  • 이렇게 전송시 연속되는 0은 최대 3개다.
  • 마지막으로 NRZI방식으로 인코딩한다.


5비트는 25=322^5=32개의 코드를 인코딩 할 수 있고, 위의 16개를 제외하고 나머지 16개는 다른 목적으로 사용 가능하다. 11111은 회선 유휴, 00000은 회선 불통, 00100은 회선 중단, 5개의 코드는 제어 기호 (프레임 시작, 두번째 시작, 끝, 리셋, 위치 지정)으로 사용되고 남은 8개는 사용하지 않는다.

패킷, 프레임과 오류 감지

회선 교환 (线路交换)

회션 교환은 한 쌍의 통신 대상들 사이에 물리적인 통로를 제공한다. 필요한 경우 경로가 설정되고, 사용이 완료되면 연결이 해제된다. 포인트 투 포인트 통신 형식이며, 성능은 기본적으로 독립적인 물리 통로와 동일하다.

하지만 만약 네트워크 쪽에서 하나의 어플리케이션만 공유 자원을 독점적으로 사용 가능하게 한다면, 다른 어플리케이션은 그냥 그대로 사용도 못하고 차단되어있어야 한다. 그래서 패킷 교환의 개념이 소개된다.

패킷 교환 (分组交换)


송신, 수신측 모두 공평하고 신속하게 네트워크에 접속할 수 있도록 데이터를 패킷이라는 작은 블록으로 나누고, 컴퓨터는 공유 자원을 통해 번갈아 가며 패킷을 송신한다. 패킷은 7계층중 3계층인 네트워크 계층에서의 단위다.

패킷은 매우 작아서 대기시간이 매우 짧고, 통계 시분할 다중화를 사용해서 적합한 통로를 찾아 통신한다.

프레임


7계층중 2계층인 데이터 링크 계층에서의 단위다. 위 예시에서 soh는 프레임의 시작을 나타내고, eot는 끝을 나타낸다.

프레임에 데이터가 들어가려면, 전송 전에 데이터에 수정이 들어가고 수신 후에는 데이터 복원이 되어야 하며, 데이터를 수정하는 이 과정을 data stuffing (数据填充) 이라고 한다.

이 과정중 字节填充 (byte stuffing)은 문자 기반 하드웨어에서의 데이터 스터핑이고, 比特充填 (bit stuffing)은 비트 기반 하드웨어에 대한 스터핑이다.

프로토콜

초창기엔 각 프레임을 비트가 아닌 바이트 (문자) 집합으로 묶었다. BISYNC, PPP, DDCMP등이 속한다.

비트를 기준으로 잡은 프로토콜은 프레임을 비트의 집합으로만 본다. HDLC (High-level Data Link Control Protocol)이 예신데, IBM이 개발한 SDLC를 표준화한 것이다. HDLC는 01111110으로 프레임의 시작과 끝을 나타내며, 링크가 유휴상태일때도 이 시퀀스를 전송해서 송신 수신측 클럭을 동기화한다.

HDLC

HDLC에서 송신측은 임의의 순간 11111을 보낸 후 다음 비트를 보내기 전에 0을 하나 넣는다.

수신측에선 11111이 온다면:

  • 다음 비트가 0이면 填充이니 버린다.
  • 다음 비트가 1이면 또 다음 비트를 다시 보는데, 0이면 (마지막 8비트가 01111110) 앞에서 봤듯 프레임 종료 표시다.
    1이면 프레임 전체를 버려야하는 전송 오류고, 다음 01111110이 나타나야 다시 수신이 시작될 수 있다.

전송 오류 (传输差错)

아무래도 전자장비랑 회선은 전자기 간섭에도 취약하고, 데이터가 손상되거나 손실될 수도 있다. 채널 고유의 지속적인 무작위한 노이즈와 돌발적인 소음이 데이터로 잘못 인식 될 수도 있고, 이런 경우를 전송 오류라고 한다.

네트워크의 품질을 오류율 (差错率)로 지표화할 수 있고, 오류율 = 오류 비트 수/전송 비트 수 다.

당연히 오류를 제어하기 위한 메커니즘들이 존재한다. 제어 메커니즘은 오류 검사 메커니즘과 오류 수정 메커니즘으로 나눌 수 있다. 감지 및 수정 능력은 정보량의 중복성과 시스템 효율 저하를 대가로 교환된다.

오류 검사 메커니즘

수신측에서 보통 데이터와 함께 온 추가 비트를 통해 수신된 데이터의 정상 여부를 판별하고, 오류 발생 시 수정하진 않고 反馈信道를 통해 응답 프레임을 전송해서 오류 결과를 송신단에게 알리고 정확한 데이터가 돌아올때까지 계속 다시 송신하게 한다.

오류 검사 메커니즘의 세가지 요소는 추가 정보 크기 (전송 오버헤드와 직결), 알고리즘 복잡도 (컴퓨팅 오버헤드와 직결), 감지 가능한 오류 비트의 개수 (오류 감지 능력과 직결)이 있다. 자주 보이는 테크닉으로 패리티 검사, 체크섬, CRC 체크가 있다.

패리티 검사 (奇偶效验)

이 방식에선 1의 개수를 짝수 개로 맞춰서 보낼지, 홀수 개로 맞춰서 보낼지 송신측과 수신측이 약속하고 여분의 비트를 채워 보낸다.

오류 체크 확률은 50%인데, 비트가 홀수개만 바뀌었다면 감지가 가능하지만 짝수개가 바뀌었으면 문제가 있는지 알 수 없기 때문이다. 저속 전송시 나쁘지 않은 방법이다.

항과 열까지 확인하는 RAC 패리티 검사도 있다. 수평과 수직측에 모두 비트를 추가하고, 만약 수평에서 짝수 개의 비트가 바뀐다고 해도 수직 패리티 검사에서 오류를 검출할 수 있다.

체크섬 (校验和)


각 그룹별로 체크섬을 전송하는 방식이다. 송신자는 데이터를 이진 정수로 전환해 합을 구한다.

CRC (Cyclic Redundancy Code, 循环冗余校验码)

가장 널리 사용되고 있는 방법이다. 데이터에 오류가 발생했는지 확인하는 코드를 데이터 뒤에 확장 데이터를 덧붙여 보내는 방식이다. 이 추가 데이터가 약속된 코드에 의해 제거될 수 있다면 에러가 없다는 것을 알 수 있다. 제거되지 않는 부분이 있다면 그곳이 데이터 전송 오류가 생긴 부분이 되겠다. 복잡해 보이지만 shift register나 XOR 유닛등을 사용해 쉽게 실현 가능하다.

위와 같은 방식?들이 있다.

纠错码

감지에서 멈추지 않고 정보가 보내질때 충분한 추가 비트도 같이 보내 수신단 측에서 오류 수정까지 가능하도록 하는 방식이다. 이러면 피드백 채널에 오류를 보냍 필요도 없지만, 纠错码에도 오류가 생길수 잇으니 추가 코드들이 요구되고 이는 효율을 떨군다. 해밍 코드 등이 예시가 되겠다.

오류 수정방식은 일반적으로 오류가 발생할 확률이 높은 열약한 환경, 재전송읭 대가가 너무 높은 환경에 유용하다. 공통적으로 감지 후 다시 피드백을 하기 힘든 환경들이다.

profile
한국에서 태어나고, 중국 베이징에서 대학을 졸업하여, 일본 도쿄에서 개발자로 일하고 있습니다. 유창한 한국어, 영어, 중국어, 일본어와 약간의 자바스크립트를 구사합니다.

0개의 댓글