https://dev-dx2d2y-log.tistory.com/184
[네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARP
https://dev-dx2d2y-log.tistory.com/181 [네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치https://dev-dx2d2y-log.tistory.com/180 [네트워크] 혼공네트 독서 #3 - 이더넷 프레임https://dev-dx2d2y-log.tistory.com/178
dev-dx2d2y-log.tistory.com
https://dev-dx2d2y-log.tistory.com/186
[네트워크]IPv4 패킷필드에서 옵션은 무엇을 담당하는가?
https://dev-dx2d2y-log.tistory.com/184 [네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARPhttps://dev-dx2d2y-log.tistory.com/181 [네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치https:/
dev-dx2d2y-log.tistory.com
https://dev-dx2d2y-log.tistory.com/187
[네트워크] 혼공네트 독서 #6 - IP주소
https://dev-dx2d2y-log.tistory.com/184 [네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARPhttps://dev-dx2d2y-log.tistory.com/181 [네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치https:/
dev-dx2d2y-log.tistory.com
https://dev-dx2d2y-log.tistory.com/190
[네트워크] 혼공네트 독서 #7 - 라우팅, 라우팅테이블, 라우터
https://dev-dx2d2y-log.tistory.com/187 [네트워크] 혼공네트 독서 #6 - IP주소https://dev-dx2d2y-log.tistory.com/184 [네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARPhttps://dev-dx2d2y-log.tistory.com/181
dev-dx2d2y-log.tistory.com
저번에는 총 4개의 게시글 (한 개는 추가적으로 알아본거라 사실은 3개)로 L3 계층에 대해서 알아보았다. 이번에는 L4 계층에 대해서 알아보기로한다.
L4 (전송계층)은 왜 필요한가?
기존 L3계층의 문제점은 신뢰할 수 없는 통신과 비연결성 통신을 수행한다는 문제가 있었다. 이는 L3계층의 문제이기도하면서 IP의 근본적인 문제이기도 하다. 각 문제에 대해서 하나씩 알아보자면
신뢰할 수 없는 통신
L3계층이 담당하는 일은 단순히 "패킷 보내기"이다. 따라서 중복패킷이 전송되거나 패킷전송에 오류를 감지하여 재전송하지도 않는다. 그냥 보내기만한다. 이러한 특성을 최선형 전달(Best effort delivery)라고 부른다.
L3 계층과 IP의 근본적인 문제점 중 하나로, 정보가 제대로 전송되었는지 알 수 없고 단순히 정보를 보내기만 한다는 단점이 있다.
비연결형 통신
송수신 호스트 간 사전 연결을 수행하지 않는다. 그냥 수신지로 패킷을 보내기만 한다. 단순히 "그냥 오류가 생기면 오류메시지를 송신지 IP주소로 정보를 다시 보내면 되지 왜 사전 연결이 필요한가?" 싶을 수 있는데, 우선 "오류가 생기면" 감지를 하지 못하고, L3 계층은 그냥 "보내기"만 담당하기 때문에 어떤 패킷에서 오류가 발생했는지도 모른다.
그렇다면 왜 L3계층에서는 비신뢰성, 비연결형 통신을 사용했을까? 그 이유는 성능 때문이다. L3 계층은 그냥 "빨리 보내기"에 집중한 계층이다. L3계층에서 L4 계층의 패킷확인, 연결수립 등의 과정은 필요하지 않다. 그냥 빨리 보내기 위해서이다. 패킷확인, 연결수립 등의 과정은 다른 계층에서 담당하도록하고, L3계층은 보내기만 담당하기에 비신뢰성, 비연결형 통신을 사용한다.
L4는 다 해준다
따라서 L4계층에서는 L3계층의 이러한 문제점을 보완한다. 패킷에 문제가 있는지, 있다면 감지해서 재전송하고, 수신하려는 호스트와 미리 연결해서 상대 호스트가 정보를 받을 수 있는 상황인지를 확인하고, 첫 번째 패킷의 번호를 지정해 특정 패킷이 누락되면 해당 패킷을 다시 보내도록하고하는 정보들을 사전에 맞춰둔다.
물론 L3계층처럼 "신뢰성"을 우선시해야하는 경우도 있다. 이럴 때에는 패킷검사, 연결수립 등을 사용하지 않고 그냥 정보를 보내기만하는 프로토콜을 사용한다.
포트
포트란?
컴퓨터에 카카오톡과 웹 브라우저, 실시간게임을 켜놓고 있었다. 만약 카카오톡으로 메시지를 받았는데, 이 메시지를 어디에 표출되어야할까? L3계층을 사용했다면 호스트가 단순히 카카오톡으로 들어오는 네트워크 패킷을 받기만 할 뿐이다. 이를 카카오톡 화면에 정확히 표출하기 위해서는 패킷이 실행 중인 애플리케이션 프로세스까지 전달되어야한다.
이는 패킷을 보낼 때에도 마찬가지로, 기존에는 최종수신지가 상대방 호스트였지만, 실제로는 상대방 호스트의 특정 애플리케이션 프로세스다. 유튜브를 보고 있다면 웹 브라우저가 되겠고, 카톡 메시지 패킷을 받는다면 상대방의 카카오톡 애플리케이션이 최종 수신지가될 것이다.
L4패킷에는 포트라는 것을 사용하여 패킷에 어느 애플리케이션에서 왔는지, 또는 어느 애플리케이션을 목적지로하는지에 대한 정보를 저장한다. 즉, 포트는 수신지에 도착한 패킷이 어느 애플리케이션으로 가야하는지 나타낸 정보다.
포트의 종류
L4계층에서 포트에 패킷이 어느 애플리케이션으로 갈 지 저장한다고했다. 그리고 포트는 포트 번호를 통해서 특정 애플리케이션을 구분한다.
L4계층에서 주로 쓰이는 TCP와 UDP 프로토콜의 헤더에는 16비트 데이터로 송신지 포트번호와 수신지 포트번호를 저장할 수 있다. 즉, 사용가능한 포트의 개수는 0번부터 65535번까지 총 65536개로 표현할 수 있다.
잘 알려진 포트(Well known port)
0번포트부터 1023번 포트가 이에 해당한다. 웰 노운 포트, 시스템 포트라고 표현하는 경우도 있다. 대표적인 예시로는
20,21 - FTP (File Transfer Protocol)
파일 송수신을 위해 필요하다. 20번 포트를 데이터를 실제로 송수신하는데 사용하고, 21번 포트를 로그인 / 파일 리스트 보이기 / 파일전송확인 등 제어 및 인증으로 사용한다.
22 - SSH (SecureSHell)
네트워크 상의 다른 호스트에 원격으로 접속하여 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록하는 프로토콜. 정보 자체가 암호화되어 탈취당하더라도 정보를 알 수 없다. SSH 프로토콜을 사용할 때 사용하는 포트
23 - TELNET
SSH가 등장하기 이전 사용하던 포트. 암호화되지 않은 평문을 교환한다. 이때문에 보안상 문제로 요즘은 주로 22번 포트를 사용한다.
53 - DNS
뒤에서 다루겠지만 브라우저에서 도메인주소를 입력하면 바로 도메인주소를 가지고있는 서버로 패킷이 전송되는데, 이 때 평문의 도메인 주소를 IP주소로 바꿔야하고, 이 작업을 DNS서버에서 담당한다. DNS서버와 연결된 포트
67, 68 - DHCP
67번 포트가 DHCP 서버용 포트, 68번이 DHCP 클라이언트 포트
80 - HTTP
웹브라우저나 웹페이지에서 주로 사용하는 포트
443 - HTTPS
HTTP에서 보안이 강화된 프로토콜로, 대부분의 웹 페이지는 이 포트를 사용한다.
만약 웹브라우저에서 www.naver.com 을 입력하면 브라우저는 먼저 53번 포트로 DNS서버에 해당 도메인주소에 대한 IP주소를 받아오고, IP주소를 알아낸 다음 443번 포트로 패킷을 보내는 형식으로 사용한다. 일반적으로 53번, 443번과 80번 포트를 자주 사용하고, 여기에도 간단한 파일 전송 기능이 마련되어있기 때문에 일반적으로 웹페이지에서 이미지 등을 다운받을 때에는 그냥 443번, 80번 포트를 사용한다. 기존 포트에 연결을 유지하다가 새 포트를 열면 새로이 연결을 잡아야하기 때문.
등록된 포트(Registered port)
1024번부터 49151번까지의 포트번호가 해당한다. 덜 범용적이지만 애플리케이션 프로토콜에 사용하기 위해 사용한다. 대표적으로
1194 - OpenVPN
1433 - Microsoft SQL Server DB
3306 - MySQL 데이터베이스
6379 - 레디스
8080 - HTTP 대체
만약에 백엔드 서버를 구축하고 있었다면, 평소에는 80번/443번 포트로 요청을 받다가 MySQL DB에 접근해야한다면 3306번 포트에 접속해서 DB에 접근하는 형태로 이루어진다.
동적 포트(Dynamic port)
사설 포트(private port), 임시 포트(ephemeral port)라고도 한다. 49152번부터 65535번 포트까지가 이에 해당한다. 위의 사례처럼 딱히 특정용도로 지정되지도 않았고, 특별히 관리되지도 않아서 자유롭게 사용할 수 있다.
서버로 동작하는 프로그램은 잘 알려진 포트와 등록된 포트로 동작하는 경우가 많다. HTTP(S) 응답을 받고 DB에 접근하는 것이 다 미리 포트번호가 지정되었기 때문.
클라이언트로 동작하는 프로그램은 동적 포트 번호 중에서 임의의 번호를 사용하는 경우가 많다. 잘 알아야할 것은 위의 포트들은 서버가 요청을 받을 때 사용하도록 지정된 포트들이다. 즉, 서버 입장에서는 특정 용도로 메시지를 받을 때에는 반드시 저 포트를 사용해야하지만, 클라이언트 입장에서는 요청을 보낼 때나 응답을 받을 때 아무 포트나 사용해도 문제없고, 그게 맞다.
왜냐하면 크롬창 두 개를 띄워놓고 요청을 동시에 보낼 때, 두 포트가 다른 포트를 써야하기 때문이다. 첫 번째 크롬창은 50000번 포트, 두 번째 크롬창은 50001번 포트를 사용하는 식으로 작동한다.
암튼 그래서 클라이언트가 요청을 보낼 때에는 송신지 포트번호를 동적 포트에서 임의로 할당해서 보내고, 수신지 포트번호는 서버가 이게 무슨 요청인지 확인할 수 있도록 80번, 443번 등 미리 예약된 포트로 패킷을 보낸다. 응답을 반환할 때에는 그 반대

IP주소와 포트번호가 같이 주어지면 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있다. 윈도우에서 리소스 모니터를 실행시키면 위와 같이 뜨는데,
보면 스팀은 56125번 포트에서 146.75.115.82 IP 주소의 443번 포트로 요청이 전송되고 있고, 노션은 52783번 포트를 통해 208.103.161.1번 IP주소의 443번 포트로 패킷이 전송됨을 알 수 있다.
다만 크롬이 좀 이상한데, 53448번 포트에서 출발해 64.233.188.188 IP 주소의 5228번 포트를 사용한다. 5228번 포트는 구글에서 만든 메시징 프로토콜의 포트번호로, 크롬 브라우저를 통해 들어오는 알람이나 비밀번호 동기화 등을 위해서 사용된다. 443번 포트로 요청을 보내는 것에 대한 정보는 저 밑 어딘가에 있다.
암튼 그래서 L4계층에서는 포트라는 개념을 사용할 수 있기 때문에 호스트의 특정 애플리케이션으로 패킷을 전달할 수 있다. 그리고 포트번호는 일반적으로 IP주소:포트번호로 표시한다. 그래서 다시 예시를 들어보면 스팀은 146.75.115.82:443 으로 요청을 보내고, 노션은 208.103.161.1:443 으로 요청을 보낸다. 요청은 다시 XXX.XXX.XXX.XXX:56125 에서 받거나 할 것이다.
포트 기반 NAT
L3 계층에서 NAT에 대해서 배웠다. IP주소를 사설IP에서 공인IP로 변환하는 기술이라고 했는데, L4 계층에 대해서 안다면 이를 더 자세히 알아볼 수 있다.
NAT은 사설IP를 공인IP로 변환하는만큼, 사설IP와 공인IP를 대응시켜서 하나의 테이블로 저장한다. 이를 NAT 변환 테이블이라고 칭한다. 만약 네트워크 내부의 어느 호스트가 네트워크 외부의 호스트에게 요청을 보내면 NAT이 NAT 변환 테이블을 보고 알맞은 공인IP로 송신지 IP주소를 바꿔서 패킷을 내보내는 방식으로 사용한다.
다만 이러면 문제가 있는데, 사설IP를 사용하는 이유가 모든 네트워크 장비에 공인IP를 대응시키지 못하므로 다른 LAN끼리는 IP주소가 중복되는 것을 허용하여 LAN 내부에서만 호스트를 식별하기 위해 사용한다고 했다. 하지만 그냥 사설IP와 공인IP를 일대일로 대응시키면, 결국에는 호스트 수만큼 또 공인IP가 필요하므로 똑같은 문제가 발생하는데, 이 때 사용하는 것이 포트 기반 NAT이다.
오늘날의 NAT은 IP주소를 일대일로 매칭시키지 않고 사설IP 여러 개를 하나의 공인IP로 변환한다. 그리고 여기서 포트가 사용된다.
NAPT
포트 기반의 NAT을 NAPT(Network Address Port Translation)이라고 칭한다. APT라고도 칭하고.
NAPT 내부에는 IP주소 뿐 아니라 포트번호도 같이 기재한다. 만약 공인IP주소가 같더라도 포트번호가 다르면 알맞은 호스트에게 정보를 전달할 수 있다는 것을 이용하여, 호스트 내부에서 192.168.0.5:1025를 1.2.3.4:55310로, 192.168.0.6:1026을 1.2.3.4:55311로 대응시켜 공인IP 주소가 같지만 포트번호가 다름을 이용하여 공인IP의 수를 절약할 수 있다.
암튼 이렇게 L4계층에 대해서 전반적으로 기초를 다뤄보는 시간을 가졌다. 다음은 TCP. 원래는 한 번에 하려고했는데 TCP내용이 좀 많아서 한 절 당 한 게시글로 분량을 쪼갤 생각이다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
| [네트워크] 인터넷이란 무엇인가? (0) | 2026.06.30 |
|---|---|
| [네트워크] 혼공네트 독서 #9 - TCP (0) | 2026.01.26 |
| [네트워크] 혼공네트 독서 #7 - 라우팅, 라우팅테이블, 라우터 (0) | 2026.01.23 |
| [네트워크] 혼공네트 독서 #6 - IP주소 (1) | 2026.01.17 |
| [네트워크]IPv4 패킷필드에서 옵션은 무엇을 담당하는가? (0) | 2026.01.16 |
