해당 게시글은 한동대학교 고윤민 교수님의 자료를 바탕으로 제작되었습니다.
https://github.com/YunminGo/netprog
해당 자료는 고윤민 교수님 캠프의 실습 자료들입니다.
해당 포스팅에 이어서 진행합니다.
Internet
internet이란 무엇일까? "network of networks"라고 할 정도로 여러 network 망들이 그물처럼 얽혀있는 형태를 인터넷이라고 부릅니다.
Protocol
어떻게 통신할 것인지 protocol에 근거하여 통신할 수 있게 해주는 규약이라고 볼 수 있다.
e.g.) HTTP(Web), streaming video, Skype, TCP, IP, Wifi, 4G, ...
사람과 사람이 대화를 할 때에도 질문에 대한 대답은 어느정도 예측할 수 있다.
예를 들어 "지금 몇시니?" 라는 질문에 "12시야"라고 대답하는 것처럼 말이다.
이와 비슷하게 그러한 의사소통을 computers(devices)로 옮겨온 것이라고 볼 수 있다.
프로토콜은 정해진 format에 따라, 주고 받는 message order에 따라 , msg 전송, 수신 시 수행되는 action으로 정의됩니다.
Protocol의 layer
layer란 각기 기능별로 계층을 만들어 구별하는 방법입니다. 때문에 이해하는 데 용이하며, 문제가 발생했을 경우 해당 layer만 해결하면 관리가 되므로 주로 이 방법을 사용합니다. 또한 구분되어있는 layer는 각기 다른 layer의 동작에 영향을 주지 않습니다.
그중에서도 Interent protocol stack(layer)을 살펴보겠습니다.
application | supporting network applications e.g.) IMAP, SMTP, HTTP |
transport | process- process data transfer// TCP와 UDP만 존재 |
network | routing of datagrams from source to destination e.g.) IP(해당 객체가 무엇인지 식별 가능한 숫자 배열), routing protocols |
link | data transfer between neighboring network elements e.g.) Ethernet, 802.11(Wifi), PPP |
physical | bits "on the wire" |
우리가 스마트폰의 구조에 대해서 몰라도 해당 어플리케이션을 눌러서 잘 사용할 수 있다. 이와 마찬가지로 다양한 layer가 존재하지만, 그 구조는 서로 독립적이기 때문에 어떤 것을 사용하더라도 구현하는데는 문제가 되지 않는다. 하지만 만약 성능을 따져서 속도를 향상시킬 필요가 있다라면 더욱 효율적인 방법을 구상하는 것은 필요해 보인다.
Encapsulation - Decapsulation
그렇다면 어떤 방식으로 Data를 전송할까? 우리가 기념일이 되어 선물을 준다고 할때 어떻게 하는가?
주고 싶은 물건을 그냥 줘도 되지만 누구 것인지 잘 모르기 때문에 잃어버릴 가능성이 있다.
때문에 나만의 독특한 포장으로 상자를 잘 패키징하고 리본을 묶고 꾸미기도 할 것이다.
마찬가지로 Data를 Application에서 다른 유저 혹은 서버로 전송하고자 할 때, 패키징을 하는 것이다.
전송해야 할 Data(message)를 Transport Header로 감싸준다 (1 -> 2의 과정) 이때에 어떤 Application에서 온 Data인지 그 주소가 저장이 되는데 이것은 나중에 언패키징할때에 어느 곳으로 return을 해야하는지 알려주는 이정표와 같은 역할을 하게 된다.
다음과 같이 1 -> 5 까지의 일련의 과정을 Encapsulation이라고 하며, 각각의 패키징에는 이전 묶음의 주소값이 포함되어 있다고 생각하면 된다.
이렇게 포장된 데이터가 Source에서 router를 지나 Destination으로 이동할 때에 5 -> 1까지의 과정처럼 다시 언 패키징하는 과정이 필요한데 이 과정을 Decapsulation이라고 한다.
Transport Protocols
application processes 사이에서 logical communication의 형태로 데이터를 송·수신할 수 있다. 여기서 logical communication이란 아래 사진을 통해 살펴보면 더욱 이해가 쉬울 것이다.
실제 네트워크는 다음과 같은 복잡한 구조를 갖는다 . 위의 사진에서와 같이 Home Network에서 Server로 데이터를 송신하고자 한다면 switch - router - ISP ... 이러한 복잡한 경로로 이동하게 될 것이다. 하지만 앞에서도 말했다 싶이 기능적으로 나눈 layer끼리는 서로 독립적이기 때문에 밑에 부분을 알고 있지 않는다고 하더라도 Transport Protocol에서는 data의 송·수신이 가능하게끔 짤수 있다. 그렇기 때문에 Transprot 입장에서 본다면 결국 한다리를 걸쳐서 이동하는 것과 같이 볼 수 있는 것이다. 이러한 것이 logical communication이라고 한다.
이러한 Transport Protocol은 TCP와 UDP로 분류된다.
TCP vs UDP
그렇다면 TCP와 UDP는 무엇일까? 아래의 이미지가 어떤 느낌인지 알 수 있게 해줄 것이다.
TCP는 Transmission Control Protocol의 약어로 흔히 전화 통화를 한다고 생각하면 이해하기 용이하다.
●믿을 수 있는 전송(Reliable Transmission)
통화 품질에 상당히 민감하다. 보이스톡을 예로 들지만 인터넷 환경이 좋지 않아서 끊기는 것이 아닌 다시 재요청을 한다. 만약 Loss가 발생하여 data를 잃어버렸을 경우 재요청을 하여 데이터를 다시 받을 수 있게 해준다.●순서대로 배달(In-Ortder Delivery)
전화 통화를 대화하듯이 이어나가기 위해서는 순서대로 data를 송·수신할 수 있어야 한다. 순서가 보장되어 있다. 무조건 보낸 순서대로 받는다. ●혼잡제어(Congestion Control)
택배 분류선별장에서는 택배를 한줄로 택배의 주소가 보이도록 세워둔다. 하지만 택배를 쌓아서 컴베이어벨트를 통과시키는 일이 반복된다면, 택배 분류에 혼선이 생기길 마련이다. 마찬가지로 정보의 소통량이 과다하면 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다. 이러한 것을 막아주는 칸막이 역할을 한다.●흐름제어(Flow Control)
이어서 택배 분류시 컴베이어벨트의 속도가 너무 빠르다면 다 옮기지도 못하고 감당할 수 없을 것이다. 그러한 흐름을 제어할 수 있게 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다. 송신하는 곳에서 감당이 되지 않을 정도의 데이터를 빠르게 보내 수신하는 곳에서 일어날 문제를 막을 수 있다.●사전 준비 필요(Connection-Oriented)
데이터를 잃어버리더라도 다시 찾기 위해서는 기존의 데이터 주소를 알고 있어야한다. 때문에 사전에 그 주소를 미리 연결하는 과정이 필요하다.
UDP는 User Datagram Protocol의 약어로 손편지를 예로 들 수 있다.
●믿을 수 없는 전송(Unreliable Transmission)
손편지같은 경우 우편물로써 물론 잘 도착하겠지만 잃어버릴 경우에 다시 찾을 수 있는 길이 없다. Loss가 발생하면 잃어버린 데이터를 다시 찾을 수 없다.●순서없는 배달(Unortded Delivery)
수신을 받을 때 먼저 들어온 것을 기점을 받기 때문에 항상 순서대로 들어온다는 보장을 할 수가 없다.●사전 준비 필요없음(Connection-less)
그저 전달해주는 중계일 밖에 하지 않음으로 따로 준비를 해줄 필요가 없다.
실제로 이러한 두가지 Transport Protocol을 활용해서 서비스를 제작한다. 때문에 어떠한 protocol을 사용할지 결정하고 개발에 착수해야한다.
또한 이와 같이 많은 차이가 있고 TCP가 더 복잡한 구조를 갖고 있기 때문에 그럼 당연히 UDP가 더 가볍고 빠른거 아니야? 라고 생각할 수도 있다. 물론 그 구조 자체는 조금 더 빠를 수는 있어도 현재의 기술력으로 비교를 해보면 속도의 차이가 거의 나지않는다고 한다.
위의 이미지는 실제로 사용되는 Application들에서 어떤 Trasport protocol을 사용하는지 간략하게 정리해둔 표이다. Zoom과 같은 온라인 회의는 UDP로 음성과 영상을 송출한다고 한다. 어떤 서비스로 구현을 하느냐에 따라 어떤 trasport protocol을 사용할지 결정해야한다.
IP address
네트워크 상에서 사용되는 각종 장비들(라우터, 서버, PC 등)을 구분하고 통신하기 위해 부여되는 32-bit로 구성된논리적인 숫자 배열 주소입니다.
다시 말해, 어떤 Host인지를 식별할 수 있는 번호, 식별자라고 할 수 있습니다.
Multiplexing / demultiplexing
이후 내용들은 다음 블로그에서 잘 정리를 해두었기 때문에 링크를 따로 남김니다.
port number와 관련된 내용입니다.