TCP/IP 5Layer 이해하기
2025-06-20

네트워크의 기초를 다지는데 있어서 보통 OSI 7 Layer모델을 많이 접하고 나또한 그랬다. 하지만 살짝 이론적인 느낌이 강해 실제 환경에 대입해보기에 어려움이 있었기때문에 잘 와닿지 않았었다. TCP/IP 5Layer의 이론적 표준화 모델이 OSI 7 Layer 모델이다. 즉 TCP/IP 5Layer 모델은 실제 통신에 기반이된 모델이기때문에 실용적인 면에서 더 좋아 이해하기 쉬웠다.

오로지 이해를 위한것이기때문에 각 세그먼트, 패킷등의 헤더의 구성내용까지 자세히 보지는 않을거지만 해당내용만으로 네트워킹에 대한 기초를 어느정도 이해한거같아 기분이 좋았다.


TCP/IP 5Layer 모델 이해하기

image
TCP/IP 5Layer 모델

예시에는 물리계층이 빠져있지만 각 계층의 데이터유닛이 그다음 레이어로 캡슐화되어 전달되는 과정을 볼 수 있다. 데이터를 받는 입장에서 물리계층부터 애플리케이션 계층까지 전기신호가 어떻게 처리되는지 살펴보자.


5. 응용 계층 (Application Layer)

Frontend개발자 입장에서는 가장 중요한 레이어라고 볼 수 있다. 왜냐면 웹 및 앱 통신시에 사용되는 프로토콜(HTTP,HTTPS,FTP 등..) 대부분이 해당 레이어에 속하기 때문인데, 하지만 데이터의 흐름관점에서 이 레이어의 중요한점은 데이터의 생성 및 최종 소비가 이루어지는 지점이라는 것이다. 포트번호로써 서비스를 구분하고 해당 서비스에 정확히 데이터를 전달하는 영역이다.


4. 전송 계층 (Transport Layer)

포트를 통해 어떤 서비스에 데이터를 전달할 것인지를 식별한다. 데이터 전송의 핵심은 3-네트워크 계층인데 이 전송에 안전성을 더하는 역할도 한다. TCP/UDP가 이에 속한다.

포트 (Port)

특정 서비스로 트래픽을 전달하기 위한 16비트 숫자. 각 서버마다 관리기관인 IANA가 할당한 고정 포트번호가 존재하고 대표적으로 443(HTTPS), 80(HTTP) 포트 등이 있다.

여러 요청을 하나로 묶어 하나의 네트워크로 보내는 멀티플렉싱이 가능한건 이 포트때문이다. 하나로묶어 보내도 포트를 통해 서비스에 정확히 전송할 수 있기 때문이고, 반대의 과정을 거치는 디-멀티플렉싱도 마찬가지다.

서버를 가리키는 주소인 IP주소와 포트가 만나게되면 결국 그 서버의 최종 엔드포인트 서비스를 의미하고 이를 곧 소켓 Socket이라고 한다.

TCP 세그먼트

위 사진에서 각 데이터유닛이 그다음 계층의 페이로드로 캡슐화되어서 전달되는걸 알 수 있는데, 이때 TCP 전송계층에서 사용되는 데이터유닛이 바로 세그먼트다.

TCP-헤더 + 실질데이터(페이로드)로 구성되어 있는데 TCP-헤더는 데이터의 목적지정보 뿐 아니라 데이터 안정성에 대한 정보역시 포함되어있다. 헤더는 여러 구성으로 되어있지만 대표적으로는 다음이 존재한다.

  • 소스/목적지 포트: 말그대로며, 멀티-디멀티플렉싱을 가능하게 한다.
  • 시퀀스 번호: 데이터의 순서가 적힌 번호. TCP의 데이터 연결성을 가능하게한다.
  • 승인 번호: 다음으로 올거라 예상되는 세그먼트 번호 즉 시퀸스번호가 적혀있다.
  • 데이터 오프셋: 어디부터가 진짜 페이로드인지 나타내는 위치값
  • 체크섬: 데이터 무결성을 확인하는 번호다. 전체 데이터를 특정 알고리즘에 의해 계산해 부여된 값이고, 각 레이어간 전달중 해당값이 달라졌는지를 확인한다.
  • TCP-제어플래그: 세그먼트의 흐름을 제어하고 연결상태를 관리하기 위한 값

위의 TCP는 연결지향이기 때문에 TCP-제어플래그를 통해서 연결상태까지 관리하게 되며, 총 6개의 플래그가 존재한다.

  • SYN: 초기 연결 설정 -> 초기 시퀀스번호를 제공한다.
  • ACK: 승인 -> 수신데이터에 대한 확인플래그며, 연결지향이기 때문에 해당플래그 응답이 없다면 세그먼트가 손실된것이라 간주해 재전송한다.
  • FIN: 연결 종료
  • RST: 연결 초기화 -> 비정상적인 연결종료 및 거부시에 사용된다.
  • PSH: (강제)데이터 전송 -> 수신측에게 즉시 ACK을 요구해 데이터를 강제로 흐르게한다.
  • URG: 긴급 데이터가 포함되어있음을 알림

초기 시퀀스번호는 랜덤한 난수로 생성되고 이후 ACK응답을 받을때마다 데이터의 크기만큼 증가한다. 이런 제어플래그 덕분에 3(4)-way handshake를 통한 복잡한 연결관리를 수행할 수 있다.

3-way handshake - 연결설정

(A)SYN, (B)ACK+SYN, (A)ACK의 흐름. 응답시 ACK+SYN이 같이 되는걸 볼 수 있다.

4-way handshake - 연결종료

(A)FIN, (B)ACK, (B)FIN, (A)ACK의 흐름. 응답 이후 FIN요청을 바로 보내게된다.

TCP 소켓 상태

  • LISTEN: 연결을 기다리는 상태 -> 즉 SYN요청을 기다리는 상태. 즉 서버측에서만 볼 수 있다(only-server)
  • SYN_SENT: SYN을 보낸 상태 -> SYN을 보내고 ACK+SYN을 기다리는 상태.(only-client)
  • SYN_RECV: SYN을 받은 상태 -> 서버가 ACK+SYN을 보내고 클라이언트로부터 ACK을 못받은 상태.(only-sever)
  • ESTABLISHED: 연결이 설정된 상태
  • FIN_WAIT: FIN을 보내고 ACK을 기다리는 상태
  • CLOSE_WAIT: TCP연결은 닫혔지만, 애플리케이션에서 아직 소켓을 완전히 해제하지 못한상태 -> 오래지속되면 문제의 징후가된다.
  • CLOSED: 정상닫힘

TCP vs UDP

TCP는 신뢰성이 높지만 연결설정시마다 발생하는 3-way와 각 요청시마다 ACK응답으로 인한 오버헤드가 발생해 속도가 느려질 수 있다.

반면 UDP는 속도지향이기 때문에 일단 데이터를 보내고 본다. 즉 연결설정에 대한 오버헤드 및 ACK응답이 필요 없기때문에 속도가 빠르다. 하지만 데이터 무결성을 보장하지 않기 때문에 데이터 손실이 발생할 수 있다.


3. 네트워크 계층 (Network Layer)

다른 네트워크로 데이터를 전송하기 위한 계층이다. 즉 데이터 전송에 핵심 계층이다. 이를 위해선 목적지 네트워크를 식별하고 해당 네트워크 장비까지 도달해야 하는데, 이때 사용되는 인터넷 프로토콜(IP) 및 사용되는 주소 IP주소가 핵심이다.

IP Address

4개의 옥텟, 10진수 표기로 구성된 주소다. 옥텟은 컴퓨터 네트워킹에서 8비트의 덩어리라고 생각하자. 예를들어 192.168.0.1 이라는 주소는 4개의 옥텟으로 구성되어있다.

우리가 흔히 ipconfig 등으로 알아낸 IP는 DHCP로 자동 부여되는 사설IP다. DHCP는 동적 호스트구성 프로토콜로 일단 네트워크 장비가 자동으로 IP를 부여한다고만 알고있자. 즉 IP주소는 특정장소나, 로컬장비에 국한된게 아니라 네트워크환경에 영향을 받는다는걸 의미한다. 즉 같은 맥북을 이용해도 네트워크환경이 다르다면 IP주소는 다를것이다.

위에서 사설IP 언급을했는데 반대로 공인IP도 존재한다. 이는 ISP즉 인터넷서비스 제공업체가 부여하는 IP주소이며 인터넷상에서 유일하게 식별되는 주소다. 즉 네트워크간 통신은 사설IP를 통해 전송되는게아니라 이 공인IP를 통해 전송되고 들어온다.

내용이 길었지만 핵심은 IP주소는 네트워크를 식별하는 ID라는 것이다.

IP Datagram

TCP 세그먼트처럼 IP의 데이터 유닛을 말한다. 마찬가지로 헤더 + 페이로드 구성이며 헤더의 구성은 다음과 같다.

  • 버전: 프로토콜 버전
  • 프로토콜: 캡슐화되어 페이로드에 있는 상위계층 프로토콜(TCP/UDP)를 특정값으로 식별
  • 출발/도착 IP주소: 말그대로
  • TTL: 데이터그램이 순회할 수 있는 최대 홉(라우터 통과횟수)수
  • (헤더)체크섬: IP 헤더 무결성 검증 필드

전송계층의 체크섬은 세그먼트 전체를 검증하는것과 다르게 IP 데이터그램의 체크섬은 헤더만 검증한다. 왜냐면 전송계층은 이미 어떤 네트워크를 통하는지 확인이 완료가 된 시점이다. 반면 IP 데이터그램은 라우터를 통해 도착지 네트워크까지 데이터를 전달할텐데 이과정에서 전체 체크섬을 진행하는건 비용문제가 있기 때문이다.

TTL필드는 꽤 중요한데 Time to Live즉 데이터가 살아있는 시간을 말하는데 라우터간 데이터를 전달하면서 TTL값이 -1되고 0이 될때까지 데이터가 전달되지 못하면 폐기된다. 만약 이런 조치가 없을때 문제가생겨 네트워크간 루프를 돌게될경우를 생각하면 왜 있는지 느낄 수 있다.


여러 로컬-디바이스가 연결되어 LAN을 이루고, LAN이 라우터를 통해 외부의 LAN과 서로 연결되어서 큰 네트워크를 형성하며 궁극적으로 인터넷을 구성한다.

이때 데이터링크 계층은 LAN 내부에서 디바이스간 데이터(=프레임)를 정확하게 통신할 수 있도록 하는데, 디바이스 ID인 MAC-ADDRESS이더넷, Wi-Fi 프로토콜 등이 쓰인다

MAC-Address

각 네트워크 장치를 고유하게 식별하는 48비트 주소다. 6개의 옥텟, 16진수 표기로 구성되어있다.

이더넷 프레임

이 계층의 데이터유닛은 프레임이다. 유선 LAN연결의 표준 프로토콜인 이더넷의 프레임도 마찬가지로 헤더+페이로드 구성이며 헤더의 구성은 다음과 같다.

  • 송/수신 MAC-ADDRESS: 데이터가 정확히 전송되기 위해 담겨있다.
  • FCS/CRC: 데이터 무결성을 확인하기 위함인데 CRC라는 계산된값이 담겨있고 송/수신측의 CRC값이 서로다르다면 데이터는 깨진거다.

이외 여러 필드가 존재한다. FCS를 확인해서 데이터가 깨졌다면 해당 레이어에서 재전송여부를 결정하지는 않는다. 재전송여부는 오직 전송계층에서 결정된다.

네트워크 레이어와 연관지어 생각해보면 IP 데이터그램이 라우터간 여행을 통해서 도착지 네트워크까지 도착했다고 가정하면 이제 정확한 디바이스 MAC주소에 전달을 해야하는데 이를 가능하게하는게 ARP(주소확인 프로토콜)이다. 엄밀히 따지면 ARP는 2단계도 3단계도 아닌 2.5단계의 느낌이라고 볼 수 있다.


1. 물리계층 (Physical Layer)

모든 Layer중에 기술적으로 제일 복잡할지도 모르겠다. 왜냐면 비트를 전기신호로 변환해 케이블을 통해 끝에서 끝까지 전송하는 역할이기때문에 복잡한 수학, 전기공학등의 기술이 적용되기 때문이다.

비트를 전압으로 바꾸고(=변조) 받는쪽에서는 전압을 다시 비트로 바꾸게(복조) 되는데, 이때 컴퓨터끼리 전기-비트에 대응되는 규칙이 필요할건데 이걸 라인코딩이라고 한다.

네트워크 케이블

난 군대에서 전산병이었기때문에 랜선을 만들어본 경험이 아주많다. 이때 케이블을 뜯어 내부 구리선을보면 1쌍의 트위스트 형태인걸 볼 수 있다. 당시에는 왜그런지 몰랐는데 이는 전자기 간섭과 인접 쌍으로부터의 혼선을 방지해서 안정적으로 전기신호가 전달될 수 있게 함이었다.

현대의 케이블은 동시에 송-수신측이 통신가능한 이중통신을 허용한다. 와닿지 않는다면 1명씩 번갈아가면서 말해야하는 무전기를 생각해보자 이는 반이중통신이다.

이 케이블을 외부장비의 네트워크포트에 연결하고 연결이 성공하면 주황색 LED가 켜지는데 이는 네트워크 포트의 연결표시등이다. 이후 데이터를 주고받게 되면 초록색 LED인 작동표시등이 켜질것이다.


느낀점

우연한 계기로 구글에서 진행하는 네트워크 기초강의를 보고 학습하게되었는데 정말 좋은 강의였다. 강의 내용이 너무 좋아서 예전에 희미하게만 이해했던 내용들이 나름 명확하게 이해가 되었고, 그상태에서 서브넷팅, 라우팅, 포트포워딩 등 네트워크 서비스에 대한걸 배우니 정말 좋았다. 해당 내용들도 나중에 포스팅을 하면서 정확히 새겨야겠다 싶었다. ✅