7계층은 왜 나눴을까??
- 서로 다른 컴퓨터간에서 원활한 통신을 위해서 나눠졌다.
- 통신이 일어나는 과정을 단계별로 알 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있기 때문이다.
- 이를 위해 국제 표준 기구 iso가 발표한 네트워크 모델인 OSI 7 Layer를 살펴보도록 하자
Physical Layer - 1 계층
: 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열(원본 데이터)을 주고받을 수 있게 해주는 모듈(module)
encoder: 0과 1의 나열(원본 데이터)을 아날로그 신호로 변조(바꾸는)하는 회로(기술)
decoder: 아날로그 신호(변조된 데이터)를 0과 1의 나열(원본 데이터)로 변조(해석)하는 회로(기술)
이 때의 module이란 ? 프로그래밍 할 때 만드는 함수
encoder, decoder와 같은 Physical Layer의 기술은 하드웨어인, PHY칩에 구현되어 있다.
이전 게시물을 통해 디지털 데이터를 아날로그 신호로 변환해 패킷을 전송해야하는 것을 파악했다면, 이 변환&해석 과정을 어디에서 진행하는지 궁금했을 것이다!
바로 그 과정이 OSI 7 Layer 중 1 계층인 Physical Layer(물리 계층)에서 이루어 지는 것이다!!
물리 계층은 이진 데이터를 전기적인 신호(아날로그 신호)로 변환하는 기능을 진행하는 공간이다.
즉, 데이터를 전송하는 역할만 진행한다.
→ 하지만, 1계층에 속하는 기술만으로는 여러대의 컴퓨터가 통신하도록 만들 수는 없다.
왜냐하면, 단순 변환만으로는, 여러대의 컴퓨터에서 스위치를 통해 하나의 컴퓨터를 향해 거의 동시에 데이터를 보냈을 때, 수신자 입장에서는 각 데이터가 여러대의 컴퓨터로 중 어떤 컴퓨터로부터 송신된 데이터인지 모르기 때문이다.
Data-Link Layer - 2 계층
: 같은 네트워크에 있는 여러대의 컴퓨터들이 데이터를 데이터를 주고받기 위해 필요한 모듈
How ?
별도의 구분자를 통해서 각 컴퓨터에서 보내는 데이터들의 앞,뒤에 붙여줌(Framing)으로써, 수신자가 송신자의 데이터를 구분지을 수 있도록 한다.
정확히 말해서, 이 때의 앞 뒤 구분자는 MAC주소를 넣는다.
- 출발지의 MAC 주소
- 가장 가까운 Router의 MAC 주소
도착지의 MAC 주소이유: 송신자는 최초의 B에 대한 맥주소는 알지 못하기 때문이다.- 3계층의 IP주소를 통해 이동한 도착지 Router에서, 도착지 Router의 IP를 DHCP, ARP를 통해MAC주소로 변환한 후에야, 도착지 MAC 주소를 헤더에 추가하는 것이다.
- 즉, 도착지 MAC주소는 송신자측에서 헤더에 추가되지 않는다. 도착지 Router에 도착한 뒤, 목적지 컴퓨터로 들어가기 위해 도착지 Router상에서 도착지 MAC주소가 기존 data의 헤더에 추가되는 것이다.
같은 네트워크 ? : 스위치 하나로 연결된 컴퓨터들을 칭한다.
Frame ? : 구분자가 붙은 data 단위를 프레임(Frame)이라고 한다.
Framing ? 상위 Layer의 데이터를 잘게 짤라, data에 구분자를 붙이는 방식
특징
- 해당 기술은 하드웨어적으로(LAN 카드에) 구현되어 있다.
- 흐름 제어(검출, 회복), 오류 제어(트레일러 데이터도 추가 삽입)
- 프레임 동기(BASIC 동기, HDLC 동기, SDLC 동기)
- 링크의 효율성 향상(CSMA/CD, Token-Bus, Token-Ring)
- 매체 엑세스 제어(MAC)
오류 제어
- 송신자 측에서 보낸 데이터가 데이터 손실되어 수신자측에 도착했다면(즉, 7개 중 2개의 프레임이 오류가 났다면), 해당 오류 발생한 프레임을 모두 버려버리는 방식
1 계층과 2계층 간 data 송-수신 과정
송신자
- 컴퓨터 내부에서 data를 2계층 encoder로 전달한다.
- 2계층 encoder에서는 해당 data의 앞 뒤로 구분자를 붙이고 output한다.
- 2계층 encoder로부터 output된 프레임을 1계층 encoder로 전달한다.
- 1계층 encoder에서는 data를 ‘아날로그 신호’로 변환한다.
- data를 전선을 통해 수신자쪽으로 보낼 준비가 완료되었다!
전선을 통해 아날로그 신호로 변환된 (구분자가 붙은)data가 이동한다.
수신자
- 1계층 decoder에서 수신한 ‘아날로그 신호’를 해석한다.
- 해당 아날로그 신호를 해석하여, (구분자가 붙은)data를 output한다.
- 1계층 decoder로부터 output된 data를 2계층 encoder로 전달한다.
- 2계층 decoder는 해당 프레임을 해석한다.
- 프레임으로부터 구분자를 떼서, 해당 data를 수신자쪽에서 확인할 수 있다!
Network Layer - 3 계층
inter-network에서 목적지 컴퓨터로 데이터를 전송하기 위한 모듈 (ip주소 활용)
⇒ 인터넷 상의 모든 컴퓨터가 통신할 수 있도록 할 수 있다! 수신자가 전 세계 컴퓨터로부터 데이터를 받을 수 있다!!
IP ? : 각 컴퓨터들이 갖는 고유한 주소
패킷 ? : IP주소 + Frame 인 data
inter-network ? : 수많은 네트워크들의 연결로 이루어진 네트워크
Routing ? : IP 주소를 이용해서 목적지를 찾는 과정
forwarding ? : 자신 다음의 라우터에게 데이터를 넘겨주는 것
참고) Router에도 패킷을 까보기 위해 1계층, 2계층, 3계층 decoder, encoder가 존재한다.
특징
- 운영체제 Kernel에 소프트웨어적으로 구현되어 있다.
- 패킷 정보 전송
- 정보 교환 및 중계 기능
- 경로선택 기능
- 트래픽 제어 기능
- 네트워크 연결 관리
- 체증 제어
다중 네트워크 상 - IP주소의 필요성
신호를 송신할 때를 생각해보자. 예를 들어, 구글서버에 (페이지를 요청하는 data에 해당하는)아날로그 신호를 송신하기 위해 www.google.com 을 입력하면, (미국 네트워크에 속한) 구글 서버에만 저장된 페이지가 내 화면에 보이는 것인데 이 때의 통신(송신-수신)이 어떻게 이루어지는지를 생각해보자
해당 게시물에서 확인했듯이, 우리가 www.google.com을 입력하면, DNS 서버를 통해 구글 서버의 IP주소를 획득할 수 있다. 결론적으로, data를 송신하기 위해서는 IP주소를 알고 있어야한다.
즉, 하나의 스위치 내에 등록 되어있는(:= 알고있는) 주소
3계층에서의 data 송-수신 과정
송신자 컴퓨터에서 다른 네트워크에 있는 컴퓨터로 패킷(IP주소 + Frame 인 data)을 보낸다고 가정하자.
- 송신자 컴퓨터에서 하나의 네트워크 내 송신자 측 가장 가까운 Router로 패킷(frame에 IP주소를 추가한 data)을 보낸다.
- 해당 Router에서 패킷을 까서, Router 내 등록된 IP주소를 확인한다. - Routing
- 없으면, 다시 패킷으로 변환해 가장 가까운 다른 Router로 해당 패킷을 보낸다. - forwarding
- 있으면, 다시 패킷으로 변환해 내부 컴퓨터(Host)로 해당 패킷을 보낸다.
- 2번 과정을 다시 반복해서, 목적지 IP주소가 있는 Router를 탐색한다. - Routing
- 3번 과정을 통해 찾은 Router에서, 해당 패킷을 특정 IP주소의 컴퓨터로 보낸다.
Transport Layer - 4 계층
: 송신자(컴퓨터)의 데이터가 수신자(컴퓨터) 내 최종 도착지인 프로세스까지 도달하게 하는 모듈 (port 번호 활용)
프로세스 ? : 간단히 말하면, 실행중인 프로그램
port 번호 ? : 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값
세그먼트(segment): port번호 + 패킷(IP주소 + 구분자 + data)로 이루어진 data로써, OSI 4 Transport Layer 기본 단위
컴퓨터는 데이터를 프로세스에게 나누어줘야 할 필요가 있다. ex) 카카오톡 채팅 데이터를 받았다
그런데, 어떤 데이터를 무슨 프로세스에게 줘야할 지 컴퓨터는 어떻게 알 수 있을까??
데이터를 받고자 하는 프로세스들은 포트 번호를 가져야 한다.
이는 곧 지금까지 위에서 소개한 내용들에서 수신자는 애초에 데이터를 보낼 때, 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트 번호
를 데이터에 붙여서 보내야 한다. 는 것을 의미한다!!
당연하게도, www.google.com는 www.google.com:80을 의미하는데, 구글 서버 내에서 여러 프로세스를 돌리고 있을 텐데, 구글 서버 내의 특정 프로세스에게만 나의 데이터를 보내기 위해서 포트번호를 사용한다. 즉, 우리는 구글 서버의 포트번호도 알고 있는 셈이다.
특징
- 운영체제 Kernel에 소프트웨어적으로 구현되어 있다.
- 세그멘테이션, 흐름제어, 오류제어 등을 제공한다.
세그멘테이션
- 상위 계층 데이터를 받으면, 세그먼트 단위로 나눈다.
- 연결 간 데이터 전송 ex) 유튜브 영상을 모두 로드한뒤 보여주는 게 아닌, 일부만을 먼저 유저에게 보여줄 수 있도록 해준다.
- 세그멘테이션을 통해 데이터 손실율 감소 ex) 큰 데이터를 보낼 때 연결이 중간에 끊겼을 때 가정
흐름 제어
- 데이터 전송량이 서로 다른 컴퓨터에서 흐름 제어를 지원한다.ex) 초당 10Mbps만의 데이터만 처리할 수 있는 컴퓨터에서 한 번에 50Mbps를 수신한다고 가정했을 때, 수신자측에서 송신자측에 전송량을 낮춰달라고 요구하는 것처럼 전송량을 제어하는 방식
ex) Stop & Wait 나 슬라이딩 윈도우 방식을 사용한다.
오류 제어
- 송신자 측에서 보낸 데이터가 데이터 손실되어 수신자측에 도착했다면, 송신자측에서 다시 해당 데이터를 전송해주는 방식
ex) FEC, BEC, ARQ
하나의 컴퓨터 내 여러 프로세스 - port번호의 필요성
만약 하나의 컴퓨터 내에 여러 데이터(여러 port번호가 추가된 패킷)가 들어왔다고 가정하자.
하나의 컴퓨터 내 여러 프로세스가 돌고 있을 텐데, 특정 프로세스로만 해당 데이터를 보내기 위해 port번호를 확인해서 데이터를 프로세스에게 전달하는 것이다!
Application Layer - 7 계층
ex) TCP/IP 소켓 프로그래밍
- 소켓 프로그래밍을 사용해 세션계층부터 응용계층까지의 기능은 사용자 프로그램이 구현한다.
- 운영체제의 Transport Layer에서 제공하는 API를 활용해서 통신 가능한프로그램을 만드는 것을 TCP/IP 소켓 프로그래밍, 또는 네트워크 프로그래밍 이라고 한다.
- 소켓프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로따로 만들어서 동작 시킬 수 있고 누구나 자신만의 application layer 인코더 디코더를 만들 수 있다.
- ex) 암호화, 압축, HTTP 인코딩, HTTP 디코딩, 통신회선 구축
- 즉, 누구나 Application Layer 프로토콜을 만들어 사용할 수 있다.
OSI 7 Layer와 TCP/IP Layer
사실 현대의 인터넷은 OSI 모델이 아니라, TCP/IP 모델을 따르고 있다.
또한 5,6계층은 7계층과 같은 TCP/IP 모델을 따르고 있으므로, 5,6계층은 간략히 설명하겠다
Presentation Layer
: 데이터의 변환, 압축, 암호화가 이루어지는 모듈
→ 서로 다른 통신 기기 간에, 서로 다른 인코딩을 사용할 수 있기 때문에 해당 계층에서 데이터 변환이 이루어진다.
Session Layer
: 세션을 열고 닫는 것을 제공하는 모듈
→ 체크포인트를 통한 ‘세션 복구’(동기화) 지원
참고
https://www.youtube.com/watch?v=1pfTxp25MA8
https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95
http://wiki.hash.kr/index.php/OSI_7_%EA%B3%84%EC%B8%B5
'OS' 카테고리의 다른 글
EXT4와 NTFS (0) | 2023.08.21 |
---|---|
여러 대의 컴퓨터가 통신하려면?? feat.Router (0) | 2023.07.20 |
TCP/UDP (0) | 2023.07.19 |
TCP/IP (0) | 2023.07.16 |
Process Thread (0) | 2023.07.12 |