Link layer 서비스
Framing
- 헤더와 트레일러를 붙여서 데이터 그램을 링크레이어 단위인 프레임으로 만드는일
Link access
- 백본 망처럼 쉐어해서 쓰는 무선 링크
- MAC 주소(근처에 있는 노드들을 보내는 주소)

Error detection, correction(EDC)
- 에러가 발생했을 때 비트를 뽑아내고 EDC 값과 비교를 해서 에러가 있으면 => 패킷 버려짐. 없으면 IP레이어로 올려줘
- EDC는 100퍼 신뢰되지는 않아.
- EDC 사이즈가 길수록 redundancy가 많아져서 EDC하기 쉬워져, 에러 찾기 쉬움. But 전송 성능은 떨어져
- redundancy가 있어야함(correction할때) => 그걸 복구하기 위한 추가 정보가 있어야..
Parity checking
single bit parity

- 오직 detection만 할 수 있음
- 에러가 있음을 알려줌. 전체parity에서 1의 개수는 짝수개가 되야함. => parity bit로 이걸 맞춰줌
2차원 bit parity

- detection, correction까지 가능함.
- 원리는 위랑 똑같음.
checksum 방법
- 에러체크 하는 함수의 총칭
- 메세지를 첵섬 함수에 넣음 => 함수의 output이 계산됨.
- 따라서 메세지를 보낼때 메세지+checksum 값을 보내
- 리시버는 데이터를 받고, 첵섬에 받은 메세지를 넣으면 checksum value가 나와. 같으면 에러x 다르면 에러 o 라고 인식
checksum in UDP
- 모든 데이터를 다 더해. 그 후 마지막에 캐리(자리 수올림) 부분을 꽁무늬에 더해. => 최종 더한 값이 나와. => 이 값에 1의 보수를 취해 => 16비트 checksum나옴. 데이터를 checksum 필드에 넣어.
- receier는 이를 받고 XOR을 해. 1은 0이랑 XOR해서 1 이 나오고, 0은 1이랑 XOR해서 1이 나와. 따라서 16비트가 다 1이면 checksum이 통과. 하나라도 0이 나오면 checksum 실패.
Multiple access protocol
- 한번에 여러개의 데이터가 들어왔을때의 메뉴얼
- 전제: 싱글 쉐어드된 브로드캐스트 채널이 있어야함
- 노드들이 채널을 공유중일때 어떤 노드가 먼저 데이터를 보낼지 정하는 방법
- 채널 쉐어링에 대한 제어메세지를 주고 받을때도 쉐어드된 상태에서 보내져야함.
desirable characteristics
- 하나의 노드가 데이터를 전송할때, R의 비율로 보내져야함.
- M개의 노드가 쉐어중이라면 R/M 비율.
- Fully decentralized:
스페셜 노드 넣기 X(교통경찰을 전지역에 넣는건 바람직 하지 않아)
시간 동기화도 타이트하게 X(네트워크 시간동기화도 넘 어려워;)
channel 파티션
TDMA(channel 파티셔닝 Mac 프로토콜)
- 데이터 안보내는 애들도 슬롯이 할당되서 비효율적. But "시간"을 보장해야하는 경우에는 가끔 쓸만함.
FDMA
random access
- 채널 쉬고 있으면 노드들이 데이터좀 씀. 눈치게임하다가 충돌 발생하면 딜레이 쉬었다가 다시 눈치게임
- 두개 이상 노드가 전송되면 => 충돌
slotted ALOHA(거의 안쓰임)
- 모든 프레임이 같은 사이즈라고 가정. 데이터를 보낼 수 있는 타임슬롯을 공평하게 잘라.
- 그 슬롯을 온전하게 사용가능.
- 모든 노드들은 동기화 ㄱㄴ
- 노드가 새로 보내야하는 프레임이 있다면, 다음슬롯에 보내야한다고 결정 => 충돌 발생하면 재전송. => 재전송할 슬롯을 정하는게 확률로 선택

노드 1,2,3 가 충돌이 안나야 S(성공)함. 아무도 선택안하면 E(empty). 둘이상이 선택하면 C(충돌) 총 9개의 타임슬롯이 소요됨
장점
- 내가 쓸 수 있는 타임슬롯이 할당되면 온전히 노드 혼자 씀. 전송 rate 풀차지로 쓸 수 있음.
- 충돌 감지되면 그 다음 슬롯을 선택할 확률을 p로 설정하는 심플함..
단점
- 충돌 자주발생.
- 비어있는 타임슬롯 => 대역폭 낭비
- 시간 동기화가 힘듬..
ALOHA
CSMA(carrier sense multiple access. 노빠꾸)->알로하 대안,
- 보내기전에 누군가 쓰고있는지 들어보자~, 대화할때 끼어들지 말기. 아무도 말 안할때 말하기.
- ex) 데이터 쓰기전에 채널을 senseing해서 상태 감지하고 누가 쓰고있으면 transmission 지연시킴.
- 충돌 발생

센서에 감지되지 않아서 빨간색도 보냈는데...

둘다 노빠꾸로 전부 보내기 시작하니까 두명이 채널 다 독점함. => 에러인데 채널은 다차지해서. 낭비!
CSMA/CD(+충돌 발생하면 보내지말자. 겸손한 사람)
- 충돌 발생해도 무대뽀로 다 보내지말고 발생하면 전송 멈추자!
- wired LAN에서는 쉬워 (쉐어드 채널이기 때문에 시그널 쉽게 보여) but, wireless 에서는 어렵..
- 무선랜에서는 누가 쓰고있는지 몰라(신호약한게 멀리있어서인지 진짜 약한건지 등) => csma/ca 방법이 대안
방법
- NIC(네트워크 인터페이스 카드) 를 네트워크 레이어로부터 받음. => 프레임 만듬
- NIC 가 채널을 센싱함. idle 하면 전송시작. 바쁘다면 채널이 idle 될때까지 기달.
- NIC 데이터 보내는 도중에 다른 전송이 감지되면 지금 보내는 전송을 중단함.
- 중단이 일어나면 NIC는 바이너리 backoff상태로 감. 랜덤시간을 기다린다음에 재전송함.(참고로) 충돌이 많을 수록 backoff타임이 길어짐)
taking turns
투표(polling) protocol
- 서로 번갈아가면서 데이터씀. 공평하지만 비효율적.
단점
- 폴링 오버헤드
- latency 있음
- 마스터 노드에 에러가 발생하면 slave들이 통신 못해..

token passing
- 토큰을 계속 옆으로 돌려서 발언권 갖고 보낼꺼 있는 사람 보내~
단점
- 토큰 오버헤드
- latency 있음
- 마스터는 없지만, 하나가 장애가 발생하면 옆에 애한테 토큰 못전달해줌..

LANs(Local Area Network)

MAC 주소
- 로컬하게만 사용됨
- 한 인터페이스마다 고유함.(주민번호 느낌) , 반면 ip는 바뀔 수 있는 우편번호
- portability 해서 따로 막 세팅 안해도 됨. 변경 안되거든
- 48비트. 앞에 세개는 제조사번호

ARP(address resolution protocol)=상대방 맥주소 알아오는 방법
-
맥주소 알려달라고 크게 소리쳐야해 => 브로드 캐스트

-
네트워크 레이어에서는 ip로 ,데이터 링크에서는 MAC로 통신해서 두개의 정보가 필요
=> ARP 테이블에 저장 (ip 주소, Mac, TTL) TTL은 매핑시간(ip는 변함으로 일정 시간 지나면 지워버려도돼)

-plug-and-play 특징 (특별한 설정없이 동작가능)
같은 LOCAL 일때 방법
- B의 맥주소를 알려면 B의 ip를 넣은 ARP 패킷을 만들고 dst맥주소를 FFFFFFF(브로드캐스트주소) 로 놓고 막 소리지름.
- 주변에서 B가 소리 듣고 A한테 자기 MAC 알려줌
- 정보 받은 A는 ARP 테이블에 기록하고, TTL 시간동안 유지
다른 LAN 일때 방법
- 전제) A는 라우터 R의 맥주소, ip를 알고있음
- 데이터그램에 B ip주소 넣음. B 맥주소는 모르니 라우터의 맥주소 넣음.
- 라우터 R까지 데이터가 보내짐.
- R은 B의 맥주소를 알고 있음으로(이미 ARP 테이블 있을거임) B의 주소로 보냄

Ethernet(wired LAN의 표준)

- dst 에는 상대방 맥주소, src 주소는 나의 맥주소, type에는 ip를 의미하는 index.. 등
특징
connectionless, Unreliable
- 핸드쉐이크 이런거 없음. 데이터 링크에서는 커넥션 필요없어. reliable 하지않아
이건 상위레이어에서 ACK NAK 하는거.
MAC 프로토콜
Switches
특징
- 받는 패킷을 다른쪽 링크로 포워딩해줌.
- 인풋포트에서 데이터가 오면 아웃풋 포트로 인터페이스 방향을 결정해서 내보냄.
- 즉, 패킷을 받아서 디렉션만 해줌
Transparent(투명한)
- 스위치는 잘 안보이기때문에 스위치가 몇개있는지 알기 어려움
plug-and-play
- self- learning이 있어서 연결만하면 얘네 알아서 설치됨
기능
필터링
- 프레임을 어디로 보낼지 혹은 드롭시킬지를 결정하는것
포워딩
- 필터링에서 이걸 보내야한다고 하면 output 포트로 보냄
다중 동시 통신
- 각 링크마다 버퍼가 있어서 충돌이 발생 X => 스위칭 아무때나 일어날 수 있어
스위치(L2) VS 라우터

라우터
- "네트워크" 디바이스의 헤더를 봄 => ip주소 봄
- ip주소 기반으로 데이터를 보내는거 결정
스위치
- "링크레이어"까지만 보기 때문에 MAC주소를 봄
- MAC 주소 기반으로 데이터 보내는거 결정
single broadcast domain
- 관리자의 데이터를 밑에 애들도 볼 수 있어서, 보안문제!
- 효율성 이슈
=> 대안으로 VLAN
VLANS(Virtual Local Area Network)

가상으로 브로드캐스트 도메인을 나눠주는 기술
- 스위치가 두개인거처럼 나눌 수 있음
- 서로 다른 VLAN 영역끼리 통신하려면 라우터를 통해서 해야함 => L3 스위치는 알아서 지원함
- 두개의 IP 대역이 달라짐. => 두영역의 subnet이 아예달라짐
Trunk port (빨간선으로 스위치 여러개 연결)

- 스위치를 작은걸 사게되서 같이쓰게되면 인터페이스를 또 나눌 수 있음.
- 빨간 선을 통해서 서로 통신가능.
- 같은 색끼리 통신할 때는 일반 이더넷 통신 => MAC만 보면됨.
- 다른 색 통신은 서로 IP대역이 달라서 라우팅해야함.
지금까지 레이어 요약

1. DHCP
- 내 노트북을 학교 들고왔으면 학교에 있는 DHCP서버로 부터 IP주소 할당받음.
- 외부로 나가는 웹주소의 라우터 주소를 알아야함.
- ARP를 통해 외부로 나가는 MAC 주소 알게됨.
- 이제 DNS패킷을 라우터를 통해 dns까지 보낼 수 있게됨
- DNS한테 우리가 접속하고자하는 서버의 IP주소(구글)를 받아옴
- 핸드쉐이크 하기 위해서 TCP syn 패킷 보냄
- 구글은 이걸 받아서 syn ACK 받는 3way 핸드쉐이크 함.
- Tcp 커넥션이 맺어짐.
- 웹사이트의 페이지를 받기위해 HTTP 요청 보냄
- 서버가 요청을 수신해서 http response 보냄
- 중간에 패킷이 유실되면 TCP 가 알아서 해줌