
TCP/IP 프로토콜은 현대 네트워킹에서 매우 중요한 역할을 한다.
전 세계 컴퓨터 간 원활한 데이터 통신을 가능하게 하여 인터넷을 구현하는 핵심 기술이다.
TCP/IP 계층 구조
애플리케이션 레이어
는 사용자 애플리케이션과 직접 연관되어 있다. HTTP, FTP, DNS 등의 프로토콜이 이 계층에서 동작하며, 웹 브라우저와 웹 서버 간의 통신과 같은 애플리케이션 간 정보 교환을 담당한다.트랜스포트 레이어
는 데이터 전송의 신뢰성을 보장하는 역할을 한다. TCP와 UDP 프로토콜이 이 계층에서 사용되며, 포트 번호를 통해 애플리케이션을 식별하고 데이터 전송의 신뢰성을 확보한다. TCP는 흐름 제어, 오류 제어, 혼잡 제어 등의 기능을 제공하여 안정적인 데이터 전송을 보장한다.인터넷 레이어
는 데이터 전달을 위한 라우팅 기능을 담당한다. IP 프로토콜이 이 계층에서 사용되며, IP 주소를 기반으로 데이터를 목적지까지 전달한다. 또한 ARP 프로토콜을 통해 IP 주소와 MAC 주소 간 변환을 수행한다.네트워크 액세스 레이어
는 실제 물리적인 네트워크 연결을 담당한다. *이더넷, PPP, 토큰 링 등의 프로토콜이 이 계층에서 사용되며, MAC 주소를 통해 직접 연결된 기기 간 데이터 전송을 지원한다.
- 이더넷
이더넷(Ethernet)은 로컬 영역 네트워크(LAN)에서 장치 간의 데이터 통신을 위한 기술 및 프로토콜이다.
네트워크 장치로 설명하자면 라우터는 LAN - LAN, 다른 네트워크끼리의 연결을 수행하므로 라우터는 internet 계층의 프로토콜을 사용하고,
스위치는 로컬 영역 네트워크(LAN)에서 장치 간의 데이터 통신을 담당하는 장치이므로 스위치가 network access 계층의 프로토콜인 이더넷 등을 사용한다.
TCP 패킷 구조
TCP(Transmission Control Protocol)는 전송 계층에서 작동하는 주요 프로토콜로, 신뢰성 있는 데이터 전송을 제공한다. 다음은 TCP에 대한 주요 특징이다.
신뢰성: TCP는 데이터의 전송이 성공적으로 이루어졌는지 확인하기 위해 오류 검출 및 복구 기능을 제공한다. 데이터가 손실되거나 손상된 경우, TCP는 이를 재전송한다.
연결 지향: TCP는 데이터 전송을 시작하기 전에 클라이언트와 서버 간에 연결을 설정한다. 이 과정은 '3-way handshake'로 알려져 있으며, 클라이언트가 서버에 SYN 패킷을 보내고, 서버가 SYN-ACK 패킷으로 응답한 후, 클라이언트가 ACK 패킷을 보내는 방식으로 이루어진다.
흐름 제어: TCP는 송신자가 수신자의 처리 능력을 초과하여 데이터를 전송하지 않도록 흐름 제어를 제공한다. 이를 통해 데이터의 전송 속도를 조절할 수 있다.
순서 보장: TCP는 전송된 데이터가 올바른 순서로 수신되도록 보장한다. 이는 데이터가 여러 패킷으로 나누어 전송될 수 있기 때문에 중요하다.
TCP 패킷 구조는 TCP 세그먼트라고 하며, 여러 필드로 구성되어 있고,각 필드는 TCP 통신을 위해 필요한 정보를 담고 있다.
TCP 세그먼트의 기본 구조는 다음과 같다:
- 출발지 포트 (Source Port): 16비트 필드로, 송신자의 애플리케이션 포트를 나타낸다.
- 목적지 포트 (Destination Port): 16비트 필드로, 수신자의 애플리케이션 포트를 나타낸다.
- 순서 번호 (Sequence Number): 32비트 필드로, 송신된 바이트의 순서를 나타낸다. 첫 번째 바이트의 순서 번호가 여기에 포함된다.
- 확인 번호 (Acknowledgment Number): 32비트 필드로, 수신자가 다음으로 기대하는 바이트의 순서 번호를 나타낸다. ACK 플래그가 설정된 경우에만 유효하다.
- 데이터 오프셋 (Data Offset): 4비트 필드로, TCP 헤더의 길이를 나타낸다. TCP 헤더가 몇 개의 32비트 워드로 구성되어 있는지를 나타내며, 데이터 시작 위치를 결정하는 데 사용된다.
- 예약 (Reserved): 3비트 필드로, 현재 사용되지 않으며 미래의 확장을 위해 예약되어 있다.
- 플래그 (Flags): 9비트 필드로, TCP 세그먼트의 제어 정보를 포함한다. 주요 플래그는 다음과 같다:
URG: 긴급 포인터 필드가 유효함을 나타낸다.
ACK: 확인 번호 필드가 유효함을 나타낸다.
PSH: 수신자가 데이터의 처리를 즉시 수행해야 함을 나타낸다.
RST: 연결을 재설정한다.
SYN: 연결 설정을 요청한다.
FIN: 연결 종료를 요청한다. - 윈도우 크기 (Window Size): 16비트 필드로, 수신자가 수신할 수 있는 데이터의 양을 나타낸다. 흐름 제어에 사용된다.
- 체크섬 (Checksum): 16비트 필드로, 데이터의 무결성을 확인하기 위해 사용된다. TCP 세그먼트의 헤더와 데이터에 대한 오류 검출을 담당한다.
- 긴급 포인터 (Urgent Pointer): 16비트 필드로, 긴급 데이터의 위치를 나타내며, URG 플래그가 설정된 경우에만 유효하다.
- 옵션 (Options): 가변 길이 필드로, TCP의 추가 기능을 제공하는 데 사용된다. 예를 들어, 최대 세그먼트 크기(MSS) 설정 등이 포함될 수 있다.
- 데이터 (Data): TCP 세그먼트의 실제 데이터가 포함된다. 이 데이터의 크기는 TCP 헤더와 전체 세그먼트 크기에서 데이터 오프셋을 뺀 값에 해당한다.
TCP 세그먼트의 구조는 신뢰성 있는 데이터 전송을 위한 다양한 기능을 지원해야 하므로, 필드가 굉장히 많다.
이런 필드를 다 살펴보려 애쓸 필요는 없다. Port 필드와, 3, 4-way handshake를 위한 *Flag 필드만 알아두고 가도 충분하다. 나머지 필드는 이런게 있구나 하는정도로만 훑어보자.
- Flag 필드
ack, syn, fin 플래그를 제외하면 잘 쓰이지 않는다...
TCP 연결 설정 과정
TCP는 연결 지향형 프로토콜로, 송신 측과 수신 측 간의 안정적인 연결을 설정하는 과정이 필요하다.
이를 3-way handshake라고 한다. 3-way handshake는 TCP 연결 설정 과정에서 핵심적인 역할을 하며, TCP 플래그와 시퀀스 번호를 사용하여 신뢰성 있는 연결을 보장한다.
3-way handshake 과정은 다음과 같다:
1. 클라이언트가 서버에 연결 요청을 보낸다. 이때 클라이언트는 SYN 플래그가 설정된 패킷을 전송하며, 초기 시퀀스 번호를 함께 보낸다.
2. 서버가 클라이언트의 연결 요청을 수락하면, SYN 플래그와 ACK 플래그가 설정된 패킷을 클라이언트에게 보낸다. 이때 서버는 자신의 초기 시퀀스 번호도 함께 전송한다.
3. 클라이언트가 서버의 응답을 받으면, ACK 플래그가 설정된 패킷을 서버에게 보낸다. 이로써 클라이언트와 서버 간의 TCP 연결이 성공적으로 설정된다.
이 과정에서 SYN 플래그는 연결 요청을, ACK 플래그는 연결 수락을 나타낸다. 또한 시퀀스 번호는 데이터 전송의 신뢰성을 보장하기 위해 사용된다. 서버와 클라이언트는 초기 시퀀스 번호를 임의로 선택하고, 이후 데이터 전송 시 이 번호를 순차적으로 증가시킨다. 이를 통해 데이터의 순서를 보장하고 누락된 데이터를 감지할 수 있다.
3-way handshake 과정을 통해 TCP 연결이 성공적으로 설정되면, 클라이언트와 서버는 안정적인 데이터 전송 채널을 확보할 수 있다. 이는 TCP의 신뢰성 있는 데이터 전송 기능을 가능하게 하는 핵심적인 메커니즘이다.
TCP 연결 종료 과정
TCP 연결 종료 과정은 4-way handshake라고 불리며, 클라이언트와 서버 간의 통신이 원활하게 끝나도록 보장한다.
4-way handshake 과정은 다음과 같다:
1.클라이언트가 FIN 플래그가 설정된 패킷을 서버에 보내 연결 종료를 요청한다.
2.서버가 이를 수락하고 ACK 플래그가 설정된 패킷으로 응답한다. 이로써 클라이언트와 서버 간의 데이터 전송이 완료되었음을 확인한다.
3.서버도 FIN 플래그가 설정된 패킷을 클라이언트에 보내 연결 종료를 알린다.
4.클라이언트가 이를 수락하고 ACK 플래그가 설정된 패킷으로 응답한다. 이로써 연결 종료 과정이 완료된다.
4-way handshake를 통해 TCP 연결이 종료되면, 양측 간의 데이터 무결성과 통신 상태를 안전하게 관리할 수 있다. 또한 네트워크 자원을 효율적으로 활용하기 위해서는 불필요한 연결이 지속되지 않도록 연결 종료 과정이 중요하다.
TCP는 신뢰성과 안정성을 제공하는 강력한 프로토콜이지만 패킷 크기와 복잡한 연결 설정으로 인해 지연 시간, 오버헤드, 흐름 제어, 연결 지향성 등에서 단점이 존재한다.
이러한 이유로, HTTP/3는 TCP 대신 UDP를 채택하면서 많은 주요 웹 브라우저와 서버에서 지원되고 있으며, 점차적으로 보편화되고 있다. (UDP는 PORT 정보만 포함하는 단순한 구조이다..)
구글, 아마존, 페이스북 등 많은 기업들이 HTTP/3를 채택하여 성능과 사용자 경험을 개선하고 있다.
DNS와 IP 주소 변환
DNS(Domain Name System)는 인터넷 상에서 도메인 이름을 IP 주소로 변환하는 핵심적인 역할을 한다. 웹 브라우저에서 특정 웹 사이트의 URL을 입력하면, DNS 서버가 이를 해당 웹 서버의 IP 주소로 변환하여 통신을 가능하게 한다.
DNS는 분산 데이터베이스 형태로 구성되어 있는데, 각 DNS 서버는 특정 도메인에 대한 정보를 가지고 있으며, 상위 레벨의 DNS 서버들은 하위 레벨 DNS 서버들의 주소를 가지고 있다.
이러한 계층적 구조를 통해 전 세계적으로 분산되어 있는 수많은 도메인 정보를 효율적으로 관리할 수 있다.
DNS 요청 과정을 자세히 살펴보면 다음과 같다. 사용자가 웹 브라우저에 특정 도메인 이름(예: http://www.example.com)을 입력하면, 먼저 클라이언트 컴퓨터의 로컬 DNS 서버에 해당 도메인의 IP 주소를 요청한다. 로컬 DNS 서버는 자신의 데이터베이스에서 해당 도메인의 IP 주소를 찾아 클라이언트에게 응답한다.
만약 로컬 DNS 서버가 해당 도메인 정보를 가지고 있지 않다면, 상위 레벨의 DNS 서버에 질의를 보내게 된다. 상위 DNS 서버는 다시 더 상위 레벨의 DNS 서버에 질의를 보내는 방식으로 계층적으로 도메인 정보를 찾아나간다. 마지막으로 도메인에 해당하는 IP 주소를 찾게 되면, 이를 클라이언트 컴퓨터에 전달하여 웹 사이트에 접속할 수 있게 한다.
DNS 서버 주소는 일반적으로 컴퓨터의 네트워크 설정에 미리 등록되어 있어, 사용자가 별도로 입력할 필요가 없다.
데이터 통신의 과정
위의 내용을 토대로 전체적인 과정을 정리해보자.
DNS 서버가 도메인 이름을 IP 주소로 변환하면, 클라이언트 컴퓨터는 이 IP 주소를 사용하여 웹 서버와의 통신을 시작할 수 있다. 이 과정에서 TCP/IP 프로토콜 스택의 다른 계층들이 차례로 작동하게 된다.
먼저 인터넷 레이어에서 IP 주소를 기반으로 패킷을 전송하고, 네트워크 액세스 레이어에서 물리적인 네트워크 연결을 통해 데이터를 전달한다. 마지막으로 트랜스포트 레이어의 TCP 프로토콜이 데이터 전송의 신뢰성을 보장하여, 웹 브라우저가 웹 서버로부터 요청한 웹 페이지 데이터를 안전하게 수신할 수 있다.
결과적으로 DNS는 사용자가 입력한 도메인 이름을 IP 주소로 변환하는 핵심적인 역할을 수행하며, 이를 통해 웹 브라우저가 웹 서버와 원활한 통신을 할 수 있게 한다.
'Network' 카테고리의 다른 글
HTTPS: 안전한 웹 통신을 위한 필수 프로토콜 (0) | 2025.01.23 |
---|

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!