안녕하세요. WH입니다.
요즘 이것저것 생각나는데로 기초부터 적다보니 중구난방인 부분이 없지않아 있지만,
사실 임베디드 리눅스를 다루려면 알아야하는게 굉장히 많다는 점에서
천천히 알아두면 나중에 큰 도움이 되리라 확신합니다.
여튼 각설하고, 이번 글에서는
네트워크 프로그래밍을 하기 위한 기본 개념들을 다루고자 합니다
프로토콜이란
제일 많이 접하게 되는 단어일거에요. 프로토콜을 찾아보면 굉장히 많은 내용이 나오지만, 이해하기 쉽게 한 문장으로 정의해 보면
프로토콜은 약속 규약이다
너무 간단해서 어이가 없었나요? ㅎㅎ 근데 사실인 걸요. 무슨 약속 규약이냐, 결국에는 데이터를 주고 받기 위한 약속 규약이라고 생각하시면 편할것 같아요. 그니까, 네트워크는 기본적으로 데이터를 주고 받아요. 그런데 어떻게 주고 받을거죠? 내가 얼마만큼을 보냈을 때 얼마만큼을 받아드릴거죠? 이런 정보들에 대한 약속이 바로 프로토콜이랍니다. 쉽죠?
HTTP란
인터넷을 쓰다보면 가장 많이 쓰는 http입니다. 이게 뭔데요? Hyper Text Transfer Protocol 의 약잔데 뜻을 볼까요? 아하 이것도 hyepr text를 전송하기 위한 약속 규약이군요. 어떤 약속, 즉 규약이 있는데요? 인터넷 프로토콜 스택은 4계층으로 나뉘는데, 그 중 어플리케이션 계층의 약속 규약이랍니다.
인터넷 프로토콜 스택 4계층이란
아래 그림을 보고 상황과 함께 이해해보도록 하죠. 그럼 시작하겠습니다.
간단히 설명드리면
상황 1.
두 개의 장치가 있어요. 그 두 개의 장치를 데이터를 주고 받을 수 있도록 연결 케이블로 직접 연결했어요.
그럼 서로 데이터를 주고 받을 수 있겠죠? 이렇게 데이터를 주고 받는 과정을 통신이라고 하며, 이 때 사용되는 계층이 네트워크 인터페이스 계층이에요.
상황 2.
이번에도 두 개의 장치가 있어요. 그런데 한 개는 베프가, 나머지 한 개는 제가 가지고 있다고 해보죠. 그런데 그 베프가 귀농을 해버렸어요. 그 장치와 통신하려면 어떻게 해야할까요? 케이블로 연결할 수가 없거든요? 이 때 케이블 역할을 해주는 것이 인터넷이고, 이때 사용하는 계층이 인터넷 계층이랍니다. 그런데 잠깐만요. 인터넷은 나만 사용하나요? 엄청나게 많은 사람이 사용하잖아요? 친구의 장치를 어떻게 알아보죠? 그래서 사용하는 것이 IP ( Internet Protocol ) 입니다. 즉 친구에게 데이터를 전달하기 위한 최소한의 약속이라고 생각하시면 될것 같아요.
질문.
IP로 데이터를 전달한다고 해보자구요. 이 때 데이터를 보내는 데, 어떻게 보내야 하죠?
우선 데이터를 마구잡이로 보낼 것이 아니라, 하나의 뭉치로 보내야겠죠? 그 뭉치가 바로 패킷이며 IP 패킷은 출발 IP, 도착 IP, 전송할 데이터 등이 포함이 된답니다. 이제 패킷을 준비됬어요. 그 다음은요? 패킷을 보내고 잘 받았다는 답변을 받으면 되겠네요. 쉽네요.
그런데 IP 프로토콜은 문제가 있어요.
1. 패킷의 정보데로 가기 때문에, 패킷에 들어있는 데로 전달을 해요. 즉 도착 IP가 잘못됬거나, 서비스 불능 상태라도 전달을 해버린다는 문제가 있어요. ( 비 연결성 )
2. 중간에 패킷이 사라지거나, 순서대로 오지 않아도 알 수가 없어요 ( 비 신뢰성 )
3. 같은 IP를 사용하는 서버에서 데이터를 주고 받는 어플리케이션이 많으면 목적지를 잃어버려요.
그래서 이런 문제를 해결하고자 나온 것이 전송 계층 ( Transmission Control Protocol ) 이랍니다.
TCP는 3Way handshake 과정을 통해 데이터를 전달을 보증하고, 순서를 보증하는 역할을 하는데요. 그렇기 때문에 신뢰할 수 있는 프로토콜이라고 불리기도 하죠.
즉 , IP 패킷 안에 있는 정보를, TCP 가 감싸 데이터 전달 보증, 순서를 보장 하게되는 것이죠. TCP는 기반 프로토콜로 HTTP/1.1, 를 사용하고 UDP는 HTTP3을 사용한답니다.
마지막으로 어플리케이션 계층을 알아보겠습니다.
특징을 좀 정리하자면, 위에 상황에 빗대어 보았을 때, 무엇인가 보내면 받았다는 대답이 돌아오죠? 이 구조를 Request Resoponse 구조라하며 클라이언트는 Request 서버에 보내고, 서버는 그에 대한 Response를 보냅니다. 즉, 클라이언트와 서버 구조를 가지며, 요청에 대한 결과를 응답하게 됩니다. 또 다른 특징으로는 무상태 프로토콜( 서버가 클라이언트의 상태를 보존하지 않음을 뜻함 )이며, 비 연결성을 가집니다. HTTP 메세지( 요청과 응답 )를 통해 통신하게 됩니다. 우선 기본 정리는 여기까지 하겠습니다.
글을 마무리하며 각 계층이 작동하는 인터페이스를 확인해주세요
그럼 이만 이상 WH였습니다.
'임베디드 리눅스' 카테고리의 다른 글
네트워크 프로그래밍-TCP/IP 패킷 전송 (0) | 2022.01.28 |
---|---|
네트워크 프로그래밍 - OSI 7계층 (0) | 2022.01.28 |
docker-compose 활용하기 (0) | 2022.01.27 |
MCU? MPU? CPU? 그게 뭔데 (0) | 2022.01.27 |
make 는 무엇이며 왜 사용하는 것일까 2 (0) | 2022.01.26 |