컴퓨터 네트워크(3), DLC Layer

2022. 4. 28. 16:22강의 내용 정리/컴퓨터 네트워크

728x90
반응형

DLC Layer

Physical layer에서 에러가 발생했을 때 어떻게 검출하고 복구할지에 대한 Layer


1. DLC Basic

- MAC에도 에러 검출이 일부 있었지만 physical인 매체를 어떻게 복수의 노드들이 공유할지에 대한 내용이 주였음

- 에러 검출 및 복구를 제어하고 이를 에러 컨트롤이라 한다.

- 프레이밍과 플로우 컨트롤, 에러 컨트롤 등의 기능을 한다.

- 플로우 컨트롤(흐름 제어): 보내는자가 받는자의 상황을 고려해서 데이터를 주고 받는 흐름과 속도를 조절한다.

- 프레이밍: 메세지를 만듦

 

1) Framing

- 보내는 정보는 형태를 갖춰야하기에 layer3가 보낸 정보에 추가적으로 DLC가 넣어야할 정보를 넣고, 사이즈 등을 조절한다.

- 일정 크기나 일정 기준으로 나눈다.

- 보내는 쪽의 DLC 주소와 받는 쪽의 DLC 주소의 정보 등도 들어가야한다.

 

- 송신단에서 수신단으로 0과 1을 보낸다.

-> 보내는 정보를 바이트 단위로 처리할건지, 비트 단위로 처리할 건지가 가장 큰 차이점이다.

- character-oriented protocol: 아스키코드

- flag가 있고, header와 trailer가 존재한다.

 

2) physical layer

사용자가 만들어낸 정보를 주고받지 않아도 끊임없이 정보를 주고받는 계층


- 0과 1을 수신단에 보낼 때 보내는 선(구리선, 동선 등등)에 따라 인식되는게 다를 수 있기에 값을 판단하기 위한 것을 가지고 있어야함 -> 수신단이 0과 1을 판단하기위한 레퍼런스를 얻기위해 계속 정보를 주고받음

- 이때 실제 데이터를 송신하는 경우에는 수신단에서 데이터가 송신되는 중이라는 것을 판단해야하는데 이를 위해 Flag를 쏨(정해진 패턴이 있음) -> 이 이후에는 데이터를 받는다는 것을 인식 -> 다시 flag가 잡히면 메세지의 수신이 끝남

 

3) byte stuffing and unstuffing

- flag를 0과 1의 특정 패턴으로 사용했는데 사용자가 보낸 데이터에 flag와 동일한 패턴이 들어갈 수 있음 이때문에 '이는 flag가 아닌 데이터다'라는 정보를 알려줘야함. 이게 stuffing임. 해서 ESC라는 이스케이프 시퀀스인 ESC의 코드를 붙여줌 

- ESC 또한 데이터 안에 들어간 것일수도 있음. 이 경우에도 ESC를 앞에 적어주면 됨. 

- 수신단에서는 ESC가 있는 것을 지워서 데이터로 인식하는 과정이 unstuffing이다. 

- 이를 character data type으로 처리함

 

 

4) bit stuffing and unstuffing

- flag가 나타나지 않도록 하기 위해 1이 5개가 나오면 무조건 5개만 작성하고 0을 추가함. 따라서 1이 5개, 6개가 나온 경우 모두 0을 넣음

- 수신단에서는 이를 인식해서 원래 데이터로 바꾸는 것이 unstuffing임

- 과거에 비싼 통신 링크를 최대한 효율적으로 사용하기 위해서 다음과 같은 작업을 함

- 해당 예시에서는 flag가 01111110임

 

 

5) Flow and Error Control

- 큰 사각형은 노드, 장치를 의미한다.

- Flow control: 흐름 제어로서, 너무 빨리 보내지마! 혹은 지금보다 더 빨리 보내도 돼!, 에러 나왔어!와 같은 피드백을 줌

 

6)  connection

- 왼쪽과 오른쪽을 연결한다.

- 2계층부터는 logical한 연결을 함. 1계층은 physical한 연결을 한다.

- 2계층에서는 connectionless or connection-oriented 방식이라고도 할 수 있음 -> 연결을 한 뒤 통신할지, 연결을 하지 않은 뒤 통신할 지 나눌 수 있음 // 둘 다 데이터를 주고 받는 것은 명백함

 

(1) Connection-Oriented

- 데이터를 주고받기전에 커넥션을 뚫고, 데이터를 주고받을 때도 이를 유지하기 위한 작업들을 진행하고, 데이터를 다 보내면 커낵션을 끊는다. 이때 논리적, 가상의 커낵션을 만드는 방식은 연결설정, 연결유지, 연결해제까지의 과정을 거쳐야함

- 플로우 컨트롤과 에러 컨트롤을 하는 경우는 대부분 Connection-Oriented인 경우임

 

(2) Connectionless

- 보내고싶을 때 보내기에 상대방을 크게 배려하지 않는다.

- 플로우 컨트롤과 에러 컨트롤을 거의 하지 않는다.

 

 


2. Simple Protocol

논리적으로는 맞지만 자연계에는 존재할 수 없는 프로토콜로 이론적 베이스가 되는 프로토콜

 

- 이는 이후에 있는 프로토콜을 설명하기 위한 프로토콜로서의 의미가 있다.

- flow control과 error control을 하지 않는다.

- 송신단이 보내고 싶은 것이 있으면 바로 전송하고, 수신단은 잘 받는다.

- logical link를 통해 receiving node에서 받는다.

- 에러가 없다는 것을 가정한다.

 

 

 

1) FSM for the simple protocol

 

- ready 상태에서 Packet came from network layer를 이벤트로 칭하는데 해당 이벤트가 뜨면 프레임을 만들어서 보냄.(action)

- start: 프로그램이나 통신장치가 최초로 시작될 때 ready 상태로 들어간다.

- 유한 상태 머신(오토마타), 상태 천이도라고도 불린다.

cf) 위의 예시 정도로 소프트웨어를 설계한 문서로 친다. -> sending과 receiving  node만 있는 것을 시스템 설계도라고 함

 

 

2) Simple protocol의 운영 레더 다이어그램

- 시간이 지날수록 위에서 아래로 내려온다.

- network와 data-link layer가 존재하는데 이처럼 layer나 하드웨어를 그리는 것이 블럭 설계도이다.

- 이는 시간에 따라 layer나 하드웨어들이 메세지를 주고받는 것을 그린 그림이다.

- 메세지 시퀀스 차트(MSC)라고도 부른다.

- 동일 노드에 있기에 네트워크 레이어와 데이터 링크 레이어의 속도 차이는 거의 없다.

- 단 프레임이 전송될 때는 시간이 조금 걸린다.

- 수신단에서는 받은 프레임을 벗기고 네트워크 레이어에 패킷을 전달한다.

 

 


3. Stop-and-Wait Protocol

에러 검출 및 흐름제어 기법이 반영된 프로토콜


- simple protocol과 같이 하려고 했으나 MAC 계층에서 사람이 많이 사용하면 에러가 발생하는 것과 같이 에러가 발생하면서 등장한 protocol임 

 

 

1) 에러 정의 및 검출

보낸 메세지가 변질된 경우: 데이터 외의 추가적인 정보를 줘서 이를 확인하여 검증(CRC)

보낸 메세지가 없어진 경우: 송신단에서 보냈는데 이를 파악못함 -> 수신은 모름 -> 송신단에서 알 수 있는 에러

 

- node는 network layer와 data-link layer가 존재한다.

- Sending node에서는 CRC라고 하는 코드를 섞어서 보낸다.

- Receiving node에서는 CRC를 계산한 뒤, 이를 상대방이 보낸 데이터와 비교해 맞는지 확인하고 잘 맞으면 ACK를 보낸다.

- Sending node에서는 ACK를 확인하여 CRC를 확인하여 잘 맞으면 송수신이 완료된다.

 

2) 에러 검출

프로세스

- time-out: 타이머의 시간이 지나 다시 보냄

 

- Receiving node에서 CRC를 계산하고 받은 CRC를 비교해서 다른 경우에는 통상적으로 에러가 난 프레임을 버리지 않고 ACK를 보내지 않는다. Sending node에서는 이를 확인하고 일정시간동안 ACK가 오지 않으면 에러로 판정한다. (타이머)

- 타이머가 켜질 때는 송신단에서 보낸 메세지가 도달했는지 확인하고 도달하지 않았으면 한번 더 보낸다. 결국 Sending node에서 메세지를 보내고 stop-wait하여 flow control을 한다.

 

 

 

3) Flow diagram

flow diagam

- flow diagam을 보면 세번째의 경우(receiving node에서 송신한 ACK가 유실된 경우)에는 패킷이 복사되기에 Network에 올라가면 안되는 패킷이 올라가는 것을 보인다.

 

 

- 위의 문제를 해결하기 위한 flow diagram로 0과 1의 번호를 매겨서 frame을 송신하고 ACK는 받은 frame의 번호보다 하나 증가된 값을 보낸다,

- Frame 번호와는 반대로 ACK를 보낸다.

- 번호를 매겨서 송신하기 때문에 중복 수신한 경우를 파악할 수 있어 위의 문제를 해결할 수 있다.

 

(1) Piggybacking

- ACK 메세지를 별도의 메세지로 보낼 수 있지만 현대는 송수신이 둘 다 가능하기에 수신단에서 데이터를 보낼 때 ACK와 함께 보냄

 

 


4. Go-Back-N Protocol

- 간헐적인 데이터를 하나보내고 기다리니까 보내는 데이터가 많아지면 전송 시간이 오래걸리고 통신 링크의 효율이 떨어지기에 나온 프로토콜

 

- 미리 정한 숫자만큼의 메세지를 여러개 송신할 수 있음

- window: 메세지를 여러개 연결한 것

- 0번부터 14번까지는 ack가 없더라도 송신단에서 메세지를 보낼 수 있음

- send window의 사이즈는 2의 m승 - 1개만큼이기에 해당 사이즈만큼 메세지를 보낼 수 있음

- outstanding: ack가 오지 않았지만 보낸 프레임(주황색)

- 메세지를 전송했지만 응답(ACK)이 오지 않은 첫번째 메세지를 Sf라는 값으로 가리킴, 다음에 보낼 프레임의 번호 Sn

- Network layer에서 받으면 Sn이 증가함

- 아래의 그림에선 0, 1, 2번의 ACK를 받았기에 Sf가 3을 가리키고 패킷이 0, 1까지 쓸 수 있도록 함 -> 자료구조의 Circular ring의 형태이며 해당 프로토콜에선 sliding window이라함

- 리시버는 버퍼가 하나임

 

링크에 메세지가 여러개 갈 수 있음(Stop and Wait에선 하나만 갈 수 있음)

 

- ACK를 받지 못한 경우에는 Sf로 돌아가서 다시 재전송을 하고 수신단에서는 3번을 받지 않기에 이를 다 버림

- 2의 m승을 메세지로 보낸 뒤 time-out이 된 경우에는 모든 메세지를 Sf부터 보내게되는데 이 경우 수신단에서 에러를 파악하지 못하고 받아들이게되기에 window size가 2의 m승 - 1으로 해서 문제를 방지함

- 통신속도에 따라 window size의 커짐, but 버퍼의 사이즈도 커지고 에러 발생 시 보내야하는 메세지의 양이 많아지기에 이를 고려하여 window size를 고려해야함

 

- 중간 프레임에 대한 ACK는 크게 신경쓰지 않기에 ACK 3을 받았을 때 그냥 정상 처리함

 

- sender의 타이머가 지나갔기에 1, 2 ,3 을 재전송함

 

 

 


 

5. Selective Repeat Protocol

- Go Back N의 window size가 커지고 처음부터 에러가 발생하면 모두 재전송해야하기 때문에 버리는 메세지가 많아지기에 이를 활용하기 위함

- window size가 2의 m-1승임

- 버퍼의 크기는 반 이하에 해당하는 만큼만 ACK 없이 전송이 가능함

- 수신단의 버퍼도 많아짐

- window size 또한 2의 m-1승임

- 에러가 나면 비우고, 잘 받으면 채움

- 선택적으로 에러가 난 것만 재전송하도록 함

 

- 수신단의 버퍼가 커진것을 볼 수 있음

- NAK는 잘 못받았다고 전달하는 경우로 메세지가 안왔는데 다음 메세지가 온 경우, 에러가 발생한 형태로 수신된 경우에는 에러가 발생한 경우이니 NAK를 수신함

- go back n과 비슷하게 윈도우 사이즈를 2의 m-1승으로 하지 않으면 에러 검출을 하지 못함

 

- 1이 안왔는데 2가 왔기에 NAK1을 보냄 -> 재전송하고 타이머를 다시 켬

- ACK4를 받으면 모두 잘 송신했다고 고려함

 

6. DLC Example - HDLC(High-level Data Link Control)

- 2계층 위에 어플리케이션이 올라간 경우에 사용

- I-frame: 데이터를 보내면서 사용할 때 User information임

- S-frame: 데이터 정보가 없는데 ACK를 보내는 경우

- U-frame: 연결설정을 할 때 사람이 동작하는 것이 아니기에 Managament information

NS: send number, 송신의 시퀀스 넘버

NR: Receive number, ACK 번호

 

- 데이터를 주고받는데 시퀀스 넘버를 보낼 필요가 없으면 u-frame으로 다 채워짐

 

- 외곽 지역은 카드 결제 시 전화를 이용하여 송수신함

- connection oriented임

 

- 데이터를 보내기 전에 SABM을 보내는 것은 연결 요청

- 이에 대한 응답으로 UA를 보내고 받으면 연결이 완료됨

- DISC를 보내면 연결을 해제를 요청하고 이에 대한 UA를 받으면 연결이 해제됨

 

왼쪽은 정상, 오른쪽은 에러 검출 및 복구

- 파란색 박스를 확인하면 됨, 

 

 

7. DLC Example - PPP

- 휴대폰에서 사용하는 기본적인 매커니즘

- 3계층 어플리케이션에 대한 것을 설정하는 역할을 함

- 네트워크 프로토콜이 잘 돌아가게해줌

- 사용자가 합법적인지, 얼만큼 지원을 받으면 되는지, 암호화를 해서 적합한지에 대한 관리 기능 등이 있음

- 에러검출의 용도는 거의 없음

 

휴대폰이 서버에 접속할 때는 무선 상으로 줄을 만들기에 connection oriented가 맞음

- dead 상태에서 시작해서 carrier가 발견되면 연결상태로 들어감

- 상대방 통신 장치와 PPP에서 옵션을 주고받고 이를 통해 적합한지 아닌지 확인함

ex) 유심카드가 불법인지, 합법인지 확인

- 합법적이면 network 단계로 들어감 -> 이후에는 3계층 이상의 소프트웨어가 잘 돌아가도록 configuration하면서 open

 

 

- 인증해야하는 경우에는 AP를 사용함(프로토콜에서 AP에 해당하는 것 중에 CHAP나 PAP 중 해당 코드를 사용함)

- 상위 계층에 있는 것을 실어 나르는 역할을 하고 실어나르는 대상이 무엇인지 명기하는 프로토콜 필드가 존재함

 

- LCP 패킷을 사용해 통신함

- 연결 설정을 LCP가 담당

 

PAP packets encapsulated in a PPP frame

- 이동통신인 경우에 합법적인 사용자인지 아닌지가 매우 중요함

PAP: 사용자가 시스템으로 유저 아이디와 비밀번호를 날리는 것을 시작으로 시스템은 유저에게 승인, 미승인 여부를 알려줌

 

 

- CHAP은 서버 입장에서 부하 조절이 필요한 경우에는 이를 활용함

- 한번에 많은 통신 장치가 살아나는 경우를 대비하기 위해 서버가 먼저 challenge를 보냄

- PPP는 사용자를 인증하는게 매우 중요한 역할임

 

- IP 프로토콜의 데이터를 실어나를 때에는 IP 패킷을 실어나름

- IP 네트워크 계층을 쓰도록 환경을 꾸밀 때는 IPCP이 IPCP 패킷을 주고받음

 

2) 연결 설정 단계

(1) LCP가 layer2를 설정하는(establish) 단계

(2) PAP이나 CHAP을 통해 인증 단계

(3) IPCP를 통해 network layer를 어떤 걸 쓸거냐라는 configuration 단계

따라서 합법적인 것이 IP 프로토콜을 통해 통신을 하고, 연결해제할 때는 LCP가 재등장하여 termination을 끊음

PPP는 connection oriented이고 상위 계층에 대한 내용을 실어나르고 configuration하고, 인증과 같은 것을 체크하는 것이 중요하다. PPP는 에러 검출 및 복구는 그다지 중요하지 않다.

728x90
반응형