책/그림으로 공부하는 IT인프라 구조

시스템을 연결하는 네트워크 구조

ballde 2021. 10. 7. 18:38

네트워크

서로 다른 장비 간에 데이터를 교환할 때 기본적으로 네트워크를 경유해서 데이터 송수신

  • 네트워크는 계층 간 역할이 나누어져 있다.
  • 상호 연결되어 있는 계층들에서는 인터페이스로 통신

장점: 서로 영향을 주지 않고 독립적으로 동작, 상호 간에 내부 처리를 은폐하고 있기 때문에 인터페이스만 바꾸지 않으면 내부적인 처리를 마음대로 바꾸어도 됨.

단점: 오버헤드가 발생하여 성능이 떨어질 수 있음

OSI 7계층

P → D → N → T → S → P → A

프로토콜

  • 컴퓨터가 서로 소통하기 위해 정한 규약
  • 같은 계층 간의 약속

브라우저로 웹 페이지를 볼 때 HTTP라고 불리는 프로토콜을 이용해서 서버에 웹 페이지를 달라고 요청

TCP/IP

프로토콜 스위트 - 프로토콜 집합

인터넷의 발전과 TCP/IP


인터넷의 시초는 미국 국방성의 연구 이며 이때 구축된 실험 네트워크가 ARPANET이다.

그리고 이외에 많은 네트워크가 있으며 이들이 상호 간에 접속할 수 있었다. 하지만 네트워크 제조사 별로

많은 독자 프로토콜을 사용하고 있어 상호 접속에 문제가 있었음

이 때 OSI라는 프로토콜이 생겼지만 규격문제 등 접속성 문제가 있어서 OSI는 사장됐다.

이 때 TCP/IP 가 표준으로 됐다.

TCP/IP 4계층 모델과 시스템 대응 관계

1,2계층 → 링크계층

네트워크 계층

전송 계층

5,6,7 계층 → 어플리케이션 계층

HTTP 통신 데이터를 상대방에게 보내기 위해서 TCP데이터를 건네지만 여기부터 이더넷 계층까지는 OS커널이 담당한다. 커널 내에서 TCP, IP, 이더넷을 담당하는 기능이 필요한 정보를 데이터에 부여해서 최종적으로 이더넷 프레임이 생성된다.

링크계층(이더넷 계층) → 레이어2, L2

IP계층 → 레이어3, L3

전송계층 → 레이어4, L4

애플리케이션 계층의 프로토콜 HTTP

HTTP가 그 하위 계층인 IP나 유선을 통해 명령을 보내거나 통신 제어를 하지 않는다. → 매우 간단한 구조

소켓

애플리케이션 자체가 통신 구조를 가지지 않고서도 원격지에 있는 서버 애플리케이션과 통신할 수 있다.

커널에 tcp ip로 통신하기 위해 시스템 콜한다.

전송계층 프로토콜 TCP

  • 전송을 제어하는 프로토콜
  • 신뢰도가 높은 데이터 전송을 가능케 한다.
  • 서버가 송신할 때와 서버가 수신한 후 애플리케이션에게 전달할 때로 서버까지 전송하는 부분은 하위계층인 IP에 모두 위임한다.
  • IP에는 확실히 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능은 없다. → TCP가 순서를 유지한 상태로 전달

커널 공간의 TCP 처리 흐름

  • 소켓에 기록된 애플리케이션 데이터는 소켓의 큐를 경유해서 '소켓 버퍼' 라는 메모리 영역에 처리(ip, 이더넷 까지의 처리도 이루어짐)
  • TCP 데이터를 세그먼트라는 단위로 관리 → 애플리케이션 데이터에 TCP헤더를 붙여서 TCP 세그먼트를 작성(포트, TCP기능을 표현하기 위한 수많은 정보들 포함)

포트 번호를 이용한 데이터 전송

  • 서버에 도착해도 어떤 애플리케이션인지 모름 → TCP에서는 포트 번호를 사용해 전달

연결 생성

  • TCP는 연결형 프로토콜
  • listen - 자신이 지정한 포트 번호에 통신이 오는지를 기다림
  • 상대방이 요구가 온것을 보고 문제가 없으면 열어서 응답
  • 클라이언트 측도 확인했다는 메세지 → 가상경로 열림

=⇒ 3-way handshaking

데이터 손실 방지하는 구조

  • 수신측에 tcp세그먼트가 도착하면 수신 측은 송신 측에게 도착했다고 알림 →tcp헤더에 ACK 관련 정보를 넣은 TCP 세그먼트 반환
  • 송신 측은 ack가 돌아오는 것을 보고 전송한 세그먼트가 무사히 도착했다는 것을 알 수 있음

데이터 순서를 보증하는 구조

  • tcp 세그먼트에 시퀸스 번호가 생성 → 이것을 통해 순서 보증

tcp 재전송 제어

  • 수신 측은 ack를 반환할 때 다음에 필요한 시퀸스 번호도 ack 번호로 전달
  • ack가 오지 않으면 재전송 → 재전송 하는 시점은 첫번째 타임아웃

수신 측에는 다음 tcp세그먼트가 도착하지만 도중에 사라진 세그먼트를 계속 요구하기 때문에 ack에서는 계속 2921을 보내달라고 응답 → 3회 중복되면 tcp세그먼트가 도착하지 않았다고 간주하고 재전송

흐름제어와 폭주 제어

흐름제어

  • tcp는 어느정도의 세그먼트 수라면 ack를 기다리지 않고 전송하는 '윈도우' 라는 것이 있다.
  • ack를 기다리지 않고 전송 가능한 데이터 크기를 윈도우 크기
  • 슬라이딩 윈도우 , tcp흐름 제어가 있다.

폭주 제어

  • 송신 측 윈도우 크기는 네트워크 폭주 상태에 맞추어 변경시킴

IP

tcp 세그먼트가 만들어지면 ip처리가 시작

ip의 역할

지정한 대상 서버까지 전달받은 데이터를 전해 주는 것

커널 공간의 ip처리 흐름

tcp세그먼트가 ip처리에 돌입 → 최종 목적지가 적힌 ip헤더(데이터 길이, 프로토콜 종류, 헤더 체크섬 등등)를 tcp세그먼트에 추가해서 ip패킷을 생성

ip주소를 이용한 최종 목적지로의 데이터 전송

사설 네트워크와 ip주소

가정이나 회사 내에서 사용하는 네트워크

  • 사설 네트워크는 원하는 대로 ip설정해도 될거라 생각됨
  • 사설 주소는 자유롭게 사용 가능하지만 인터넷상의 호스트 등과 통신이 불가능
  • → 이를 해결위해서 공공주소와 사설 주소가 모두 할당된 호스트를 준비하고 사설 주소만 있는 호스트는 해당 호스트를 경유해서 인터넷 세상과 통신하도록함

라우팅

최종 목적지에 도착할 때까지 목적지를 알고 있는 라우터에 전송을 부탁함

데이터 링크 계층의 이더넷

  • ip 패킷이 만들어지면 링크계층의 처리가 시작

이더넷의 역할

  • 동일 네트워크 내의 네트워크 장비까지 전달받은 데이터를 운반 → OSI 물리 계층과 밀접한 관련이 있음
  • 동일 네트워크 내의 데이터 전송 → mac주소를 이용

커널 공간의 이너텟 처리

  1. ip 계층에서 라우팅 테이블 확인 → 어떤 링크가 패킷을 보낼지는 정해져있음
  2. mac주소 라는 링크계층 주소를 사용해서 첫번째 목적지로 보냄 → 이더넷 헤더안에 있음

 

동일 네트워크 내의 데이터 전송

 

VLAN

  • 브로드 캐스트 통신 등 전체에 데이터를 전송하는 경우는 불필요한 트래픽 증가시킴
  • 물리 구성에 좌우되지 않고 설정만으로 네트워크를 나눌 수 있는 구조가 필요 → VLAN

네트워크 스위치 중계 처리

서버 사이에 L2 스위치 하나만 연결되어 있고 이더넷 헤더를 보고 대상 mac주소를 확인한 후 적절한 포트를 통해 프레임 전송

정리

  1. 이더넷 프레임이 도착
  2. NIC 수신 큐에 저장해서 os 끼어들기나 os폴링을 이요해 커널 내에 프레임을 복사
  3. 이더넷 헤더와 푸터를 제거하고 ip패킷을 꺼냄
  4. 자신에게 보낸 패킷이 맞다면 ip헤더 제거하고 tcp세그먼트를 꺼냄
  5. tcp 포트번호를 확인헤서 그에 맞는 곳에 데이터 전달 → 없어진 세그먼트가 있어서도 안되고 순서가 틀려서도 안되기 때문에 세그먼트가 도착하기까지 버퍼 내에서 기다리는 경우가 있음