티스토리 뷰

Study/Network

[Network] End-to-end Principle

생각많은 소심남 2014. 2. 6. 01:16

점점 하던거만 하다보니 뒤쳐지는 거 같아서 새로운 것들을 배워보고 있고, 그중 하나가 Networking에 관한 내용이다.

사실 학부때 Mobile Network 수업을 듣긴 했었는데 전자과에서 배우는 네트워크의 내용은 그렇게 깊지도 않았고, 지금와서는 다 까먹었다. 그런데 마침 OpenCourse로 Introduction 형식을 빌어 강의하는 곳이 있어서 듣고 있다. 그래서 다시 들어보면 왠지 들었던 내용같기도 하고 그렇다. 참고로 이 강의를 듣고 싶은 사람은 Stanford 대학에서 제공하는 OpenEdx 를 수강하면 된다.


뭐 서두는 그렇고 그냥 주기적으로 내용을 정리해보려고 하는데 첫번째로 end-to-end Principle을 언급해보려고 한다. 위키를 찾아보면 더 자세한 설명이 있기도 하지만 굳이 번역하면 끝에서 끝까지 가는 규칙이라고 할까나... 우리가 알고있는 인터넷 세계는 생각하는 것 이상으로 넓다. 우리는 앉아서 미국대학의 수업을 들을 수도 있는거고, 혹은 앉아서 중국 taobao 같은데서 물건을 살수도 있다. 물론 그 물건을 우리가 받는데까지 오래 걸린다. 생각을 해보면 중국에서 생산된 제품을 우리가 온라인으로 구입해서 받기까지는 많은 과정을 거친다. 통관도 거처야 될 것이고, 우체국도 거치면서 혹은 편의점이나 경비실도 거치게 된다. 그런데 참 쉽게 생각하면 지금 이렇게 거치는 과정이 사실 불필요한 과정이다. 우리는 구입해서 받기만 하면되고, 판매원은 그냥 물건만 보내주면 되는데, 뭐하러 이렇게 거치는 곳이 많을까?

 인터넷도 똑같다. 통상적인 개념으로는 우리가 원하는 Host에 연결하면 좋겠지만 그 과정에 Router를 거쳐야 되고 그안에 저장된 Routing Table을 읽고 또다른 Router를 가야 한다. (참고로 이런건 TraceRoute같은 프로그램을 쓰면 우리가 목적지까지 가는데 거치는 Router 들을 알 수 있다.) 그러면 이럴때 뭐가 필요할까? 우선은 Correctness가 필요할 것이다. 우리가 목적지에 주고자 한 메세지는 router를 거치는 동안에도 계속 유지가 되어야 한다. 그리고, 뭔가의 규약이 있어야 할 것이다. 나라마다 정해진 Protocol이 다르다면 분명 문제가 생길 것이고, 이때문에 뭔가가 광범위하게 쓸 수 있는 원칙이 필요할 것이다. 이런 걸 모두 포괄적으로 담은게 End-to-end Principle이다. 


아주 쉬운 예로 위와 같이 A와 B간의 file transfer가 이뤄진다고 가정해보자. 그러면 A와 B의 목적은 간단하다. A의 목적은 단순하게 file을 보내는 것이고, B의 목적은 file을 받는 것이다. end-to-end principle이 적용된다고 가정하면 이둘의 목적은 file이 "무사히" 전달되고, 받는게 추가될 것이다. 


만약 TCP를 가정한다면, file은 어떤 packet으로 나눠져서 정해진 socket을 통해 B까지 전달이 될 것이다. 어떻게보면 간단한데 그러면 End-to-end는 여기서 뭘 나타낼까? 아마 file을 읽을 수 있는 A의 app과 B의 app이 아닐까? 만약 이렇게 거치는 과정 사이에서 문제가 발생하면 file이 깨지거나 할 것이다. 그래서 이를 확인하기 위한 다양한 Error detection mechanism 이 있다. 예를 들어 checksum이나 CRC 같은 것들이다. 이런게 모두 end-to-end principle에 따라 만들어진 것이다. 

 이처럼 Correctness나 Generality를 유지하려는 방법은 많이 있다. 위와 같은 File Transfer에서도 우리는 큰 파일을 한번에 보내는게 아니라 보면 여러단계로 쪼개서 보내면 그만큼 B가 제대로 받을 수 있는 확률이 커질 것이다. 또한 Correctness를 유지하기 위해서 앞에서 소개했던 것처럼 error detection 기법도 넣은 것도 그런 측면이다.

 그런데 과연 이런 시도들이 다 end-to-end principle을 만족시킨다고 할 수 있을까? 어떻게 보면 지금 이 질문이 이상하게 들릴수도 있다. 아니 지금까지 End-to-end principle을 따르는 몇가지 방법들을 소개했는데 갑자기 만족하지 않는다고 하니 말이다. 그런데 그말의 답은 사실 이 principle을 주장한 사람들의 의견속에 들어있다.



중간에 not possible이라고 언급되어 있는 것처럼 완벽한 End-to-end 라는 건 존재하지 않는다. 

사실 앞에서 소개한 방법들은 적어도 그 principle을 따르기 위한 방법 중 하나일 뿐이다. 그런데 그 방법들한테 약점이 없을까? 우리는 그 약점을 해결하기 위해서 조금더 fine-grained 하게 봐야한다. 그런데 그게 위에서 언급한것처럼 쉽지가 않다. 

 앞에서 언급한것처럼 A와 B의 목적은 file을 제대로 보내고 제대로 받는 것이다. 그런데 위와 같은 방법들을 썼다 하더라도, B가 file을 제대로 못받는 경우는 반드시 발생한다. error detection은 네트워크 쪽으로 바라본 방법이지만, 만약 시스템 자체에서 문제가 발생한다면 어떻게 될까? 

 사실 이걸 해결하기 위해서는 잘게 쪼개서 문제가 될만한 요소들을 제거하는 것이다. 이말은 end-to-end를 A와 B에 한정지을게 아니라 그 사이의 과정에도 주목해야 한다는 것이다. 


이렇게 잘 정리된 connection이 있고, 매 과정을 거치면서 error detection 해주게 한다. 과연 source에서 destination으로의 file transfer는 100%일까? 만약 D에서 무언가 문제가 발생하면 이 100%는 깨지게 된다.


만약 D가 이상한 Memory를 가지고 있고, file이 이 Memory에 저장되었다가 E로 가면 최종적으로 destination이 받는 file은 당연히 잘못된게 된다. 그런데 이게 end-to-end principle을 만족하는 것일까? 분명 우리는 error detection 방법을 써서 해결하고자 노력했고, Network 쪽에선 적어도 문제가 없다. memory같은 System 문제로 인해서 principle이 깨지는 것이다.

결국 우리가 할 수 있는 방법은 Best effort일 뿐이다. 그리고 사실 지금 나와있는 TCP같은 Protocol은 적어도 그걸 따르고 있다고 보면 된다. 다만 현재도 incomplete된 상태이고 계속 개선되어가는 상태인 것이다.


 강의에 나와있는대로 잠깐 요약해봤다. 내가 잘 못 이해한게 있을 수도 있는데 그렇다면 댓글로 지적을 해주면 좋을 것 같다. 아마 다음 내용은 error detection에 대한 내용이 될듯 싶다.


Reference:

Introduction to Computer Networking : https://class.stanford.edu/courses/Engineering/Networking/Winter2014/about

'Study > Network' 카테고리의 다른 글

[Network] ICMP Service Model  (0) 2018.01.24
[oFono] Overview  (0) 2017.11.17
[Networking] UDP service model  (0) 2016.09.06
[Networking] TCP service model (3)  (0) 2016.08.30
[Networking] TCP service model (2)  (0) 2016.08.30
[Networking] TCP service model (1)  (0) 2016.08.30
[Network] Nash Equilibrium 문제  (0) 2015.03.02
댓글