개발자라면 알아야할 네트워크 기초+ 데이터 통신
참고자료
- KOCW 강의: 임효택 교수님의 데이터 통신과 컴퓨터 네트워크(2019년 2학기)
- 아래 동영상(10분)은 컴퓨터 네트워크 공부를 처음 시작하는 사람을 영상입니다. (네트워크 등장배경, 여러가지 통신 원리에 대해 알려줘요!)
네트워크 관련 글 목록
1. 데이터 통신
3. 데이터 링크 계층
4. 네트워크 계층과 라우팅
5. 데이터 압축과 암호화
0. 네트워크?
컴퓨터 네트워크는 왜 생겼을까요? 데이터와 자원을 공유하기 위해서 입니다. 저는 회사 클라우드 서버를 관리하면서, 네트워크 용어와 개념들을 많이 접하게 됐습니다. 네트워크를 사용해 Azure 데이터 센터의 서버들을 사용할 수 있고, 또 사용자에게 저희 서비스를 제공해줄 수 있죠. 모든 전문직이 그렇듯, 사용하는 용어는 중요합니다. 가볍게 살피고 넘어가볼까요?
- 컴퓨터 네트워크: 전송매체를 통해 서로 연결되어, 데이터 및 자원을 공유하고 교환하는 컴퓨터의 모음
- 프로토콜: 정보 교환을 위해 필요한 통신 규약(약속)
- 노드, 호스트, 클라이언트, 서버
- 네트워크 인터페이스: 호스트와 컴퓨터 네트워크의 연결지점(NIC라고도 말함)
- 전송 매체: 송신 측 호스트와 수신 측 호스트 사이를 상호 연결하는 물리적인 선로(유선, 무선, 링크)
- 채널: 송신측에서 수신측으로 데이터를 전송하기 위해 사용하는, 다중화된 매체에서 하나의 논리적 연결(multi collection) ex) 라디오 채널
1. 데이터 통신
데이터 전송 방법
데이터를 우리는 어떻게 주고 받게 되는 걸까요? 데이터 전송 방법은 다음과 같이 분류할 수 있습니다.
- 병렬과 직렬
- 비동기식과 동기식
[동기식 전송 종류: 바이트(문자) 기반과 비트기반]
[비트 기반 전송 문제점 해결 방법: 비트 스터핑] - 단방향(Simplex), 반 이중(Half duplex), 전이중(Full duplex)
교환 기술
N개의 통신 장비들을 모두 서로 직접 연결한다면, N의 제곱개의 연결선이 필요하겠죠? 그래서 각각의 장비들을 통신망에 연결하고 효과적으로 운영하는 교환 기술(switching technology)이 등장했습니다. 교환기술 세 가지를 알아보실까요?
- 회선교환(circuit switching):
회선의 설정부터 해제까지 채널의 대역폭을 “독점"합니다. 그만큼 다른 채널은 대역폭을 사용하지 못하므로, 신뢰성 있는 데이터를 전송할 수 있습니다. ex) 공중 전화망
→ 회선을 할당하는 방법 = 다중화(multiplexing) 기술: 송신할 때는 여러 개의 신호를 하나의 복합 신호 형태로 묶어서 보내고, 수신시 각각의 신호를 분리해내는 방법을 의미합니다. (TDM-대역폭을 타임슬롯(프레임)분할, FDM-대역폭을 주파수(Frequency)로 분할, CDM-특정한 코드를 이용하여 데이터를 구분)
- 메시지 교환(message switching):
메시지라는 논리적인 단위로 전송하는 방식입니다. 메시지 헤더에 목적지의 주소를 표시하기 때문에 미리 경로를 설정할 필요가 없습니다. 또한 여러 목적지로 보낼 수 있죠. 경로 상에 있는 각 노드는 메시지를 전부 받을 때까지 저장한 후, 또 다른 노드로 전송하기 때문에 Store-and-forward 방식이라고도 불립니다. 이 때문에 지연이 발생한다는 단점이 있습니다. - 패킷 교환:
패킷(보통 128~4096바이트 크기)이라는 단위로 데이터를 전송하는 방식입니다.
→ 패킷 교환 기술: 가상회선(논리적인 회선 등록 필요-가상 회선 설정 시간에 경로(VCI)가 설정됨, 안정적), 데이터 그램(연결 설정 및 해제 과정이 없음-적은양의 데이터를 신속하게 보낼때 유리)
오류 검출과 교정 기법
먼 거리의 컴퓨터가 서로 데이터를 주고 받는 과정에서, 데이터는 여러 노드를 거쳐 이동하게 됩니다. 이동하던 중에, 데이터의 일부(프레임)이 손상되거나 손실될 수 있죠. 그래서, 이런 오류를 검출하고 교정하기 위한 기법들이 만들어졌습니다. 개념만 한번 짚고 넘어가시면 좋을 것 같아요!
- 단순 패리티 검사(Parity Check):
단순하게 패리티 비트를 프레임의 각 문자 끝에 추가하는 것입니다. 0, 1의 비트값으로 이루어진 프레임에, 1의 개수가 짝수개인지 홀수 개인지를 프레임 끝에 표시합니다. 하지만 이 검사는 너무 단순해서, 오류를 검사하는 데 한계가 있죠. - 첵섬(Checksum):
데이터를 송신하는 컴퓨터는 데이터를 m 비트의 세그먼트로 분리해서 보내고, 이 세그먼트들과 함께 ‘첵섬’이라는 값도 송신합니다. 첵섬은 분리된 데이터(m 비트의 세그먼트)를 모두 더한 값에 1의 보수를 취한 값입니다. 만약 데이터가 제대로 전달 되면, 첵섬과 분리된 데이터(m 비트의 세그먼트)들의 합은 모두 1(1111… → 왜냐하면 첵섬이 1의 보수를 취한 값이었으니까요!!)이 되겠죠? - 순환 중복 검사(CRC: Cyclic Redundancy Check):
데이터를 송신하는 컴퓨터(Sender)는 n비트 프레임을 (k+1)비트 생성 다항식으로 나누어 k비트의 나머지를 더해서 보내줍니다. 이 k 비트 나머지를 FCS(Frame Check Sequence)라고 합니다. 데이터를 수신하는 컴퓨터(Receiver)는 이 데이터를 다시 생성 다항식으로 나누게 됩니다. 이미 송신측(Sender)에서 나머지를 더해주었기 때문에, 수신측(Receiver)에서는 생성 다항식으로 나누어줄때는 나머지가 0으로 되겠죠? 만약 나머지가 0이 아니라면 중간에 데이터가 손상되었다는 것을 의미합니다. CRC방식은 인터넷에서 사용되는 방법입니다.
- 해밍 코드(오류 교정코드):
오류가 발생한 위치를 알아내기 위한 방법입니다.