데이터를 전송한다라는 것은 기본적으로 '누가' '누구에게' '무엇을' 보내는 것을 말한다. 누가와 누구에게는 당연히 송신호스트와 수신호스트이고 무엇은 데이터일 것이다.
데이터는 과연 네트워크망에서 어떻게 움직일까? 송신호스트가 수신호스트에게 받아라! 하면 받는 것은 아님이 분명하다.
데이터
데이터는 데이터 링크 계층에서 프레임이라고 불린다.
프레임에는 문자프레임과 비트 프레임이 존재한다. 문자 프레임은 프레임 내용이 문자로 구성된 8bit의 고정된 길이를 가지며 비트 프레임은 프레임 내용이 비트로 구성된다.
문자프레임은 데이터 내용의 시작과 끝에 DLE'STX와 DLE'ETX ASCII 문자를 추가해 플레그와 데이터를 구분한다.
만약 DLE문자가 데이터 내용에 포함된다면 문제가 발생할 수 있는데 이를 해결하기 위해 사용하는 방식이 문자 스터핑이다.
DLE가 데이터 컨테이너 내부에 존재할 때 DLE를 하나 더 추가해 DLE가 연속으로 나타타면 플레그가 아닌 데이터 내용임을 알 수 있게 만드는 제어문자를 추가한다.
비트프레임은 데이터 내용의 시작과 끝에 01111110 비트 플레그를 사용해 데이터와 플레그를 구분한다. 데이터에 1이 5개이상 오면 바로 뒤 비트에 0을 추가하는 방식을 사용해 비트프레임 내부에 플레그를 제외하고 1이 6개가 연속으로 오는 경우를 없게 만들어 데이터와 플레그를 구분한다. 이 방식을 비트 스터핑이라고 한다.
데이터 전송
데이터를 전송한다는 것은 네트워크 망을 따라서 데이터가 움직인다 라는 내용을 뜻한다.
이를 위해 전송과 교환의 개념을 구분해야 하는데, 전송은 교환의 기능이 배제된, 노드와 노드 사이의 단순 데이터 이동을 말하며 교환은 송신호스트와 수신호스트 사이의 경로를 탐색하는 기능을 의미한다.
그 전에, 송신호스트와 수신호스트가 정해지기 위해서는 두 호스트간 연결이 우선적으로 진행되야 한다.
네트워크 연결은 지리적 위치기준과 전송/교환 기술기준에 따라 나뉠 수 있다.
- 지리적 위치기준 : LAN , MAN, WAN
- 전송/교환 기술기준 : 점대점 방식, 브로드캐스팅 방식
점대점 방식
점대점 방식은 호스트끼리 직접연결되는 방식으로 수신호스트에게만 데이터가 전송된다.
점대점 방식의 종류
1. 스타형
중앙의 중개 호스트에 여러 호스트들을 일대일로 연결. 중앙 중개호스트에게 모든 중개기능을 위임하는 방식이며 중앙 호스트의 성능과 신뢰도가 네트워크 전체 성능에 영향을 준다.
2. 링형
연결적 측면에서는 점대점 방식이나 데이터 전송적 측면에서는 브로드캐스팅방식이다. 모든 호스트가 전송과 교환의 기능을 수행한다.
3. 완전형
모든 호스트들 사이에 직통 경로가 존재하므로 교환기능이 필요없다. 다만 선로가 많아질수록 비용이 기하급수적으로 늘어나 특수한 경우가 아니면 사용하지 않는다.
4. 불규칙형
형태가 특정 패턴을 띄지 않는다. 일반적인 네트워크가 불규칙형 점대점 연결방식이며 통신트래픽이 높아지면 직접연결 형태를 보이고 낮아지면 중개기능을 통한 연결 형태를 보여준다.
통신의 형식으로는 연결 호스트의 개수로 판단하는 유니포인트방식과 멀티포인트 방식이 있으며 한 번에 전송가능한 호스트 수를 기준으로 유니캐스팅방식과 멀티캐스팅 방식이 있다.
유니 포인트 : 호스트 하나에 하나의 호스트가 연결됨
멀티 포인트 : 호스트 하나에 여러 호스트가 연결됨
유니 캐스팅 : 한 번의 전송으로 하나의 호스트에게 전송됨
멀티 캐스팅 : 한 번의 전송으로 여러 호스트에게 전송됨.
기본적으로 컴퓨터는 1:1 연결되어있다. 텔넷, FTP 서비스등이 그러하다.
오늘날 서비스는 N:M 연결이 대다수이다.
1:N vs N:M
1:N 방식은 멀티포인트 유니캐스팅 방식을 사용한다.
각 호스트들과 호스트의 수만큼 연결을 설정하고 데이터 전송은 한 번에 하나씩 전송하는 방식.
N:M 방식은 멀티 캐스팅 방식을 사용한다. 프로토콜 자체에 N:M 통신을 지원해 연결 설정 한 번에 전송 한 번으로 모든 호스트에 데이터 전송이 가능하다. 이를 위해 멀티캐스팅 그룹 생성 및 관리 기능이 필요하며
데이터 중개 라우터가 멀티캐스팅 그룹주소를 인식하는 기능과 트래픽 처리 기능을 담당해야 한다.
브로드캐스팅 방식
브로드캐스팅 방식은 네트워크의 모든 호스트들이 하나의 공유전송매체로 연결되어있어서 교환기능이 필요 없다.
모든 호스트들이 데이터를 전송 받으며, 데이터의 수신호스트주소가 본인이 아닐 경우 데이터를 버린다.
브로드캐스팅 방식의 종류
1. 버스형
다수의 호스트가 하나의 전송매체를 공유한다. 이에 데이터 충돌문제가 발생할 수 있는데 호스트의 전송 권한을 제한하는 방식와 허용하는 방식으로 해결한다.
제한하는 방식 : 전송 시간대를 분할하거나 토큰 제어 프레임을 사용해 전송권한을 부여한다.
허용하는 방식 : 동시 전송을 허용한 후 충돌이 일어나면 이를 해결한다. => 이더넷 채택 방식
2. 링형
호스트가 하나의 링 형태로 연결돼있으며 송신호스트가 토큰을 얻고 데이터를 전송한다.
이에 수신호스트는 데이터를 내부 버퍼에 저장하고 네트워크에 데이터를 다시 풀어주어야 한다.
송신호스트가 데이터를 회수해야지 토큰을 네트워크에 다시 반환할 수 있기 때문!
그러나 브로드캐스팅 방식은 모든 네트워크에 데이터를 전송하므로 비효율적이다.
따라서 적절히 나누어진 서브넷 내부에서 진행하기를 권장한다.
송신호스트가 자신의 서브넷의 브로드캐스팅 주소로 데이터를 전송한다. 내부적으로 데이터가 전달 될 시에 각 호스트들에게 공유전송매체를 통해 데이터가 전달된다. 외부적으로 데이터가 전달 될 시에 라우터/스위치가 주소에 전달된 패킷을 복사해 네트워크 전체로 전달한다.
오류 발생
데이터가 전송 선로를 따라서 이동할 때, 잡음이 섞이거나 중간에 전기 신호가 약해져서 분실되는 경우가 생길 수 있다. 이런 경우에 호스트들은 오류들을 어떻게 처리할까?
인터넷에서는 데이터 변형 / 분실 오류를 재전송 기법을 이용해 해결한다.
그 전에! 변형과 분실이 일어났다는 사실을 호스트들이 알아야 한다. 일어났다는 사실조차 데이터이기 때문에 분실 / 변형될 위험이 항상 존재한다.
수신호스트는 오류에 대해 응답 프레임을 사용해서 송신호스트에게 오류 사실을 알려준다.
- 긍정 응답 프레임 : 데이터를 안전하게 수신 완료 했다는 뜻
- 부정 응답 프레임 : 데이터가 변형됐음을 알림
응답 프레임으로는 데이터 변형 오류만 처리할 수 있다. 왜냐하면 데이터가 분실된 경우에는 수신 호스트는 그 사실을 인지조차 못하기 때문이다.
이 경우 송신호스트가 TimeOut 기능을 이용해 데이터를 재전송한다. 데이터를 전송한 후 일정 시간동안 긍정응답 프레임이 도착하지 않을 때 자동으로 같은 데이터를 재전송한다.
응답 프레임이 분실된 경우또한 TimeOut 기능으로 재전송처리한다.
이때 분실된 프레임이 부정응답 프레임인 경우에는 문제가 없다. 하지만 긍정응답 프레임인 경우에 수신호스트가 중복된 데이터를 구분할 방법이 필요하다.
중복된 데이터를 수신호스트가 구별하기 위해 데이터 프레임에 순서번호를 부여한다.
정리
데이터가 정상 전송 : 긍정 응답 프레임 회신
데이터 변형 발생시 : 부정 응답 프레임 회신
데이터 분실 발생시 : TimeOut 기능을 통한 송신 호스트의 재전송
부정 응답 프레임 분실시 : TimeOut 기능을 통한 송신 호스트의 재전송
긍정 응답 프레임 분실시 : TimeOut 기능을 통한 송신 호스트의 재전송 -> 중복 데이터 프레임 구분 문제
중복 데이터 프레임 구분을 위해 순서번호를 부여
데이터 링크 계층은 위에서 본 오류제어 뿐만아니라 흐름제어의 기능도 수행한다. 오류제어는 물리계층의 문제로 데이터의 변형과 분실이 일어나는 것이지만 흐름제어는 수신호스트의 버퍼가 넘쳐나서 생기는 논리적 오류이다.
송신호스트는 데이터를 전송할 때 수신호스트의 버퍼의 크기보다 큰 bps로 데이터를 보내면 안된다. 보통 수신호스트가 다음 데이터 프레임의 전송 시점을 송신호스트에게 통지하는 방법을 사용한다.
이에 유명한 프로토콜로 슬라이딩 윈도우 프로토콜이 있다.
오류 제어
오류를 감지하는 기능은 위와 같이 TimeOut기능과 응답프레임 회신으로 이루어진다. 그렇다면 데이터가 변형됐다는 사실은 어떻게 인지할까?
송신 호스트는 데이터 프레임 내부에 체크섬주소와 프로토콜 제어코드를 집어 넣는다.
수신 호스트는 제일 먼저 체크섬 변형 여부를 확인해 프레임에 오류가 있는지 확인한다.
오류를 확인하고 이를 해결하기 위해서는 두가지 방법이 있다.
체크섬을 사용해 오류를 검출 후 재송신 요청(부정응답프레임회신)하는 것을 역방향 오류복구(ARQ / BEC)라 하고 오류를 검출 후 수신호스트가 오류를 스스로 복구하는 방식을 순방향 오류복구(FEC)라고 한다.
보통 네트워크에서는 FEC를 사용하지 않고 BEC를 사용한다.
수신호스트가 체크섬을 확인하는 방식은 패리티 비트, 블록 검사 그리고 다항코드 방식이 존재한다.
- 패리티(Parity) 비트 : 7개의 ASCII를 제외한 1bit 검출자로서 짝수 패리티 방식과 홀수 패리티 방식이 있다.
짝수 패리티
00011011 : 7개의 비트에서 1의 개수가 홀수이므로 패리티 비트를 1로 주어 전체 1의 개수를 짝수로 맞춰준다.
홀수 패리티
00011010 : 7개의 비트에서 1의 개수가 홀수이므로 패리티 비트를 0로 주어 전체 1의 개수를 홀수로 맞춰준다.
이 방식의 경우 bit 오류가 2개이상 나오면 검출이 불가하다.
이를 해결하기 위해 나온 방식이 블록 검사이다.
- 블록 검사 : 여러개의 비트를 하나의 블록으로 구성해 교차 검사를 시행한다.
11000
00101
01111
11110
01100
밑줄친 부분은 패리티비트이다.
수평 방향 bit가 깨지면 수직 방향의 패리티 비트를 확인해 오류를 검출하고
수직 방향 비트가 깨지면 수평 방향의 패리티 비트를 확인해 오류를 검출한다.
그러나 비트오류가 사각형 형태로 짝수개가 발생시 검출이 불가하다.
이런 패리티 방식은 네트워크에서 많이 사용하지는 않는다.
오늘날 네트워크에서는 다항코드(CRC)를 가장 많이 검출 방식으로 채택해서 사용하고 있다.
네트워크 오류는 특정 지점에 집중적으로 발생하는 버스트에러에 해당하기 때문에 패리티 비트로 검출하기 무리가 있다.
검출 코드가 10010이면 이를 X^4 + X 로 표현하기 때문에 다항 코드라는 이름이 붙었다.
- 송신 호스트
M(x)라는 m bit의 전송 데이터가 있고 G(x)라는 n+1 bit의 생성다항식이 있다고 하면
m bit의 데이터 뒤에 n bit 크기의 나머지를 구하기 위한 공간을 0을 써서 채워넣는다.
m + 0*n 을 전송데이터인 T(x)라 하자.
우리는 체크섬을 구하기 위해 T(x)를 G(x)로 모듈러-2 방식으로 나눈다.
참고! 모듈러 - 2 방식의 나눗셈
나누기를 할 때 덧셈의 자리올림이나 뺄셈의 자리빌림이 일어나지 않는 방식.
배타적 논리 합과 결과가 동일하다! (같은 숫자면 0 , 다른 숫자면 1)
- 이렇게 얻어진 checksum과 M(x)를 이어 붙여 데이터를 전송한다.
- 수신 호스트
수신 호스트는 M(x)+CheckSum을 G(x)로 나누는 연산을 수행해 나머지가 0이면 정상, 0이 아니면 오류가 발생했음을 인지한다.
2021-11-17
'Computer Science > Computer Network' 카테고리의 다른 글
데이터 링크 계층 (0) | 2021.11.24 |
---|---|
MAC 계층 (0) | 2021.11.18 |
네트워크 기술 (0) | 2021.11.12 |
네트워크 모델 (0) | 2021.11.09 |
네트워크 시작 (0) | 2021.11.06 |