OSI 7Layer

등장 배경
- 복잡한 네트워크의 상호 연결 구조를 표준화하기 위해 만든 참조 모델
- 1980년대 초, 통신 기술이 발달하며 PC가 보금되면서 이기종 장치 간의 네트워크 연결의 필요성이 대두됨
그러나 당시의 컴퓨터 등 장치들의 구조가 제각기 달라서 네트워크 연결이 어려웠음
- 이를 해결하기 위해 ISO에서 다양한 장치 간에 호환성을 확보하여 상호 연결할 수 있도록 네트워크의 표준 모델을 만듬
이렇게 등장한 것이 OSI 참조 모델 또는 OSI 7계층 모델
- 네트워크의 수많은 구성 요소들을 크게 7개의 계층으로 범주화하고, 각 계층의 역할을 규정함
네트워크의 복잡한 동작을 7개의 계층 간의 상호작용으로 설명
OSI 모델 vs TCP/IP 모델

1계층 : 물리 계층
- 장치 간 전기적, 물리적 연결을 명세
컴퓨터의 디지털 신호(비트)를 물리적인 전기 신호로 변환하는 책임을 가지며, 변환된 전기 신호를 네트워크를 통해 한 장치에서 다른 장치로 전송하는 책임을 가지는 계층

2계층 : 데이터링크 계층
- LAN 내에서의 데이터의 송신자 및 수신자를 명세하고, 에러를 검출
프레임에 송신자 및 수신자의 MAC 주소를 기록하고, 전송 과정 중에 발생한 오류를 검출

Network Interface Card(NIC)
- LAN과 컴퓨터를 연결하여 데이터 통신을 가능하게 하는 하드웨어 장치
- NIC는 자신만의 고유한 식별자를 가지는데, 이를 MAC 주소 라고 함
MAC 주소

- NIC에 할당된 고유 식별자
NIC 제조 업체가 하드웨어가 직접 할당
이더넷 및 와이파이 등 대부분의 네트워크 기술에서 네트워크 주소로 사용되며, LAN 내에서 장치를 식별하는 데에 사용
48비트의 16진수로 구성
3계층 : 네트워크 계층

- 서로 다른 네트워크 간에 데이터를 전송
다른 네트워크로 데이터를 보내려면,
- 목적지를 지정하고
- 목적지에 도달하는 최적의 경로를 선택해야 함
IP 주소를 통해 목적지를 지정하며, 라우터를 통해 패킷의 경로가 결정
Internet Protocol

- Inter + Network Protocol
서로 다른 네트워크 간 데이터 통신을 위해 규정한 약속(규약)들의 집합
네트워크 간 데이터를 주고 받기 위해 우리 이렇게 통신하기로 약속하자
- 비신뢰성
데이터 패킷이 네트워크 중간 어딘가에서 유실될 수 있음
- 비연결성
송신자와 수신자를 연결하지 않고, 그저 패킷에 목적지를 적어서 송신하기만 함
각 패킷은 개별적으로 라우팅되어 사로 다른 경로를 통해 목적지로 전송될 수 있음
- IP 주소를 사용하여 목적지 호스트를 식별
패킷 헤더 내 Soutce Address, Destination Address
IP 주소

- 네트워크에 연결된 장치들을 식별할 수 있도록 각각의 장치에 부여되는 고유의 주소
초기에는 32비트로 이루어진 IPv4가 먼저 만들어짐
인터넷 사용자가 급증함과 동시에 IP 주소를 효율적으로 분배하지 못해 IP 주소가 낭비되었으며, 결과적으로 남은 IPv4 주소가 고갈되어감
IP 주소 클래스

- 주소 부족의 원인인 주소 낭비 문제를 해결하기 위해 도입
- IP 주소를 네트워크 부분과 호스트 부분으로 나누고, 네트워크 부분의 크기에 따라 A~C 클래스로 나눔
네트워크 부분 : 네트워크를 식별하기 위한 부분
호스트 부분 : 네트워크 내의 장치를 식별하기 위한 부분
- IP 주소가 필요한 기관 및 조직의 크기에 따라 적절한 클래스의 IP 주소 범위를 할당해주는 방식으로 주소 낭비 문제를 부분적으로 해결
서브넷

- 주소 낭비 문제를 조금 더 해결하기 위해 서브넷 개념이 등장
- 네트워크를 더 효율적으로 사용하려면, 주소 범위 내에서 남는 IP가 최소화되어야 함
즉, 클래스 기반 IP 구조보다 더 세밀하게 네트워크를 나눠서 사용할 필요가 있음
- 예를 들어, B 클래스 IP 주소 범위를 할당받은 기관은 약 6.5만개의 주소를 사용할 수 있으나, 이를 효율적으로 활용하기가 어려움
그에 따라 자체적으로 6.5만개의 IP 주소를 한 번 더 각 부서를 기준으로 하여 그룹(=서브넷)으로 세분화하여 사용하기로 함

서브넷 마스크

- 여기에서 호스트 부분을 한 번 더 나누기 위해 사용한 비트는 결국 네트워크를 구분하는 비트가 됨
금융사업부, 컨설팅사업부, 교육사업부, 영업사업부의 네트워크를 구분하기 때문
그에 따라, 해당 비트까지 네트워크 부분으로 간주
- 이러한 서브넷 기반 IP 주소 체계에서, 네트워크 부분을 식별하기 위해 서브넷 마스크를 사용
네트워크 부분을 1로, 호스트 부분을 0으로 나타냄
CIDR
- Classless Inter-Domain Routing
클래스가 없는 IP 주소 할당 체계
- 클래스, 서브넷 등의 방법을 통해 주소 낭비 문제를 최소화하고자 했지만, 그럼에도 IP 주소 부족 문제는 지속됨
그에 따라, IP 주소 할당 단계에서 클래스 단위로 할당하는 것이 아니라 좀 더 세밀하고 유연하게 주소 범위를 할당하기 위해 CIDR이 등장
- 기존에는 클래스에 따라 24, 16, 8개의 범위 내에서만 네트워크 부분을 결정할 수 있었지만, CIDR 등장 이후로는 보다 세밀하고 자유롭게 네트워크 부분의 비트 수를 결정할 수 있음
- 네트워크 부분을 가리키는 비트의 수를 'IP주소\n'과 같이 표기

IPv6
- CIDR까지 등장하면서 IPv4의 주소 부족 문제는 최대한 완화되었지만, 그럼에도 구조적으로 완전히 해결될 순 없음
그에 따라 장기적으로 IPv4의 주소 부족 문제를 해결하고자 차세대 IP인 IPv6가 등장
- IPv6 주소는 비트 수를 128bit(IPv4의 4배)로 늘려 가용 IP 주소 개수를 획기적으로 증가 시킴
16진수로 표기하며, 2옥텟씩 콜론으로 나누어서 표기
아직까지는 IPv4가 많이 사용되고 있어, 점진적으로 IPv6로 전환하고 있는 중

공인 IP와 사설 IP
공인 IP
- 인터넷을 개통하면 받게 되는 IP로, 전 세계에서 고유하게 할당됨
인터넷 상에서 특정 장치 및 네트워크를 식별
- ICANN이 국가별로 사용할 IP 대역을 관리하며, 한국인터넷진흥원이 우리 나라의 대역을 관리
SK, KT, LG 등 인터넷 서비스 공급자가 사용자게 공인 IP를 발급해 줌
사설 IP
- 회사, 가정 등의 내부 네트워크에서만 사용되는 IP로, 네트워크 안에서만 고유하게 존재
네트워크 내에서 특정 장치를 식별
- 사설 IP는 외부에서 접근할 수 없으며, 따라서 보안을 위한 목적으로 사용
외부 네트워크와 내부 네트워크 간 통신이 필요할 때에는 NAT 장치를 통해 공인 IP - 사설 IP 간 변환이 필요

Network Address Translation
사설 네트워크 내의 장치가 외부 네트워크와 소통할 필요가 있을 때, 사설 IP - 공인 IP 간 주소를 변환하는 것

- 보안을 위해 독립된 사설 네트워크를 구성했지만, 외부 인터넷과 통신할 필요가 있을 수 있음
- 이러한 경우, 특정 장치의 사설 IP를 공인 IP로 변환해야 외부와 통신이 가능
- 이 때, 공인 IP와 사설 IP 간 주소 변환을 해주는 장치를 NAT 장치라고 함
SNAT, DNAT, PAT 등의 동작을 수행
Router
서로 다른 네트워크 간에 데이터 패킷을 최적의 경로를 찾아 전달해주는 장치

- 홉 바이 홉 라우팅(Hop By Hop Routing)
- 인터넷에는 수많은 라우터들이 존재하며, 각 라우터들을 홉(Hop)이라고 함
- 각 홉들은 서로 연결되어 있으며, 거리, 지연 시간, 장애 발생 여부 등 서로의 상태를 공유
- 각 홉은 인접한 홉 중 상태가 가장 좋은 홉에게 패킷을 포워딩 함
- 이 때, 인접한 라우터의 상태는 라우팅 테이블에 기록되며, 라우팅 테이블의 정보를 바탕으로 라우팅 프로토콜에 의해 최적의 넥스트 홉이 결정
4계층 : 전송 계층
- 종단 간(End to End) 통신을 담당
- 종단 간 통신
여기서 종단은 송신 프로세스와 수신 프로세스를 의미
3계층의 IP를 통해 인터넷을 건너온 데이터가 어떤 프로세스가 보낸 데이터고, 어떤 프로세스로 전달되어야 하는지를 명시
송수신 프로세스 간에 통신 목적에 따라 신뢰성, 속도, 또는 보안을 제공

Port
프로세스가 네트워크를 통해 통신할 수 있도록 운영체제로부터 부여 받은 고유 식별 번호
-
통신의 시작점과 끝점은 호스트가 아니라 프로세스
- 호스트 : 네트워크와 연결된 장치로, 통신 과정에서 물리적 주체에 해당
- 프로세스 : 호스트 내에서 실행되고 있는 개별 프로그램 또는 독립적인 실행 단위로, 통신 과정에서 논리적 주체에 해당
-
데이터를 주고 받는 실체는 호스트 내의 프로세스이기 때문에, 통신 시 어떤 프로세스 데이터는 보내는지, 어떤 프로세스 데이터를 받는지를 명시해야 함
- 이를 위해 호스트의 운영체제는 자신의 실행시키고 있는 프로세스를 식별할 수 있도록 고유 번호를 부여하는데, 이것이 포트 번호
- 즉, IP를 통해 네트워크 상에서 호스트가 존재하는 논리적 위치를 식별하고, 포트 번호를 통해 호스트 내의 프로세스를 식별

Transmission Control Protocol
TCP는 4계층 프로토콜로, 헤더에 포트 번호를 명시하여 송수신 프로세스를 식별하며, 통신의 신뢰성을 보장한다.
- 신뢰성 보장
즉, 데이터의 오류, 누락 등이 발생하지 않도록 데이터 전송을 적극적으로 제어
송신자와 수신자 간에 연결을 먼저 수립
TCP 3 Way Handshake
이후 데이터 통신 과정에서 TCP는 순서 제어, 흐름 제어, 오류 제어, 혼잡 제어 등의 역할을 수행
- 순서 제어 : 데이터 패킷이 순서대로 전달될 수 있도록 제어
- 흐름 제어 : 수신자가 받을 수 있는 만큼씩 데이터를 쪼개서 전달
- 오류 제어 : 데이터 유실 및 오류 감지 시 데이터를 다시 전송
- 혼잡 제어 : 네트워크 혼잡 정도에 따라 데이터 송신량을 조절

User Datagram Protocol

UDP는 4계층 프로토콜로, 헤더에 포트 번호를 명시하여 송수신 프로세스를 식별
- 통실의 빠른 속도 보장
- TCP와 달리 연결을 수립 X
따라서 신뢰성 보장을 위한 여러 통신 과정 제어를 수행할 수 없지만, 이러한 과정이 생략되므로 빠른 속도 보장
- 데이터의 신뢰성 보장 메커니즘은 애플리케이션 레벨에서 따로 처리해주어야 함
스트리밍 서비스, 화상 회의, 온라인 게임 등 실시간성이 중요한 분야에 사용
IP vs UDP vs TCP

Transport Layer Security
-
초기에 SSL(Secure Socket Layer)이라는 이름으로 만들어졌지만, 기능이 개선되며 TLS로 표준화
-
4계층 상위에서 네트워크 통신에 기밀성, 무결성, 인증 등의 보안 기능을 제공하는 프로토콜
기밀성 : 통신 과정 중 데이터가 탈취되어도 내용을 이해할 수 없어야 함
무결성 : 누군가에 의해 데이터가 악의적으로 변조되지 않아야 함
인증 : 통신하고자 하는 상대가 의도한 상대인지 확인함

-
과정
클라이언트 - 서버 간에 TLS 3 Way HandShake를 통해 연결을 수립
- 이 과정에서 클라이언트는 상대 서버가 내가 통신하고자 하는 서버가 맞는지 확인하며(인증), 서로 핫용할 암호화 알고리즘을 합의하고, 대칭키를 생성
- 연결 수립 후 데이터를 전송할 때, 전송되는 모든 데이터는 합의한 암호화 알고리즘으로 암호화해서 전송(기밀성)
- 데이터를 수신할 때마다 데이터를 양 측이 가지고 있는 대칭키와 암호화 알고리즘으로 암호화를 시도
- 결과가 같으면 데이터 변조가 없는 것으로 간주, 결과가 다르면 데이터가 변조된 것으로 간주(무결성)

5계층 : 세션 계층
세션이란, 송수신 측 간 일정 기간 동안 지속되는 논리적 통신 연결
- 송수신 측간에 데이터 통신을 위한 논리적 연결인 세션을 수립, 유지, 종료함
클라이언트와 서버 간 통신이 시작될 때 세션을 설정하고, 통신하는 동안 세션을 유지 및 관리하며, 전송 완료 시 세션을 종료
- 송수신 양 측간 대화 방식을 관리
Half-Duplex(반이중) : 한 번에 한 쪽만 송신이 가능하며, 두 장치가 번갈아가며 데이터를 주고 받음
Full-Duplex(전이중) : 한 번에 양 쪽에서 송신이 가능하며, 양방향 통신이 동시에 일어날 수 있음
- 동기화 및 세션 복구를 수행
통신 과정 중간에 동기화 지점을 설정하며, 전송 오류 및 네트워크 장애 발생 시에 마지막 동기화 지점부터 세션을 복구
6계층 : 표현 계층
다양한 장치가 데이터를 해석할 수 있또록 데이터의 형식을 관리하고 변환하는 계층
- 인코딩 및 디코딩
데이터가 다른 장치에서도 올바르게 해석될 수 있도록 일관된 형식으로 변환
원본 데이터 - 바이너리 데이터 간 변환
- 암호화 및 복호화
데이터 보호를 위해 암호화 및 복호화를 수행
원본 데이터 - 암호화된 데이터 간 변환
- 압축 및 압축 해제
데이터 전송 속도와 효율성을 높이기 위해 압축을 수핵하고, 데이터 수신 시 압축 해제를 수행함
원본 데이터 - 압축 데이터 간 변환
7계층 : 응용 계층
- 애플리케이션과 네트워크 간의 인터페이스 및 통신 방법을 제공
즉, 애플리에킹션이 네트워크를 통해 통신할 때, 어떻게 통신해야 하는지를 규정한 프로토콜을 제공
예를 들어, 브라우저에 google.com을 입력하면, DNS를 거쳐 도메인이 IP로 변환되고, google.com의 서버와 HTTPS 프로토콜을 통해 요청을 보내고 응답을 받음
- 프로토콜
HTTP, HTTPS(HTTP + TLS), DNS, SSH 등