Link layer
Introduction , services
Link layer
- 링크로 연결된 두 개의 노드 사이에서 데이터를 전송 해주는 역할(노드는 라우터 호스트 서버 상관없음)
- Link : 유선, 무선, LANs
- 링크 레이어에서 사용하는 페킷 : Frame
- 각각의 링크가 다른 프로토콜을 사용함
- services
- framing : 링크 레이어에서 앞에 header, 끝에 trailer를 붙여 frame으로 만듬
- reliable : transport레이어에서도 구현되어 있지만 링크 레이어에서 처리하면 더 빨리 복구하기 때문에 제공하는 기능
- flow control
- error detection
- error correction : 한 개 정도의 비트가 오류발생하는 경우 수신자가 재전송 없이 스스로 에러를 복구 가능
- half-duplex and full-deplux : 두 개의 노드 중 하나만 전송 or 동시에 전송 둘다 가능
- 각각의 호스트, 라우터에 구현 되어야 함 랜카드에서 구현할 수도 있고 cpu에서 구현 하기도 함

error detection, correction
Error detection
- 기존의 데이터에 추가적인 정보를 전송, 수신자도 수신 데이터를 통해 추가정보를 계산하고 비교하는 방법 : checksum과 방식은 동일함
single bit parity
- 데이터에서 전체적으로 1의 비트가 홀수개면 0 짝수면 1로 parity bit를 전송

- 한 개의 비트만 에러가 났을때 사용가능(3,5,7개도 가능할 것 같긴한데 많아서 못 쓰는거 같음)
two-dimensional bit parity

- 방식은 동일한데 2차원으로 보내서 싱글비트 에러 탐지 및 위치도 파악 가능
Cyclic redundancy check
- Data bit : D(보내는 쪽에서만 암)
- r+1 bit = G(양쪽에서 둘다 알고 있음)
- 보내는 쪽에서 D와 G를 이용해 R을 만들고 D+R을 보냄 R은 r비트
- D에R을 이어붙인 비트를 G로 나누었을때 나머지가 없이 정확히 떨어지는 R을 선정
- 에러가 발생하면 G로 나누어 떨어지지 않는다
- r+1만큼 연달아 에러가 발생하지만 않는다면 에러의 개수는 몇개가 생겨도 상관 없이 디텍 가능
- D와 R을 붙인 식

- R 계산 방법

- R xor R = 0
- 나누기 할때 빼기 때신 xor연산
Multiple access protocols(MAC)
- 링크는 링크 사이에 두 개의 노드만 있는 Point to Point 방식과 여러개의 노드가 링크를 공유하는 broadcast 방식이 있음
- 2개 이상의 프레임이 동시에 전송되면 충돌이 일어났다고 함(해석 불가) : collision 충돌을 해결하는 방법이 multiple access protoocol
ideal multiple access protocol
- 노드 1개가 전송을 원하면 채널의 최대 rate로 전송 해야함
- 노드 M개가 전송을 원하면 (최대rate/M)의 속도로 공평하게 전송 해야함
- 위의 내용을 특정한 노드가 결정해주거나 각각의 노드에서 싱크를 맞춰서 하는 것이 아닌 분산된 상태에서 해야함
- 단순해야함
- 위의 4가지 조건을 모두 만족하는 프로토콜은 현실적으로 없어서 최대한 많이 만족시켜서 개발하려고 함
MAC protocol분류
- channel partitioning : 하나의 채널을 시간, 주파수, 코드등 특정 방법으로 쪼개고 각각의 조각을 노드에게 할당 할당받은 조각은 공유하지 않고 받은 노드만 사용
- random access : 채널을 랜덤하게 접속/사용 이 방법은 충돌이 발생하기 때문에 복구하는 기능도 있어야 함
- taking turns : 각각의 노드가 순서를 정해서 전송하는 방법
channel partitioning MAC protocol
- TDMA
- time division multiple access

- 매 라운드 마다 해당 슬롯에서만 사용 사용 안하면 낭비 될 수도 있음
- FDMA
- frequency division multiple access(주파수)

- 이 방법도 낭비가 생길 수 있음
- 채널 파티셔닝은 충돌은 발생하지 않지만 낭비가 생길 수 있다
Random access protocols
- 순서 조정 없이 모든 노드가 최대 rate R로 전송
Slotted ALOHA
- 가정
- 모든 프레임이 같은 사이즈
- 시간을 하나의 프레임을 온전히 보낼 수 있는 크기로 짜름 : TIME SLOTS
- 노드는 slot이 시작될때만 프레임을 전송 가능
- 모든 노드가 동일하게 slot의 시작 시간을 알아야 함 : synchronized
- 만약 충돌이 발생하면 다른 모두가 충돌을 감지 가능
- 과정
- 새로운 프레임을 만들고
- 충돌이 없으면 다음 slot에 전송
- 충돌이 있으면 각각의 노드가 일정 확률 P를 통해 전송하거나 안함

- C : 충돌 slot, E : empty slot
- 이 방법은 하나만 보낼 때는 최대 rate를 사용 할 수 있기 때문에 보낼때 낭비는 없음, 간단함
- 충돌이 일어난 slot은 무조건 낭비 됨, 모든 노드의 clock 싱크가 동일 해야하는데 기술적으로 어려움
- 최대 효율(사용한 slot과 전송에 성공한 slot의 비율) : 1/e = 0.37로 효율이 좋지 않다.
Pure ALOHA

- slot을 나누지 않고 그냥 보내는 방법
- 이거는 한 프레임을 보내는데 1의 시간이 걸린다고 가정 할때 한 프레임을 보내기 시작한 시간을 기준 앞,뒤로 각각 1만큼은 다른 프레임이 들어오지 않아야함
- 결론적으로 효율이 1/2e = 0.18이 된다
- 단순하고 동기화 필요없지만 효율이 안좋다
CSMA(carrier sence multiple acces)
- 보내기 전에 감지를 해서 보내고 있는 신호가 있으면 대기하는 방법
- propagation 딜레이 떄문에 충돌이 발생할 수 있다.
- 충돌이 발생해도 일단 끝까지 다 전송함
CSMA/CD(CSMA 개선)
- 충돌이 감지되면 전송을 중지하는 방법
- 낭비되는 시간이 줄어듬
Ethernet CSMA/CD 알고리즘
- 랜카드가 프레임 생성
- 랜카드가 채널을 감지 idle이면 전송 busy(다른 신호가 있음)면 idle이 될 때까지 대기
- 보내면서 충돌이 일어나는지 계속 감지
- 전송 중 충돌이 발생하면 전송을 중단하고 jam signal을 전송해서 다른쪽에서도 충돌이 일어난 것을 알 수 있도록 함
- 충돌이 일어나면 복원을 해야함 : binary backoff사용
- binary backoff :

- m번째 일어난 충돌에서 0~2^m-1중 K하나를 고르고 K*512비트를 보낼 수 있는 시간동안 기다림
- 충돌이 일어나면 날수록 오래 기다리게 됨
CSMA/CD efficiency

- propagation은 가장 먼 2개의 노드에서 계싼
- propagation 딜레이가 늘어나거나 trasmission속도가 빨라지면 효율이 나빠짐(시간이 줄어들어서)
Takng turns MAC protocol
- 앞의 두개의 방법의 장점을 모두 사용하고자 만들어짐
- channel partitioning은 여러개 한번에 보낼때 장점이고 random access는 한번에 하나만 보낼때 장점
Polling

- Master에서 polling메시지를 각각의 slave에게 보내고 slave에서 보낼게 있으면 데이터를 보내고 polling메세지를 반납함, 없으면 순서 넘김
- master가 죽으면 polling 메시지를 보낼 수 없음
- 순서 넘길때 낭비 발생(polling을 주고 받고 하는 과정)
token passing

- 토큰을 가지고 있을때 데이터를 일정시간동안 보내고 보낼게 없으면 토큰을 다른 노드에게 전해줌
LANS
MAC address and ARP
- 인터페이스 카드(랜카드)에 할당된 고유한 주소 일반적으로 IP주소와는 다르게 변하지 않음 중복된 MAC주소가 발생하면 오류
- 48비트로 구성됨, 8비트씩 끊어서 구분

- MAC 주소와 IP주소를 mapping해야함 : ARP를 사용
ARP : address resolution protocol
- ARP table : 같은 LAN에서 IP/MAC 주소 mapping한 정보와 TTL이 존재(매핑 정보는 계속 유지되지 않기 때문)
- ARP table작성
- A -> B를 보낼때 A의 테이블에 B의 MAC 주소가 없음
- A가 모든 노드에게 쿼리를 보냄(링크 레이어 수준, MAC 주소 : ff-ff-ff-ff-ff-ff, B가 쿼리를 받았을때 본인의 IP주소가 포함됨
- B가 받고 A에게 A의 MAC주소를 사용해서 보냄
- ARP table : plug and play = 처음에는 아무 내용이 없다 점차 채워짐
routing to another LAN

- 라우터를 거치면서 라우터의 IP, MAC을 사용
- 라우터에서는 IP를 네트워크 레이어에서 변환하고 링크 레이어로 전달
Ethernet
- 다양한 속도 제공
- 처음 널리 퍼진 LAN 기술임
- 간단하고 저렴함
- 성능 측면에서도 떨어지지 않음
Ethernet : physical topology

- bus는 하나의 선을 이용하기 때문에 한번에 하나만 전송 가능함
- Star는 각각의 링크가 ethernet기능을 구현
Ethernet frame structure

- preamble : 송,수신자의 동기화를 위한 8바이트
- address : 각각 6바이트씩 MAC주소
- type : 네트워크 레이어의 프로토콜 타입
- CRC : 앞에서 했던 Cyclic redundancy check
(에러 체크)
Ethernet : unreliable, connectionless
- 커넥션 없음
- unreliable인데 복구는 상위 레이어에서 함
- csma/cd 방식을 사용 하지만 링크 하나에 호스트가 하나가 열결 되있어서 항상 프리한 상태가 됨
Switch
- store and forwarding
- 모두에게 보내는 허브와는 다르게 목적지를 보고 선택적으로 전송 가능
- transparent : 각각의 노드는 중간에 스위치가 있는지 모름
- plug and play, self learning : 라우터는 라우팅 알고리즘을 수행시키고 주소를 부여하고 그런 기능들을 해줘야 하는데 스위치는 바로 동작함
switch : multiple transmission
- 각각의 호스트는 고립되어 있으면서 스위치와 연결됨
- 스위치는 페킷을 버퍼에 저장하고 보냄
- 각각의 링크는 ethernet 프로토콜을 사용
- 충돌이 발생하지 않는다

Switch table : self-learning
- 스위치에
- 프레임을 받으면 보낸 노드의 MAC주소와 그 노드로 연결되는 링크를 매핑
- 그 프레임의 목적 MAC주소를 확인
- 주소가 테이블에 있으면 전송(만약 전송자와 목적지의 링크가 같으면 drop)
- 주소가 테이블에 없으면 다른 모든 링크로 보내줌(flood)

- A -> G로 처음 보낼때 flood가 총 4번 일어남(모든 스위치)
- 그러면 A에 대한 정보를 모든 스위치가 가지게 됨
- 그 후 G에서 A로 보낼땐 flood없이 바로 보낼 수 있음
Switch vs router
- 두개 모두 store and forward
- router : 네트워크 레이어, IP주소를 사용해 라우팅 알고리즘으로 테이블 작성
- switch : 링크 레이어, MAC주소 사용 self-learning으로 테이블 작성
- 호스트가 많으면 스위치는 처음에 모든 스위치에게 flood하기 떄문에 효율이 떨어 질 수 있음
VLANs
port_based VLAN : 포트번호를 기준으로 나누어서 ARP를 보내는 방법
- 하나의 물리적인 스위치를 통해 논리적으로 별개의 LAN을 구성할 수 있게 하는 것
- 트레픽이 분리됨
- 논리적으로 나눠둔 것을 자유롭게 변경 가능(원래 하나의 LAN이기 때문)
- VLAN 간의 통신에는 라우터가 필요함(보통 스위치 안에 라우터 기능도 들어가게 만듬)
- 서로 다른 스위치의 호스트 일부를 합쳐 하나의 VLAN을 만들 수 있음 : trunk port가 필요

- trunk port를 사용해 보낼떄는 802.1q의 프레임 포멧을 사용(다른 스위치에서 전해져 왔기 때문에 구분 해주기 위함)

- VLANs은 802.1q를 사용한다.
Link virtualization : MPLS
Multiprotocol label swiching(MPLS)
- 처음 목표 : IP 포워딩을 더 빨리 하는 것
- 고정된 길이의 LABEL 사용(1:1매칭)
- MPLS를 사용하는 네트워크에서 MPLS헤더를 끼워서 IP헤더를 사용 안하다가 다른 네트워크로 가면 지우는 방법

- 라우터들이 MPLS 기능을 이해해야 가능함(MPLS capable 라우터)
- 1:1 매칭의 MPLS 테이블이 필요
- 20비트의 레이블만을 가지고 경로를 결정하기 때문에 속도가 빠름
- 유연함(ip는 목적지의 주소만 사용하지만 여기서는 두개다 사용)
- RSVP-TE 프로토콜을 사용
MPLS and IP paths
- IP 라우팅 :

- 목적지가 같으면 경로가 항상 같음(목적지 기반 라우팅)
- MPLS :

- 같은 목적지와 라우터를 거쳐도 출발지에 따라서 경로가 다를 수 있음
- 트레픽 분산 가능
- MPLS 내부에서는 IP주소를 사용하지 않는다.
- fast reroute : 링크에 문제 생겼을때 대안을 미리 작성해놔서 알고리즘을 재수행 할 필요 없이 빠른 대처가 가능
MPLS forwarding table

- R1에서 A로 보내고 싶으면 6번으로 보내라고 함
- R2에선 8번으로 보내면 6번으로 보내준다고 알려줌
- 목적지 기준에서 보는게 편함
Data center network
- 가까운 거리에 수많은 호스트를 모아놓은 형태(서버 같은 곳)
- 트리 구조로 되어있음

- load balancer 가 호스트의 정보를 가지고 있다가 요청이 들어오면 한가한 호스트를 골라 일을 시킴, 요청을 받고 결과를 보내주는 역할을 함
- 호스트간에 정보를 교환해야 하는 경우가 많이 생김

- 여러 링크를 구성해서 트래픽 집중을 줄이고 어떤 링크에 문제가 생겨도 다른 링크를 통해 전송 가능(안정성)
- 경로가 여러개이기 때문에 목적지에 대한 총 rate가 높아지는 효과
- ARP전송할때는 모든 호스트에 전송해야할 수도 있음
a day in the life of a web request
-> 웹 리퀘스트 과정 종합
- 시나리오 : 노트북 하나로 google.com 웹페이지 요청
- DHCP를 사용해서 노트북의 IP 주소와 첫 라우터의 IP 주소, DNS정보를 얻음, 이 과정에서 스위치는 self-leaning으로 MAC/IP 매핑
- 먼저 라우터로 보내야 하는데 아직 라우터의 MAC 주소를 모름 -> ARP 사용
- 라우터로 프레임 만들어서 보냄

- 라우터에서 DNS로 보냄
- DNS는 프레임을 분석해서 클라이언트에게 IP주소를 보내줌
- 클라이언트는 받은 IP주소를 활용하기 위해 TCP커넥션을 만들어야 함
- TCP 커넥션이 만들어지면 HTTP request/reply
- HTTP response받으면 끝