CS/네트워크

OSI 7계층, TCP, UDP

미네구스 2024. 8. 21. 17:52

OSI 계층

컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것 

 

쉽게 이야기 해서, 네트워크에서 통신이 일어나는 과정을 7단계로 나누어 설명한 것입니다. 현재는 많은 프로토콜이 TCP/IP 기반으로 동작하고 있습니다.

 

프로토콜

프로토콜이란, 메세지를 주고받는 양식이나 규칙을 의미합니다.

 

상대방이 특정 메세지를 보낼 때, 반대쪽도 그 메세지를 이해하고 답을 보낼 수 있어야 합니다. 프로토콜은 이에 대한 규칙을 정의하고 있습니다.

 

이전에는, 각 회사마다 다양한 프로토콜이 존재해 특징도 많이 달랐기 때문에 소통하는데 제약조건이 있었습니다. 현재는, 여러가지 프로토콜이 이더넷-TCP/IP 기반 프로토콜로 변경되고 있습니다. 

 

OSI 7계층 구조

 

1계층 (Physical Layer)

  • 물리 계층으로 물리적 연결과 관련된 정보를 정의하고 있습니다.
  • 들어온 전기 신호를 다른 계층으로 전달하는 계층입니다.
  • 주요 장비로 허브, 리피터, 케이블 등이 있습니다.

2계층 (DataLink Layer)

  • 전기 신호만 보내던 1계층과는 달리 출발지나 도착지 주소, 발송자나 수신자 등 여부를 검사한 후 데이터 처리를 합니다.
    • 데이터를 무작정 보내는 것이 아닌, 받는 사람이 데이터를 받을 수 있는지 확인하는 작업이 선행되는데, 이를 Flow Control 이라고 합니다.
  • 가장 중요한 특징으로, MAC 주소 체계가 있는데 이를 통해서 데이터를 주고받습니다.
  • 이더넷 기반 네트워크 2계층에선 에러를 탐지하는 역할만 수행합니다. 대표적인 장비로 스위치가 있습니다.

3계층 (Network Layer)

IP주소와 같은 논리적인 주소가 정의됩니다. 데이터 통신을 할 때 두가지 주소가 사용되는데, 2계층의 물리적인 MAC주소와 3계층의 논리적인 IP 주소입니다.

 

  • 전송 계층에서 전달받은 목적지 주소를 이용해서 패킷을 만들고, 목적지의 전송 계층으로 패킷을 저장합니다. (라우터)

4계층 (Transport Layer)

데이터들이 정상적으로 잘 보내지는지 확인하는 역할을 합니다. 패킷이 네트워크 통신 과정에서 유실되거나 순서가 바뀔 수 있는데, 이를 확인하고 바로잡는 역할을 4계층에서 담당합니다. 패킷에서 시퀀스 번호와 ACK번호를 통해서 구분할 수 있습니다. 게다가, 장치 내에 어플리케이션들을 구분할 수 있도록 포트 번호를 사용해서 상위 어플리케이션을 구분합니다.

  • 로드밸런서, 방화벽이 대표적으로 4계층에 해당하는 장비 입니다

5계층(Session Layer)

세션을 관리하는것이 주요역할인 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 가지고 있고, 에러로 중단된 통신에 대한 에러 복구와 재전송도 수행합니다.

6계층 (Presentation Layer)

번역기나 변환기 역할을 수행하는데, MIME 인코딩이나 암호화, 압축, 코드 변환같은 동작을 수행합니다.

7계층 (Applicaiton Layer)

어플리케이션 프로세스를 정의하고, 어플리케이션을 실행합니다. 대표적인 프로토콜로 SMTP, HTTP, FTP 등이 있습니다.

 

 

2계층의 MAC주소나 3계층의 IP주소는 목적지에 정확히 전송해야 하는 주소 제공이 목적이였지만 4계층에 존재하는 포트 번호는 목적이 살짝 다릅니다. 정확히 찾아가는 것 뿐만 아니라, 패킷 순서가 바뀌지 않도록 하고 잘 쪼개 보내고 조립하는 것 입니다.

TCP

세션을 안전하게 연결하고, 데이터를 분할해 분할된 패킷이 잘 전송되었는지 확인하는 기능이 있습니다. 

패킷에 순서를 부여하는 것은 시퀀스 번호, 응답 번호를 부여하는 것은 ACK번호이고, 패킷 손실이나 순서가 바뀌었을 때 이 번호들을 통해서 파악할 수 있습니다. 

서버 호스트(수신자)에서 패킷 번호가 맞으면 응답을 주는데, 이 때 다음 번호 패킷을 요청합니다. 이 숫자를, ACK 번호라고 합니다. 

위 그럼에서, 1번 수신이 완료 됐기 때문에, ACK 2번 요청을 송신자 쪽으로 보내줍니다. 

 

TCP는 패킷을 잘 받았는지 확인하고 나서 다음 패킷을 보내기 때문에, 송신자와 수신자의 거리에 따라 RTT(Round Trip Time), 왕복 지연 시간이 늘어납니다. 그래서 효율적이게 패킷을 하나가 아닌 여러개를 함께 보내는데, 네트워크 상태가 안좋으면 패킷 유실 가능성이 커져서 송신량을 적절히 조절해야 하는데, 이 떄 받을 수 있는 데이터 크기를 윈도우 사이즈라고 합니다. (알고리즘에 나오는 그것?) 

3-way handshake

TCP는 패킷 유실이 발생하는지, 발생하지 않는지 테스트하기 위해서 미리 확인하는 과정을 거치는데, 3번의 패킷을 주고 받으며 통신을 준비하는 것을 3-way handshake라고 말합니다.

 

3-way handshake

상태

  • LISTEN: 서버가 클라이언트의 접속을 받아들일 수 있는 상태로, 대기합니다.
  • SYN-SENT: 클라이언트가 통신을 시도할 때 Syn 패킷을 보내는데, 이 상태를 SYN-SENT라고 합니다.
  • Syn-RECEIVE: 서버가 클라이언트에게 Syn 패킷을 받으면, 이 상태로 변경되고 Syn, Ack로 응답합니다.
  • ESTABLISHED: 이 응답을 받은 클라이언트는, 상태를 변경하고 다시 응답을 서버로 보내면 서버 또한 ESTABLISHED 상태로 변경합니다.

UDP

TCP와는 달리 UDP는 데이터 유실이 발생했을 때 바로잡을 수 있는 기능이 없습니다. 데이터 헤더만 봐도, UDP의 헤더는 TCP에 비해서 내용이 별로 없습니다.

TCP 헤더
UDP 헤더

그렇기 떄문에, 주로 단방향으로 이루어지고 응답 시간이 빨라야 하는 경우, UDP를 사용합니다.

  • 화상회의, 실시간 스트리밍 등.. 

UDP는 3-way handshake가 없고, 대신 첫 데이터는 리소스 확보를 위해 인터럽트를 걸고 유실됩니다.