여러 사람이 매체를 공유하며 사용할 때 생기는 문제(방해, 충돌 등)들을 해결하기 위한 방법에 대한 규정
L2는 다음 두 부계층으로 나뉜다.
ㆍDLC(Data Link Control sublayer)
흐름 및 오류를 제어하는 부분
ㆍMAC(Media Access Control sublayer) :
실제 매체에 접근하는 것을 제어하 부분
L2에서 서비스 개발과 관련해 알아야 할 부분이라고 한다면, 단연 MAC 계층에 관한 부분일 것이다.
MAC 계층에서 다중 접근을 제어하는 프로토콜에 관한 내용을 살펴볼 것이다.
많이 사용되는 두가지- CSMA/CD(유선랜), CSMA/CA(무선랜)- 에 관해서 알아볼 것임.
둘다 Random-Access Protocol에 속하며, 어느 타임에 매체에 접근할지를 Random적으로 결정한다는 의미이다.
◆ [L2]Multiple-Access Protocols - CSMA/CD
유선LAN(이더넷)에서 사용. IEEE 802.3번 기술. "둘이 동시에 전송하면 둘다 즉시 손 떼고, 랜덤하게 기다렸다가 다시 보내는 방식"
< 동작 원리 >
메세지를 보내기 전에 누군가 매체를 사용하고 있는지 검사하다가, 안 쓰는 걸 알게되면(idle 상태) 보내기 시작한다.
전송 도중 충돌이 난 된 경우, 즉시 전송을 중단하고 jamming signal을 보내 충돌이 났음을 확실히 알린다.
이후 랜덤 변수를 사용해 일정 시간 기다렸다가 다시 시도한다.
단, 어느 정도 재전송을 시도했음에도 끝내 안되면 전송을 포기한다. (모두가 끊임없이 재전송만 시도하면 결국 다 죽기 때문)
< 서비스 개발 시 주의사항 >
이런 기술들은 시간이 지남에 따라 바뀐다!!! 케이블 가격이 떨어지고 광케이블이 등장하면서 한 매체에 두대 이상의 컴퓨터를 연결하는 것이 일반적이지 않게 됨. 광케이블은 너무 빨라서 충돌 즉시 멈추고 이런거 없다. 걍 바로 충돌난 상태로 보내지는 것. 따라서 유선인 경우 이런 CSMA/CD에 따른 에러 검출은 거의 유명무실해짐.
HTTP3에서는, 기존에 쓰던 TCP 대신에, 에러 검출을 안하는 UDP를 HTTP밑에다 넣음. 서버실 안에서 한 줄에 여러대의 컴퓨터를 붙이는 행위는 더 이상 존재하지 않기 때문에, 컴퓨터 ↔ 컴퓨터 사이에서 물리적인 에러가 발생할 확률은 굉장히 작다고 판단했기 때문. 그래서 L2나 L4의 에러 검출 기능을 확 줄임. → 전송 속도가 빨라짐!!
CSMA 방식에서는 최대 횟수까지 반복한 후에, 안되면 그냥 버린다. 이말은 즉슨, 어플리케이션에서 보냈다 해서 무조건 전송이 성공한다는 보장은 없다는 의미. 아래 계층의 동작에 따라 버려질 수도 있는 것. → 서비스 개발시에, L1이나 L2가 신뢰할 수 있는지 확인하고, 신뢰성있는 sw를 만들기 위해 위 계층에서 보강을 해야 할 것이다.
◆ [L2]Multiple-Access Protocols -CSMA/CA
무선 LAN (WiFi)에서 사용. IEEE 802.11번 기술. RTS, CTS : "둘이서만 얘기하고 싶으니, 둘이서 얘기하겠다고 소리를 질러 알리자!"
< 동작 원리 >
CSMA/CD와 비슷하나, 매체가 유선이 아닌 무선이므로 살짝 달라지는 부분이 있음.
A가 B한테 보내고 싶어도, 같은 방 안에 C D 가 있으면 어쩔 수 없이 걔네도 들을 수 있을 것.
그래서 RTS, CTS 신호를 사용해 내 목소리를 들을 수 있는 모두가 듣도록 소리를 지른다.
A >>> "B야 나 너랑 말할 게 있어!!!! (Request To Send)"
B >>> "알겠어 A야 나한테 보내!!!!! (Clear To Send)"
그러면 A의 RTS 신호나 B의 CTS 신호를 들은 C나 D는 둘의 대화에 끼어들지 않을 것임. (NAV 상태)
→ 무선 매체 특성상 충돌을 감지하기는 힘드니까, 애초에 최대한 조심해서 보내자~ 라는 것.
제대로 받았으면 받았다는 의미로 ACK도 소리지름.
이후로 둘 사이 별 얘기가 안들린다? 그러면 그제서야 보낼 거 있으면 보내는거임.
얘도 어느 정도 기다렸음에도 끝내 안되면전송을 포기한다.
< 서비스 개발 시 주의사항 >
무선랜은 동시 사용자가 많아지면 성능이 저하(제때 못 보내니 전송 속도 저하)되다가, 쩔수없이 불능상태에 들어감 L1 전파 신호 불량이나, L2 충돌시 손실이 발생하기도 함. 무선랜 장비는 많이 있을수록 좋다? ㄴㄴ아님. 가까운 무선랜 AP간의 간섭을 일으킴.
Best Effort이다. 충돌 회피를 위해 최선은 다하지만, 충돌이 날 수도 있는거임. 또 너무 많은 사용자로 인해 결국 전송을 못할 수도 있는 것. → 서비스 개발시, L1/L2의 특성을 이해함으로 서비스 품질을 증가시키도록 해야 한다.
◆ [L3] Packetizing 및 Routing& Forwarding
L3의 큰 역할로는 두가지가 있다.
Packetizing :source 컴퓨터의 ip 주소, destination 컴퓨터의 ip 주소 등을 포함해 패킷을 만든다.
Routing & Forwarding :source와 destination 사이에 수많은 컴퓨터들이 있을 건데, 어떤 길로 어떻게 전달해야 최종적으로 destination에 도달할 수 있을지 결정하고 패킷을 보내야 한다.
< 라우터에서 IP 패킷을 처리하는 방법 >
라우터는 패킷을 보내는 길을 결정하는 네트워크 장치를 의미한다.
라우터는 패킷을 받아서, destination ip 주소를 보고 어디로 보낼지를 라우팅 테이블을 기반으로 결정함.
이때 패킷 단위로 그때그때 최적의 경로를 결정하기 때문에, 도착하는 메세지의 순서가 바뀔 수 있다!
< 서비스 개발 시 주의사항 >
메세지의 순서가 바뀔 수 있음 → 어플리케이션에 짤 때 순서가 중요한지 고려하고, 중요하다면 윗 계층에서 재구성하도록 서비스를 짜야 한다.
여기서도 패킷이 버려질 수 있다는 점을 유의해야 한다. 예를 들어 여러 패킷이 라우터로 몰리는 현상이 발생할 수 있다. 그러면 버퍼를 두고 대기를 해야 하는데, 만약 버퍼 사이즈가 작아서 안들어가면 패킷을 그냥 버려버린다.
◆ [L3]IPv4 Addressing
IPv4 Address는 32비트를 사용하는 숫자로, 컴퓨터를 식별하는 기본적인 주소값이라고 볼 수 있다.
각각의 바이트들을 점으로 찍어서 구분함.
점 찍은 십진법(dotted decimal)로 표현하면 우리가 알기 쉽게 표현됨 ex) 192.168.xxx.xxx
십육진법은 프로그래밍할 때 많이 사용한다.
IP address는 prefix와 suffix로 나뉜다. - prefix는 해당 컴퓨터가 위치한 network id이고, suffix는 각 컴퓨터의 user id
CIDR : ip 주소에서, 어디까지가 prefix 길이(네트워크 id 길이)인지 알려준다.
◆ [L3] NAT(Network Address Translation)
네트워크 주소 변환 장치.
< 필요한 이유 >
IPv4주소는 최대 2³²개 까지만 나오기 때문에, 매우 부족하다. 그런데 통신해야 되는 컴퓨터들은 엄청 많음.ㅜㅜ → 인터넷 어디서나 접속할 수 있는 공인IP가 아닌, 로컬 네트워크 내에서만 의미를 가진 사설IP를 도입하여 통신하도록 한다.
< 동작 원리 >
한 네트워크 안에 있는 컴퓨터들 끼리는 사설IP만으로 통신할 수 있다.
NAT는 자신의 네트워크 내부에 있는 Source 컴퓨터가 외부로 패킷을 보낼 때, 해당 패킷에 붙은 사설 주소 정보를 외부와 통신 가능한 공인 주소로 매핑하여 바꿔준 후 내보냄.
※ 이때 DHCP 서버를 통해, 필요한 애가 생기면 (사설)IP 주소를 주고, 필요 없어지면 회수하는 방식을 사용함.