티스토리 뷰
물리 계층: 데이터를 전기 신호로 변환하기
1계층 물리 계층(Physical Layer): 시스템 간의 물리적 연결과 전기 신호를 변환 및 제어
비트로 된 디지털 데이터를 실제로 네트워크를 통해 전송하려면 전기 신호로 변환이 되어야 한다. 이 작업은 OSI 모델의 최하단 계층이었던 물리 계층에서 일어난다.
비트열을 전기 신호로 변환하는 작업은 랜 카드
가 한다. 즉, 비트열은 랜카드를 통해 전기 신호로 변환되어 전송되고 상대방은 받은 전기 신호를 다시 비트열로 복원하는 것이다.
네트워크의 전송 매체
네트워크의 전송 매체는 데이터가 흐르는 물리적인 선로를 말한다. 종류는 크게 유선, 무선으로 나뉜다.
- 유선의 예시: 트위스트 페어 케이블(
랜 케이블
), 광 케이블 등 - 무선의 예시: 라디오파, 마이크로파, 적외선 등
이 중 트위스트 페어 케이블(twisted pair cable)이 가장 많이 사용되며, 여기에는 UTP 케이블과 STP 케이블이라는 종류가 있다.
- UTP(Unshielded Twist Pair) 케이블. 비차폐 연선이라고도 한다. 구리선 여덟 개를 2개 씩 꼬아서 네 쌍으로 만든 것. 실드(금속 호일이나 금속의 매듭)로 보호되어 있지 않아서 저렴하지만 노이즈 영향을 많이 받는다. 노이즈의 영향을 받으면 전기 신호가 왜곡된다.
- STP(Shielded Twist Pair) 케이블. 차폐 연선이라고도 한다. UTP와 달리 실드로 보호한 케이블이며 노이즈가 적지만 비싸다.
또한 랜케이블은 연결 방법(배열)에 따라 다이렉트 케이블과 크로스 케이블로 나뉜다. 다이렉트 케이블은 8개의 구리선을 같은 순서로 커넥터에 연결한 케이블이다. 크로스 케이블은 구리선 여덟 개를 크로스해서 연결한 것이다. 같은 네트워크 장비를 연결할 때(e.g. 허브와 허브) 데이터 충돌을 막기 위해 사용한다.
리피터와 허브 구조
리피터와 허브는 모두 물리 계층에서 동작하는 네트워크 장비다.
리피터(Repeater): 일그러진 전기 신호를 복원하고 증폭하는 기능을 가진 네트워크 중계 장비. 통신 상대방이 멀리 있을 때 파형을 정상으로 복원하기 위해 사용됐다. 하지만 요즘에는 다른 네트워크 장비가 리피터의 기능을 하므로 실제로 쓸 필요가 없어졌다.
허브(Hub): 통신하는 통로인 포트를 여러 개 갖고 있어 컴퓨터 여러 대와 통신이 가능한 네트워크 장비이다. 허브도 리피터와 마찬가지로 전기 신호를 정상으로 복원하고 증폭한다. 허브에 컴퓨터 여러 대를 연결하면 컴퓨터 끼리 직접 연결하지 않아도 허브에 연결된 컴퓨터끼리 통신이 가능하다.
다만 단점은 컴퓨터1에서 컴퓨터2에게 데이터를 보내는 것이 목적이어도 다른 연결된 컴퓨터3, 4, 5에게도 무조건 데이터가 전송된다는 것이다. 이러한 단점 때문에 스위치라는 장비가 나왔다.
데이터 링크 계층: 랜에서 데이터 전송하기
2계층 데이터 링크 계층(Data Link Layer): 네트워크 기기 간의 데이터 전송 및 물리 주소 결정
데이터 링크 계층은 네트워크 장비 간에 신호를 주고받는 규칙을 정한다. 이 규칙을 통해서 랜에서 데이터를 정상적으로 주고 받을 수 있다. 이 규칙들 중 가장 많이 사용되는 것이 이더넷(Ethernet)이다.
이더넷의 규칙에는 다음과 같은 것들이 있다.
- 허브에 연결된 컴퓨터들에게 데이터를 보내는 경우, 데이터 송신 컴퓨터를 제외한 나머지 연결 컴퓨터들은 모두 해당 데이터를 수신하게 된다. 하지만 이더넷 규칙을 적용하여 보내는 데이터에 목적지 정보를 추가해서, 목적지 컴퓨터가 아닌 컴퓨터가 데이터를 받으면 무시하도록 하고 있다.
- 연결된 컴퓨터 여러 대가 동시다발적으로 데이터를 송신할 경우 데이터 충돌이 일어날 수 있다. 이런 데이터 충돌을 막기 위해서 이더넷은 데이터를 보내는 시점을 늦춘다. 이를 CSMA/CD (Carrier Sense Multiple Access with Collision Detection) 라고 한다. 데이터를 보내려는 컴퓨터가 케이블에 신호가 흐르고 있는지 확인한 다음, 신호가 흐르지 않고 있다면 데이터를 보낸다는 것이다. 하지만 지금은 효율의 문제로 CSMA/CD는 거의 사용하지 않으며, 스위치라는 네트워크 장비를 사용한다.
MAC 주소 (물리 주소)
비트열을 전기 신호로 변환하는 랜 카드
에는 MAC 주소(Media Access Control Address)라는 물리 주소가 있다. 이는 전 세계에서 유일한 번호로 할당돼 있다.
OSI 모델의 데이터 링크 계층에서는 물리 계층으로 데이터를 보낼 때 이더넷 헤더와 트레일러를 붙여서 보낸다. (헤더를 붙여서 밑의 계층으로 전달하는 것이 캡슐화 과정이라고 했었다. 데이터 링크 계층에서는 헤더뿐만 아니라 트레일러라는 것도 붙여서 보낸다.)
- 이더넷 헤더: 이더넷 헤더는 목적지 MAC 주소, 출발지 MAC 주소,
유형번호
으로 구성된다. MAC 주소는 전기 신호를 보낼 랜카드의 물리 주소다. 즉 편지를 보낼 때 받는 사람과 보내는 사람의 주소를 적는 것과 비슷하다. 여기서 유형번호란 상위 계층의 프로토콜 종류를 나타내는 16진수 숫자다. 예를 들어 0800 이라는 유형 번호는 IPv4 프로토콜을 의미하고, 86DD는 IPv6 프로토콜을 의미한다. - 트레일러: FCS(Frame Check Sequence)라고도 하고, 데이터 전송 도중 오류가 발생하는지 확인하는 용도이다.
이더넷 헤더와 트레일러가 붙여진 데이터를 프레임이라고 한다. 즉 데이터 링크 계층은 프레임을 만들어서 물리 계층으로 전송하고, 물리 계층은 이 비트열을 받아서 전기 신호로 변환한 다음 네트워크를 통해 전송하는 것이다.
스위치
스위치는 데이터 링크 계층에서 동작하고, 스위칭 허브 또는 레이어 2 스위치라고도 불린다.
스위치 내부에는 MAC 주소 테이블(MAC address table)이라는 것이 있다. MAC 주소 테이블은 포트번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC 주소를 매필하고 있는 데이터베이스다.
스위치 전원을 처음 킨 상태에서는 MAC 주소 테이블은 비어 있다. 그런데 연결 컴퓨터 1에서 프레임(위에서 말했듯 이더넷 헤더와 트레일러가 붙여진 데이터)을 전송하면, 스위치는 MAC 주소 테이블을 확인하고 만약 비어있을 시 포트와 MAC 주소를 테이블에 등록한다.
컴퓨터 1이 컴퓨터 3에게 프레임을 전송했다고 가정하자. 위에서 말한 것과 같이 컴퓨터 1의 MAC 주소는 MAC 주소 테이블에 저장된다. 그런데 프레임을 보낼 때 컴퓨터 3의 MAC 주소는 테이블에 없으므로, 컴퓨터 1을 제외하고 연결되어 있는 모든 컴퓨터에게 프레임을 전송하게 된다. 이를 플러딩(flooding)이라고 한다.
만약 컴퓨터 3의 주소가 테이블에 등록돼 있었다면 다른 컴퓨터에게 전송하지 않고 정확히 컴퓨터 3에게만 프레임을 보냈을 것이다. 이것이 기존 허브와 다른 점이다. 허브는 데이터를 보낼 때 타겟을 가리지 않고 일단 다 보내고, 데이터를 수신한 컴퓨터는 이더넷 헤더를 통해 이 데이터의 목적지가 자신인지 아닌지 확인한 후 아니면 파기하는 방식이었다. 하지만 스위치는 MAC 주소 테이블에 주소가 등록돼 있다면 목적지 컴퓨터에게만 프레임을 전송할 수 있다. 이것을 MAC 주소 필터링이라고 하며 이를 통해 불필요한 데이터 전송을 방지할 수 있다.
전이중 통신과 반이중 통신
- 전이중 통신(Full Duplex): 각각 독립된 회선을 사용하여 데이터 송수신을 동시에 통신
- 반이중 통신(Half Duplex): 회선 하나로 송신과 수신을 번갈아서 통신
반이중 통신 방식은 회선 하나를 이용하기 때문에 연결된 컴퓨터가 동시에 데이터를 송신한다면 데이터 충돌이 일어난다. 하지만 전이중 통신 방식은 데이터를 보내는 회선과 데이터를 받는 회선이 독립되어 있기 때문에 데이터 충돌이 일어나지 않는다.
스위치는 전이중 통신 방식을 사용한다. 반면 허브는 반이중 방식을 사용한다.
충돌 도메인
충돌 도메인(collision domain)이란 데이터 충돌이 발생할 때 그 충돌이 영향을 미치는 범위를 말한다. 즉 충돌이 있을 때 영향 범위가 큰 것은 좋지 않으므로 충돌 도메인이 좁을 수록 바람직하다.
허브는 연결된 모든 컴퓨터가 충돌 도메인이 된다. 반면 스위치는 연결되어 있는 모든 컴퓨터에게 영향을 미치지 않고 충돌 도메인이 좁다.
Ref
미즈구치 카츠야 - 모두의 네트워크 (길벗 출판)
'공부일지(TIL) > Others' 카테고리의 다른 글
[Google Analytics] UA와 GA4의 차이점 (0) | 2021.09.03 |
---|---|
VScode Debugger step in, step out, step over (0) | 2021.08.31 |
[네트워크] 패킷, LAN/WAN, OSI 모델, 캡슐화 (0) | 2021.05.17 |
[C언어] 연결리스트 구현하기 (1) | 2021.03.03 |
[C언어] swap함수 구현하기 (1) | 2021.02.23 |
- Total
- Today
- Yesterday
- youtube data api
- CSS
- Data Structure
- 포인터 변수
- Redux
- this
- jQuery
- 알고리즘
- package.json
- c언어
- useEffect
- 리덕스
- react
- til
- Conflict
- Prefix Sums
- 개발 공부
- 자바
- 깃
- JavaScript
- Session
- GIT
- 인스턴스
- SQL
- rxjs
- oracle
- 제네릭스
- getter
- Java
- linkedlist
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |