본문 바로가기
컴퓨터 공학

[기술면접대비] 3. 네트워크 계층과 TCP&UDP 통신

by 물고기고기 2023. 12. 31.

 


 

OSI 7계층

네트워크 통신이 이뤄지는 과정을 7단계로 나눈 네트워크 표준 모델
각 계층은 독립적이며 데이터를 송신할 때 각 계층에서 필요한 정보를 추가해서 데이터 가공

프로토콜이란 데이터를 송수신하기 위해 정한 규칙

  • 7계층(응용) : http,ftp등 눈앞에 보이는 UI
  • 6계층(표현) : 데이터를 표준화된 형식으로 변경
  • 5계층(세션) : 프로그램 간 통신 제어와 동기화
  • 4계층(전송) : TCP, UDP 같은 전송 방식과 포트 번호
  • 3계층(네트워크) : 데이터 송수신(라우팅) 수행, 네트워크 계층의 장비(라우터)
  • 2계층(데이터 링크) : 데이터 흐름 관리(오류 검출 및 복구), 데이터 링크 계층의 장비
  • 1계층(물리) : 데이터를 비트 단위로 변환해 장비를 사용해 전송, 전기 신호 데이터 복원(리피터,허브 등)

→ OSI 모델의 하위 계층(1-3계층)은 물리적 장비와 더 밀접하게 관련되어 있고, 상위 계층(4-7계층)은 소프트웨어와 프로토콜 중심으로 구현.

+) 표현 계층의 예시?

  • SSL/TLS (Secure Socket Layer / Transport Layer Security): 암호화된 통신을 제공하여 네트워크 상에서 데이터의 안전성과 보안을 보장합니다.
  • MIME (Multipurpose Internet Mail Extensions): 이메일에서 다양한 형식의 데이터(텍스트, 이미지, 오디오 등)를 인코딩하는 데 사용됩니다.
  • JPEG, GIF, TIFF (이미지 포맷): 이미지 데이터를 압축하고 인코딩하는 방식이며, 다양한 시스템과 애플리케이션에서 호환되는 형식으로 변환합니다.

 

TCP/IP 계층

https://medium.com/@yyuni915/osi-7계층-tcp-ip-4계층-e8716bc2e601

osi 7계층과 같은걸 나타내는데 이를 단순화한 것

+) IP 주소와 서브넷 마스크

https://nordvpn.com/ko/blog/what-is-subnet-mask/

IP주소 : IP에서 컴퓨터 또는 네트워크 장치를 식별하기 위한 값, IPv4에서 주소값은 8자리 2진수 4개를 10진수로 표현한 것. IP주소는 네트워크부(해당 주소가 어떤 네트워크에 속해있는지)와 호스트부(해당 네트워크에서 어떤 기기인지)로 나뉨

서브넷 마스크 : ip주소와 and 연산을 하면 ip 주소에서 네트워크부와 호스트부를 알아낼 수 있다.

 

TCP와 UDP

TCP

연결형 서비스를 지원하고 데이터의 신뢰성을 보장

  • 송신부와 수신부의 연결을 확인하는 연결형
  • 패킷 교환 방식은 가상 회선 방식
    • 가상 회선 방식이란? 데이터를 주고 받기 전 패킷을 전송할 경로인 가상 회선을 설정해 모든 패킷을 같은 경로로 전송하는 것 https://woovictory.github.io/2018/12/28/Network-Packet-Switching-Method/
    • 이외의 데이터 그램 방식 : 패킷마다 최적의 경로로 전송되는 방식(각 패킷이 도착 순서가 다를수도)
  • 패킷 전송 순서 보장
  • 패킷 수신 여부 확인
  • 송신부와 수신부는 1:1 통신
  • 데이터 손실 없음을 보장(신뢰성 높음)
  • 속도느림

TCP 핸드셰이킹

연결 시작시 3-way 핸드 셰이킹, 연결 종료시 4-way핸드 셰이킹

이때 송수신부간 연결을 관리하도록 플래그 값을 주고 받음, 주로 사용하는 플래그값은 아래와 같음

  • SYN : 동기화, 연결 생성시 사용
  • FIN : 종료, 연결 끊을때 사용
  • ACK : 승인, 데이터를 전송하면 수신자가 받았음을 알려줄 때 사용

3-way 핸드 셰이킹 : 데이터를 주고받기 전에 상대방 컴퓨터와 세션을 수립하는 과정

상대방 컴퓨터와 세션을 수립하는 과정

  1. 송신부→수신부 : SYN(N) 송신부가 수신부와 연결하기 위해 SYN메세지를 보냄. 이때 임이의 숫자 N을 함께 보냄. 이때 송신부는 응답이 오기전까지 SYN_SENT 상태가 됨
  2. 수신부→송신부 : ACK(N+1) + SYN(M) 수신부는 송신부로부터 SYN 메세지를 받으면 요청 수락인 ACK메세지를 전송(이때 송신부로부터 받은 N에 +1해서 보냄) 그리고 수신부도 송신부와의 연결을 확인하기위해 임이의 숫자 M을 함께보내고 SYN_RECEIVED 상태가 됨
  3. 송신부→수신부 : ACK(M+1) 송신부가 수신부로부터 메세지를 받으면 연결이 성립되었으니 ESTABLISHED 상태가 됨. 마찬가지로 수신부에게 M+1을 해서 확인 메세지를 보냄. 수신부도 송신부로부터 받으면 ESTABLISHED 상태가 됨.

4-way 핸드 셰이킹 : TCP 연결을 해제할 때 이뤄지는 과정

  1. 송신부→수신부 : FIN 송신부가 연결 종료를 위해 FIN 메세지를 보내고 FIN_WAIT1 상태가 됨.
  2. 수신부→송신부 : ACK 수신부가 FIN 메세지를 받으면 응답으로 ACK를 보냄. 수신부는 CLOSE_WAIT 상태가 된 뒤 앱을 종료하는 등 연결을 종료하기 위한 작업을 함. 송신부는 ACK메세지를 받고 FIN_WAIT2 상태가 됨.
  3. 수신부→송신부 : FIN 수신부에서 연결 종료할 준비가 끝나면 송신부에 FIN 메세지를 보내고 LAST_WAIT 상태가 됨.
  4. 송신부→수신부 : ACK 송신부는 서버로부터 받은 FIN 메세지에 대한 응답으로 ACK 메세지를 보내고 TIME_WAT 상태가 됨. 일정 시간이 지난 뒤 CLOSED 상태로 변경 됨. 일정 시간동안 기다리는 이유는 FIN 메세지 전에 보낸 패킷이 FIN 메세지 수신보다 느리게 도착해서 유실되는 경우에 대비하기 위함. 또한 수신부가 ACK 메세지를 못받아 연결 해제가 이뤄지지 않는 경우에 대비하기 위함. 수신부는 ACK 메세지를 받고 CLOSED 상태가 됨.

+) TCP Keep Alive : 세션이 연결되면 유지하는 동안 일정 시간 경과후 패킷을 던져 연결 유지 상태를 확인한다. 이때 TCP Keep Alive패킷은 연결을 유지하기 원하는 쪽에서 보냄. 패킷에 대한 응답을 받으면 일정 시간을 다시 측정하고, 받지 못하면 연결 종료함. 이는 주고받을때마다 3-way핸드셰이킹을 하지않아도되도록하며, 불필요한 연결(좀비 커넥션)도 끊어준다.

TCP 제어 방법

흐름제어 : 데이터 송신부와 수신부에서 데이터 처리 속도 차이 때문에 생기는 데이터 손실을 방지하는 방법

  1. 정지 대기 : 송신부에서 데이터를 보낸 후 수신부로 ACK 메세지를 받을때까지 기다리는 방식, 만약 일정 시간이 지나도 ACK 메세지를 받지 못하면 패킷 재전송. 간단하나 이전 메세지에 대한 응답을 받아야만 다음 메세지를 보낼 수 있어 시간상 비효율적
  2. 슬라이딩 윈도우 : 송신부에서 데이터 수신여부(ACK)를 확인하지 않고 수신부에서 설정한 윈도우 크기(응답받지 않고도 보낼수 있는 최대 데이터 갯수, 3-way핸드 셰이킹 과정에서 결정) 만큼 데이터를 연속적으로 보내는 동적 제어 방식. 즉, 수신부에서 ACK 메세지를 받은만큼만 옆으로 옮기는 셈 (3을 받으면 2를 넘겨주고, 만약 3과1을 받았으면 2 와 -1을 넘겨줌)

혼잡제어 : 송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법, 예를 들어 송신부에서 제대로 보냈으나 네트워크의 문제로 일정시간 응답을 받지 못하면 송신부는 메세지 전송 실패로 판단하고 여러번 재전송하게 되는 악순환이 생긴다.

  1. AIMD : 데이터 전달 시 합 증가 방식으로 혼잡 윈도우의 크기를 더해가면서 키움, 데이터 손실이 발생하면 곱 감소 방식을 적용해 1/2배 등 배수 단위로 줄임. 해당 방식은 시간이 지나면 여러 송신부 간에 네트워크 대역폭을 공평하게 사용할 수 있게 되지만 유실이 발생하면 윈도우 크기 증가폭에 비해 감소폭이 더 크기에 네트워크 대역폭을 넓게 사용하기까지 시간이 오래 걸림
  2. 느린 시작 : 윈도우 크기가 1인 상태로 시작. ACK 메세지를 수신할때마다 윈도우 크기 1씩 늘려나감, 혼잡 발생 시 윈도우 크기를 1로 바로 줄임, 전송 가능 패킷을 지수 함수 형태로 늘리는 점에서 AIMD 방식이 초기 전송 가능 패킷수가 적은 단점을 보완
  3. 혼잡 회피 : 윈도우 크기가 지수 함수 형태로 증가하다 혼잡이 발생하는 걸 막기 위해 임계점을 정하는 방식. 윈도우 크기가 임계점에 도달하면 그때부턴 선형적으로 증가. ACK 메세지를 받지 못해 타임아웃이 발생하면 그 시점에서 윈도우 크기의 절반을 임계점으로 설정하고 윈도우 크기를 초깃값으로 변경
  4. 빠른 회복 : 혼잡이 발생하면 윈도우 크기를 절반으로 줄이고 선형 증가. 혼잡이 발생하면 AIMD 방식으로 동작
  5. 빠른 재전송 : Duplicate ACK가 3번 발생하면 윈도우 크기를 절반으로 줄임. 그 뒤로 ACK 메세지를 받으면 윈도우 크기 증가(Duplicate ACK란 패킷이 순서대로 도착하지 않아 재요청하는 것을 말함)
  6. https://evan-moon.github.io/2019/11/26/tcp-congestion-control/
    → TCP는 이러한 혼잡 제어 방식들을 여럿 혼합해 혼잡 제어 정책을 사용한다.
+) 그런데 송신부와 네트워크는 구체적으로 어떻게 다른거지? 뭐가 송신부고 뭐가 네트워크인걸까?
송신부 (Sender)
  • 정의: 송신부는 데이터를 전송하는 주체입니다. 이는 데이터 통신 시스템에서 메시지를 보내는 측을 의미하며, 개별 컴퓨터, 모바일 장치, 서버 또는 다른 네트워크 장치일 수 있습니다.
  • 역할: 송신부의 주요 역할은 데이터를 생성하고, 해당 데이터를 네트워크를 통해 수신부(Receiver)에게 전송하는 것입니다. 데이터는 파일, 이메일, 비디오 스트림, 패킷 등 다양한 형식을 가질 수 있습니다.
네트워크 (Network)
  • 정의: 네트워크는 데이터가 전송되는 경로나 매체를 의미합니다. 이는 컴퓨터, 서버, 스위치, 라우터 등 다양한 네트워크 장비로 구성된 시스템을 포함하며, 로컬 네트워크에서부터 인터넷에 이르기까지 다양한 규모를 가질 수 있습니다.
  • 역할: 네트워크의 역할은 송신부로부터 전송된 데이터를 수신부까지 전달하는 것입니다. 네트워크는 데이터를 라우팅하고, 필요한 경우 데이터를 처리하거나 변환하는 기능을 수행합니다.

 

오류제어: 데이터에 오류 또는 유실이 발생할때 신뢰성을 보장하기 위해 제어하는 방식, 이를 인지하는 경우는 아래와 같음

  • 수신부에서 잘못된 데이터를 받았다고 응답할 시(NAK 메세지)
  • 3 Duplicate ACK가 발생
  • 수신부로부터 ACK 메세지를 받지 못해 타임아웃 발생
  1. 정지-대기 : 흐름 제어에서 나왔던 방식과 동일. 한개 보내고 응답 기다림. 다만 송신부에서 데이터를 1개만 보내고 기다려야하기 때문에 ARQ(재전송 요청)방식 사용
  2. Go-Back-N ARQ : 송신부에서 연속적으로 데이터를 보내며 누락 데이터가 발생하면 해당 데이터부터 재전송하는 방식.
  3. Selective-Repeat ARQ : 송신부에서 연속적으로 데이터를 보낼때 누락 데이터가 있으면 수신부에서 해당 데이터만 재전송 요청. 특정 패킷만 재전송 요청하니 효율적으로 보이나 받은 패킷에 대한 재정렬 로직이 추가로 필요함

UDP

TCP와 같은 전송 계층 네트워크 프로토콜. UDP는 송수신부 간의 연결을 지원하지 않고 데이터그램 형태로 통신 지원. 핸드셰이킹 과정 없이 패킷을 바로 송수신. 신뢰성이 낮으나 속도가 빠름

  • 송신부와 수신부 연결 보장X, 비연결형 서비스
  • 패킷이 서로 다른 회선으로 교환될 수 있음(데이터그램 패킷 교환 방식) +) 이에 대한 예시? 이메일을 보낼 때, 이메일의 내용이 여러 패킷으로 나뉘어질 수 있음. 각 패킷은 인터넷을 통해 독립적으로 전송되며, 각각 다른 경로를 통해 수신자에게 도달.
  • 송신부에서 전달 패킷 순서와 수신부에서 받은 패킷 순서 다를 수 있음
  • 패킷 수신 여부 확인X
  • 1:1 , 1:N, N:N 통신 모두 가능 +) 다대다 통신의 예시? PvP(Player vs. Player) 게임은 N:N(다대다) 통신의 예시로 볼 수 있음.
  • 데이터 신뢰성 낮음
  • 데이터 전송 속도 빠름

댓글