본 내용은 경희대학교 소프트웨어융합대학 이성원 교수님의 수업을 바탕으로 작성하였습니다.
DLC Basic
- OSI Layer 2에서 2 계층의 하단부에 해당하는 MAC Layer, 상단부에 해당하는 DLC Layer (data link control)
- Physical Layer에서 에러가 발생했을 때 어떠한 방식으로 검출하고 복구할지에 대한 것이다.
- 동작하는 방식은 2가지
- dedicated
- broadcast
- framing(메시지 만들기), flow control(2 계층과 4 계층에 존재, a->b로 흐르는 것을 제어, 왼쪽은 좋고 오른쪽은 안 좋은 장비일 때 그 차이를 고려하여 흐름 제어), error control(보낸 정보가 없어지거나 왜곡)
Framing
- 보내고자 하는 정보를 일정 기준으로 나눈다. 거기에 DLC 계층이 필요한 정보를 추가
- 보내는 쪽의 DLC 주소와 받는 쪽의 DLC 주소, 에러 검출 및 복구를 위한 정보
- 보내고자 하는 정보가 3 계층으로부터 왔을 때 에러 검출 및 복구, 흐름제어를 위해서 추가적으로 필요한 정보들을 집어넣는 형태를 말한다.
- DLC 전송단에서 수신단에 보낼 때 처리를 캐릭터 단위로 한다.
- physical Layer는 a와 b를 연결하고 있을 때 유의미한 정보를 주고받지 않더라도 physical Layer는 끊임없이 어떤 정보들을 주고받음, 값을 판단하기 위한 값을 갖고 있어야 함
- 송신단의 DLC 계층은 3 계층으로 받은 유의미한 데이터를 전송하고자 할 때 Flag를 보낸다. 수신단은 사용자의 데이터를 주고받지 않고 송신 쪽의 physical Layer가 쏘는 트레이닝 데이터를 받고 있다가 DL계층의 메시지 시작을 나타내는 Flag를 보고 트레이닝을 멈추고 DL 계층의 데이터를 잘 받아서 윗 계층으로 보내고 에러 검출과 흐름 제어를 함
- Flag 패턴이 수신장비에 들어오면 DLC 계층에 메시지가 온 것이고 다시 Flag가 잡히면 메시지의 수신을 끊는다고 판단함
Stuffing and Unstuffing
- 사용자의 데이터에 Flag와 같은 값이 들어있다면 수신하는 DLC 계층에게 Flag가 아니라 데이터라고 알려줘야 한다. 이런 작업을 stuffing이라고 한다. Flag와 같은 형태의 데이터 앞에 ESC를 붙여준다. 그러면 수신자는 ESC를 지우고 안에 사용자의 데이터만 3 계층에 올린다.
- ESC도 사용자의 데이터 안에 들어가 있음 또 패턴이 겹친다. 이러한 경우에도 동일하게 처리한다. ESC + ESC 보내고 받는 쪽에선 앞에 걸 지워버림
- Flag가 나타나지 않도록 하는 건 똑같음 위 경우는 Flag가 01111110일 때를 이야기함, 보내는 데이터에 Flag가 안 나타나게 하는 것이 목표임, 0으로 시작하고 1이 5개가 나타나면 무조건 0을 하나 집어넣는다.
- 받는 쪽에서는 같은 동작을 반대로 한다. 0으로 시작하고 1이 5개가 나타나면 그 후의 0을 빼버린다.
- bit stuffing은 Flag에 해당하는 bit 값이 데이터에 나타나지 않도록 하는 작업을 한다.
- bit 단위로 동작을 하는 이유는 과거에는 느린 통신 속도도 비쌌기 때문, 최대한 효율적으로 활용해야 했다.
Flow and Error Control
- 2 계층 data link layer 이상에서는 보내는 자와 받는 자가 데이터만 보내고 받는 게 아니라 추가적으로 보내는 속도, 에러에 대한 피드백을 준다.
- Connection : Physical Layer는 무선과 유선에서 물리적으로 연결, 2 계층 이상에선 물리적으로 연결하지 않음
- connection-oriented : 데이터를 주고받기 전에 connection을 만드는 작업을 함, 만들어서 데이터를 주고받는 와중에도 connection을 유지하기 위한 복잡한 일을 수행 데이터를 다 주고받았으면 connection을 끊는 작업을 한다. 가상의 logical 한 connection을 만드는 애들은 연결 설정, 연결 유지, 연결 해제라는 과정을 꼭 포함하고 있어서 복잡하다. flow control과 error control은 99% connection-oriented에 대한 이야기
- connectionless : 보내고 싶을 때 보내는 것, 상대방을 배려하지 않음, flow control과 error control을 하는 경우가 별로 없다.
둘 다 데이터를 주고 받는 것은 동일하다.
Simple Protocol
- simple protocol은 flow control도 error control도 하지 않는다. 송신단이 보내고 싶은 거 바로 보내고 수신단은 받음
- 자연계에선 이럴 수 없음
- 상태천이도
- sending node는 스타트 시점에 ready 상태로 들어감 그 상태에서 network layer로부터 packet이 오는 event가 발생하면 그 packet을 가지고 프레임을 만들고 physical layer를 통해서 전송한다. 그리고 다시 network layer로부터 packet이 오는 것을 기다린다.
- receiving node는 ready 상태는 스타트하자마자 들어가고 프레임이 도착하면 network layer에 패킷을 전달하고 다시 ready 상태로 돌아간다.
Stop-and-Wait Protocol
- 에러 검출 및 흐름제어 기법
- CRC (데이터 외에 추가적인 정보를 집어넣음)
- 1. 보낸 메시지가 변질되거나 2. 메시지가 아예 없어져버린 경우, 2가지가 통상적인 에러
- sending node의 network layer가 data link layer에게 메시지를 전달, 받은 정보에 header trailer 혹은 stuffing과 flag 붙임(검은 부분: CRC)
- 받는 쪽도 CRC를 계산하고 상대방이 보낸 것과 비교함, 잘 받았다면 파란색 부분을 nework layer에 올리고 sending node에 ack(CRC 포함)를 보냄
- 만약 받는 쪽에서 CRC가 보낸 쪽과 다르다면 에러가 난 것임, 받은 정보를 버림, ack를 전달하지 않음, 일정시간 응답(timer)이 안 오면 sending node는 에러가 발생했다고 판단함
- timer가 터지면 보내야할 재전송 횟수에 도달했는지 확인하고 도달 안 했으면 한번 더 보낸다. 보내고 ack가 올 때까지 기다린다. 따라서 sending node는 전송하고 추가적인 전송을 스탑 한다(stop) 그리고 sending node는 stop 후 receiving node의 ack를 wait 한다. 재시간 안에 ack가 오면 잘 된 거, 안 오면 에러가 난 것 정해진 횟수만큼 재전송한다.
- 메시지를 보내고 기다리다보니까 자연스럽게 흐름제어가 된다.
- stop and wait 방식의 상태천이도
- sending node에서 copy를 저장하는 이유는 재전송할 수도 있으니까
- blocking은 network layer에서 추가적으로 메시지가 내려오는 것을 처리 안 하겠다는 의미
- ack가 일어난 것 때문에 수신쪽이 2번 메시지를 받았다. 그 문제를 해결하기 위해서 프레임 헤더에 번호를 달았다.
- 프레임 0 을 제대로 받으면 ack 1을 보냄, 1번 프레임을 보내달라는 것
- 번호는 0과 1만 있어도 충분함
- 별표 표시에서 network layer에 똑같은 것을 또 보내지 않도록 함, duplicate 문제를 해결
Piggybacking
- 서로 주고 받을 데이터가 있는 통신 시스템이면 상대방이 보낸 거에 대한 ack를 굳이 별도 메시지로 만들어서 보내지 않는 것 내가 상대방에게 보내는 데이터가 존재할 때 ack 메시지에 포함시켜 보냈던 정보를 상대방한테 보내는 데이터에 합쳐서 같이 보낸다. 즉, 내가 상대방에게 ack를 보낼 게 있고 그 상대방에게 보낼 데이터도 있다면 굳이 ack를 따로 보내지 않고 데이터 보낼 때 필요한 거 합쳐서 하나의 메시지로 보내는 것
Go-Back-N Protocol
- 보내야 할 데이터가 많아지면서 Stop-and-Wait Protocol의 한계 그래서 나온 것이 Go-Back-N protocol
- Go Back N은 하나가 아닌, 미리 정한 숫자만큼의 메시지를 ack가 없더라도 보낼 수 있다.
- window : 메시지들을 여러 개 연결해 놓은 것, 프레임 0부터 프레임 14까지는 상대방으로부터 ack가 없더라도 한 번에 보낼 수 있다. 이런 range를 window
- window size는 2^m -1
- outstanding state : 0~6까지 주황색 부분, 메시지 보냈으나 ack는 안온 것
- 0~14까지 보내고 ack 응답을 기다려야 하는 첫 번째 메시지를 기억해야 한다. Sf, 가장 첫 번째 ack가 안온애를 가리킴
- 0~6까지 7개만 보냈음, network layer에서 새로운 메시지가 옴 그럼 번호를 Sn으로 주어야 함, send window에서 다음번에 보내는 프레임의 번호로 쓸 숫자를 가리킴
- 만약 ack가 0~2 잘 받았다고 왔다면, 다시 Sf를 3으로 재설정해야 함, 0~2에 대한 데이터를 지움, window 사이즈는 15니까 뒤쪽으로 더 추가, 번호는 0~15까지만 사용(circular ring)
- 이런 식으로 동작하는 메커니즘을 sliding window
- N은 ack를 받지 못했던 Sf로 돌아감
- buffer의 크기를 2^m으로 쓰면 0을 재전송할 때 receiver는 이미 0123 다 받았음 그래서 0을 기다리고 있음 근데 sender는 0부터 재전송하니까 receiver는 그걸 성공적으로 온 것이라고 생각하고 에러가 있는 상태에서 받아버림
- 왼쪽 그림처럼 해야 된다.
- trade off를 생각해서 window size 정해야 한다. window size 커지면 buffer size도 많이 커져야 함
- 중간 프레임에 대한 ack는 뒤에 있는 프레임의 ack의 서포트를 받음
Selective Repeat Protocol
- Go-Back-N의 문제점 재전송을 Sf부터 해야 함, 첫 번째 보낸 게 망가지면 뒤에 제대로 보내도 다 버려버림
- window size를 2^(m-1)으로 한다.
- 수신단은 3~10 받을 수 있음, 에러가 나면 비우고 받으면 채우면 됨, 3568 에러 479 잘 받음
- 선택적 재전송이란 것은 수신단 입장에서 잘 받은 거에 대해서는 재전송하지 않고 선택적으로 에러난 애들만 재전송
- 수신단의 버퍼가 커졌음, 못 받았다는 nak라는 개념이 생겼음, 못 받은 것을 인지하는 경우는 크게 2가지 1. 메시지가 안 왔을 때 다음 메시지가 옴 2. 에러가 발생한 형태로 수신된 경우
- window size는 최대 2^(m-1)로 해야 함
DLC Example - HDLC
- High-level Data Link Control (HDLC)
- I : 데이터를 주고받는 용도, CRC에 상응하는 FCS가 있음
- S : 데이터를 주고받지 않는데 ack메시지를 보내거나 해야 할 때
- U : 제대로 동작하는지 확인, 통신 링크를 유지관리 하는 사람 입장에서 필요한 정보들을 가지고 있음
- 연결 요청 및 해지 시 어떤 메시지들이 이동하는지 나타냄
DLC Example - PPP
- 휴대폰에서 사용하는 기본적인 메커니즘
- Point to Point Protocol
- 3 계층 이상 애플리케이션에 대한 것을 설정하고 유지 관리함
- 상위 계층에 있는 애들을 실어 나르는 단순한 역할을 수행하고 실어 나르는 대상이 어떤 프로토콜인지 나타내는 필드가 존재
- PPP의 가장 중요한 부분은 이동통신인 경우 합법적인 사용자인지 아닌지 확인하는 것
- 서버가 먼저
- PPP는 사용자 인증이 매우 중요함
'Computer Science > 컴퓨터 네크워크' 카테고리의 다른 글
[컴퓨터 네트워크] 5-2장 Network Layer (0) | 2024.04.29 |
---|---|
[컴퓨터 네트워크] 5-1장 Network Layer (0) | 2024.04.29 |
[컴퓨터 네트워크] 4장 MAC/DLC (0) | 2024.04.15 |
[컴퓨터 네트워크] 2장 MAC Layer (0) | 2024.03.25 |
[컴퓨터 네트워크] 1장 Introduction (1) | 2024.03.23 |