HTTP 메시지가 여러 과정을 거쳐 TCP의 패킷 안에 들어갔다. 이제 TCP에서 만들어낸 패킷이 어떤 프로토콜, 기기들을 거쳐 상대방에게 도착하는지 살펴보자. (IP 계층 위주로 살펴본다.)
TCP/IP에서는 데이터에 헤더를 더해나간다. 이렇게 만들어진 패킷에 대해 살펴보자.
우선, 프로토콜 스택은 TCP 계층에선 접속, 데이터 송수신, 연결 끊기와 같은 동작을, IP 계층에선 패킷 송수신 동작을 수행한다. 이는 각 계층에서 더해나간 패킷의 헤더하고도 관련이 있다.
TCP 헤더은 위에 언급했던 동작들을 위한 헤더이다. 이는 저번에 살펴보았으므로 생략한다. IP 헤더는 상대방에게 데이터를 송신하기 위한 정보(IP주소, 등등)이며, 마지막으로
MAC 헤더는 상대방의 기기(MAC 주소)를 식별하기 위한 정보들이 담겨있다.
이러한 정보들을 담은 후 상대방에게 운반을 하게 되는데 동작 과정은 아래와 같다.
R1
) + IP 헤더(목적지 S
) + TCP 정보(TCP 헤더 + 데이터) 생성 후 허브로 전달R1
): 라우팅 테이블을 확인하여 목적지에 빠르게 갈 수 있는 다음 라우터(R2
)에 전달 (Mac Header 변경)S
): 여러 라우터들을 거쳐 서버에 도착링크 의 그림4를 참고하면 좋을 것 같다.
각 용어들에 대한 추가 설명이다. (다음 챕터에서 자세히 살펴본다.)
라우터
목적지(IP) 확인하여, 다음 라우터를 표시한다.
허브
이더넷 규칙에 따라 패킷을 다음 라우터로 운반
이더넷
각 기기들이 맥주소를 가지고, 케이블-장치(허브, 스위치 등)을 통해 상호작용하는 프로토콜이다, 이더넷에서 이진 데이터들을 전기(or 빛) 신호로 변경하여 케이블에 송출한다.
여러 기기들이 존재하는 이유
다양한 기기가 역할 분담 -> 변경 용이 -> 유연성 향상 -> 거대 네트워쿠 구축 가능
허브와 스위치(L2)의 차이
허브는 브로드캐스팅으로 연결된 모든 장치들에 패킷 전달, 스위치는 목적 기기에만 전달하여, 효율 & 보안이 뛰어남.
스위치(L3)와 라우터의 차이
참고 (요약: 스위치가 발전하며, 라우터처럼 IP 스위칭도 가능해짐, 더불어 라우터만 제공하던 기능들도 제공하게 되며 큰 의미가 없어짐)
라우팅 테이블
(netstat -rn
을 통해 확인한 macos의 라우팅 테이블 모습)
등을 나타낸다.
macos(netstat -rn
)에서는 윈도우(route print
), 리눅스(route
)와 달리 Metric(어느 경로가 최소 비용인지에 대한 정보)이 없다.
참고
중요 헤더들
MAC 헤더에 대해 좀 더 자세히 살펴보자.
으로 구성된다.
(캐시 획득 모습)
이더넷은 다수의 컴퓨터가 적은 비용으로 통신하기 위한 기술이며, 케이블이 본질이다.
원형
케이블을 통해 신호가 전체에 흐른다. (증폭) MAC주소에 따라 수신처가 이를 획득하며, 나머지 기기들은 무시한다.
리피터 허브
허브를 통해 신호가 전달된다.
스위칭 허브
원하는 기기에만 신호를 전달한다.
패킷은 0과 1로 이루어진 디지털 데이터이다. 따라서 이를 케이블로 전송하기 위해선 변환과정이 필요하다. 이는 LAN 카드(+ LAN 드라이버)에 의해 전기(or 빛)신호로 변환된다.
또한, 전원 공급시 초기화 작업을 진행하는데 중요한 작업은 MAC 주소 설정이다. MAC 주소는 ROM에 작성되며 이는 기본적으로 유일하며, 특수하게 설정 파일을 통해 설정되는 경우도 있다.
전체 패킷은 Preamble + SFD(Start Frame Delivery) + [MAC 정보] + CRC{FCS(Frame Check Sequence}의 구현) 로 이루어져 있다.
10101011
로 이루어져있다.11
을 통해 프레임(패킷) 시작을 확인하는 비트이다.이며, 이들이 추가되어야 송신을 위한 패킷이 완성된다.
패킷이 완성되었다면, 이를 송신해보자.
송신에는 반이중 모드와 전이중 모드가 있다.
반이중 모드에 대해서만 다뤄보자. 반이중 모드는 양방향으로 데이터 송수신이 가능하나, 동시에 송수신을 할 수는 없다. 반이중 모드는 다른 기기의 신호가 있는지 조사하여, 있다면 끝나기를 기다린 후 송신을 시작하며, 앞에서부터 1비트씩 디지털 신호를 전기 신호로 변환한다. 또한, 의도치 않은 수신 신호를 감지하여 재밍 신호를 보내 알리기도 한다.
변환 작업은 이는 MAU(media attachment unit)에 의해 이루어진다. MAU는 디지털-전기 신호 변환과 충돌 감지 후 재전송 역할을 한다.
상대방이 송신한 패킷이 어떻게 수신되는 지에 대해 알아보자.
이와 같은 과정을 거쳐 컴퓨터 내부로 패킷이 전달된다.
이 후 프로토콜 스택이 어떻게 데이터를 획득하는지 알아보자.
1. 수신한 패킷의 IP 헤더와 LAN 카드의 패킷이 같은지 확인한다.
2. 오류가 있다면 ICMP를 사용하여 오류를 통지한다.
3. IP 단편화가 발생한 경우 reassembling을 시켜 TCP에게 전달한다. (자세한 내용은 다음 장에서 다룬다.
4. TCP, 수신처 송신처의 IP주소와 포트번호에 일치하는 소켓이 있는지 찾는다.
5. 소켓에 기록된 통신 상태에 따라 데이터를 전달한다.
L4(Transport Layer)에는 TCP를 제외하고도 UDP라는 프로토콜이 존재한다. UDP는 TCP에 비해 간단한 구조를 가지고 있어, 효율적이다. (다만, 신뢰성이 낮고 순서를 보장하지 않는다.)
이는 이전에 살펴봤던 DNS 조회 혹은 영상 음악 등 실시간으로 보내져야 하는 데이터 타입에 사용되었고, 최근에는 HTTP3의 QUIC에서 사용하며 각광을 받고 있다.
(UDP vs TCP)