CS/네트워크

[네트워크] OSI 7계층 모델 & TCP/IP 4계층 모델

hyomee2 2024. 8. 12. 04:58

1. 인터넷 프로토콜 스위트 (Internet protocol suite)

: 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합으로,

  TCP/IP 4계층 모델 또는 OSI 7계층 모델로 설명한다.

* 네트워크 프로토콜: 네트워크에서 제공하는 통신기능들이 제대로 동작하기 위해 통신에 참여하는 참여자들 사이에서 약속된 통신 방법

(1) 네트워크 계층구조를 나눈 이유

- 네트워크 구조를 여러 계층으로 나누어 정의하면

1) 통신이 일어나는 과정에서 데이터의 흐름을 한 눈에 파악하기 쉽다.

2) 통신 과정 중 문제가 발생하면 다른 단계를 건드리지 않고 문제가 발생한 단계에서 해결 가능하다.

3) 각 계층들은 다른 계층의 영향을 받지 않도록 설계되어 있어 독립적으로 발전해나갈 수 있다.

    (다양한 유형의 프로토콜에 적응할 수 있는 유연성 제공)

    ex) 전송 계층에서 TCP를 UDP로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치해야하는 것은 아니다.

 

(2) OSI 7계층 모델과 TCP/IP 4계층 모델의 비교

- TCP/IP 모델은 OSI 모델보다 먼저 개발되었기 때문에 두 계층이 정확하게 일치하진 않는다.

- TCP/IP 모델은 인터넷 개발 이후 계속 표준화되어 신뢰성이 우수하지만, OSI 모델은 표준이 되긴 하지만 실제적으로 구현되는 예가 거의 없어 신뢰성이 낮다.

- OSI 모델은 장비 개발과 통신 자체를 어떻게 표준으로 잡을지 사용되지만, 실질적인 통신 자체TCP/IP 모델을 사용한다.

 

 

2. OSI 7계층 모델

: 네트워크가 프로토콜을 통해 통신하는 과정을 7단계로 나누어 계층 간 상호작용하는 방식을 정해놓은 것.

(1) OSI 7계층 모델 특징

1) 각 레이어에 맞게 프로토콜이 세분화되어 구현되어 있다.

2) 각 레이어의 프로토콜은 하위 레이어의 프로토콜이 제공하는 기능을 사용해서 동작한다.

 

(2) OSI 7계층

1) 7계층 - 애플리케이션 계층

: 최상위 계층으로, 사용자들이 사용하는 애플리케이션 목적에 맞는 통신 방법을 제공하는 계층.

  (사용자가 네트워크에 접근할 수 있도록 한다.)

- 애플리케이션 계층은 사용자가 응용 프로그램을 통해 네트워크 서비스에 접근할 수 있도록 사용자 인터페이스를 제공한다.

- 실제 응용 프로그램에서 사용하는 프로토콜들이 애플리케이션 계층에서 동작한다.

  ex) FTP(파일 전송에 사용)

        SMTP(이메일 전송에 사용)

        HTTP(웹 브라우저를 사용해서 웹 서버에 접속할 때 사용)

 

2) 6계층 - 프레젠테이션 계층

: 애플리케이션 간의 통신에서 데이터 표현의 차이를 해결하기 위해 서로 다른 형식으로 변환해주거나 공통 형식을 제공하는 등 데이터의 표현 방식을 결정해주는 계층.

- 송신 측에서는 수신자가 이해할 수 있는 형태로 데이터를 변환(인코딩)하고,

  수신 측에서는 어플리케이션 계층에 맞는 형태로 변환한다.

- 데이터의 효율적인 전송을 위해 데이터 압축, 그리고 데이터 보안을 위한 데이터 암호화/복호화 기능을 제공힌다.

- ex) JPEG(그래픽 정보를 JPEG로 변환)

        MPEG(동영상을 MPEG 형태로 변환)

 

* 프레젠테이션 계층에서 데이터를 변환하는 이유

- 통신하는 두 기기의 특성이 같지 않을 수도 있기 때문이다. 따라서 기기의 종류에 관계없이 이해할 수 있는 공통 표준 형식으로 데이터를 변환하여 수신자에게 보내고, 수신자는 자신에게 맞는 형태로 해당 데이터를 다시 변환한다.

 

3) 5계층 - 세션 계층

: 애플리케이션 간 통신에서 세션을 관리하며, 포트를 기반으로 통신을 연결.

- 네트워크 장치 간의 통신 방식을 결정할 수 있으며, 세션을 연결, 해제하며 전송 중단 시 동기화 기능을 통해 데이터를 복구할 수 있다.

- ex) SSH, TLS

* 동기화 기능

: 데이터 전송 시 오류가 발생 했을 때, 제일 최근에 데이터 전송이 성공한 시점인 동기점부터 다시 데이터를 재전송하여 작업을 이어갈 수 있도록 하는 기능

* 통신 방식

1) 전이중 방식(Full duplex): 양방향 통신 방식으로, 송신선과 수신선이 각각 존재하여 양쪽이 동시에 통신할 수 있는 방식. 현대의 고속 이더넷 방식은 전이중 방식을 사용한다.

2) 반이중 방식(Half duplex): 양방향 통신 방식이지만, 하나의 회선으로 송, 수신을 번갈아가면서 하는 방식.

    동시 통신은 어렵다.

3) 단방향 방식(Simplex): 한쪽에서만 데이터를 전송하는 방식.

 

4) 4계층 - 전송 계층

: 데이터 전송을 담당하는 계층.

- 포트번호를 기반으로 송, 수신자 간의 신뢰성있고 효율적인 데이터를 전송하기 위해 흐름제어, 오류제어 등의 기능을 제공한다.

- ex) TCP, UDP

- 아래 3.에서 자세히 다룬다.

 

5) 3계층 - 네트워크 계층

: 실제 네트워크 간 라우팅을 담당하는 계층.

- IP 주소 등을 통해 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 역할을 한다.

- 라우터를 통해 경로를 선택하여 경로에 따라 패킷을 전달한다.

- ex) IP, ARP

* 라우팅

: IP 주소를 기반으로 통신 데이터를 보낼 최적의 경로를 선택하는 과정. 라우터에서 담당한다.

 

6) 2계층 - 데이터링크 계층

: MAC 주소(장비의 고유 주소)를 이용하여 노드 간 데이터를 전송하는 계층.

- IP주소를 가지고 MAC 주소를 찾거나(ARP), MAC 주소를 가지고 IP주소를 찾아준다(RARP). 이 과정에서 이더넷 프레임을 통해 에러확인, 흐름제어, 접근 제어 등의 기능을 수행하며 안전하게 정보가 전달되도록 해준다.

- ex) ARP, RARP

 

7) 1계층 - 물리 계층

: 최하위 계층으로, 하드웨어 같은 물리적 매체를 통해 비트 단위로 데이터 전송

- 데이터 링크 계층으로부터 프레임(데이터)을 받아 0과 1로 이루어져 있는 전기적 신호로 데이터를 변환하여 구리/광섬유/무선 통신 매체를 통해 전송한다.

- 단순히 데이터 전달의 역할만 수행하고 오류제어 등의 기능은 수행하지 않는다.

 

 

3. 전송 계층

- 대표적으로 TCP와 UDP가 있다.

(1) TCP

1) TCP의 특징

1) point-to-point (점대점 프로토콜)

: 하나의 connection에 1개의 sender와 1개의 receiver가 1:1

- sender는 여러 개의 receiver와 여러개의 connection을 만들 수는 있다.

  (TCP는 양방향 통신이어서 사실 sender와 receiver의 구분이 없긴 하다.)

2) 패킷이 손실없이 순서대로 전달된다.

- 패킷 손실이 일어나지 않게 최선을 다해 노력하지만 패킷 손실이 어쩔 수 없이 발생하긴 한다.

3) congestion control

: 패킷 손실을 최대한 피하기 위해 bottleneck에 맞춰서 전송 속도 조절

4) flow control

: receiver가 받을 수 있는 receiver buffer 크기보다 더 많은 양의 데이터를 보내지 않도록 receiver가 명시적으로 알려준다. 

5) segmentation

: 파일이 패킷 단위로 쪼개져서 전송돼야 하는데, TCP는 알아서 maximum segment size(mss)에 맞게 조각을 내준다.

- UDP는 segmentation을 지원하지 않기에 보내고자 하는 데이터 크기가 mss보다 더 크면 segmentation을 수동으로 해주어야 한다.

6) 가상회선 패킷 교환 방식을 사용한다.

- 가상회선 패킷 교환 방식: 모든 패킷의 경로가 동일하고 패킷이 전송된 순서대로 도착하는 방식

7) 오늘날 대부분은 TCP를 사용한다.

- TCP가 UDP만큼 빨라졌기 때문이다.

- TCP의 기능은 가져가면서 조금 더 빨라지고 싶어서 오늘날에는 어플리케이션 레벨에서 UDP로 TCP를 구현한다.(QUIC)

 

2) TCP 연결 성립 과정

3-way handshake

* 3-way handshake에서 사용되는 TCP 헤더 필드

1) Sequence Number

- Segment에 있는 첫번째 바이트의 바이트 스트림 번호

2) SYN(Synchronize Sequence Number) bit

- 연결을 요청할 때 사용한다.

- SYNbit이 1이면 TCP 연결을 요청하는 과정이다.

- 다른 모든 경우에는 SYNbit을 0으로 설정한다.

3) ACK(Acknowledgement) bit

- 패킷을 받았다는 응답을 할 때 사용한다.

- Acknowledgement Number(받고 싶은 다음 바이트 번호)가 유효한지를 나타낸다.

- 최초 연결의 첫번째 segment을 제외한 모든 segment의 ACK bit는 1로 설정한다.

 

* 포트 상태 정보

1) LISTEN : 포트가 열린 상태로 연결 요청을 대기하는 상태

2) SYNSENT: 연결 요청을 하고 서버의 ACK를 기다리는 상태

3) SYNRCVD: 연결 요청에 응답/연결을 요청하고 클라이언트의 응답을 기다리는 상태

4) ESTAB: 연결된 상태

 

* 3-way handshake 과정

step 1) 클라이언트는 서버에게 연결을 요청하는 SYN Segment을 보낸다.

- Segment Header의 SYN bit을 1로 설정한다.

- SYN segment을 전송한 후 SYNSENT 상태로 서버의 ACK Segment을 기다린다.

- 서버는 클라이언트로부터 SYN Segment를 수신한다.

step 2) 서버는 클라이언트의 SYN segment에 대한 ACK segment와 클라이언트에게 연결을 요청하는 SYN segment를 전송한다.

- ACKnum은 클라이언트의 Sequence Number+1로 설정한다.

- SYNbit는 1로 설정한다.

- SYN/ACK segment을 전송하고 SYN RCVD의 상태로 클라이언트의 ACK를 기다린다.

- 클라이언트는 ACK Segment을 받고 연결이 완료된 ESTAB 상태가 된다.

- 이 단계는 엄밀히 말하면 응답하는 ACK segment 전송, 연결을 요청하는 SYN segment을 전송하니 2개의 handshake라고 할 수 있는데, 두 과정은 서로 독립적이다. 따라서 두 정보를 동시에 전송함으로써 1개의 handshake로 처리할 수 있고, 네트워크 트래픽을 절약할 수 있다.

step 3) 클라이언트는 서버의 SYN segment에 대한 ACK segment을 전송한다.

 

3-way handshake 과정이 완료되면 클라이언트와 서버가 서로 데이터를 주고 받는다.

 

3) TCP 연결 해지 과정

- 4-way handshake

* 포트 상태 정보

1) ESTAB: 포트가 연결된 상태

2) FIN_WAIT_1: 자신이 보낸 FIN에 대한 ACK을 기다리거나 상대방의 FIN을 기다린다.

3) CLOSE_WAIT: 상대방의 FIN(종료 요청)을 받은 상태

4) FIN_WAIT_2: 자신이 보낸 FIN에 대한 ACK를 받았고 상대방의 FIN을 기다린다.

5) LAST_ACK: CLOSE_WAIT 상태를 처리 후 자신의 FIN 요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태

6) TIME_WAIT: 모든 FIN에 대한 ACK을 받고 연결 종료가 완료된 상태

7) CLOSED: 연결 수립을 시작하기 전의 기본 상태(연결 없음)

 

* 4-way handshake 과정

step 1) 클라이언트가 서버에게 연결 종료를 요청하는 FIN segment을 보낸다.

- FINbit는 1로 설정

- 이때 FIN 패킷에는 실질적으로 ACK도 포함돼있다.

- 클라이언트는 전송 후 FIN_WAIT_1 상태가 된다.

step 2) 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에 보내고 자신의 통신이 끝날 때까지 기다린다.

- 아직 남은 데이터가 있다면 마저 전송을 마친 후에 close()을 호출한다.

- 클라이언트는 ACK를 받은 후에 서버가 남은 데이터 처리를 끝내고 FIN 패킷을 보낼 때까지 기다린다. (FIN_WAIT_2)

step 3) 서버가 데이터를 모두 보냈다면, 연결 종료에 합의한다는 의미의 FIN 패킷을 클라이언트에게 보낸다.

-  서버는 이후 ACK를 받을 때까지 기다리는 LAST_ACK 상태가 된다.

step 4) 클라이언트는 FIN을 받고, 응답 ACK를 서버에게 보낸다.

- 지연 패킷이 발생할 경우를 대비하기 위해 TIME_WAIT을 통해 기다린다. (데이터 무결성 문제 방지)

- TIME_WAIT이란 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말한다. CentOS6, Ubuntu에는 60초, Windows는 4분으로 설정되어 있다. 즉, OS마다 조금씩 다를 수 있다.

 

이후 서버는 ACK를 받은 이후 소켓을 닫고, TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫는다.

 

(2) UDP

1) 순서를 보장하지 않고 아주 빠른 속도로 보낸다.

2) unreliable, unordered

3) 데이터그램 패킷 교환 방식을 사용한다.

- 데이터그램 패킷 교환 방식: 데이터를 몇 개의 패킷으로 쪼갠 후, 각각의 패킷이 독립적으로 최적의 경로를 선택하여 전송하는 방식. 각각의 패킷이 서로 다른 경로로 전송될 수 있으므로 도착한 순서가 다를 수 있다.

 

 

4. 계층 간 데이터 송수신 과정

- 캡슐화, 비캡슐화 과정을 거친다.

 

5. PDU(Protocol Data Unit)

: 네트워크의 어떤 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위 (각 계층마다 데이터를 부르는 이름이 다르다.)

1)

- 어플리케이션 계층: message

- 전송 계층: segment

- 네트워크 계층:datagram

- 링크 계층: frame

- 물리 계층: bit

2) 

- 어플리케이션 계층: message

- 전송 계층: segment(TCP)/datagram(UDP)

- 네트워크 계층:packet

- 링크 계층: frame

- 물리 계층: bit

 

 

* 참고한 자료

<블로그>

https://velog.io/@alkwen0996/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B3%84%EC%B8%B5%EA%B5%AC%EC%A1%B0OSI-7%EA%B3%84%EC%B8%B5-TCPIP-4%EA%B3%84%EC%B8%B5

 

[네트워크] | 네트워크 계층구조(OSI 7계층 & TCP/IP 4계층)

컴퓨터나 기타 기기들이 리소스를 공유하거나 데이터를 주고 받기 위해 유선 혹은 무선으로 연결된 통신체계를 말하는 네트워크는 아래와 같은 여러가지 기능들을 제공한다. 애플리케이션 목

velog.io

https://hojunking.tistory.com/106

 

3-Way Handshake

3-Way Handshake TCP/IP 프로토콜을 이용해서 통신하는 응용프로그램은 데이터를 주고받기 전에 먼저 연결을 진행한다. 3-Way Handshake는 이 연결 과정을 의미한다. 편의를 위해 양 쪽 Host를 각각 클라이

hojunking.tistory.com

https://hojunking.tistory.com/107?category=1124368

 

4-Way Handshake

Termination의 종류 TCP는 두 가지 연결 해제 방식이 있다. 4-Way Handshake를 통한 연결 해제 RST(Reset)을 통한 연결 해제 4-Way Handshake 연결 종료는 양쪽 호스트 모두 먼저 시도할 수 있다. 편의를 위해 양

hojunking.tistory.com

<도서> 면접을 위한 CS 전공지식 노트

<강의자료> 성신여대 김규영 교수님의 컴퓨터 네트워크 강의