HTTP 메시지는 어떻게 컴퓨터에서 빠져나갈까? (2)

Hansu Park·2023년 9월 12일
0

Computer-Science

목록 보기
5/8
post-thumbnail
post-custom-banner

IP와 이더넷의 패킷 송수신 동작

HTTP 메시지가 여러 과정을 거쳐 TCP의 패킷 안에 들어갔다. 이제 TCP에서 만들어낸 패킷이 어떤 프로토콜, 기기들을 거쳐 상대방에게 도착하는지 살펴보자. (IP 계층 위주로 살펴본다.)

TCP/IP의 패킷

TCP/IP에서는 데이터에 헤더를 더해나간다. 이렇게 만들어진 패킷에 대해 살펴보자.

우선, 프로토콜 스택은 TCP 계층에선 접속, 데이터 송수신, 연결 끊기와 같은 동작을, IP 계층에선 패킷 송수신 동작을 수행한다. 이는 각 계층에서 더해나간 패킷의 헤더하고도 관련이 있다.

패킷의 구성

(TCP/IP 패킷 모습)

TCP 헤더은 위에 언급했던 동작들을 위한 헤더이다. 이는 저번에 살펴보았으므로 생략한다. IP 헤더는 상대방에게 데이터를 송신하기 위한 정보(IP주소, 등등)이며, 마지막으로
MAC 헤더는 상대방의 기기(MAC 주소)를 식별하기 위한 정보들이 담겨있다.

이러한 정보들을 담은 후 상대방에게 운반을 하게 되는데 동작 과정은 아래와 같다.

패킷 운반 과정

  1. 클라이언트: MAC Header(목적지 방향에 있는 라우터 주소 R1) + IP 헤더(목적지 S) + TCP 정보(TCP 헤더 + 데이터) 생성 후 허브로 전달
  2. 허브: 이더넷용 표를 참고하여, 라우터를 향해 전달 (라우터로 직접 전달 or 다른 허브를 경유)
  3. 라우터(R1): 라우팅 테이블을 확인하여 목적지에 빠르게 갈 수 있는 다음 라우터(R2)에 전달 (Mac Header 변경)
  4. 서버(S): 여러 라우터들을 거쳐 서버에 도착

링크 의 그림4를 참고하면 좋을 것 같다.

추가 설명

각 용어들에 대한 추가 설명이다. (다음 챕터에서 자세히 살펴본다.)
라우터
목적지(IP) 확인하여, 다음 라우터를 표시한다.
허브
이더넷 규칙에 따라 패킷을 다음 라우터로 운반

이더넷
각 기기들이 맥주소를 가지고, 케이블-장치(허브, 스위치 등)을 통해 상호작용하는 프로토콜이다, 이더넷에서 이진 데이터들을 전기(or 빛) 신호로 변경하여 케이블에 송출한다.

여러 기기들이 존재하는 이유
다양한 기기가 역할 분담 -> 변경 용이 -> 유연성 향상 -> 거대 네트워쿠 구축 가능

허브와 스위치(L2)의 차이
허브는 브로드캐스팅으로 연결된 모든 장치들에 패킷 전달, 스위치는 목적 기기에만 전달하여, 효율 & 보안이 뛰어남.

스위치(L3)와 라우터의 차이
참고 (요약: 스위치가 발전하며, 라우터처럼 IP 스위칭도 가능해짐, 더불어 라우터만 제공하던 기능들도 제공하게 되며 큰 의미가 없어짐)

라우팅 테이블

(netstat -rn을 통해 확인한 macos의 라우팅 테이블 모습)

  • Destination: 목적지
  • Gateway: 경유지

등을 나타낸다.

macos(netstat -rn)에서는 윈도우(route print), 리눅스(route)와 달리 Metric(어느 경로가 최소 비용인지에 대한 정보)이 없다.

전체 흐름도

IP Header

참고
중요 헤더들

  • TTL: 패킷의 수명
    • 패킷 영구순환 방지 목적
    • 라우터 경유간 1씩 감소
    • 0이 되면 폐기
  • 송신처, 수신처 IP
    • 헤더 조작하여 변경이 가능
    • LAN 어댑터(NIC, 랜 카드)에 따라 송신처 IP가 결정된다.

이더넷 전용 헤더 (MAC 헤더)

MAC 헤더에 대해 좀 더 자세히 살펴보자.

구성

참고

  • DA(Destination Address): 송신처 MAC 주소
  • SA(Source Address): 수신처 MAC 주소
  • Type: 타입
    • 0800: Ipv4
    • 0806: ARP
    • 86DD: Ipv6

으로 구성된다.

SA 획득 방법

  • 수신처의 MAC 주소는 경유지 Gateway의 MAC 주소를 입력해야 한다.
  • 이는 ARP(Address Resolution Protocol)에 의해 알아낼 수 있다.
  • ARP는 같은 네트워크 내에 브로드캐스팅을 이용해 IP주소에 해당하는 MAC 주소를 알아낸다.
  • ARP 캐시를 활용할 수도 있으며, 캐시는 일정 시간 이후 삭제된다.

(캐시 획득 모습)

이더넷의 종류

이더넷은 다수의 컴퓨터가 적은 비용으로 통신하기 위한 기술이며, 케이블이 본질이다.

원형
케이블을 통해 신호가 전체에 흐른다. (증폭) MAC주소에 따라 수신처가 이를 획득하며, 나머지 기기들은 무시한다.

리피터 허브
허브를 통해 신호가 전달된다.

스위칭 허브
원하는 기기에만 신호를 전달한다.

LAN 카드 동작

패킷은 0과 1로 이루어진 디지털 데이터이다. 따라서 이를 케이블로 전송하기 위해선 변환과정이 필요하다. 이는 LAN 카드(+ LAN 드라이버)에 의해 전기(or 빛)신호로 변환된다.

또한, 전원 공급시 초기화 작업을 진행하는데 중요한 작업은 MAC 주소 설정이다. MAC 주소는 ROM에 작성되며 이는 기본적으로 유일하며, 특수하게 설정 파일을 통해 설정되는 경우도 있다.

패킷에 제어용 데이터 추가

전체 패킷은 Preamble + SFD(Start Frame Delivery) + [MAC 정보] + CRC{FCS(Frame Check Sequence}의 구현) 로 이루어져 있다.

  • Preamble
    • 동기화 위해 사용하는 비트이다.
    • 1010이 반복된다.
    • 이를 통해 1비트의 신호를 계산할 수 있다.
  • SFD
    • 10101011로 이루어져있다.
    • 마지막 11을 통해 프레임(패킷) 시작을 확인하는 비트이다.
  • FCS
    • 에러 검출하기 위한 비트이다. (복구는 할 수 없다.)
    • CRC기법을 이용하기에 CRC라고도 한다.

이며, 이들이 추가되어야 송신을 위한 패킷이 완성된다.

패킷 송신

패킷이 완성되었다면, 이를 송신해보자.
송신에는 반이중 모드와 전이중 모드가 있다.

  • 반이중모드: 리피터 허브 사용
  • 전이중모드: 스위칭 허브 사용 (추후 다룸)

반이중 모드

반이중 모드에 대해서만 다뤄보자. 반이중 모드는 양방향으로 데이터 송수신이 가능하나, 동시에 송수신을 할 수는 없다. 반이중 모드는 다른 기기의 신호가 있는지 조사하여, 있다면 끝나기를 기다린 후 송신을 시작하며, 앞에서부터 1비트씩 디지털 신호를 전기 신호로 변환한다. 또한, 의도치 않은 수신 신호를 감지하여 재밍 신호를 보내 알리기도 한다.

변환 작업은 이는 MAU(media attachment unit)에 의해 이루어진다. MAU는 디지털-전기 신호 변환과 충돌 감지 후 재전송 역할을 한다.

패킷 수신

상대방이 송신한 패킷이 어떻게 수신되는 지에 대해 알아보자.

  1. 수신한 신호가 허브에 의해 모든 케이블에 흘러간다.
  2. Preamble로 타이밍을 계산한다.
  3. SFD에 의해 프레임(패킷)의 시작지를 찾는다.
  4. 프레임을 변환하여 버퍼 메모리에 저장한다.
  5. FCS 검사를 통해 정상 여부를 판단한다.
  6. 헤더의 MAC가 일치하는 지 판단한다.
  7. 컴퓨터 본체에 인터럽트 방식으로 통지한다. (확장 버스 이용)

이와 같은 과정을 거쳐 컴퓨터 내부로 패킷이 전달된다.

IP -> TCP

이 후 프로토콜 스택이 어떻게 데이터를 획득하는지 알아보자.
1. 수신한 패킷의 IP 헤더와 LAN 카드의 패킷이 같은지 확인한다.
2. 오류가 있다면 ICMP를 사용하여 오류를 통지한다.
3. IP 단편화가 발생한 경우 reassembling을 시켜 TCP에게 전달한다. (자세한 내용은 다음 장에서 다룬다.
4. TCP, 수신처 송신처의 IP주소와 포트번호에 일치하는 소켓이 있는지 찾는다.
5. 소켓에 기록된 통신 상태에 따라 데이터를 전달한다.

UDP

L4(Transport Layer)에는 TCP를 제외하고도 UDP라는 프로토콜이 존재한다. UDP는 TCP에 비해 간단한 구조를 가지고 있어, 효율적이다. (다만, 신뢰성이 낮고 순서를 보장하지 않는다.)

이는 이전에 살펴봤던 DNS 조회 혹은 영상 음악 등 실시간으로 보내져야 하는 데이터 타입에 사용되었고, 최근에는 HTTP3의 QUIC에서 사용하며 각광을 받고 있다.

(UDP vs TCP)

참고

post-custom-banner

0개의 댓글