본문 바로가기
IT/네트워크

[ 네트워크 ] Link Layer Services

by 신인용 2020. 7. 3.
반응형

Link Layer Services

 

 

1. framing, link access

 link access라고 하는 기능이 가장 기본적인 service이다. datagram frame 단위로 encapsulate해서 header trailer가 붙고 frame으로 만들어준다. link layer에서는 error 체크를 위해 trailer를 붙인다. 그래서 frame datagram + header + trailer 이다.

 shared medium에서 충돌이 나지 않도록 하거나, 충돌났을 때 해결해주어야 한다. 그래서 channel access에 대해 정의하게 된다.

 그리고 MAC이 있는데, Medium Access Control의 약자이다. MAC 주소가 frame에 붙게 되는데, IP header에 주소가 있는데 왜 또 MAC address를 쓸까? MAC 주소를 예시로 설명해보자. 우편물을 전세계에 보내게 될 때, 전세계에서 우편물을 보내거나 받을 수 있는 나만의 주소가 필요하다. 그 주소가 IP 주소에 해당한다. MAC 주소는 아주대를 예로 들면, 아주대 내에서 우편물을 보낸다하면 굳이 편지봉투에다가 주소를 써서 우체국에 보낼 필요가 없다. 아주대 내에서는 내부 네트워크망의 MAC 주소를 사용하여 전달 할 수 있다. IP 주소는 global한 개념이고, MAC 주소는 local한 개념이다.

 

 

2. reliable delivery between adjacent nodes

 이웃한 노드간에 reliable delivery이다. network layer reliable delivery와 다르다. network layer end to end이고, link layer는 이웃한 두 개 node 간에 reliable한 전송이다. 특히 link가 어떤 특징을 가지고 있느냐에 따라서 각기 다른 방법을 사용해야 한다. 예를 들어 무선 link이면 error가 많이 발생하는데, error가 많이 발생하는 환경에서는 이를 고려해서 error를 복구할 수 있는 방법을 사용해야 한다.

 link layer에서는 이 link만 가지고 해결한다. 각각 link가 다 해결이 되었다고 보고 end to end reliability를 보장해야 좋다. link layer에서 error를 해결하면 그 위 계층인 TCP에서 편해진다.

 

 

3. flow control

 transport에서 얘기했던 것과 비슷하다. link에서 보낼 수 있는 bandwidth가 정해져 있는데 그것을 초과하는 일이 발생하지 않도록 control해주는 것이다.

 

 

4. error detection

 link에서 생기는 error를 해결해준다.

 

 

5. error correction

 정보를 더 많이 집어넣어줬을 때 detection뿐만 아니라 correction도 된다. 경우에 따라서 재전송을 안해줘도 된다. 정보를 좀 더 붙여줘서 보내주면 receiver는 적당한 수준의 error correction해 줄 수 있다.

 

 

6. half-duplex and full-duplex

 half-duplex는 양쪽 node 중에서 한쪽이 보내면 반대쪽은 듣기만 해야하고, 반대쪽이 보내면 한 쪽은 듣기만 해야한다. 양쪽이 서로 보낼 수는 없다. 그래서 반드시 node 두 개 중에 하나만 전송하고 하나는 수신해야 한다. full-duplex는 양쪽이 보내도 서로 받을 수 있으나 cost가 더 들어간다.

 

 

 

 

 

 

 Link layer는 모든 host에 다 구현되어 있다. 위 그림에서 LAN cable을 꼽는 network 카드와 무선 LAN 카드가 있다. 이 카드를 메인보드에 꽂으면 network 기능이 구현되어진다. 여기 안에 adaptor라고 불리는 network interface가 있다. 여기에 link layer가 구현되어 있다.

 유선인 경우 Ethernet card, 무선인 경우 802.11 card이다. adaptor NIC 라고도 불린다. NIC가 대체로 CPU하고도 통신해서 data를 처리하는 것을 관리하게 된다.

 controller하고 physical이 있는데 이 부분이 physical, link layer로 되어있다. 그 위에 계층들은 CPU를 통해서 처리된다. physical과 위의 계층들을 이어주는 부분이 link layer인 것이다.

 

 

 

 

 

Adaptors communicating

 

 sending host receiving host가 있는 상황. sending receiving host에다가 frame을 보내게 된다. 그러면 sending host network card 부분에서 receiving host network card로 옮겨간다.

 보내는 쪽에서 datagram frame으로 encapsulate하고 error checking 할 수 있는 bits, rdt, flow control할 수 있는 등등의 기능들을 추가해서 header trailer에 집어넣어서 보낸다.

 받는 쪽에서는 header trailer를 보고 error가 있는지 없는지 보고, 신뢰성 있게 왔는지, flow control에 대한 부분들을 확인한다. 문제가 없다하면 datagram을 빼내서 위 계층으로 전달하게 된다. network card에서 밖으로 던져주게 된다.

 

 

 

 

 

 Error detection

 datagram이 위 계층에서 내려오면 그 datagramD라고 한다. 여기서 D만큼의 data bits가 있고, dataEDC라고 하는 몇 개의 bits를 추가한다. 받는 쪽에서 거의 같은 EDC정보를 가지고 D' D가 똑같은지 아닌지 (Error가 생겼는지 아닌지) 계산하고 error가 생겼다면 정정할 수 있는지 등을 판단한다. EDC를 통해서 판단할 수 있다. EDC를 통해서 error detection을 할 수 있으나, 100%는 아니다.

 

 

 

 

 

1. Parity checking

 EDC를 구현하는 가장 간단한 방법이다. 보내려고 하는 d만큼의 data bits가 있고, 뒤에 parity bit라고 하는 한 개의 bit를 추가하여 전체 1의 개수를 세서 홀수개가 되도록 조절하는 것이다. d data bits 1의 개수가 홀수면 0. 짝수면 1. 이것은 홀수개의 error가 발생했을 때만 찾을 수 있다.

 

 

 two-dimensional bit parity는 좀 더 개선한 것이다. 행렬의 형태로 구현하였다. 이것은 1의 개수가 짝수개가 되도록 한다. 수신 쪽에서 이 행렬을 분석해서 error를 찾을 수 있다. 그리고 바르게 correct도 할 수 있다. 그러나 error가 두개 이상일 때 동작이 안된다.

 

 

 

 

2. checksum

 checksum을 통해서도 error detection을 할 수 있다. checksum은 주로 Layer 3에서 사용하므로 여기선 다루지 않겠다.

 

 

 

 

3. CRC (Cyclic redundancy check)

 link layer에서 상당히 많이 쓰는 방식이다. 앞의 방식들보다 더 powerful하게 error detection이 가능하다. EDC를 만드는 과정을 coding이라고 하는데, 보내는 쪽에서는 encoding하고 받는 쪽에서는 decoding한다. encoding을 하는데는 여러가지 알고리즘이 존재한다.

 R이라고 하는 CRC bits가 붙는다. CRC bits를 잘 encoding을 하게 되면 앞의 D error가 있는지 없는지 잘 detection을 할 수 있게 된다. 일단 보내는 쪽과 받는 쪽은 pattern G라고 하는 것을 알고 있다고 가정해보자. 그래서 D+R이라고 하는 정보. 이진수를 pattern G로 나눌려고 한다. 나눗셈을 했을 때 그렇게 했을 때 나머지가 나오는데 나머지 정보를 찾아서 정보를 집어넣으려고 하는 것이다.

 

 

 

CRC 예시

 Pattern G에서 1001이라는 것을 제시한다. 101110 이라는 D bit에다가 r bits만큼 더해야한다.

여기서 Pattern G는 r+1개이다. 즉 G가 4개 bit니까 r+1 = 4, r = 3 이다. 그래서 101110에다가 000을 붙이는 것이다. 2^r만큼 해줬다는 얘기이다. 이후 나눗셈을 진행한다.

 (주의) 나눗셈을 진행할 때 뺄셈이 아닌 XOR 연산으로 진행해가야 한다.

 

 

 만약 여기서 에러가 없었다면, 수신 딴에서 똑같은 Pattern G로 나눗셈을 했을 때 나머지 R이 0이 되어야 한다. 그래서 수신 딴에서 나눗셈을 해보고 나머지가 0이 되면 error가 없다고 판단하게 된다. 나머지가 0이 아니면 error라고 판단한다. 이것은 가장 널리 사용되는 방식이다.

 

 

 

 

 

 

 

[참고]

Computer Networking A Top-Down Approach 7-th Edition / Kurose, Ross / Pearson

 

반응형

'IT > 네트워크' 카테고리의 다른 글

[ 네트워크 ] Ethernet  (0) 2020.07.03
[ 네트워크 ] MAC protocol ( + ARP )  (0) 2020.07.03
[ 네트워크 ] 네트워크 관리 : Network Management (SNMP)  (0) 2020.07.03
[ 네트워크 ] ICMP  (0) 2020.07.03
[ 네트워크 ] SDN - (2)  (1) 2020.07.03

댓글