[네트워크] 8차시 - 전송계층(1)

2023. 4. 18. 17:50CS/네트워크

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

 

전송계층 신뢰성 확보 방법론을 배운다. 어떻게 End-to-End 통신에서 신뢰성 있는 커뮤니케이션을 제공할지에 대해서 학습한다.

 

1. Reliable Networking(End-to-End)

1-1. 신뢰 있는 네트워크와 현실 네트워크

  • 이상적인 네트워크는 bit, byte의 흐름이 고스란히 그대로 전달되는 네트워크
  • 현실 네트워크는 bit, byte가 패킷화 되어 전달되기 때문에
    • 무한한 bit, byte의 흐름을 제공할 수 없고
    • 패킷이 유실될 수 있고
    • 패킷의 순서가 바뀔 수 있고
    • 패킷이 변조될 수 있다.

1-2. 신뢰 있는 네트워크를 만들기 위해서는

  • 무한한 흐름을 제공하기 위해 bit, byte의 흐름을 패킷화 한다.
    • 많은 양의 데이터(ex. 1GB)를 한꺼번에 보낼 수 있는 네트워크는 없다.
    • 슬금슬금 몇 byte씩 보내는 데이터를 일정 수준까지 모아서 보내는 네트워크는 바람직하지 않을 수 있다.
  • 패킷이 유실되는 것을 막기 위해 타임아웃을 발생시켜 패킷을 재전송한다.
    • 패킷이 유실되는 경우는 전송 유실, ACK 유실, ACK는 성공적으로 보내졌는데 딜레이가 오래 걸려 타임아웃 되는 경우
    • ACK(Acknowledgement code): 승인을 서명하거나, 응답을 보내기 위해, 통신 프로토콜의 일부로서 통신 프로세서나 컴퓨터 사이를 지나는 신호
  • 패킷의 순서를 보장하기 위해 패킷에 번호(sequence number)를 붙인다.
    • 무한히 큰 자연수를 패킷 번호에 붙이기 어렵다.
      • 패킷의 순서가 바뀌지 않으면 1byte로 재사용이 가능하지만
      • 패킷의 순서가 바뀐다면 충분하지 않다. (딜레이 때문)
  • 패킷의 변조를 막기 위해 CheckSum, Error correction code, Error staction code를 사용한다.

 

2. 성능 향상: Pipelining

  • 성능이 좋지 않은 이유: 전송률은 높지만 딜레이가 커짐: 패킷을 보내고 ACK를 받아야 패킷을 보내기 때문 → pipelining
  • 연속된 대량의 작업이 순차성을 갖고 있으나 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우 성능향상기법

2-1. Go-back-N

  • 최대 N개의 packet을 병렬적으로 처리
  1. 송신 측에서는 N개의 packet을 buffering - 재전송을 하기 위해서
    • buffering: 수신이 확실하지 않은 packet에 대해 재전송을 위해 보관하는 것
    • 패킷이 확인되지 않았다 해도 pipelining을 하는 것이기 때문에 그다음 패킷을 보낸다.
  2. 수신 측에서는 순차적으로 잘 수신된 packet에 대하여 Ack를 송신하고 packet의 payload를 순차적으로 응용계층으로 올려 보낸다.
    • payload: packet은 packet의 내용을 담기 위한 짐차, payload는 실제 짐(전송하고자 하는 내용)
    • 순차적으로 잘 수신된 packet에 대해 Ack를 송신한다
    • 2번 packet의 Ack는 받지 못했지만 1번, 3번 packet의 Ack를 수신받음
      • = 3번 packet 까지는 순차적으로 잘 받았다 = 2번 packet에 대한 Ack을 받지는 못했지만 3번 packet까지는 잘 받았다는 뜻을 내포하기 때문에 자동적으로 2번 packet도 잘 받았다. ⇒ (Ack) 패킷이 유실되었지만 그 효용은 살아있다.
  3. 송신 측에서는 buffer에 여유가 생기면(Ack를 받아 패킷을 버림) 추가로 pipeling을 한다.
  • 수신 측에서 순서에 맞지 않는(이빨이 빠진) 패킷이 온 경우 반응 (예. 4번 packet을 받지 못하고 5번 packet을 받은 경우)
    • 조용히 있는다. - 아무것도 못 받은 것처럼
    • 잘 받은 마지막 packet에 대한 Ack를 전송 - 3번까지는 잘 받았기 때문에 다른 패킷을 수신받더라도 3번 Ack를 보냄(보내도 되고, 보내지 않아도 되고)
  • Go-back-N에서의 재전송 정책
    • 각 packet 전송 시에 packet을 위한 timer 설정 → Ack를 받으면 Ack 해당 packet과 앞쪽 packet에 대한 timer 소멸 → Timer 이벤트 발생 시 해당 패킷부터 재전송
      • packet에 번호를 붙인다.
      • Ack packet
      • timeout - ack이 오는지 안 오는지를 판독하는 타이머, Ack가 오면 타이머가 사라짐, ack가 오지 않으면 타임아웃
    • 추가 전송 정책: k번째 packet에 대한 Ack이 반복적으로 올 경우 k+1번째 packet에 유실을 함축
      ~ 3번 정도 k패킷에 대한 Ack이 오면 timer와 무관하게 k+1번째 packet을 재전송
  • 장점: 단순하다(특히 수신 측, 수신 측은 buffer가 없다), 간명하게 시스템의 상태가 추상화
  • 단점: 패킷 유실에 대한 복구 비용이 많이 든다.

2-2. Selective Repeat

  • Go-back-N의 단점을 보완(단순함의 장점은 포기)
    • 수신 측에 buffer를 둬서
    • 빠진 packet이 있을 경우 그 뒤쪽의 잘 도착한 packet들은 buffer에 보관하고, 빠진 packet이 추후 도착하면 buffer에 저장한 이후의 packet들까지 순차적으로 응용에 전달
  • Go-back-N: k번째 packet까지 잘 도착
  • Selective Repeat: k번째 packet은 잘 도착
  • 신 버퍼의 크기는 연속적인 개념을 유지
    • N = 4, 2번 packet 유실, 3, 4 모두 도착 O, 5번 packet의 ack 유실
      • 송신 버퍼에는 {2, 3, 4, 5} - 2번에 대한 ack를 받지 못했기 때문에 && 순차적 응용 전달
      • 수신 버퍼에는 {?, 3, 4, 5} - 2번을 받지 못함 && 5번은 잘 받았지만 ack가 유실
      • 송수신 모두 버퍼 크기 4 유지
    • 추후에 2번 버퍼를 재전송해서 수신 측에서 수신받으면 수신 버퍼는 {2, 3, 4, 5}가 되고, 응용계층으로 올려 보내서 수신 버퍼를 지울 수 있다.
    • 2번 packet의 ack를 송신 측에서 받으면 송신 버퍼는 {5, 6, 7, 8}이 되고
    • 6, 7, 8 packet을 보내면
      • 송신 측은 6, 7, 8을 응용계층으로 올려 보내고 버퍼는 비었다.
      • 수신 버퍼에는 5번에 대한 ack를 받지 못했기 때문에 {5, 6, 7, 8}, 9를 넣지 못함
    • 5번 packet의 timer가 timeout을 발생시켜 5를 재전송
      • 수신 버퍼에 5는 없지만 8번까지 완료했기 때문에 5번을 받았다는 것을 유추할 수 있다.
      • 5번 ack를 보냄
    • 송신 버퍼에는 {9, 10, 11, 12}
  • 장점: 실패한 packet만 재전송해서 성능 향상
  • 단점: 시스템 추상화 복잡, 수신 측에도 버퍼가 필요하다.

 

[복습]

  1. end-to-end 네트워크가 이상적이려면
    1. 무한한 bit, byte의 흐름을 제공해야 하고 - bit, byte의 흐름을 패킷화
    2. 패킷이 유실되지 않고 - Ack를 받지 못하면 타임아웃을 발생시켜 패킷을 재전송
    3. 순서가 보장되며 - 패킷에 번호를 붙임
    4. 변조되지 않아야 한다. - error correction code, error staction code
  2. pipelining: 연속된 대량의 작업이 순차성을 갖고 있으나 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우 성능향상기법
  3. go-back-n: 최대 n개의 packet을 병렬적으로 처리한다.
    1. 송신 측에서 n개의 packet을 buffering
    2. 수신 측에서 순차적으로 잘 수신된 packet에 대해 ack를 송신하고 packet의 payload를 순차적으로 응용계층에 올려 보냄
    3. 송신 측에서는 ack를 받으면 패킷을 buffer에서 버려 여유를 만들고 추가로 pipelining 한다.
    4. ack를 송신받지 못하면 타임아웃을 발생시켜 해당 패킷부터 재전송한다.
    5. 단순하지만 패킷 유실에 대한 복구 비용이 많이 든다.
  4. selective repeat: 수신 측에 buffer를 둬서 go-back-n의 단점을 보안한 방법
    1. 수신 측에 버퍼를 두어서 빠진 packet이 있을 경우 그 뒤쪽의 잘 도착한 packet들을 buffer에 보관하고
    2. 빠진 packet이 추후에 도착하면 buffer에 저장
    3. 이후 저장된 패킷들을 순차적으로 응용에 전달한다.
    4. 송신 버퍼의 크기는 연속적인 개념을 유지한다.
    5. 실패한 packet만 재전송해서 성능을 향상하지만 시스템 추상화가 복잡하고 수신 측에도 버퍼가 필요하다.

 

 

 

 


한국항공대학교 김철기 교수님의 [컴퓨터 네트워크] 강의 정리입니다감사합니다.

http://www.kocw.net/home/cview.do?lid=22ef970c4243a747 

 

컴퓨터 네트워크

현대의 컴퓨터는 네트워크와 분리해서는 생각할 수 없다. 수많은 정보의 교류, 부가가치의 창출은 모두 네트워크를 통해서 이루어 진다. 본 과목에서는 컴퓨터 네트워크의 구성요소를 이해하고

www.kocw.net

 

728x90