CHAPTER 06 · NETWORK

패킷의 여행과
TCP의 인사

데이터가 계층별 봉투에 담겨 이동하고, TCP가 연결을 만들고 끝내는 과정을 살펴봅니다.

읽는 시간 약 17분OSI · Encapsulation · Ethernet · IP · TCP Handshake
택배가 목적지까지 가려면 내용물을 포장하고 주소와 배송 정보를 붙여야 합니다. 데이터도 계층을 내려가며 필요한 헤더를 붙인 뒤 네트워크를 통해 전달됩니다.
택배가 목적지까지 가려면 내용물을 포장하고 주소와 배송 정보를 붙여야 합니다. 데이터도 계층을 내려가며 필요한 헤더를 붙인 뒤 네트워크를 통해 전달됩니다.

01

택배 상자 안에 또 다른 상자

애플리케이션의 데이터는 그대로 선을 타고 이동하지 않습니다. 각 계층이 필요한 정보를 앞에 붙입니다.

전송 계층은 TCP 또는 UDP 헤더를 붙여 세그먼트나 데이터그램을 만듭니다. 네트워크 계층은 IP 헤더를 붙여 패킷을 만들고, 데이터 링크 계층은 Ethernet 헤더와 트레일러를 붙여 프레임을 만듭니다.

수신자는 반대 순서로 포장을 벗겨 원래 데이터를 애플리케이션에 전달합니다. 이를 역캡슐화라고 합니다.

Application사용자 데이터
TransportTCP·UDP와 포트
NetworkIP와 라우팅
Data LinkMAC과 프레임
Physical전기·빛·무선 신호

02

OSI 7계층은 문제의 위치를 찾는 지도

계층을 외우는 목적은 시험 답을 쓰기보다 장애와 공격이 어느 단계에서 발생했는지 구분하기 위해서입니다.

케이블과 링크는 1~2계층, IP와 라우팅은 3계층, 포트와 TCP·UDP는 4계층, HTTP·DNS·SSH는 상위 계층에서 다룹니다.

웹이 안 열릴 때 링크, IP, 포트, 애플리케이션 순으로 확인하면 문제의 범위를 빠르게 좁힐 수 있습니다.

직접 확인해 보기
$ ip link $ ip addr $ ip route $ ss -tuln $ curl -v http://localhost
흩어진 물건을 용도에 맞게 정리하면 필요한 것을 쉽게 찾을 수 있듯, OSI 계층은 네트워크의 역할을 단계별로 나누어 문제의 위치를 찾기 쉽게 만듭니다.
흩어진 물건을 용도에 맞게 정리하면 필요한 것을 쉽게 찾을 수 있듯, OSI 계층은 네트워크의 역할을 단계별로 나누어 문제의 위치를 찾기 쉽게 만듭니다.

03

TCP는 왜 세 번 인사할까?

데이터를 보내기 전에 양쪽 모두 송신과 수신이 가능한지 확인해야 합니다.

이 세 번의 교환이 3-way handshake입니다. 이후 TCP는 순서 번호와 확인 응답을 이용해 누락과 순서를 관리합니다.

서버에 SYN만 대량으로 보내 연결 대기 공간을 소진시키는 공격이 SYN Flood입니다. SYN cookie와 rate limiting 등이 방어에 사용됩니다.

SYN접속하고 싶습니다
SYN + ACK요청을 받았고 저도 준비됐습니다
ACK확인했습니다. 통신을 시작합니다

04

연결을 끝낼 때도 인사가 필요하다

TCP는 양방향 통신이므로 각 방향을 따로 종료해 일반적으로 FIN과 ACK를 네 번 교환합니다.

FIN은 더 보낼 데이터가 없다는 뜻이고, RST는 정상 절차를 기다리지 않고 연결을 즉시 끊는 신호입니다.

Wireshark에서 SYN, ACK, FIN, RST 플래그를 보면 연결이 생성되고 종료되는 흐름을 확인할 수 있습니다.

직접 확인해 보기
$ tcpdump -ni any tcp $ ss -tan $ curl -v https://example.com
TCP는 손실이 발생하지 않는 선을 사용하는 것이 아니라, 손실을 감지하고 재전송하여 애플리케이션에 빠짐없이 전달하는 방식이다.

CHAPTER REVIEW

이번 장에서 기억할 한 문장

데이터는 계층마다 헤더를 붙여 패킷과 프레임이 되고, TCP는 세 번의 인사로 연결 상태를 확인한다.