OSI(Open Systems Interconnection) 모델은 네트워크 통신을 7개의 계층으로 나누어 각 계층이 특정한 기능을 담당하도록 정의한 모델입니다.
각 계층은 특정한 네트워크 기능을 수행하며, 이 계층 구조를 통해 복잡한 네트워크 통신을 체계적으로 관리할 수 있습니다. 아래는 OSI 7계층의 간단한 정의입니다.
1계층 Physical Layer
데이터를 보낼때 0과 1로 보낼수있는데
0과 1을 인코딩하여 아날로그 신호로 바꾼다음
랜선을 이용해서 이동한다음 다시 디코딩하여 0과 1을 받을수있음
1계층은 하드웨어적으로 구현되는것
1계층이 구현되는곳은 PHY칩이라는 건데
데스크탑의 메인보드나 서버에 장착되는 네트워크 인터페이스 카드에도 들어가있고 라우터나 스위치에도 들어가있습니다. 모뎀에도 들어있구요 IoT장치에도 들어가있고 통신이 필요한 많은 곳에서 장착되어 있습니다.
여러대의 컴퓨터가 통신하려면?
예림이가 혜령이랑 통신하려고 랜선을 연결했습니다. 근데 하빈이란 친구랑도 통신을하고 싶어서 추가로 랜선을 연결했어요
이렇게 계속 연결을 하다보면
그랑죠 나오겠죠? 비용적으로 너무 비효율적이기때문에 전선하나로 여러대를 효율적으로 연결시키고 싶어서 나온것이
이렇게 연결하면 되겠네요 효율적인데 문제가 하나 있어요 예림이는 혜림이한테만 데이터를 보내고싶은데 중간에 기정이가 훔쳐볼수 있게 되는거죠
그래서 전기가 통하는 구리선을 상자하나로 만들어서 다시 연결하면
이런 모양이 되는데요 상자를 똑똑하게 만들어서 예림이의 메세지의 목적지를 확인해서 혜림이에게 전달한다면 기정이가 메세지를 못보겠죠? 이런 기능을 수행하는 상자를 우리는 스위치라고 합니다.
스위치란 인트라넷 네트워크를 구축하는데 사용하는 장비로써 간단하게 설명하면 외부 인터넷이랑은 통신을 하지 못하고 같은 네트워크끼리만 통신할 수 있도록 도와주는 장치입니다.
자 그럼 이 그림에서 예림이가 혜림이에게 데이터를 보내고싶으면 어떻게 하면 좋을까요?
스위치끼리 연결해주면 통신을 할 수 있겠네요?
스위치를 라우터라는걸로 바꾼다음에 연결시키면 됩니다. 왜 스위치끼리 연결하면 안되냐? 라고 할수있는데 맞습니다 스위치끼리 연결해도 되긴합니다 단 조건이 있는데 같은 네트워크여야 합니다.
정확이는 같은 서브넷에서 가능합니다.
//////////////////////////////////////////////////////////////////////////////////////////////////////////
IP란 internet protocol 이라는 말인데 인터넷의 규약이라는 말이고
IP에는 2가지 버전이 있는데
하나는 IPv4와
IPv6가 있습니다.
IPv4 ⇒ 32bit 구조이고 ⇒ 2에 32제곱이면 대략 42억개 정도가 나오는데 정확히는
4,228,250,625개입니다.
IPv6 ⇒ 128bit 구조로 구성되어있습니다.
그럼 IPv4의 구조길이로는 전세계의 호스트의 갯수는 43억개가 안되는데 이걸 다 커버칠수있을까?
요즘날에는 IoT기기나 다른 아이피를 가지는 물건들이 많아지면서 아이피가 고갈되겠다 싶어
IPv6라는걸 만들었는데 이 버전은 향상된 기능도 제공하였습니다.
주소뿐만아니라 자동 구성기능, 향상된 말티캐스트 지원, IPsec의무지원 그리고 효율적인 라우팅등을 제공했죠
그런데 IPv6는 요즘날에 상용화가 안되요
많은 장점이 있지만 상용화가 느리게 진행되고 있습니다. 주요이유로는
- 기존 인프라와의 호환성이 문제입니다.
- 지금 사용하고있는 많은 네트워크 장비와 소프트웨어가 IPv4기반으로 구축되어있어서 IPv6로 전환하기 위해서는 많은 시간과 비용이 들어가게되죠
- 주소 변환 기술이(NAT)
- IPv4 주소 고갈 문제를 NAT으로 일시적으로 해결하고 있습니다.
- NAT란 공인 IP주소를 여러 사설 IP주로와 공유할 수 있게 해주는 기술입니다.
- 인식부족
- 네트워크 관리자와 기업들이 아직 IPv6의 필요성과 장점을 충분히 이해하지 못하고 있습니다.
- IPv4의 지속 가능성
- 아직도 v4는 대부분의 인터넷 트래픽을 처리하고있고 현재도 잘 작동하고 있기때문에 v6로의 전환이 필수적이지 않다고 느끼는 경우가 많습니다.
결론
IPv4는 인터넷 초기부터 사용된 프로토콜로, 현재 대부분의 인터넷 트래픽을 처리하고 있습니다. 그러나 주소 고갈 문제로 인해 IPv6가 도입되었습니다. IPv6는 더 큰 주소 공간과 향상된 기능을 제공하지만, 기존 인프라와의 호환성 문제, 전환 비용, 그리고 인식 부족 등으로 인해 상용화가 더디게 진행되고 있습니다. IPv6로의 완전한 전환은 시간과 노력이 필요하지만, 인터넷의 미래를 위해 필수적인 단계입니다.
그래서 나의 아이피를 검색하면 172.30.1.87이라고 나오는데 당연히 내부아이피고
이 아이피는 8진수로 4덩이로 표현되어있습니다. 그럼 8 * 4 하면 32비트 구성길이로 보이고있죠
172.30.1은 NetworkID이고 87은 HostID로 구성됩니다.
같은 서브넷이란
프롬프트에서 ipconfig를 입력하면 자기 컴퓨터의 네트워크 환경을 보여주는데
내 컴퓨터의 내부아이피 주소는 172.30.1.87이고
서브넷 마스크가 255.255.255.0 이라고 되었습니다.
이말은 이 네트워크에 할당된 내부아이피의 주소는 172.30.1.0~172.30.1.255 까지란 의미입니다.
그래서 내 아이피와 같은 서브넷의 네트워크란 말은 172.30.1.0~172.30.1.255 이 사이의 주소들이라는 것입니다.
다른방식으로 서브넷마스크를 표현하면 172.30.1.87/24 이런식으로도 똑같은 서브넷마스크와 아이피를 효율적으로 나타낼수 있죠
추가로.
보통 아이피를 할당할때는 172.30.1.0 은 할당 하지 않습니다.
그리고 마지막 번호인 255도 할당하지 않습니다.
0은 네트워크의 첫번째 주소로 네트워크 자체를 식별하는 데 사용됩니다 그래서 호스트들에게 할당하지 않습니다.
255는 브로드캐스트 주소라고 불리고 네트워크의 마지막 주소로 네트워크 내의 모든 호스트들에게 데이터를 보내는 데 사용됩니다. 브로드 캐스트 주소는 해당 서브넷의 모든 장치로 데이터를 전송할 때 사용됩니다.
그리고 1과 254도 잘 할당하지 않는데 호스트들의 게이트웨이로 쓰기때문에 할당을 않합니다.
게이트웨이란 호스트들이 외부 아이피로 데이터를 보낼때 사용되는 통로입니다. 모든 호스트들이 같은 게이트웨이를 사용하여 내보내기때문에 호스트들에게 할당하지 않습니다. 1을 호스트에게 할당하면 254를 게이트웨이로 사용합니다. 254를 호스트에게 할당하면 1을 게이트웨이로 사용됩니다.
내가 있는 네트워크에서 외부아이피를 확인하고 싶다면
curl ifconfig.me
프롬프트에 이렇게 쓰면 나의 외부아이피주소를 알수있습니다.
또 하나 알아야할게 MAC주소인데 이건 컴퓨터, 핸드폰, 스마트워치 등등 기기에 할당되는 고정된 그 기기만의 주민등록증 같은것인데 이건 같은 종류의 기기라도 중복될 수 없는 주소입니다
ipconfig /all 이란 명령어를 프롬프트에 치게되면 이러한 화면이 나오는데 여기 물리적주소라는것이 MAC주소인것입니다.
게임사에서 치팅프로그램을 사용하여 게이머에게 IP주소로 벤을 때렸다. MAC주소로 벤을 때렸다 이런말이 있는데
말그래도 IP벤은 IP에 벤을 한것으로 게이머는 외부아이피만 바꿔서 그래도 게임을 하면됩니다
근데 MAC벤을 때렸다? 이건 절대 못풀게된다 오로지 방법은 컴퓨터를 바꾸는것뿐.. 입니다
정확히말하면 MAC주소는 네트워크 인터페이스 카드(NIC)에 할당된 고유 주소이고 보통 요즘날에 컴퓨터에는 메인보드에 통합되어있습니다. 그래서 MAC벤을 풀려면 메인보드만 바꾸면 풀수 있습니다.
노트북에 설치되어 나오는 윈도우같은 제품은 다 MAC주소를 확인하여 그 노트북에서만 사용할수 있는 윈도우를 깔아줍니다.
//////////////////////////////////////////////////////////////////////////////////////////////////////////
이말은 외부아이피를 쓰지않고 내부아이피로 연결되어야 한다는 말입니다.
지금 그림에 나오는 두개의 네트워크는 멀리 떨어진 네트워크인거고 라우터장비를 통해서 외부아이피를 이용해서 다른 라우터와 연결하고 있다는 것입니다.
라우터도 스위치랑 비슷한 역할을 하지만 라우터가 하는일은 한가지가 더있는데 서로 다른 네트워크 간의 데이터 패킷을 전달하고 네트워크 간의 트래픽을 관리합니다. 주로 LAN과 WAN(Wide Area Network) 간의 연결을 위해 사용됩니다.
즉 라우터간의 연결은 서로 다른 네트워크 간의 연결을 담당하고
스위치는 같은 네트워크끼리 연결을 담당합니다.
그럼 집에있는 공유기는 라우터 일까 스위치일까?
집에있는 공유기는 라우터입니다. 내부 네트워크도 구축하고 외부 네트워크와도 연결시켜 주고있으니 라우터입니다.
그럼 이 그림에서 라우터와 스위치를 한번 구분해보실까요
스위치로 컴퓨터를 연결한다음에 가운데에 라우터로 묶어서 외부 라우터와 연결하는게 비용적인 측면에서 제일 이상적인 방법이죠
이렇게 크게 구성되어 있는것이 인터넷이라는 것입니다.
2계층 Data-Link Layer
같은 네트워크에 연결된 컴퓨터들이 한번에 예림이의 컴퓨터로 데이터를 보내게되면 데이터를 구분하기가 힘든데 이걸 해결하기위해 각 컴퓨터는 데이터를 보낼때 특정한 비트열을 붙입니다.
이렇게 되면 예림이는 데이터를 쉽게 구분하여 각 컴퓨터에게 데이터를 잘 받을수 있습니다.
같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈
Framing은 Data-link Layer 에 속하는 작업들 중 하나입니다.
앞에서 시작과 끝을 1111,0000으로 감싼작업을 Framing이라고 합니다.
1계층과 2계층을 한번에 동작하는것을 보면 이렇게 작동됨
Data-link Layer는 랜카드에서 기술이 구현됩니다.
2계층도 1계층처럼 하드웨어적으로 구현되어 있습니다.
3계층 Network Layer
A라는 컴퓨터에서 B라는 컴퓨터로 데이터를 보내고싶으면 B라는 컴퓨터의 아이피를 알아야합니다
B라는 컴퓨터가 네이버 데이터베이스라고 가정한다면 우리는 웹브라우저에 www.naver.com이라는 주소로 데이터를 보낼수 있는데 이런일을 하는게 DNS서버가 하는 일입니다.
DNS서버는 따로 공부하시고
어쨌든 A가 55.10.54.75라는 주소로 데이터를 보내기위해서 물리적으로 유일하게 연결된 ‘가’라우터에게 패킷을 보내고 ‘가’라우터는 패킷을 열어서 목적지 아이피를 확인합니다. 그리고 자기에게 연결된 컴퓨터들의 아이피를 확인을 하는데 목적지주소와 일치하는 주소가 없기때문에 ‘가’라우터는 ‘마’라우터에게 패킷을 전송합니다.
‘마’라우터입장에서는 이제 고민합니다. 이 패킷을 열어봤는데 ‘나’에게 보내야할지 ‘바’에게 보내야할지 모르기때문인데요. 이때 사용되는 기술이 라우팅테이블이라는 것입니다.
라우팅테이블이란 일종의 전화번호부같은건데 연결된 이웃 라우터끼리 어디부터 어디까지의 아이피는 저쪽으로 어디부터 어디까지는 저쪽으로 라는 데이터를 테이블로 만들어 놓은것을 말합니다.
자 그럼 다시 돌아가서
A는 B의 주소로 목적지로 하는 패킷을 생성합니다
A는 패킷을 유일하게 연결된 ‘가’라우터에게 패킷을 전송합니다
‘가’라우터는 패킷을 확인하고 목적지 아이피를 확인하고 55.10.54.75에 대한 명확한 경로가 라우팅 테이블에 없다면 ‘가’라우터는 기본 경로를 사용해서 패킷을 ‘마’에게 전달합니다.
‘마’는 아이피를 확인하고 자기 라우팅테이블을 확인합니다.
라우팅테이블에는 이 아이피의 목적지로 가야되면 ‘바’라우터로 가야된다는것이 기록되어 있기때문에 ‘바’ 라우터로 보냅니다.
‘바’라우터도 라우팅테이블을 열어서 이패킷을 ‘라’라우터로 보내야한다는걸 알고 ‘라’에게 보내게 됩니다.
이런식으로 라우터는 아이피와 자기의 라우팅 테이블을 비교하여 패킷을 어디 라우터로 보내야하는지 알수있습니다.
라우팅 테이블은 물리적으로 연결된 라우터끼리의 정보만 가지고 있으며 라우터는 이 정보를 기반으로 최적의 경로를 결정합니다.
그럼 ‘마’입장에서의 라우팅 테이블 예시를 보면
목적지 네트워크
|
서브넷 마스크
|
다음 홉
|
인터페이스
|
192.168.1.0
|
255.255.255.0
|
'가' 라우터
|
eth0
|
192.168.2.0
|
255.255.255.0
|
'나' 라우터
|
eth1
|
55.10.54.0
|
255.255.255.0
|
'바' 라우터
|
eth2
|
이런식으로 되어있기때문에 ‘바’에게 보낼수 있습니다.
그래서 Network Layer란?
- 수많은 네트워크들의 연결로 이루어지는 inter-network 속에서
- 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해
- IP 주소를 이용해서 길을 찾고(routing)
- 자신 다음의 라우터에게 데이터를 넘겨주는 것(forwarding)
3계층의 Network Layer기술은 운영체제의 커널에 소프트웨어적으로 구현되어 있습니다.
4계층 Transport Layer
인터넷이 이제 연결되었고 패킷을 다른 컴퓨터들로 부터 받았습니다.
그런데
코코아톡으로 온 패킷, 배달의 부족으로 온 패킷이 도착했는데 이걸 어떻게 나눠줘야 할까요
포트번호로 식별하여 넘겨주게 됩니다.
이렇게 잘 도착했죠?
그래서 Transport Layer란
- Port 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 까지
- 데이터가 도달하게 하는 모듈 입니다.
라고 끝낼 뻔 했으나 중요한 점이 몇가지가 더 있습니다.
- Segmentation 과 Reassembly 새그맨테이션과 리어셈블리라는 조립입니다.
- 전송 계층은 상위 계층에서 받은 데이터를 작은 조각으로 분할하여 전송합니다.
- 수신측에서는 이 세그먼트를 원래의 데이터로 조립합니다.
- TCP는 이러한 작업을 수행하는 대표적인 프로토콜입니다.
- 흐름 제어
- 데이터 전송 속도를 조절하여 송신 측과 수신 측 간의 데이터 처리 속도를 맞춥니다.
- 이는 데이터 전송 중에 발생할 수 있는 혼잡을 방지합니다.
- 오류 제어
- 데이터 전송 중 발생할 수 있는 오류를 검출하고 수정합니다.
- TCP는 오류 검출을 위해 체크섬을 사용하며, 오류가 발생한 세그먼트를 재전송 요청합니다.
- 연결 설정 및 해제
- 데이터 전송 전에 연결을 설정하고, 전송이 완료되면 연결을 해제합니다.
- TCP는 3-way handshake를 통해 연결을 설정하고, 4-way handshake를 통해 연결을 종료합니다.
1~4계층까지 동작 하게되면 이런식으로 동작됩니다.
Transport Layer의 기술은 3계층의 Network Layer와 마찬가지로
운영체제의 커널에 소프트웨어적으로 구현되어 있습니다.
7계층 Application Layer
5계층: 세션 계층 (Session Layer)
세션 계층은 통신 세션을 관리하는 역할을 합니다. 이 계층의 주요 기능은 다음과 같습니다:
- 세션 설정, 유지, 종료:
- 동기화:
- 체크포인트와 복구:
세션 계층의 예시
- 로그인 세션: 사용자가 웹사이트에 로그인하면 세션 계층이 사용자의 로그인 상태를 유지합니다. 사용자가 로그아웃할 때까지 세션이 유지됩니다.
- 원격 데스크톱: 원격 데스크톱 연결은 세션 계층의 기능을 사용하여 두 컴퓨터 간의 연결을 설정하고 유지합니다.
6계층: 표현 계층 (Presentation Layer)
표현 계층은 데이터의 형식화와 변환을 담당합니다. 이 계층의 주요 기능은 다음과 같습니다:
- 데이터 변환:
- 암호화와 압축:
- 구문과 의미:
표현 계층의 예시
- 데이터 암호화: 웹 브라우저에서 HTTPS를 사용하여 웹 서버와 통신할 때, 표현 계층은 데이터를 암호화합니다.
- 이미지 형식 변환: 이미지 파일을 서로 다른 형식(JPEG에서 PNG로)으로 변환하는 작업이 표현 계층에서 수행됩니다.
요약
- 세션 계층(Session Layer):
- 표현 계층(Presentation Layer):
결론
세션 계층과 표현 계층은 네트워크 통신에서 중요한 역할을 합니다. 세션 계층은 통신 세션의 관리와 동기화를 담당하고, 표현 계층은 데이터 형식의 변환과 보안을 처리합니다. 이 두 계층은 데이터의 효율적이고 안전한 전송을 위해 협력합니다.
이를 통해 5계층과 6계층의 주요 기능과 역할을 이해할 수 있습니다. 각 계층은 네트워크 통신의 다른 측면을 다루며, 전체 통신 프로세스를 원활하게 만듭니다.
그냥 읽어보시고 이렇게 넘어가고 바로 7계층으로 가는 이유는
현대의 인터넷은 OSI 7계층 모델을 따르는게 아니라 TCP/IP 모델을 따르고 있어서 입니다.ddddddddddddddddddddddddddddddddddddddd
TCP/IP 모델도 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델인데
OSI가 TCP/IP한테 시장 점유 싸움에서 졌기 때문에입니다.
이렇게 두개의 모델이 있는데 이 둘이 싸워서 TCP/IP가 이겼고 시간이 지나서
TCP/IP가 업데이트를 했는데
이렇게 업데이트를 했음… OSI 7계층중에 1~4계층이 똑같아짐 그리고 7계층인 Application Layer만
그대로 있네요
TCP/IP 소켓 프로그래밍
- 운영체제의 Transport Layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것을 TCP/IP 소켓 프로그래밍, 또는 네트워크 프로그래밍 이라고 합니다.
소켓 프로그래밍 만으로도
클라이언트 , 서버 프로그램을 따로따로 만들어서 동작 시킬 수 있는데요
뿐만 아니라 , TCP/IP 소켓 프로그래밍을 통해서 누구나 자신만의 Application Layer 인코더와 디코더를 만들 수 있습니다.
누구든 자신만의 Application Layer 프로토콜을 만들어서 사용할 수 있다는 뜻입니다.
Application Layer도 다른 Layer와 마찬가지로 인코더와 디코더가 있는데
대표적인 Application Layer프로토콜인 HTTP 로 인코딩, 디코딩을 살펴보면
이런식으로 뭐해라는 문자를 서버에서 클라이언트에게 보내게되면 인코딩과정을 거칠때
뭐해라는 문자뿐만 아니라 헤더에 status code와 그밖에
200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
이런 데이터도 같이 넣어서 보낼수 있습니다.