본문 바로가기
네트워크 기초

DevOps Day 23 (4.6) 네트워크 기초_OSI 7계층과 TCP / IP 4계층

by Jackykim 2023. 4. 6.

OSI 7계층과 TCP / IP 4계층

OSI 7계층은 데이터 플로우 계층과 애플리케이션 계층으로 구분 있고 계층 모델 모두 물리적인 계층에 가까운 부분을 하위 계층(Lower Layer)라고 부르며, 개발자가 직접 접하게 되는 애플리케이션에 가까운 부분을 상위 계층(Upper Layer)이라고 부릅니다.

 

OSI 7계층의 간단한 설명
-
물리 계층 : 주로 물리적 연결과 관련된 정보를 정의하고 들어온 전시 신호를 전달하는 목적

- 데이터 링크 계층 : 물리 계층에서 들어온 전기 신호를 모아 알아 있는 데이터 형태로 처리 합니다. (주소 정보르 저의하고 출바지 + 도착지 주소를 확인 데이터 처리 합니다)

- 네트워크 계층 : IP주소와 같은 논리적인 주소를 정의합니다. 또한 라우터를 통해 정의한 IP주소를 이해하고, 이를 사용해 최적의 경로를 찾아 패킷을 전송합니다.

- 전송 계층 : 데이터들이 실제로 정상적으로 보내지는지 확인하는 역할을 합니다. 네트워크 계층에서 사용되는 패킷은 유실되거나 순서가 바뀌는 경우가 있는 , 이를 바로 잡아주는 역할도 담당합니다.

- 세션 계층 : 세션 계층은 단의 프로세스가 연결을 성립하도록 도와주고, 작업을 마친 후에는 연결을 끊는 역할을 합니다.

- 프레젠테이션 (표현) 계층 : 변역기 같은 역할을 수행합니다. MIME 인코딩이나 암호화, 압축, 코드 변환과 같은 동작이 이루어집니다.

- 애플리케이션 (응용) 계층 : 애플리케이션 프로세스를 정의하고, 애플리케이션 서비스를 수행합니다. 대표적인 프로토콜로는 HTTP, FTP, SMTP 등이 있습니다.

 

Application Layer – HTTP
Http/1.1, HTTP/2 TCP 기반이며 HTTP/3 UDP 기반 프로토콜입니다.

 

HTTP 특징
무상태 프로토콜 – Stateless : HTTP에서는 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜입니다. 무상태 프로토콜이라면 클라이언트 A 요청할 이미 필요한 데이터를 담아서 보내기 때문에 아무 서버나 호출해도 됩니다. 만약 메인 서버에 장애가 생기더라도 다른 서버에서 응답을 전달 하면 되기 때문에 재요청이 필요 없습니다.
장점 : 서버 확장성 높음 (스케일 아웃)
        :
응답 서버를 쉽게 바꿀 있가 때문에 무한한 서버 증설이 가능합니다.

 

단점 : 클라이언트 추가 테이터 전송
한계 예시 : 로그인이 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 있지만 로그인이 필요한 서비스라면 유저의 상태를 유지해야 되기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지합니다.

 

상태 유지 (Stateful)내용들을 기역하고 있습니다. (항상 같은 서버가 유지되어야 합니다)
만약 서버에 장애가 생긴다면 정보가 날아가 처음부터 다시 서버에 요청해야합니다.
Stateful
중간에 바뀌면?

그래서 Stateful 상태에 중간에 바뀌면 안됨 바뀌 상태 정보를 미리 알려줘야 합니다.
무상태 : 중간에 바뀌어도 됩니다, 갑자기 내용 증가해도 추가 투입 있습니다, 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 있습니다.

 

Connection Oriented vs connectionless
Connection Oriented
: 연결을 유지하는 모델 : TCP/IP 경우 기본적으로 연결을 유지합니다.
클라이언트 1,2 요청을 보내지 않더라도 계속 연결을 유지해야 하고 계속 유지하는 서버의 자원이 계속 소모됩니다.

Connectionless 비연결성 : 연결을 유지하지 않는 모델. 비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊습니다.
트래픽이 많지 않고, 빠른 응답을 제공할 있는 경우,  비연결성의 특징은 효율적으로 작동합니다 트래픽은 많고 서비스가 경우 한계가 있습니다.
한계 : TCP/IP 연결을 새로 맺어야 (-3 way handshake) 시간 추가
        :
사이트를 요청하면 HTTP, JS, CSS, 추가 이미지 수많은 자원이 함께 다운로드 됩니다. 해당 자원들은 각각 보낼 때마다 연결 끊고 다시 연결 반복하여 비효율적으로 HTTP 지속 연결 (persistent connections) 문제 해결. 기존 클라이언트 -> 서버 응답이 0.9초면 지속연결 통해 0.5초로 단축 있습니다.

Network Layer – IP IP Packet
수많은 인터넷 수많은 노드들을 지나 어떻게 클라이언트와 서버가 통신할 있을까요?

 

IP 주소 부여 : IP(인터넷 프로토콜) 주소를 컴퓨터에 부여하여 이를 이용해 통신합니다.

IP 지정한 IP 주소에 패킷이라는 통신 단위로 테이터 전달합니다.

 

IP 패킷 정보 : 패킷은 Pack + Bucket 합쳐진 언어 입니다. IP 패킷은 이를 데이터 통신에 적용한 것이라고 보면 됩니다.

클라이언트 패킷 전달 : 패킷 단위로 전송을 하면 노드들은 목적지 IP 도달하기 위해 서로 데이터를 전달합니다.

서버 패킷 전달 : 서버에서 무사히 데이터를 전송받는다면 서버도 이에 대한 응답을 돌려줘야 합니다. 서버 역시 IP 패킷을 이용해 클라이언트에 응답을 전달합니다.

 

IP 프로토콜 한계
-
비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
-
비신뢰성 : 중간에 패킷이 사라질 있음, 패킷의 순서를 보장할 없음 (데이터 용량이 경우)

 

Transport Layer -TCP vs UDP
TCP/IP
패킷 정보 : TCP 세그먼트에는 IP 패킷의 출발지 IP 목적지 IP 정보를 보완할 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 포함합니다.

 

TCP (Transmission Control Protocol) 특징 :
- 3 way Handshake :
1.
클라이언트는 서버를 접속을 요청하는 SYN 패킷 전송
2.
서버는 SYN 요청 받고 수락한다는 ACK+SYN 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 대기합니다.
3.
클라이언트가 서버에게 ACK 보내면 이후로부터 연결이 성립되며 데이터를 전송할 있습니다. 만약 서버가 꺼져있으면 클라이언트가 SYN 보내고 서버에서 응답이 없기 때문에 데이터를 보내지 않습니다.

 

- 데이터 전달 보증 : TCP 데이터 전송이 성공적으로 이루어진다면 이에 대한 응답을 돌려주기 때문에 IP 패킷의 한계인 비연결성을 보완할 있습니다.

 

- 순서 보장 : 만약 패킷이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청할 있습니다. 이를 통해 IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음) 보완할 있습니다.

UDP 특징 : 사용자 데이터그램 프로토콜 (User Datagram Protocol) : UDP IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜입니다. TCP 처럼 3 way handshake 방식을 사용하지 않아 빠른 속도를 보장하지만 신뢰성이 낮음

 

소켓 (Socket)
프로그램이 네트워크에서 데이터를 송수신 있도록, "네트워크 환경에서 클라이언트와 서버가 서로 연결할 있게 만들어진 연결부" 의미합니다. 네트워크 개의 프로세스 양방향 통신의 하나의 엔드포인트이며, 여기서 엔드포인트는 IP주소와 포트 번호의 조합을 의미합니다.

소켓은 포트 번호에 바인딩되어 전송계층에서 데이터를 주고 받는 어플리케이션을 식별할 있게 합니다. 소켓 안에는 다음과 같은 정보들이 포함됩니다.
-
프로토콜
-
호스트 IP 주소 (Source IP Address)
-
호스트 Port 번호 (Source Port Nunber)
-
목적지 IP 주소 (Destination IP Address)
-
목적지 Port 번호 (Destination Port Number)

 

소켓의 특징 : 데이터를 주고 받는 프로세스 간의 양방향 통신을 목적으로 하기 때문에, 클라이언트와 서버의 구조를 가집니다. 클라이언트와 서버 간에는 특정 포트 번호를 사용하여 연결이 이루어지며, 서버는 해당 포트 번호에 바인딩되어 클라이언트의 요청을 기다립니다. 클라이언트는 서버의 IP주소와 포트 번호를 알고 있기 때문에 이에 해당하는 서버에 연결을 시도하게 됩니다.

 

연결이 이루어지면 서버는 새로운 소켓을 형성하고, 기존에 연결된 소켓으로는 클라이언트의 요청을 처리합니다. 이렇게 같은 포트에 여러 개의 소켓을 생성하여 사용할 있습니다.

 

소켓 연결이 이루어지면 양쪽에서 실시간으로 데이터를 주고 받을 있습니다.

 

Data Link Layer – 데이터 링크 레이어

OSI 7 계층 모델을 기준으로 데이터 링크 계층(2계층) 전기 신호를 모아 알아볼 있는 데이터 형태로 처리합니다. 여기서 주소를 확인한다는 것은 명과 통신하는 것이 아니라 동시에 여러 명과 통신할 있다는 것이기 때문에 무작정 데이터를 주고 받는 것이 아니라, 받는 사람이 데이터를 받을 있는지 확인하는 작업부터 해야합니다. 이런 역할을 플로우 컨트롤(flow control)이라고 합니다.

 

네트워크 인터페이스 카드 (Network Interface Card, NIC)
우리는 흔히 카드 라고 부르기도 하고, 네트워크 카드, 네트워크 인터페이스 컨트롤러(Network Interface Controller), 네트워크 어댑터(Network Adapter) 등으로 부르기도 합니다. 네트워크 인터페이스 카드는 컴퓨터를 네트워크에 연결하기 위한 하드웨어 장치입니다. 주요 역할 :
-
직렬화 (Serialization) : NIC 전기적 신호를 데이터 신호 형태로, 혹은 역으로 변환해 줍니다.
- MAC
주소 : MAC 주소는 Media Access Control 줄임말로, 네트워크에 접속하는 모든 장비는 MAC 주소라는 물리적 주소가 있어야 하고, 변경할 없도록 하드웨어에 고정되어 있습니다.

 

스위치 (Switch)
여러 장비를 연결하고 통신을 중재하며, 케이블을 곳으로 모아주는 역할을 하는 2계층의 장비입니다. 주어진 MAC 주소를 보고 어디로 연결되는지, 포트는 어디인지 확인하며 데이터를 기반으로 통신할 포트를 적절히 필터링 하고 정확한 포트로 포워딩 하는 역할을 합니다.

 

필터링 (Filtering) 포워딩 (forwarding)
패킷이 스위치에 들어온 경우, 도착지 MAC주소를 확인하고 자신이 가진 MAC 테이블과 비교해 맞는 정보가 있으면 매치되는 해당 포트로 패킷을 포워딩 합니다. 이때 다른 포트로는 해당 패킷을 보내지 않으므로 동작을 필터링이라고 부릅니다.

 

Physical Layer – 네트워크 액세스 계층
물리 계층(1계층) 용어 그대로 물리적 연결과 관련된 정보를 정의하며, 계층에서는 물리적 장비를 통해 전기 신호를 전달하며, 전기 신호를 전달하는데 초점이 맞춰져 있습니다. 전기 신호를 전달하기 위해 사용하는 주요 장비로는 허브(Hub), 케이블(Cable), 리피터(Repeater), 트랜시버(Tranceiver) 등이 있습니다. 따라서 전기 신호가 1계층 장비에 들어오게 되면 전기 신호를 재생성하여 내보냅니다.

허브와 리피티 : 네느워크 통신을 중재
케이블과 커넥터 : 케이블 본체를 구성하는 요소
트랜시버 : 컴퓨터의 랜카드와 케이블을 연결하는 장비로 다양한 외부신호를 컴퓨터 내부 전기신호로 바꾸어주는 역할