본문 바로가기
CS/컴퓨터 네트워크

Chapter 6 링크계층 (The Link Layer and LANs)

by J-rain 2023. 6. 6.

 

네트워크 장비

 

Repeater :  L1 계층 

  • 물리계층에서 네트워크를 구성하는데 사용
  • 약해진 신호를 재생성 (강하게 또는 복원)
  • 통신 선을 연장하는 효과

Hub : L1 계층

  • 연결된 모든 호스트에게 전달 [주소 인식 불가]

Bridge : L2계층

  • 리피터 기능과 Filtering 기능을 가짐
  • 목적지 주소(Mac주소)를 검사해서 프레임을 전달할 포터(h/w)를 결정
  • 포트와 주소를 연결할 테이블 존재
  • 네트워크와 네트워크를 연결 (LAN 연장)
  • 네트워크를 분리

Switching Hub : L2 계층

  • 목적지 주소를 인식, 해당 목적지 포터로만 전달
  • LAN에 많이 사용

라우터 : L3 계층

  • IP 주소로 목적지에 패킷 전달
  • L3 스위치도 같은 기능

Backbone 장치

  • 여러 네트워크(LAN)를 연결해 주는 장치
  • 백본 스위치

Frame

 

  • Preamble : 데이터 동기화를 위한 제어 신호
  • SFD : 데이터의 시작을 알린다.
  • Destination Address : 목적지의 MAC Address라고 하는 주소
  • Source Address : 출발지 주소 필드, MAC Address
  • Type : 상위계층의 프로토콜 정보, Next Header의 프로토콜을 나타내는 필드.
  • Length : 0x0600보다 작으면 IEEE 802.3 Frame. 크면 Ether Type.
  • DSAP : 목적지 3계층 프로토콜 주소
  • SSAP : 출발지 3계층 프로토콜 주소
  • FCS : 오류 검출을 위한 필드,G(x)함수를 이용한 데이터를 체크하는 값이 들어가 있어서 오류 검출을 할 수 있다. Frame의 시작인 Destination Address 부분부터 데이터 필드 까지를 포함.

6.1 introduction, services

Link layer services

1. framing, link access

 link access라고 하는 기능이 가장 기본적인 서비스이다. datagram frame 단위로 캡슐화해서 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와 다르다. 네트워크 계층에서는 end to end이고, 링크 계층에서는 이웃한 두 개 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가 더 들어간다.

 

Adaptors communicating

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

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

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


6.2 error detection correction

 

Error detection (에러탐지)

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

 

Parity checking

1. Single bit parity

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

 

2. Two-dimensional bit parity

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

3. checksum

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

 

4. CRC (Cyclic redundancy check)

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

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

 

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

여기서 Pattern G는 r+1개이다. 즉 G가 4 bit니까 r+1 = 4, r = 3 이다. 그래서 101110에다가 000을 붙이는 것이다. (2^r 만큼 붙이므로 2^3인 8을 이진수로 표현하면 1000 이므로 뒤에 3bit 000을 붙였다.) 이후 나눗셈을 진행한다.

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

 

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

 

5. Block sum check

  • 보내지는 데이터의 1의 개수를 이진수로 바꾼다.
  • 이진수의 일부를 추가 데이터로 붙여서 보낸다.

100100 -> 1이 두개이므로 이진수 10

110110 -> 1인 4개이므로 이진수 0100 

 

 

Error Correction (에러수정)

 

1. Hamming Code

 

  • data = 1 0 1 1 0 1 1 1 이다. 우선 2^n 의 자리를 박스로 비워준다. (이 자리를 Redundancy bits 중복 비트라한다.)

 

  • data를 빈곳에 위치시킨다.

 

  •  1의 박스부터 구하자면 r1 = bits 1, 3, 5, 7, 9, 11 이다. 이때 3, 7, 9 가 1이므로 1의개수가 3개 홀수이다. 따라서 even p.bit로 맞추기 위하여 1의박스는 1이된다.

  • 2의 박스는 r2= bits 2,3  6,7  10,11 이다. 이때 3,6,7,10,11 이 1이므로 1의개수가 5개 홀수이다. 따라서 2의박스도 1이다.
  • 4의 박스는 r4= bits 4,5,6,7  12,13,14,15 이다. 이때 6,7,12 가 1이므로 1의개수가 3개 홀수이다. 따라서 4의박스도 1이다.
  • 8의 박스는 r8 = bits 8,9,10,11,12,13,14,15 이다. 이때 10,11,12가 1이므로 1의개수가 3개 홀수이다. 따라서 8의 박스도 1이다.

따라서 구한 코드는 1 1 1 1 0 1 1 1 0 1 1 1 이다. 오류 검증을 해보면

ex) r8 r4 r2 r1
오류가 없는 경우 0 0 0 0
비트 1에 오류 0 0 0 1
비트 5에 오류 0 1 0 1

구한 네개는 1 1 1 1 는 비트 15에 오류가있다.


6.3 multiple access protocols

 

multiple access links, protocol

 multiple access links, protocol이라고 하는 것은 layer 2에서 하고 있는 핵심적인 기능 중 하나이다. 유선이든 무선이든 link가 있을 때 이 link에 다수의 station 또는 user 단말들이 물려있을 때 어떻게 접속할 것인지, 동시에 같은 리소스를 써서 둘 이상이 접속하게 되면 충돌이 나는데 어떻게 할 것인지를 정하는게 multiple access protocol이다.

 

그렇다면 이상적인 multiple access protocol이 되려면 해결할 것이 있다.

  • 하나의 노드가 전송을 독점할 수도 있다.
  • 다수의 노드가 균등하게 전송해야한다.
  • 조정없이 개별적/분산적으로 처리해야한다.

이를 해결해주기 위해 필요한 것이 MAC 프로토콜이다.

 

 

 

MAC protocol (Media Access Control)

MAC 공유된 채널에 다수의 사용자가 접속할 수 있도록 도와주는 정의한 프로토콜이다.

MAC 프로토콜은 세가지로 나눌수 있다.

 

1. channel partitioning protocol (채널 분할 프로토콜)

채널을 잘게잘게 쪼개서 channel을 여러 개의 sub channel로 만든다.

 

1-1 TDMA  (Time Division Multiplexing Access)

 채널을 시간 단위로 쪼개는 것이다. 6개의 slot으로 이루어진 frame이 있다. 매번 이 frame의 첫번째 slot 1번 유저가 전송해 줄 수 있게 하겠다라고 정의한 것이다. 매 세번째는 3번이 보내도록 한다. 이렇게 정의해 놓은 것이 TDMA방식이다.

 그래서 TDMA를 잘 쓰려면 이 slot을 누가 쓸 것인지 정해줄 수 있는 장치가 있어야 한다. 셀룰라 시스템에선 기지국이 이런 역할을 했었다. 전화를 건다고 하면 전화를 거는 사용자에게 slot을 한 개 준다. 그 사람이 매번 해당 slot을 이용해서 데이터를 주고 받을 수 있게 한 것이다.

 결국 slot의 개수는 한정이 되는데 이 slot 개수로 동시에 통화할 수 있는 사용자의 수가 정해진다.

 

1-2 FDMA  (Frequency Division Multiplexing Access)

 채널을 주파수 별로 쪼개는 것이다. 주파수별로 사용자가 사용할 수 있게 하고 그 주파수로 데이터를 전송할 수 있게 한 것이다. FDM cable 내에서 여러 주파수를 같이 보내더라도, 수신 딴에서 주파수 별로 분리할 수 있다. 그러면 주파수 몇 개가 나오느냐에 따라서 동시에 전송할 수 있는 사용자 수가 나온다.

 

1-3 CDMA  (Code Division Multiplexing Access)

무선 네트워크에서 주로 사용된다. 7장에서 배운다.

 

 

2. random access protocol (랜점 접속 프로토콜)

누가 언제 채널에 들어올지 알 수 없어서 random하게 접속한다.

어떤 node가 언제 data를 보내야 될지가 명확하지 않다. 이럴 때 전화통화처럼 한 번 채널을 받으면 계속 전송하는 경우에는 사용하면 안된다. 어쩌다가 한 번 보낼 때 사용해야 한다. 맨 처음 전화통화를 걸 때 random access를 한다. 그 때는 채널이 없기 때문에 채널을 달라고 random access를 한 것이다. random access에 성공하면 기지국이 일정한 채널을 하나 주는 것이다.

 random access는 미리 사전에 coordination이 되어 있지 않다는 것이다. 누가 언제 보내는 지 알 수가 없다. 전화통화를 예로 들자면, 기지국에선 누가 언제 전화를 걸지 몰라서 미리 리소스를 할당하지 못한다. 그래서 전화통화를 거는 순간 random access 성공하면 채널을 하나 할당해준다. 운이 없게 둘 이상의 사용자가 리소스를 할당받으면 충돌이 발생한다.

 그래서 random access MAC protocol은 충돌을 어떻게 detection할것인가. 어떻게 recovery할 것인가. 이런 것들을 정의하게 된다. 이런 부분을 어떻게 해결하느냐에 따라서 여러가지 프로토콜이 나오게 된다. ALOHA, slotted ALOHA, CSMA 등등

 slotted ALOHA는 지금도 이동통신 시스템에서 쓰는 개념이다. CSMA/CD는 유선 LAN에서 쓰는 방식이다. CSMA/CA는 무선 네트워크에서 쓰는 방식이다.

 

2-1 Pure ALOHA

 slot이 나눠져 있지 않은 ALOHA이다. 싱크도 맞지 않는 경우이다. 이런 경우에도 충돌이 발생하는데, clock이 정해져 있지 않기 때문에 slot에 걸쳐서 충돌이 발생한다. slot의 경우는 어떤 slot 하나만 보내면 성공인데, 이 경우는 slot이 없기 때문에 충돌의 가능성이 높아진다. 충돌이 발생하지 않으려면 노란색의 입장에서는 t0-1부터 t0+1까지 누군가가 보내면 안되는 것이다.

slotted ALOHA보다 성능이 많이 떨어진다. 무선 전송 처음 시도하던 1970년대 초창기에 썼다.

 

2-2 Slotted ALOHA

 frame들이 같은 사이즈라고 가정하자. 그리고 시간은 똑 같은 size slot으로 나눠져 있다고 가정한다. 한 개 frame을 한 개 slot에서 보낸다라고 가정한다. 그리고 node들은 slot의 시작하는 시점을 알고 있어서 sync는 맞춰져 있다고 가정한다. 두 개 이상의 node가 같은 slot에서 전송하면 실패하게 되고, 모든 node들은 충돌을 detect할 수 있다고 가정한다.

 위와 같이 가정했을 때, node가 충돌이 없었다면 아무 문제 없다. 그런데 충돌이 났으면 재전송을 해야한다.  node가 바로 이어지는 time slot에서 재전송하면 또 충돌날 것이다. 확률적으로 확률 p로 보낼지 말지 결정한다. 그러면 확률적으로 충돌나는 것을 줄일 수 있다.

 node 1,2,3이 동시에 frame을 전송해서 충돌이 발생하였다. 그 다음에는 1,2,3 모두 보내지 않기로 결정한다. 그 다음엔 확률을 적용해서 1,2가 보내졌다. 충돌이 났다. 그 다음 확률이 적용돼서 2만 보내졌다. 성공했다. 이런 것을 반복한다. node 1,2,3이 각자 보내는데 9개의 slot을 사용하였다. 사실 순서를 지정해서 보냈으면 3번만 했으면 충분했으나, 누가 언제 보낼 지 알 수가 없다. 그래서 각자 random access를 하다보니 이런 상황이 나오는 것이다.

장점 : 각자가 계속 시도해봐서 전송한 것이다. decentralized된 방식이고, 간단하다.

단점 : 충돌이 나고 slot을 낭비한다. idle slot도 있다. node들이 충돌을 바로바로 detection할 수 없기도 하고, clock 싱크도 맞아야 한다.

Slotted ALOHA 성능은 slotted ALOHA 방식을 썼을 때 최대 37%정도의 시간을 제대로 써서 보낸다.

 

2-3  CSMA  (Carrier sense multiple access)

유선이든 무선이든 어떤 signal을 전달해서 전송할 수 있는 것을 carrier라고 한다. carrier sense할 수 있다. 전송하기 전에 channel listen할 수 있다. 지금 누가 데이터를 보내고 있는가 아닌가를 들어볼 수 있다. 그래서 channel idle하다고 보이면 전송시도 하는 것이다. 그런데 sense했더니 누군가가 보내고 있으면 busy하다고  보고 전송을 미루는 것이다.

CSMA에서 충돌이 발생한 상황. 예시를 보면 아무도 안 보낸다고 해서 t0에 노란색이 전송을 시작한다. signal propagation delay가 있어 점점 퍼져나가는 그림을 띈다. 그리고 t1이라는 시간에 idle하다고 봐서 빨간색이 전송을 시도한다. 전송을 하는데 좀 있다가 봤더니 충돌이 났다. 이 충돌이 감지가 되면 충돌이 났다고 알게된다.

 그렇다면 이 충돌을 어떻게 처리해줄까?  =>  CSMA/CD를 통해 충돌을 처리한다.

CSMA/CD

아주 짧은 시간 내에 충돌을 detection할 수 있는 방식이다. 충돌이 난 경우에 전송을 취소한다. 이런 방식은 유선 LAN에서 사용할 수 있다. 또한 CSMA/CD의 효율성은 ALOHA보다는 높다는 걸 알아두자.

 

 

3. taking turns protocol (순번 프로토콜)

서로서로 번갈아가면서 보내도록 하는 방식이다.

 

3-1 Poling

polling master node가 있어서 여러 slave node들한테 master가 너 데이터 보낼래? 라는 call을 던져서 데이터를 보내게 한다.

 그러나 이런 경우에 polling overhead가 있고, polling을 해서 전송해야 하니까 그만큼의 지연도 있다. 그리고 master가 문제 있으면 전송이 되지 않는 문제가 발생한다.

 

3-2 Token passing

 token을 넘겨주는 token passing이라는 방식이 있다. 어떤 control token을 순차적으로 넘겨주는 것이다.

1. token 보내줬는데 보낼게 없다.

2. token을 넘겨준다. data를 보내준다.

그러나 token을 돌리는 overhead가 있고, token을 기다리는 latency가 있을 수 있다. token 방식에 문제가 생기면 실패할 수도 있다.


6.4 LANs

 

 

 

LANs

 주소는 IP뿐만 아니라 MAC에서도 주소가 있다. MAC 또는 LAN 또는 physical address라고도 한다.

 어떤 실제 물리적인 network card ethernet card가 있을 때 card의 실제 물리적인 주소가 필요하다. IP주소를 할당하기 전에 식별할 무언가가 필요하다.  network에 아직 물려 있지 않은 상황에서 이 card를 식별할게 필요하다. 그래서 물리적으로 연결된 interface를 구분하기 위한 무언가가 필요하다.

 이것을 MAC address라고 한다. 48bit이고 대부분 network card들은 MAC address를 고유하게 가지고 있다. 제조사에서 만든 것이기에 전세계의 MAC address 중 고유한 주소를 갖게 된다. 16진수로 표기한다.

 cmd - ipconfig /all - 물리적 주소 에 나와있다. 복수개가 있을 수 있는데, 이것은 WiFi card에 대한 주소가 있을 수 있고, 유선 card에 대한 주소가 있을 수 있다. network card마다 물리적인 주소가 있다.

 

 local area network에 물릴 때는 물리적 주소만 가지고 network 내에서 식별해주면 된다. 이 내부에서는 굳이 IP주소를 할당해 줄 필요가 없다.

 

 제조사가 MAC address의 일정 부분을 사서 부여한다. IP주소와 MAC주소를 비유로 보자면, MAC주소는 주민등록번호고, IP주소는 집주소이다. 그러면 이 집주소의 이 주민등록번호를 가진 사람이 살고 있다. 이 사람이 이사를 가면 IP주소는 바뀌지만 주민등록번호는 바뀌지 않는다. MAC IP의 주소 관계를 형성시켜주는 protocol이 필요하다. 바로 ARP라는 것이다.

 (참고) LAN card를 다른 컴퓨터에 옮길 수 있고, 다른 local area로 갈 수도 있다. MAC 주소는 옮겨갈 수 있느나, IP는 옮길 수 없다.

 

ARP : address resolution protocol

 

 

MAC 주소가 어떻게 IP주소를 알까? 이것을 해결해주는 프로토콜이다. ARP table LAN에 연결된 각각의 node가 가지고 있다.

<IP address; MAC address; TTL>

 

 여기서 TTL (Time To Live) 은 매핑관계가 고정되어 있다고 생각하지 않아, 20분 마다 갱신하도록 하기 위해 있다. 그래서 20분 마다 이 매핑이 유효한지 체크한다. 그래서 각각의 host MAC 주소와 IP주소가 부여되어 있다.

 

ARP protocol : same LAN

 A B한테 datagram을 보내려고 한다. B MAC 주소가 A ARP table에 없을 때 어떻게 할까? A ARP 쿼리 패킷을 broadcast한다. B IP주소를 가지고 MAC address를 물어보는 것이다. 그러면 destination MAC address FF-FF-FF-FF-FF-FF 이다. 이것은 network 내에 있는 누구나 수신 가능하다는 뜻이다. 모든 node들이 이 쿼리를 받는다. B가 받으면 A한테 MAC address를 담은 채 reply를 보내준다.

 A B에 대한 IP MAC 주소의 매핑을 caches (saves) 한다. (timeout 될때까지). 그래서 ARP plug-and play. 어떤 네트워크관리자 개입없이 무언가가 넣어지면 각자의 역할을 실행하는 것이다.

 

Addressing 과정

A에서 B까지 datagram을 보내는데 R이라는 라우터를 거쳐가는 상황이다. A B IP주소를 안다고 가정하자. A는 첫번째 hop router (R) 의 주소를 안다고 가정하자. A R MAC 주소를 안다고 가정하자.

 

 A가 자신의 source IP 주소를 넣고, B IP주소를 넣는다. 이 초록색 영역은 network 계층에서 IP주소를 넣는 작업이다. 파란색은 MAC 계층의 작업이다. A R MAC 주소를 넣고, 자신의 MAC 주소를 넣는다. 아직 B MAC 주소를 모르기 때문에 R MAC 주소를 MAC destination에 넣은 것이다.

 A에서 R까지 MAC 주소를 가지고 전달이 된다. 일단 라우터에서는 IP주소는 건들이지 않는다. MAC부분만 바꿔서 보낸다.

 라우터는 A에 물린 interface B에 물린 interface가 있다. B에 물린 interface에서 MAC을 수정하는데, 자신의 MAC 주소를 MAC src로 넣고, B MAC 주소를 MAC dest로 넣어서 전달한다.

 

B는 이를 받고, B에서는 MAC 부분을 빼고 IP주소를 본다. 그래서 B에서 자기의 상위계층으로 올려 보낸다.

 

 

Ethernet

 이더넷은 wired LAN의 기술 중 하나였다. 유선 랜은 이더넷이라고 하는 특정 기술이 대세가 된 것이다. 대표 기술 같은 느낌. 하나의 chip에서 multiple speed가 가능하다. Broadcom은 이더넷을 만드는 회사다.

 이더넷이 대세가 된 것은 간단하고 가격이 싸서 그렇다. speed 10Mbps에서 시작해서 10Gbps까지 올라갔다. 지금은 local만 아니라 backbone망에까지도 사용이 된다.

 

 Ethernet이 물리적으로 topology를 어떻게 갖느냐.

 

 과거에는 bus로 물려있었다. 여러 컴퓨터들이 bus로 물려있다. 이것이 초창기 이더넷인데, bus를 쓰게 되면 충돌이 발생한다.

 요즘은 star 라는 topology를 사용한다. switch를 놓고 하나씩 host를 연결한다. 충돌이 생기지 않는다.  switch layer2이다. MAC 주소를 보고 어디로 보내야할지 보고 전송한다. 라우터보다는 레벨이 낮다. 라우터가 우체국 역할이라면 switch는 한 건물에서 보내주는 것이다.

 

Ethernet frame structure

 data (payload) : IP datagram encapsulation해서 들어간다.

 preamble : 어떤 이더넷 상에서 데이터를 전송하는데 데이터의 시작부분을 detection하는 것이 preamble이다. 항상 7byte의 일정한 패턴을 집어 넣는데, 이 패턴 bit를 읽어서 이게 preamble이라고 판단되면 정보를 읽기 시작한다. synchronize 목적으로 사용하는 것이다.

 addresses : 6byte. MAC address를 넣는다. destination, src를 각각 6byte로 집어넣는다.

 type : higher layer protocol에 대한 indicate를 집어넣는다. 지금은 뒤에 붙는게 전부 IP지만 초창기에는 IP가 아니고 여러 protocol이었다. 그래서 network 계층의 여러 protocol에 대비하기 위해 type이 있었다.

 CRC : error recovery하는 목적으로 붙이는 것이다.

 

 

Ethernet은 unrelable, connectionless 하다.

connectionless : handshaking이 없다.

unreliable : ACK NAK를 보내지 않는다. 다른 계층에서 하는 것이다. (TCP 등에서 한다)

Ethernet MAC protocol binary backoff를 가지고 CSMA/CD를 쓴다.

 802.3 IEEE에서 지정한 표준 이더넷인데, 공통된 MAC protocol format으로 만든 것이다. 여러가지 전송속도에 대해서 뭐가 됐든 간에 맨 앞에 공통인 성분을 보낼 수 있게끔 정의를 해준다. media fiber, cable이 될 수 있는데 이에 상관없이 공통의 format을 사용한 것이 802.3 이다.

 TX, T4, T2 … 속도나 media가 무엇인가에 따라 정의된다. 앞의 숫자는 보통 속도를 의미한다. 100이면 100Mbps, 1000이면 1000Gbps.

 

 

Ethernet switch

 Ethernet switch link layer device이다. 이더넷 frame들을 저장했다가 전송한다. 라우터하고 비슷한데, 라우터는 3계층에서 작동하는 것이다. switch MAC 주소만 보고 어디로 보낼지 전송하는 것이다. 보통 내부망 하나를 구성할 때는 router를 거쳐 밖으로 나가기 전에 이더넷 스위치로 구성이 된다.

 들어오는 MAC address를 검사해서 선택적으로 전송한다. outgoing link 중에 하나 또는 그 이상으로 forwarding을 선택적으로 하는 것이다. 그리고 CSMA/CD를 통해 access한다.

 host가 중간에 스위치가 있는지 알지 못하고 그냥 보낸다. 이더넷 스위치는 투명한 역할을 한다.

 plug-and-play이다. 들어가면 self-learning도 한다. 스스로 학습해서 frame이 들어오면 어디로 갈지 스스로 정해서 돌아가게 된다. 별도로 네트워크 관리자가 작업해주지 않아도 된다.

 6개의 host가 하나의 switch에 물려있는 상황. 각각의 interface 1 2 3 4 5 6 으로 번호가 부여되어있다. 그리고 이 switch buffer를 갖고 있다. 또 충돌하지 않고 보내면서 받는 full duplex 기능도 있다.

 A에서 A'으로, B에서 B'으로 동시에 전달이 된다면, 충돌나지 않게 스위치에서 buffer에 넣었다가 보낸다.

 

 switch A' interface 4를 통해서 도달할 수 있다. B' interface 5번으로 도달할 수 있다. 이런 것을 어떻게 알까?

 switch switch table을 가지고 있다.  switch가 들어오면 각각 정보를 주고 받으면서 table을 만들어간다. switch는 누가 데이터를 보내면 위치를 알 수 있다. 만약 destination을 봤는데 아직 table에 없다면 broadcast를 통해 어디있는지 알게 되고 table을 만든다.

 host MAC 주소와 interface를 매핑하고 time stamp(TTL)을 갱신한다. 여러 entry들이 switch table 내에 만들어지고 관리되는 protocol이 있다.

 

Switch: self-learning

 switch는 어느 host가 어디 있는지 학습한다. A A'에게 보낸다. A 1번 쪽에 있구나 하고 table에 기록한다. A'이 어디 있는지 몰라서 broadcast하고 4번에서 응답을 받아 어디있는지 알게 된다. 그 다음에 forwarding 해주게 된다.

 

Self-learning multi-switch example

 self-learning switch들이 연결되어 있다. 서로서로 학습한다. C에서 I로 데이터를 보낸다고 가정해보자. S1 S4 S3를 거쳐야 한다.  S1 S4 S3 스위치들은 어디로 보내야 할지 각자 학습해간다. flood를 통해서 table를 기록해가는 것이다. I - S3 - S4 - S1 순으로 학습해 간다.

 

Switches VS Routers

 스위치와 라우터는 둘 다 store and forward 하는 맥락에서는 같은 기능을 한다. 라우터는 IP주소를 보고 network 계층에서 하는 거고, 스위치는 MAC주소를 보고 하는 것이다.

 두 개의 디바이스가 데이터를 주고받으려고 한다. switch를 건너갈 때는 link layer MAC 주소만 본다. 라우터에서는 network IP주소만 본다.

 내부망은 바깥 네트워크보다 작아서 flood 방식으로 돌아가는 것이 가능하나, 라우터는 전세계적이라 규모가 커서 flood하지 못한다. 라우터는 라우팅 알고리즘을 사용한다.

 

 


6.6 data center networking

 

Data center networks

microsofware data center

하나하나가 server이다. cloud center라고 생각하면 된다. Amazon, Youtube, Akamai, Apple 등에서 data center를 운영한다. 각각 하나의 server가 최대 수용할 수 있는 동시 최대 클라이언트 수가 있을 것이다. 이것의 해결책으로 수많은 server load를 분산시키는 것이다.

 data center network의 구성이다. 우리가 아는 네트워크와 비슷하게 생겼다. load balancer에서 각각 server를 분기시켜서 보내게 된다.

 스위치가 Tier별로 있다.  load balance L3가 아닌 애플리케이션 딴에서 라우팅해주는 것이다. 어느 server로 보낼 것인가하는 이슈이기 때문에 애플리케이션 딴에서 해야한다.

 인터넷에서 어떤 쿼리를 보냈다면 Border router에서 load balancer를 거쳐 너는 이쪽 server로 가서 처리하라고 보낸다. 외부로 나갈 때도 동일하게 한다. 경우에 따라서 녹색 선과 같이 다른 rack으로 balance를 시켜줄 수 있다.

 

 switch들과 rack들 사이에 수많은 연결이 있다. 이 사이에 성능을 증가시켜주는 것이 중요한 이슈이다. 해결책으로 reliability를 올려줘야 한다. 특정 서버에 문제가 생겼다면 다른 서버로 빨리 보내줘야 하는 것이다. 이런 부분들이 data center network의 이슈들이다. 보통은 각자 data center를 구축하면서 이런 부분들이 솔루션으로 들어가 있다.

댓글