탐비의 개발 낙서장

[네트워크] OSI 7계층과 TCP/IP 본문

프로그래밍/운영체제

[네트워크] OSI 7계층과 TCP/IP

탐비_ 2021. 8. 4. 23:59
OSI 7 LAYER

 

 

OSI 7계층이란

 

- 개방형 시스템 상호 연결 모델의 표준으로, 표준과 학습도구의 의미를 가지고 제작되었습니다.

- 초기 여러 정보 통신 업체들의 호환성에 문제가 있었고, 모든 시스템들의 상호 연결에 문제가 없도록 표준을 정한것이 바로 OSI 7계층입니다. 

- 실제 인터넷에서 사용되는 TCP/IP는 OSI 모델을 기반으로 상업적 / 실무적으로 이용할 수 있도록 단순화 한 것입니다.

 

작동 원리

 

- 응용 / 표현 / 세션 / 전송 / 네트워크 / 데이터링크 / 물리계층으로 나뉩니다.

- 전송 시 7계층에서 1계층으로 각각 층마다 인식할 수 있어야 하는 헤더를 붙여 캡슐화합니다.

- 수신 시 1계층에서 7계층으로 올라가며 헤더를 떼며 디캡슐화합니다.

 

Layer 1 - 물리 계층 (Physical Layer)

 

- 전송 단위 : Bit

- 7계층 중 최하위 계층

- 주로 전기적, 기계적, 기능적 특성을 이용해 데이터를 전송합니다.

- 데이터는 0과 1의 비트열 전기적 신호 상태로 이루어져 데이터의 전달만 담당합니다

- 장비 : 케이블, 리피터, 허브

 

Layer 2 - 데이터 링크 계층 (Data Link Layer)

 

- 전송 단위 : Frame

- 물리적 주소(Mac Adderss)를 지정하여 인접한 두 장치 간의 신뢰성 있는 정보 전송을 담당(Point-to-Point 전송)합니다.

- 안전한 정보의 전달이라고 함은 CRC 기반의 오류제어, 흐름 제어를 통한 재전송하는 기능이 존재함을 의미합니다.

- 장비 : 브릿지, 스위치 (Ethernet)

 

Layer 3 - 네트워크 계층 (Network Layer)

 

- 전송 단위 : Packet / Datagram

- IP 주소, 경로 선택, 라우팅을 정의하여 패킷을 전달합니다.

- 라우팅 프로토콜(라우팅 테이블 생성, 유지, 업데이트, 전달)을 통해 목적지까지 가장 안전하고 빠르게 데이터를 보내

  는 기능을 가지고 있습니다.

- 데이터를 전송할 주소를 가지고 있어서 통신이 가능합니다. (IP 주소가 네트워크 계층의 헤더에 속함)

- 장비 : 라우터, L3 스위치

 

Layer 4 - 전송 계층 (Transport Layer)

 

- 전송 단위 : Segment

- 송신자와 수신자 간의 신뢰성있고 효율적인 데이터 전송을 위해 오류 검출 및 복구, 흐름 제어와 중복 검사 등을 수행    합니다.

- 데이터 전송을 위해서 Port 번호를 사용합니다. (TCP / UDP)

 

Layer 5 - 세션 계층 (Session Layer)

 

- 통신 호스트간의 연결을 유지시키며, 상호작용 및 동기화를 제공합니다.

- 연결 세션에서의 데이터 교환과 에러 발생 시의 복구를 관리합니다.

 

Layer 6 - 표현 계층 (Presentation Layer)

 

- 데이터를 어떻게 표현할지(예 : 데이터 변환, 압축, 암호화 등) 정하는 역할을 하는 계층입니다.

- 표현 계층은 세가지의 기능을 가집니다.

1. 송신자에서 온 데이터를 해석하기 위한 응용 계층 데이터 부호화, 변화
2. 수신자에서 데이터의 압축을 풀 수 있는 방식으로 된 데이터 압축
3. 데이터의 암호화와 복호화 (MIME 인코딩이나 암호화 등의 동작, GIF / JPEG / ASCII)

 

Layer 7 - 응용 계층 (Application Layer)

 

- 유저와 가장 가까운 계층으로, 인터페이스의 역할을 해 응용 프로세스 간의 정보 교환을 담당합니다.

- FTP(20/21) / Telnet(23) / SMTP(25) / DNS(53) / HTTP(80)

 

# PORT와 응용프로그램
 프로그램에서 포트는 논리적인 접속 장소이며, 특히 인터넷 프로토콜인 TCP/IP를 사용할 때에는 클라이언트 프로그램이 네트웍 상의 특정 서버 프로그램을 지정하는 방법으로 사용됩니다. 발신지에서 출발한 데이터는 각 계층을 거치면서 최종적으로 목적지 주소를 가진 컴퓨터에 도착하여 패킷에서 주소 필드를 제거하고 패킷 안의 데이터만을 응용프로그램에게 넘겨주게 됩니다. 여기서 실행중인 다양한 프로그램들 중 누구에게 데이터를 전달해야 하는지 구분하는 것이 바로 포트 번호입니다.

1. PORT가 같으면 응용프로그램이 같아질까?
 아니다. 예를 들어 크롬과 줌 모두 [TLS/SSL 방식의 HTTP 통신]을 하는데, 여기서 두 프로그램의 포트 번호가 모두 443이라고 실행 중인 chrome.exe 와 Zoom.exe가 같은 응용프로그램이라고 할 수 없다.

resmon.exe에서 확인한 크롬과 줌의 포트번호


2. PORT가 달라도 응용프로그램이 같을 수 있을까?
 같을 수 있다. 크롬의 경우 HTTPS 통신에 443 포트를 사용할 뿐만 아니라 유저 설정 정보를 동기화 하는 5228번 포트를 사용한다. 이 경우 포트가 다른데 응용프로그램이 같다고 볼 수 있는 것 같다.

resmon.exe에서 확인한 크롬의 포트번호들

 

 

TCP/IP

 

 TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP (인터넷 프로토콜)와 전송 조절 프로토콜인 TCP (전송 제어 프로토콜)로 이루어져 있다.
 IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.(unreliable datagram service)
 TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.
 HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다.

 

 TCP 프로토콜은 느리지만 꼼꼼한 방식을 사용합니다. 도착한 데이터조각을 점검하여 줄을 세우고, 망가졌거나 빠진 조각을 다시 요청합니다.

 

 IP 프로토콜은 데이터의 조각들을 최대한 빨리 목적지로 보내는 역할을 합니다. 데이터가 뒤바뀌거나 누락되도 크게 상관하지 않습니다.

 

 TCP가 패킷을 추적 및 관리하여 정확도를 담당하고, IP가 빠른 속도로 데이터를 배달하는 조합을 통해 인터넷 데이터 통신을 하는 것을 묶어 TCP/IP라고 합니다.

 

 

TCP vs UDP

 

 TCP와 UDP 모두 4계층인 전송 계층에서 사용하는 프로토콜입니다. 

 

TCP (Transmission Control Protocol)

 

 데이터를 메시지의 형태(Segment)로 보내기 위해 IP와 함께 사용하는 프로토콜입니다. TCP는 연결형 서비스로, 데이터를 전송하기 전에 논리적 연결이 설정되는 방식을 사용합니다.

 

 높은 신뢰성을 가지고, 양방향 전송이 가능하며, 점대점(Point to Point : 2개의 종단점) 방식입니다.

 

 흐름 제어를 제공하여 데이터 처리속도의 조절, 수신자의 버퍼 오버플로우를 방지할 수 있고, 혼잡제어를 제공하여 패킷수를 제어하는 기능이 있습니다.

 

 결론적으로 연속성보다 신뢰성 있는 전송이 중요할 때 사용됩니다.

 

UDP (User Datagram Protocol)

 

 데이터를 데이터그램(Datagram) 방식으로 처리하는 프로토콜입니다.

 

 비 연결형 서비스 방식을 사용하여, 논리적 연결이 없고 각각의 패킷이 독립적이며 데이터를 서로 다른 경로로 모두 독립적으로 처리합니다.

 

 데이터를 주고 받을 때 신호 절차(TCP의 3-way handshaking 등)가 별도로 없습니다.

 

 결론적으로 TCP보다 속도가 빨라 신뢰성이 낮으나 연속성있는 전송이 중요한 상황에 사용됩니다.

 

 

3-Way Handshaking / 4-Way Handshaking

 

# SYN과 ACK
- SYN : Synchronize sequence number
- ACK : Acknowledgement

 

3-Way Handshaking : 세션 연결

 

 양쪽 모두 데이터를 전송하고 받을 준비가 되었다는 것을 보장하고, 실제로 데이터 전달 시작 이전에 서로에게 다른 쪽이 준비되었다는 것을 알 수 있도록 합니다. 양 쪽 모두 이 과정에서 초기 순서번호를 얻을 수 있도록 합니다.

 

3-Way Handshaking

 

#1 : 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보냅니다. 이 때, 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태, 서버는 Wait for Client 상태입니다.
#2 : 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 SYN+ACK 패킷을 발송합니다. 이 발송에 대해 클라이언트가 ACK로 응답하기를 기다리며 SYN_RECEIVED 상태가 됩니다.
#3 : 클라이언트가 서버에게 ACK를 보내고 이후로부터는 연결이 이루어져, 데이터가 오갈 수 있게 됩니다. 서버의 상태는 ESTABLISHED가 됩니다.

 

 

 위의 3단계로 통신하여 신뢰성 있는 연결을 맺는 것이 TCP의 3-Way Handshaking 방식입니다.

 

4-way Handshaking : 세션 종료

 

 3-Way handshake가 TCP의 연결을 초기화 할 때 사용되었다면, 4-Way handshake는 세션을 종료하기 위해 수행되는 절차입니다.

 

4-Way Handshaking

 

#1 : 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송하고, FIN-WAIT 상태가 됩니다.
#2 : 서버는 FIN 플래그를 받고, ACK를 보낸 후 자신의 통신이 끝날 때까지 기다리는 CLOSE_WAIT 상태가 됩니다.
#3 : 연결을 종료할 준비가 되었다면, 서버는 클라이언트에게 준비가 되었음을 알리는 FIN 플래그를 전송합니다. 서버는 LAST-ACK 상태가 됩니다.
#4 : 클라이언트가 FIN 플래그를 받으면, 해지 준비가 되었다는 ACK 플래그를 보냅니다. 클라이언트의 상태가 FIN-WAIT에서 TIME-WAIT으로 변경됩니다.

 

 위의 과정과 같이 진행되는데, 만약 클라이언트가 종료되었는데, 서버에서 FIN을 전송하기 전에 전송 해놓은 패킷이 Routing 지연이나 패킷 유실 등의 문제로 인해 재전송 되어 FIN 보다 늦게 도착할 수 있습니다.

 

 이러한 경우 클라이언트가 세션을 종료했다면 패킷이 Drop되고 데이터가 유실되어버립니다.

 

 클라이언트는 이러한 현상에 대비하여 FIN을 수신하여도 일정 시간(기본 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데, 이 때의 상태가 TIME-WAIT 이라고 합니다. 일정 시간이 지나면, 세션이 만료되고 연결을 종료시키며 CLOSE 상태로 변하게 됩니다.

 

 

 

References

OSI 7계층

https://it-and-life.tistory.com/112

https://velog.io/@cgotjh/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-OSI-7-%EA%B3%84%EC%B8%B5-OSI-7-LAYER-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EA%B0%81-%EA%B3%84%EC%B8%B5-%EC%84%A4%EB%AA%85

Handshake

https://bangu4.tistory.com/74

https://asfirstalways.tistory.com/356

5228 Port Info

https://www.speedguide.net/port.php?port=5228