L3 Level Concepts

EBAB!·2023년 7월 7일
0

Network

목록 보기
4/17

IPv4주소의 구조

IP

  • IPv4 라고 하고 32bit(8bit * 4) 주소 체계를 가짐
  • 8bit 단위로 4번 쪼개짐

  • Network ID : 8 * 3 bit를 가지는 부분
    • 물류센터와 비슷한 개념
    • Network ID를 통해 router에서 경로를 결정지어준다
  • Host ID : 마지막 8bit를 가지는 부분
    • 최종 호스트를 알려준다.

L3 Packet

Packet

  • 단위 데이터
  • L3 IP Packet 이라고 알아두자
  • Header(송장 번호), Payload(택배 내용물)로 나뉘어지고 상대적인 분류임.
  • 최대 크기는 MTU(Maximum Transmission Unit)라 한다.
    • header+Payload 를 말하는 것이고 1500bytes 정도

EnCapsulation, Decapsulation

  • 캡슐화 → ‘어떤’ 단위화 했다(포장했다)

  • 가장 큰 박스가 L2 Frame
    • Payload #1 에 들어있는 것이 L3 IP Packet
    • L3 Payload #2 가 L4 TCP Segment.
    • Frame의 Payload가 그대로 Packet이 된다.
      • 계속해서 Payload가 다음 계층의 데이터 단위가 되지만,
      • L4를 넘어가면 데이터 단위가 Stream이 되면서 형태가 달라짐
  • 단위화하면서 기존 정보가 직관적으로 보이지 않게 됨

패킷의 생성, 전달, 소멸 (프로세스1 → 프로세스2)

  1. 호스트1의 프로세스1가 데이터 생성
  2. 소켓을 통해 데이터를 segment 단위로 만들어 IP에 전달
  3. IP에서 segment를 다시 패킷으로 만들어서 게이트웨이에 전달
  4. 게이트웨이가 IP를 보며 라우팅을 통해 호스트2에게 전달
  5. 호스트2에서 port번호를 통해 프로세스2에게 전달

계층별 데이터 단위

LayerUnitgeneraly maximun size
L1~L2Frame
L3PacketMTU(1500 bytes)
L4SegmentMSS(1460 bytes)
(Not Layer) SocketStream정해진 크기 X
  • 소켓은 레이어가 아니지만 데이터 변환에 있어 중요한 역할을 가짐
    • Stream이라는 단위를 가지고 정해진 크기는 없음
    • Socket에선 Stream을 MSS에 맞춰 데이터를 가공

TCP/IP 송수신 구조

송신 (전체적으로 Encapsulation)

  1. 서버(정확히는 서버의 프로세스)에서 소켓으로 데이터를 버퍼에 Send(Copy)
  2. 버퍼의 데이터를 받기 위해 소켓에서 I/O(입출력)가 일어나고 이걸 위한 소켓버퍼가 존재
    • 버퍼가 있다면 Bufferd IO, 없다면 NonBufferd IO
    • 버퍼의 크기는 개발자가 정함
  3. 소켓에선 버퍼의 크기만큼 데이터를 복사해서 받아옴
    • 아직 데이터가 분해된 것이 아닌 일부분을 올려놓았을 뿐
    • 이 올려진 데이터가 Stream
  4. 소켓에서 L4에 보내기 위해 Stream을 Segmentation
  5. TCP는 소켓에게서 받은 Segment 데이터를 L3로 전송
  6. IP에서 Segment에 header정보를 붙여 Packet으로 만들어 L2로 전송
  7. L2에서 Packet을 Frame으로 포장하여 L1 이후로 전송
  8. 여러 스위치를 거쳐 목적지의 host까지 도착

수신 (전체적으로 Decapsulation)

  1. L1~L2로 Frame데이터를 받아서 프레임을 풀어서 L3로 전달 (Frame 소멸)
  2. L3에서 패킷을 분해하여 Segment를 L4로 전달
  3. L4에서 포트번호를 확인하여 segment 데이터를 해당 프로세스의 소켓으로 전송
    1. 이후 프로세스 버퍼에서 소켓 버퍼를 Receive(Read) 하려할 때 버퍼 크기만큼 읽어오려 함
    2. 이 때 프로세스 버퍼와 소켓 버퍼의 속도 차가 발생 (한 쪽은 채우고 한 쪽은 퍼내는 상황)
      • 송신 시 waiting이 일어날 수 있으니까
    3. L4(TCP)에서는 데이터를 받으면 잘 받았다고 FeedBack(ACK, Acknowledgment)을 전송.
      ACK에 포함된 여러 정보 중 여유 공간에 대한 정보가 포함되어 있음
    4. 송신측에서 ACK를 받으면 여유 공간을 보고 공간이 있다면 다음 패킷을 전송
    5. c~d 과정이 반복되면서 패킷들을 받음.
  4. 프로세스에서 데이터를 수신

네트워크 장애

  1. Loss
    • 데이터 유실. 원인은 매우 다양(어디서든 일어날 수 있다)
  2. Re-transmission
    • 1번 데이터에 대한 ACK를 받기 전에 다시 1번 데이터를 보냄
    • ACK를 2번 이상씩 보내버리는 상황 발생
  3. Out of order
    • 1→2→[] → 4 처럼 중간에 순서가 빠지는 상황
  4. Zero window
    • 버퍼의 여유공간(window Size)이 없는 상황
    • End-point의 App 버퍼가 제 때 받지 못한 상황

IP Header 형식

IPv4 Header

  • Header은 옵션이 따로 붙지 않는다면 20 bytes 정도
  • Data는 65515(65535 - 20)까지 커질 수 있지만 기본적으로 MTU(1480)을 따름
  • Version [1행, 4bit] : 버전 IP 버전 정보
  • IHL(Internet Header Length) [1행, 4bit] : 헤더의 길이. 보통 5정도 (5행 * 4 = 20bytes)
  • TOS (Type Of Service)
  • Total length : 전체 길이. 보통 16bit(2^16 = 65536)
  • Fragment offset : Identification, Flags도 포함하여 2행은 단편화와 관련되어 있음
    • 단편화 MTU 크기와 같은 이유로 패킷을 잘라야 할 때
  • TTL (Time To Live) : 유통과정에서 홈을 지날때마다 감소하고 0이되면 소멸
  • Protocol : IP, TCP, UDP 등 어떤 프로토콜인지 파악
  • Header Checksum : 패킷의 송수신 과정에서 손상을 파악하기 위한 데이터 합 표시
  • Source, Destinaton address : 출발지, 목적지의 주소

서브넷 마스크, CIDR

Subnet Mask

  • Mask 연산 : 패킷의 IP에 AND연산을 해서 목적지의 네트워크가 맞는지 판단하는 연산
    • 왼쪽부터 8,16,24 bit을 네트워크 주소로 가지면 순서대로 A, B, C 클래스라 불렀지만 현재는 사용X
  • IP - 192.168.0.10, Mask - 255.255.255.0
    • Mask를 통해 24자리 까지가 네트워크 주소인 것을 알 수 있다.

CIDR(Classless Inter-Domain Routing)

  • 클래스를 제외한 형태
  • IP - 192.168.0.10, Mask - 255.255.255.0 —> 192.168.0.10/24
    • 왼쪽부터 24bit가 네트워크 주소
  • Subneting
    • 주어진 host를 다시 쪼개서 네트워크 망을 만드는 것
    • 원래 호스트 주소가 8bit 이였다면,
      • 왼쪽 2bit → 네트워크 주소 / 6bit → Host 주소 ⇒ 2^6 개의 호스트를 가지는 서브넷 형성

Boardcast IP Address

Boardcast IP Address

  • MAC 주소에서는 48bit 이고 1로 가득찬 주소를 가졌음
  • IP - 192.168.0.255/24 ⇒ 192.168.0 의 네트워크 전체에 송신
  • 따라서 8bit 호스트 주소에서 사용 가능한 주소 수는 (2^8 - 2)
    • 255 - broadcast / 0 - 연산 X or 다른 용도

Host 자신을 가리키는 IP 주소

127.0.0.1

  • 자기 자신을 가리키는 IP 주소. 이전의 주소들을 remote(원격) 주소
  • Client Process가 TCP/IP 를 통해 접속할 때, 127.0.0.1이면 어떤 방식이든 IP층에서 다시 Server 프로세스를 가리킴
  • Loopback Address라고 부름
  • IPC(Inter Process Communication) 구현

TTL과 단편화

Router와 L3 Switch

  • Router 가 L3에 포함, L3가 Router에 포함, 구분지을 필요가 없다 등등…
    논란이 많다. 개념상 L3가 우선이긴 하지만 굳이 구분에 노력하진 말자

TTL (Time To Live)

  • Packet이 목적지까지 도달하는데 실패하는 경우, 패킷은 빨리 사라져줘야 한다.
    • 그렇지 않으면 네트워크 상에서 떠돌며 속도 저하의 원인이 된다.
      • 그러므로 TTL을 줘서 자동 소멸이 될 수 있도록 한다.
  • Hop 이라는 수가 주어지고 Router를 통과할 때 마다 1씩 줄어든다.
    • 0이 되면 소멸 → 이것을 source에 알려주는 router도 있고 아닌 router도 있음

단편화

  • 패킷을 다시 나누는 것
  • MTU 크기 차이로 발생
    • 기본적으로 1500 bytes지만 더 작은 MTU를 가지는 패킷이 있을 수 있음
      1. 목적지로 가는 중에 중간의 Router가 1400 MTU를 가지는 경우,
      2. 패킷이 분해되어 2개로 쪼갠 다음 전송
      3. 패킷의 조립은 최종적으로 Endpoint에서 진행됨
        • Endpoint의 IP 계층에서 조립 후 Segment로
  • 가장 좋은 방법은 경로 상의 MTU가 최소인 곳에 맞춰서 처음부터 하향 평준화로 진행
  • MTU가 1500도 안되는 경우
    • VPN - IPSec VPN 과 같은 터널링 기술이 적용되었을 때 (보안성을 대가로 MTU를 낮춤)

인터넷 설정 자동화를 위한 DHCP

인터넷 사용 전에 해야 할 설정

  • IP 주소
  • Subnet mask
  • Gateway IP주소
  • DNS 주소

DHCP (Dynamic Host Configuration Protocol)

  • DHCP 체계는 주소를 할당하는 서버와 할당 받으려는 클라이언트로 구성
  • 복잡한 인터넷 설정을 자동으로 해줌
    • 핵심은 내가 사용할 IP주소를 서버가 알려주는 것

DHCP 적용 과정 (초간단 요약)

  1. 전원이 켜지면서 DHCP를 찾는 Broadcast 패킷 전송
  2. DHCP 서버에서 응답
  3. 최근에 사용한 주소를 사용하겠다는 요청 전송
  4. OK 또는 안될 땐 새로운 IP 할당해주면서 Gateway, DNS, Subnet mask 까지 알려줌

ARP (Address Resolution Protocol)

ARP

  • ARP의 Address : IPv4 주소(L3), MAC 주소(L2)
  • IP 주소로 MAC 주소를 알아내려 할 때 활용
  • 보통 PC를 부팅하면 Gateway의 MAC 주소를 찾아내기 위해 ARP request 발생
    • 이 request의 reply로 MAC 주소를 알 수 있음.
    • Gateway의 MAC Address를 모르면 통신이 안되니까.. (물리적 연결 구간)

과정

  1. 네트워크 내의 PC의 ARP request가 Broadcast로 나감
  2. Gateway에서 reply로 MAC address를 보냄
  3. 이 PC의 데이터 전송 시 Frame의 목적지는 Gateway MAC 주소가 됨
    • 만약 PC에서 네이버로 데이터를 송신하면
      Packet의 IP 목적지는 네이버의 IP지만
      MAC 목적지는 Gateway가 됨

Ping, RTT

Ping

  • Ping 유틸리티(프로그램 이름)는 특정 Host에 대한 RTT(Round Trip Time)을 측정할 목적으로 사용
  • ICMP(Internet C Message Protocol) 이용
  • Dos(Denial of Service) 공격용으로 악용되기도 한다.
  • 흔히 게임에서 동기화가 중요한 상황에서, 각자 서버로부터 받는 응답시간이 차이날 때 이용

RTT

  • 요청으로부터 응답까지 걸린 시간
profile
공부!

0개의 댓글