OSI 7계층 그리고 TCP/UDP

📅 TIL #130




🎯 Achievement Goals

  1. OSI 7 계층의 구조에 대해 이해한다.
  2. OSI 7 계층마다 어떤 역할을 하는지 이해한다.
  3. OSI 7계층과 TCP/IP 4계층의 차이에 대해 이해한다.
  4. TCP와 UDP 각각의 개념과 차이에 대해 이해한다.







OSI 7 계층


osi7


OSI 7계층은 개발 공부를 한다면 필수 개념이다. 오늘은 계층 구조와 각 계층마다 어떤 역할을 하는지 알아보자.


네트워크의 기본 원리는 데이터를 받아서 전달해주어야 하는 곳으로 데이터를 전달한다. 전달을 할 때 1단계부터 4단계는 저수준 계층으로 하드웨어, 전기적, 기계적 관점을 다루며 5단계부터 7단계인 고수준 계층은 응용 프로그램과 최종 사용자 영역을 다룬다.


오늘 배울 OSI (Open Systems Interconnection)는 단순히 복잡한 컴퓨터가 서로 어떻게 더 잘 이해하고 소통할 수 있는지에 대한 단계적 부분이라고 생각하면 좋다.



1. 물리적 계층 (Physical Layer)


전기, 물리에 대한 신호 계층이다. 물리적으로 Bit 단위의 데이터 전달이 이루어진다. 컴퓨터는 0과 1을 서로 보낼 수 있으면 데이터를 전달 할 수 있는데, 먼저 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내는 인코딩(encoding)과정이 이루어진다.


그 후 다른 컴퓨터에서 아날로그 신호가 들어오면 0과 1의 나열로 해석하여 디코딩(decoding)한다.


전선이라는 물리적인 매체로 연결 된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)을 물리적 계층이라고 부른다.




두 대의 컴퓨터가 어떻게 통신할 수 있는지 알아보았지만, 1계층에 속하는 기술 만으로는 여러 대의 컴퓨터가 통신하도록 만들 수 없다.


2계층에서는 1계층에서 발생한 오류를 바로 잡으며, 연결망 내의 컴퓨터가 데이터에 접근하고 전달할 권한을 가지도록 MAC(Media Access Control)주소를 부여한다. 이러한 데이터 전체 구성을 ‘프레임(frame)’이라고 한다.


정리하자면 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고 받기 위해서 필요한 모듈(module)이다.



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


네트워크 계층은 수많은 네트워크들의 연결로 이루어지는 inter-network속에서 어딘가에 있는 컴퓨터로 데이터가 들어 있는 ‘패킷(Packet)’을 전송하기 위해 그 경로를 결정하는 계층이다.


각 단말을 구분하도록 IP 주소를 할당하는 논리 주소(Logical Address) 기능이 있으며, 패킷 전달을 위해 할당된 IP 주소를 기반으로 길을 찾는 과정인 라우팅(Routing)기능이 있다.


그리고 패킷을 다음 라우터에게 넘겨주는 것을 포워딩(forwarding)이라고 한다.



4. 전송 계층 (Transport Layer)


전송 계층은 쪼개진 데이터 유닛인 ‘세그먼트(Segment)’를 포트 번호(ex. port:8000)등으로 구분하여 각 응용 계층이 나눠 받도록 하는 분할(Segmentation)작업을 한다.


분할 작업을 통해 도착한 컴퓨터의 최종 목적지인 프로세스(Process)까지 데이터가 도달하게 하는 모듈(Module)이다.


네트워크 호스트 간의 완전한 정보 전송을 보장하며(신뢰성), 데이터의 수신 유/무인 연결형, 비 연결형 작업 등이 있다.


대표적인 프로토콜/기술은 TCP, UDP 등이 있다.



5. 세션 계층 (Session Layer)


양 끝단의 데이터가 서로 연결을 맺고 제어할 수 있도록 환경을 조성해주는 단계이다


대표적인 프로토콜/기술들은 TLS, SSH, NetBIOS 등이 있다.



6. 표현 계층 (Presentation) Layer)


데이터를 더 빠르게 전송하기 위한 압축과 더 안전하게 전송하기 위한 암호화/복호화 작업을 하는 단계이다. 7계층인 응용 계층이 수용할 수 있는 형태로 데이터를 전환하여 호환성 문제를 방지한다.


대표적인 프로토콜/기술들은 SSL(Secure Sockets Layer), JPEG, MPEG 등이 있다.



7. 응용 계층 (Application Layer)


마지막 계층인 응용 계층은 개별 응용 프로세스에 맞춰 서비스 품질 점검, 사용자 인증, 개인 정보 보호, 자원 공유, 파일 원격 접속 등 네트워크를 활용하는 다양한 응용 프로그램들이 포함되어 있다.




각 계층 마다 어떤 역할을 하는지 알아보았다. 그리고 OSI 7계층에서는 데이터를 전송할 때 각 층마다 별도로 인식할 수 있는 헤더를 붙이게 되는데, 이 과정을 캡슐화(Encapsulation)라고 한다. 이렇게 각 계층마다 요청과 응답의 상호작용을 하는 과정이 있는데, 서버와 클라이언트의 관계라고도 할 수 있다.







OSI 7계층 vs TCP/IP 4계층


tcp4


7개의 계층 구조인 OSI 7계층에 대해 공부했다. 그러면 TCP/IP 4계층은 무엇일까?


먼저 현대의 인터넷은 TCP/IP 4계층을 더 따르고 있다. TCP/IP 모델도 OSI 모델과 마찬가지로 네트워크 시스템에 대한 모델이며, TCP/IP 모델을 더 따르는 이유는 시장 점유 싸움에서 이겼다고 한다….ㄷㄷ(참고로 TCP/IP가 OSI에서 더 발전한 것이 아니며, 별도의 모델이다.)


먼저 이 둘에 대해서 배우기 전에 전송 계층의 중요성을 알아야 한다. 위에서 네트워크 계층 구조를 통해 데이터를 담고 있는 IP 패킷(Packet)이라는 말을 한 부분이 있다. 이 IP 패킷에는 한계점이 있는데, 바로 비 연결성, 비 신뢰성의 특징을 가지고 있다.


비 연결성은 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다는 뜻이고, 비 신뢰성은 중간에 패킷이 사라진다거나, 패킷의 순서를 보장할 수 없다는 뜻이다.


만약 내가 ‘1, 2, 3’이라는 데이터를 보냈는데 수신자가 ‘1, 3, 2’라고 데이터를 받게 되면 매우 난감할 것이다. 그리고 송수신자 또는 네트워크 간의 데이터 처리 속도 문제등도 있다.


TCP/IP는 IP 프로토콜 보다 더 높은 계층에 있기 때문에 TCP/IP 라고 불리는데, IP 패킷의 한계점을 보완한다.



응용 계층 - TCP/IP 소켓 프로그래밍


TCP/IP 소켓 프로그래밍은 운영체제의 Transport Layer에서 제공하는 API를 활용해서 통신이 가능한 프로그램을 만든다는 뜻이다.


그래서 소켓 프로그래밍만으로도 클라이언트와 서버 프로그램을 각각 만들어서 동작시킬 수 있으며, 응용 계층 프로토콜을 만들어서 사용할 수 있다.






TCP / UDP


TCP / UDP 는 앞서 전송 계층의 대표적인 프로토콜이라고 설명한 적이 있다.


두 프로토콜 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다. 이 특징들에 대해서 알아보자.





전송 제어 프로토콜 TCP (Transmission Control Protocol)


특징

  1. 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜
  2. Connection 연결 (3 way-handshake) - 양방향 통신
  3. 데이터의 순차 전송을 보장
  4. Flow control (흐름 제어)
  5. Congestion Control (혼잡 제어)
  6. Error Detection (오류 감지)
  7. HTTP, Email, File transfer 등에서 사용



TCP handshake


tcp 3 way handshake


TCP handshake는 앞서 설명했던 TCP/IP 프로토콜에서 정확한 전송을 보장하기 위해 상대방의 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.




Connection 연결 (3 way-handshake) - 양방향 통신


1


  1. 클라이언트가 서버에 접속을 요청하는 SYN 비트를 1로 설정해 패킷 송신을 한다.
  2. 서버는 SYN, ACK비트를 1로 설정해 패킷 송신을 하고, 클라이언트로 부터 ACK 응답을 기다린다.
  3. 마지막으로 클라이언트가 서버에게 ACK 비트를 1로 설정해 패킷 송신을 하면 이후로부터 연결이 성립되며 데이터를 전송할 수 있다.


SYN(synchronize sequence numbers)는 송신자가 지정하는 순서 번호이며, 전송되는 바이트 수를 기준으로 증가한다. 그리고 클라이언트와 서버 둘 다 동기화 해야한다.


ACK(Acknowledgment)는 수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용되는데, 신뢰적 데이터 전송을 위해 사용한다.




데이터 전송 방식


2


  1. 클라이언트가 패킷을 송신한다.
  2. 서버에서 ACK를 송신한다.
  3. 만약 클라이언트가 ACK를 수신하지 못하면 서버에게 다시 패킷을 재전송한다.
    (이 과정을 통해서 신뢰성있는 통신 보장)




Connection Close (4 way-handshake)


3


  1. 데이터를 전부 송신한 클라이언트가 FIN 송신한다.
  2. 서버가 ACK를 송신한다.
  3. 서버에서는 보낼 데이터가 남아있을 수 있기 때문에 일정 시간 대기를 한다. (남아있다면 남은 패킷 송신)
  4. 서버가 FIN을 송신한다.
  5. 클라이언트가 ACK를 송신한다.




TCP의 문제점


  1. 매번 Connection을 연결해서 시간 손실을 발생한다. (3 way-handshake)
  2. 패킷을 조금만 손실해도 재전송한다.





사용자 데이터그램 프로토콜 UDP (User Datagram Protocol)


  1. IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜
  2. TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜
  3. 데이터 전달 보장 X, 순서 보장 X
  4. Connectionless (비 연결 지향)
  5. Error Detection
  6. 비교적 데이터의 신뢰성이 중요하지 않고 연속성이 중요한 서비스에 사용
    (ex. 영상 스트리밍)

체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법.



오늘 TCP와 UDP에 대해 간단하게 배웠는데 각각 상황에 따라 적절한 프로토콜을 사용할 줄 알며, 각 프로토콜의 헤더에 대해 파악하고 성능 개선에도 이용할 수 있다고 하는데 성능 개선 부분에서도 사용할 수 있다면 더 좋을 것 같다.





참고 자료

OSI 7계층 그리고 TCP/IP 4계층
TCP 통신 과정 및 비정상 종료