안녕하세요. WH입니다.
이번 글 역시 네트워크 프로그래밍을 하기 위한 기반 지식입니다.
음 무조건 필요하냐? 아니요.
그런데 알고 있으면 좋아요ㅋㅋㅋㅋ
여튼 시작하겠습니다.
이번 글은 OSI ( Open System Interconnection Reference Model ) 7 계층에 대한 내용입니다.
저번 글에서는 인터넷 프로토콜 4계층에 대해 정리하였죠? 기억이 나지 않는다면 아래 글을 참조해주세요
2022.01.28 - [임베디드 리눅스] - 네트워크 프로그래밍 - 인터넷 프로토콜 스택 4계층
1. 물리적 계층
물리적 계층은 물리적 케이블 또는 무선 연결을 담당하며 encoding과 decoding을 통해 데이터를 주고 받아요. 데이터는 0과 1로 이루어진 디지털 신호죠? 데이터 송신 컴퓨터에서 디지털 신호를 보내면 케이블로 가기 전에 encoding을 통해 아날로그 신호로 바꾸고 수신 컴퓨터에서는 해당 아날로그 신호를 decoding을 통해 디지털 신호로 변환하여 보여주게 됩니다. 즉, 물리 계층에는 각각 encoder( 송신 컴퓨터 )와 decoder ( 수신 컴퓨터 )를 가지고 있습니다.
2. 데이터 링크 계층
같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고 받기위한 모듈을 사용하는 데 framing이라는 기술을 사용하여 data를 감싸고 mac주소 ( 물리적 주소 )를 통해 통신을 합니다. 데이터 링크 계층에는 LLC ( Logical Link Control ) 즉 네트워크 프로토콜을 식별하고 오류검사를 수행하는 부계층과 MAC ( Media Access Control ) 즉 데이터 전송 및 수신 권한을 정의하는 부계층으로 구성됩니다. 즉 쉽게 data는 이 계층으로 들어오면서 프레임에 감싸진다고 생각하시면 되겠습니다.
3. 네트워크 계층
IP주소를 기반으로 원하는 목적지로 전달하는 역할을 하는데요, 이 계층에서는 데이터를 패킷으로 감싼답니다. 즉 IP 주소를 통해 routing하고 다음 라우터에게 데이터를 넘기게 되죠. 라우터의 기능 대부분이 이 계층에 있구요, 다른 라우터를 통한 라우팅을 비롯하여 패킷을 전달( 포워딩 )을 담당하게 됩니다.
( 라우팅 : 어떤 네트워크 안에서 통신 데이터를 보낼 떄 최적의 경로를 선택하는 과정 )
( 라우터 : 데이터를 송수신하는 장치 )
4. 전송 계층
Port 번호를 사용하여 도착지 컴퓨터의 프로세스에 데이터가 도달하게 하는 모듈인데요. 데이터를 세그먼트로 감싼다는 특징이 있습니다. 기억이 나질않는다면 위로 올라가서 전 글의 TCP 부분을 참조해 주세요. 여튼 중요한 것은 TCP 3 way handshake는 논리적 연결이라는 점을 기억해주세요.
5. 세션 계층
세션은 통신 채널을 의미하는데요. 다른 기기끼리 데이터를 주고 받으려면 통신 채널이 필요하답니다. 즉 이 계층은 세션을 열고, 데이터 송신 기간 동안 열려있는지, 작동하는지를 확인하고 통신 종료시 세션을 닫는 역할을 하며, checkpoint가 있어, 연결이 손실되는 경우에 복구를 시도한답니다.
6. 표현 계층
데이터를 준비하는 계층인데요, 데이터가 송수신이 되도록 인코딩, 암호화 및 압축 하는 방식을 정의합니다. 뿐만 아니라 네트워크를 위한 데이터 역시 준비하는 데요. 즉 세션 계층에 대한 데이터 역시 준비하는데, 이 어플리케이션 형식을 네트워크 형식으로 변환하거나, 그 반대의 경우 역시 이 계층에서 준비한다는 말입니다.
7. 어플리케이션 계층
사용자에게 보여지는 부분으로, 웹브라우저, 응용프로그램등이 있겠습니다. 기억하셔야 할 부분은 이 계층에서 어플리케이션은 PORT 번호를 부여 받습니다.
참고 PORT란
포트는 "논리적인 접속장소"를 뜻하며, TCP/IP를 사용할 때, 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용됩니다.
네트워크 상에서 통신을 할때 IP를 토대로 해당 서버가 있는 컴퓨터에 접근하는 데, 대부분의 경우 하나의 컴퓨터에는 여러 개의 서버가 실행될 수 있으며, 컴퓨터에 여러 개의 서버가 실행되고 있다면, 어느 서버에 접속해야 하는지 컴퓨터에게 알려주어야 하며, 이 때 사용되는 것이 포트 번호랍니다. 포트 번호는 0-65536번이 존재하며, 0-1023번까지는 어떤 통신이 해당 포트를 사용할 것인지 정해져 있어요. 예를 틀면 80번은 http 22번은 ssh랍니다.
정리해볼까요?
1. 데이터를 전송하기 위해 어플리케이션을 이용하는데 이때 port 번호를 부여 받습니다.
2. 어플리케이션 계층에 대한 데이터( 인코딩, 암호화, 압축 방식 정의 )와 세션 계층에 대한 데이터( 응용프로그램 형식 -> 네트워크 형식 )를 준비합니다.
3. 통신을 위한 세션을 열고, 작동 여부 등을 감시하고 통신 종료 시 세션을 닫을 준비를 합니다.
4. 변환된 데이터를 세그먼트로 감쌉니다 ( 출발지, 목적지 PORT(프로세스에 전달하기 위함), 전송 제어, 순서 검증 등 )
5. 세그먼트먼트로 감싼 데이터를 패킷으로 감쌉니다 ( 출발지, 목적지 IP( 목적 장치로 이동하기 위함 등 ) )
6. 같은 네트워크 내 여러 대의 컴퓨터들이 데이터를 주고 받을 수 있도록 프레임으로 감싼 후 mac 주소로 통신합니다.
7. decoding, encoding을 통해 데이터를 송수신 합니다.
이번 글을 여기까지입니다. 매우 기초적인 내용이기에 사실 알 필요는 없지만,
알면 코딩을 하는데에 큰 도움이 될 것이라 생각하여 작성하였습니다. 남은 오후 즐거운 하루 보내시길 바랍니다.
읽어주셔서 감사합니다. 이상 WH였습니다.
'임베디드 리눅스' 카테고리의 다른 글
네트워크 프로그래밍-소켓 통신 구현 1 (0) | 2022.02.03 |
---|---|
네트워크 프로그래밍-TCP/IP 패킷 전송 (0) | 2022.01.28 |
네트워크 프로그래밍 - 인터넷 프로토콜 스택 4계층 (0) | 2022.01.28 |
docker-compose 활용하기 (0) | 2022.01.27 |
MCU? MPU? CPU? 그게 뭔데 (0) | 2022.01.27 |