이전 글을 보고 오시면 이해하기 편합니다! (이전글 보고 오기)
컴퓨터 네트워크의 장점
자원 공유, 병렬처리에 의한 성능 향상 및 중복 저장을 통한 신뢰성 향상 등의 효과를 얻을 수 있다.
전송과 교환
- 교환 : 라우터에서 데이터를 어느 방향으로 전달할지를 선택하는 기능
- 전송 : 1:1로 직접 연결된 두 시스템 간의 신뢰성 있는 데이터 전송을 보장
전송 방식의 종류
- 지리적 분포에 따른 분류 방식 (LAN, MAN, WAN등)
- 데이터 전송, 교환 기술의 분류 방식 (점대점, 브로드캐스팅 방식)
점대점 방식
- 교환 호스트가 송수신 호스트의 중간에 위치함 (스타형, 링형, 완전형, 불규칙형)
- 연결의 개수가 많아지면 성능은 유리하지만, 연결의 개수가 적어지면 전송 매체를 많이 공유해야 하므로, 네트워크의 혼잡도가 증가
스타형
- 하나의 중개 호스트 주위로 여러 호스트를 일대일로 연결하는 형태
- 중앙 호스트의 신뢰성과 성능이 네트워크에 영향을 미침
트리형
- 중앙에 있는 스타 구조 주변에 위치한 호스트들을 중심으로 새로운 스타 구조가 확장되는 형태
- 중개 과정이 간단하지만, 중앙호스트에 문제가 발생하면 전체 네트워크에 영향을 미친다.
링형
- 호스트의 연결이 순환고리 구조
- 모든 호스트가 데이터 전송과 교환 기능을 동시에 수행
- 토큰
호스트 사이의 데이터 송신 시점을 제어하는 기능, 데이터의 전송 권한을 의미하는 토큰을 확보, 데이터 전송이 완료되면 토큰을 다시 네트워크에 반환
- 하나의 호스트가 고장 나면 전체 네트워크가 동작하지 않을 수 있다.
완전형
- 모든 호스트가 다른 호스트와 1:1로 직접 연결하는 방식
- 호스트의 수가 증가할수록 전송매체의 수가 급격히 늘어남
불규칙형
- 연결 구조를 특정 패턴으로 분류할 수 없는 방식
브로드캐스팅 방식
- 특정 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전달
- LAN환경에서 사용 (중개를 위한 교환 호스트 불필요)
버스형 (우리가 사용하는 공유기)
- 전송 데이터를 모든 호스트에서 수신할 수 있음
- 충돌
둘 이상의 호스트에서 데이터를 동시에 전송할 때 충돌 발생
- 충돌 해결 방법
호스트의 전송 권한을 제한 (시간 할당 / 토큰 부여)
충돌 허용 (충돌 발생 시 재전송, 이더넷의 CSMA/CD)
CSMA/CD 동작 과정
- Carrier Sense : 회선의 상태에 따라 (통신이 일어나지 않고 있으면 데이터를 보내고 일어나고 있으면 기다린다)
- Multi Access : 동시에 접근이 가능하면서 (통신이 일어나고 있지 않아 두 서버가 동시에 보내면)
- Collision Detection : 충돌을 검사하여 제어 (충돌이 일어나게 되면 두 서버는 랜덤한 시간을 기다린 다음 다시 전송)
장점
- 어느 한 기기가 고장 나더라도 다른 기기들의 통신에 영향을 미치지 않는다
단점
- 호스트가 많아지면 충돌이 많아지고 효율이 떨어진다. 임의대기시간으로 인한 지연시간 예측 불가
링형
- 호스트를 순환 구조로 연결
- 송신 호스트가 전송한 데이터는 링을 한 바퀴 순환한 후 송신 호스트에 되돌아옴
- 중간 호스트 중에서 수신 호스트로 지정된 호스트만 데이터를 내부에 저장
- 데이터를 전송하기 위해서는 토큰 확보가 선행돼야 한다.
멀티포인트 통신
- 하나의 송신 호스트를 기준으로
- 수신 호스트 하나와 연결 : 유니포인트 (1:1)
- 다수의 수신 호스트와 연결 : 멀티포인트 (1:N)
- 송신 호스트가 한 번의 전송으로
- 수신 호스트 하나에만 데이터 전송 : 유니 캐스팅 (1:N)
- 다수의 수신 호스트로 전송 : 멀티 캐스팅 (1:N)
멀티 포인트 유니 캐스팅
- 하나의 송신 호스트를 기준으로, 다수의 수신 호스트와 연결되고 (멀티 포인트)
- 송신 호스트가 한 번의 전송으로 하나의 수신 호스트에만 데이터 전송 (유니 캐스팅)
멀티 캐스팅
- 프로토콜 차원에서 지원하는 일대다 전송 기능
- 송신 호스트의 전송 요구 한 번으로 모든 수신 호스트에 데이터를 전달
오류 제어
전송 오류의 복구
- 수신 호스트의 응답 프레임
: 데이터 프레임의 일부가 깨지는 변형 오류에 대해, 수신 호스트는 재전송을 요구할 수 있다.
- 송신 호스트의 타이머 기능
: 데이터 프레임을 전송한 후에 일정 시간 이내에 수신 호스트로부터 회신이 없으면 타임아웃으로 간주하고, 프레임 재전송
- 순서번호 기능
:수신 호스트의 중복 데이터 프레임을 판별하기 위해 프레임 내부에 순서 번호를 붙여서 기록하여 전송한다.
정상적인 전송
- 송신 호스트가 전송한 데이터 프레임이 수신 호스트에 정상적으로 도착
- 수신 호스트는 송신 호스트에게 긍정 응답 프레임을 회신
오류
1. 프레임 변형 오류
- 프레임 변형을 탐지한 수신 호스트는 부정 응답 프레임을 전송
- 송신 호스트는 원래의 데이터 프레임을 재전송한다.
- 부정 응답이 없는 프로토콜에서는 타임아웃 기능에 따라 재전송을 수행한다.(응답이 없어도 재전송한다)
2. 프레임 분실 오류
- 송신 호스트는 데이터 프레임을 전송한 후에 특정 시간까지 수신 호스트의 긍정/부정 응답 프레임이 도착하지 않으면, 타임 아웃 기능에 따라 원래 프레임을 재전송
3. 중복 수신 문제
- 긍정 응답이 사라지는 오류 발생 시 타임아웃 기능에 따라 재전송이 진행
- 이때, 수신 호스트는 재전송된 프레임인지, 다음 프레임인지 구분할 수 없음
*프레임에 순서 번호를 부여하여 중복 여부를 판단할 수 있다.
흐름 제어
흐름제어는 이 글을 보고 오면 이해하기 편합니다.(글 보러 가기)
- 수신 호스트가 감당할 수 있을 정도의 전송 속도를 유지하면서 데이터 프레임을 전송
- 너무 빨리 전송하는 경우
: 수신 호스트가 내부 버퍼에 보관하지 못할 수 있음 (프레임 분실과 동일한 문제를 야기함)
- 기본 원리
:수신 호스트가 송신 호스트의 전송 시점을 제어
프레임
프레임의 구조
- 프레임의 시작과 끝에 특수 문자 사용
: 시작 - DEL / STX
: 끝 - DEL / ETX
- 전송 데이터에 특수 문자가 포함되면 혼란이 발생할 수 있다.
문자 스터핑
- 문자 프레임의 전송 과정에서 제어 문자를 추가하는 기능
- 전송 데이터가 DLE 문자를 포함하면, 뒤에 DLE문자 하나를 강제 추가
비트 프레임
– 프레임의 시간과 끝 위치에 플래그라는 특수하게 정의된 비트패턴을 사용하 여 프레임 단위를 구분 (01111110)
비트 스터핑
- 전송 데이터에 플래그 패턴이 포함되면 혼란이 발생할 수 있음(플래그 패턴이란 위에 나온 비트프레임의 양 끝 비트 패턴)
- 송신 측 : 전송 데이터에 1이 연속해서 5번 나오면, 강제로 0을 추가
- 수신 측 : 송신 과정에서 추가된 0을 제거하여 원래의 데이터를 복원
오류를 극복하는 방법
- 전송 프레임에 오류 검출 코드를 넣어 수신 호스트가 전송 과정의 오류를 검출
- 순방향 오류 복구
: 오류 복구 코드를 사용해 수신 호스트가 오류 복구 기능을 수행하는 방식
오류 검출 (최근에는 이 방법 사용)
- 역방향 오류 복구
: 재전송 방식을 이용하여 오류 복구
: 네트워크에서 일반적으로 사용된다.
패리티 비트 : 1비트 오류 검출을 위해 사용
- 1바이트 = 7비트 아스키코드 + 1 패리티 비드
- 짝수 패리티 : 데이터의 끝에 패리티 비트를 추가해, 전체 1의 개수를 짝수로
- 홀수 패리티 : 전체 1의 개수를 홀수로
송/수신 호스트는 동일한 패리티 방식을 사용해야 함
블록 검사
- 짝수개의 배트가 깨지는 오류를 검출
: 수평, 수직 방향에 모두 패리티 비트를 지정
다항코드는 통신 프로토콜에서 가장 많이 사용하는 오류 검출 기법이다.
생성 다항식
- 계수가 0과 1인 다항식 형태에 기반한다.
송신부
- 임의의 CRC코드를 선정
- CRC 발생코드의 최고차수만큼 원래 데이터의 뒤에 0을 붙임
- 확장데이터를 modulo-2 연산을 바탕으로 CRC코드로 나눈다.
- 나머지가 0이면 확장데이터를 그대로 전송
- 나머지가 0이 아니면, 원래 데이터에 나머지를 붙여서 전송
수신부
- 수신된 코드를 동일한 CRC로 나눔
- 나머지가 0이면 오류가 발생하지 않은 것이고, 나머지가 0이 아니면 오류가 발생한 것.
다항식이 X^5 + X^2 + 1이고, 전송 데이터가 101101001인 경우 다항식의 최고차항이 X^5이므로 뒤에 0 5개를 붙여야 한다. 그런 다음 나머지를 실시한다.
계산할 때는 위의 식으로 계산을 한다. 특이한 점으로는 0 - 1이 1인 것이다.
계산을 통해 얻는 나머지가 00010이므로 송신 데이터는 전송데이터에 00010을 붙인 "10110100100010"이 된다.
수신 호스트가 송신 데이터를 생성 다항식으로 나눴을때 0이 나오면 정상이고 0이 아니면 오류발생이다.