Link layer는 데이터그램을 한 노드에서 물리적으로 인접한 노드로 전송하는 책임을 가지고 있다.
이는 링크상에서 데이터그램을 전달하여 노드 간의 통신을 가능하게 한다.
다양한 링크 프로토콜을 통해 다른 링크에서의 데이터 그램이 전송된다.
예를 들어 첫 번째 링크에서는 wifi , 다음 링크에서는 이더넷을 사용할 수 있는 것처럼
각 링크 프로토콜은 다른 서비스를 제공한다.
링크 프로토콜은 링크 계층에서 사용되며, 각 링크에서의 특성과 요구사항에 따라 다른 서비스를 제공할 수 있다.
여행을 예로 들면
여행객은 데이터그램에 해당하며, 각 이동단계(버스, 기차, 택시)는 통신링크를 나타낸다.
각 이동 방식은 링크 계층 프로토콜에 해당하며 여행사(안내 가이드)는 라우팅 알고리즘에 해당한다.
Link layer services
서비스에는 두 가지 Framing, link access가 있다.
link access라고 하는 기능이 가장 기본적인 service다.
datagram을 frame 단위로 캡슐화해서 head와 trailer가 붙고 frame으로 만들어주는데 이걸 Framing이라고 한다.
link layer에서는 error 체크를 위해 trailer를 붙인다.
그래서 frame은 datagram + header + trailer이다.
MAC (medium Access Control)
mac주소는 IP 주소와 다르다.
mac 주소는 local 한 개념이고, IP 주소는 global 한 개념이다.
예를 들면 택배를 대한민국 전국에 보낼 때 대한민국 -> 무슨 시 -> 무슨 구 -> 무슨 동과 같이 주소가 필요한데 이것을 IP주소라고 생각하면 되고, Mac 주소는 대구 내 같은 아파트 단지 내에서 편지를 주고받을 때는 몇 동 몇 호만 적어주면 될 것이다.
이러한 내부 네트워크 망의 주소를 MAC 주소라고 생각하면 될 것 같다.
링크 계층에서도 신뢰성 있는 전송을 보장하지만, 네트워크에서의 신뢰성을 전송과는 조금 다른 느낌이다.
기본적으로 network는 end-to-endwlaks, link계층에서는 인접한 두 개 node 간에 전송이다.
링크계층에서의 신뢰성보장은 데이터의 정확성과 무결성을 보장하는데 도움이 된다.
네트워크계층에서의 신뢰성 보장은 전체 네트워크 경로를 통해 전송되는 데이터의 신뢰성을 보장한다.
서로 보완적인 역할을 수행하며, 데이터의 정확성과 신뢰성을 전체적으로 보장하기 위해 사용된다.
framing, link access 말고 추가적인 서비스가 있다.
flow control
- 송신 측과 수신 측 사이의 대역폭이 정해져 있는데 그것을 초과하지 않도록 조절하는 기능
error detection/correction
- 에러를 감지하며, 효율성을 위해 correction까지 수행
half-duplex and full-duplex
- 데이터를 보내는 방법이다.
- half는 양쪽 node 중에서 한쪽이 보내면 한쪽은 듣기만 하는 것->양쪽이 서로 보낼 수 없다.
- full는 양쪽이 보내도 서로 받을 수 있다. -> 비용이 더 비싸다.
Interfaces communicating
송신 측
- 수신 측에게 frame을 보낸다.
- datagram을 frame으로 캡슐화하고, 에러를 감지할 수 있는 기능을 추가해서 header나 trailer에 집어넣어서 보낸다.
수신 측
- header나 trailer를 보고 error가 있는지 없는지 보고, 신뢰성 있게 왔는지, flow control에 대한 부분을 확인해서
문제가 없을 경우 datagram을 위 계층에 전달
Error dection
EDC : 오류 감지 및 수정 비트
D : 오류 검사로 보호된 데이터로 헤더 필드를 포함할 수 있다.
네트워크 계층에서 내려온 datagram에 EDC라는 비트를 추가한다.
받는 쪽에서는 EDC'정보를 가지고, D와 D'가 적절한지(error검사) 계산하고, error가 생겼다면 정정할 수 있는지 등을 EDC를 통해서
판단할 수 있다. EDC를 통해서 error detection을 할 수 있지만, 100%는 아니다.
Parity checking
single bit parity
EDC를 구현하는 가장 간단한 방법이다. 보내려고 하는 d만큼의 data bits가 있고, 뒤에 추가로 parity bit를 추가해서
전체 1의 개수를 세서, 짝수개가 되도록 조절하는 것이다.
만약 d의 bit에서 1의 개수가 홀수면 1을 붙이고, 짝수면 0을 붙인다.
만약 전송하는 과정에서 비트가 변질되어서 1의 개수가 홀수라면 오류가 발생한 것이라고 판단한다.
근데 여기서 1의 개수를 짝수로 설정하던지 홀수로 설정하던지는 약속이다.
이 방법의 단점은 한 비트 오류만 감지 가능하고, 오류 위치 식별이 불가능하다이다.
따라서 두 개 이상의 비트 오류가 발생하는 경우에는 감지하지 못하고, 오류 위치 식별이 불가능하기 때문에
오류가 발생한 비트를 수정할 수 있는 방법이 없다는 단점이 있다.
따라서 다른 방법이 등장한 게
two-dimensional bit parity
행렬의 형태로 구현했다.
이것은 1의 개수가 짝수개가 되도록 한다.
수신 측에서 행렬을 분석해서 error를 찾을 수 있다. 그리고 바르게 correct도 할 수 있다.
그러나 error가 두 개 이상일 때 동작이 안된다.
행과 열의 변화가 쌍을 이루게 되면, error detecting이 불가능하다.
checksum
간단하게 설명하면
송신 측과 수신 측에서 계산된 체크섬을 비교해서, 동일하지 않으면 오류가 감지되고,
동일하면 오류가 감지되지 않았다는 것이다. 하지만 이것도 오류가 있을 수 있다.
Cyclic Redundancy Check(CRC)
앞의 방식들보다 더 강력하게 error detection이 가능하다.
D: data bits
G: bit pattern , 길이가 r+1 bit
R이라고 하는 CRC bits가 붙는다.
이 CRC bits를 잘 인코딩하게 되면 앞의 D에 error가 있는지 없는지 잘 detection 할 수 있게 된다.
CRC의 예제이다.
여기서 D는 보내야 하는 원본데이터를 의미하고 예제에서는 101110이다.
G는 bit pattern으로 송수신자 모두 알고 있는 값이다.
원본데이터를 나눌 때 사용된다.
CRC보다 1bit 길다고 위에서 다 설명했다.
G가 4비트이므로, CRC는 3비트이다.
우리는 D + 3 bit로 계산을 시작한다. 그니까 총 9비트가 될 것이다.
나눗셈을 진행할 때는 뺄셈이 아닌 XOR연산을 해서 같으면 0, 다르면 1로 한다.
여기서 에러가 없었다면, 나머지 R이 0이 되어야 한다. -> 0이 아니면 error
요약
- 링크 레이어는 인접한 두 노드의 신뢰성 있는 통신을 보장해 준다.
- 기능에는 frame, link asses, flow control, error dection/correction이 있다.
- 에러를 감지하기 위해서 parity bit를 추가로 사용하는데, 이는 완벽한 에러 탐지 방법은 아니다.
- checksum도 완벽한 탐지 방법은 아니다.
- CRC는 위의 방법들보다 에러 탐지 능력이 강하다.
- 나머지가 0이면 no error, 0이 아니면 error이다.
'Computer Science > Network' 카테고리의 다른 글
[컴퓨터망] LANs - ARP (0) | 2023.06.14 |
---|---|
[컴퓨터망]- Multiple Access Protocol (0) | 2023.06.14 |
[컴퓨터망]-network managment, configuration (0) | 2023.06.14 |
[컴퓨터망]-ICMP(Internet Control Message Protocol) (0) | 2023.06.14 |
[컴퓨터망]- SDN control plane (0) | 2023.06.14 |