안녕하세요, 성조입니다.
오늘은 TCP/IP(Transmission Control Protocol/Internet Protocol) 프로토콜에 대해 정리 및 이해하는 시간을 가져보려 합니다.
Introduce
'TCP/IP 모델'을 처음 접하면 자연스럽게 'OSI 모델'도 함께 접하게 됩니다.
OSI 모델은 물리 계층(Physical)에서 시작해 애플리케이션 계층까지 총 7 계층으로 나뉘며, TCP/IP 모델은 4개의 계층으로 구성되어 있으며, 다음 이미지와 같은 레이어 층을 가지게 되는데 참고해 주시면 좋을 것 같습니다.
이번 포스트에서는 TCP/IP를 다룰 예정이므로 OSI 모델은 향후 포스트에서 작성해보겠습니다. 🙂
Outline
TCP/IP(Transmission Control Protocol/Internet Protocol)는 전 세계에서 범용적으로 사용되는 기본 프로토콜 중 하나로, 네트워크 상에서 데이터가 어떻게 전송되고 수신되는지를 규정합니다.
참고로, 'TCP/IP'는 TCP와 IP가 하나로 합쳐진 것이 아니라, 서로 다른 프로토콜임을 인지해야 합니다. 전송의 신뢰성을 보장하는 TCP와 데이터 전송 경로를 관리하는 IP가 자주 함께 언급되며 사용되기 때문에 마치 하나로 보일 수 있는 점을 인지하면 좋습니다. 😊
TCP/IP는 [1 계층] 네트워크 액세스 계층, [2 계층] 인터넷 계층, [3 계층] 전송 계층, [4 계층] 응용 계층으로 구성된 4계층 구조를 가지고 있습니다.
※ HTTP 1, 2까지는 TCP/IP 기반으로 프로토콜이 정의되어 사용됐지만, HTTP 3부터는 구글이 QUIC라는 명칭으로 개발하면서 TCP/IP가 아닌. UDP 프로토콜을 사용하고 있습니다.
TCP/IP 계층 구조
1. 네트워크 액세스 계층(Network Access Layer)
- 역할: 물리적인 네트워크에 데이터를 전송하는 것을 책임지는 첫 번째 계층입니다. 이더넷, 와이파이와 같은 네트워크 인터페이스 기술을 포함하게 됩니다.
- 기능: 데이터 링크 계층과 물리(피지컬) 계층의 접근 기능을 수행하여 패킷을 실제로 네트워크 매체를 통해 송수신하게 됩니다.
- 프로토콜: 이더넷(Ethernet), ARP(Address Resolution Protocol) 등
2. 인터넷 계층
- 역할: 네트워크 간에 데이터 패킷을 라우팅하고, 데이터를 목적지에 정확하게 전달합니다.
- 기능: 논리적 주소(IP 주소)를 기반으로 패킷의 목적지 경로를 결정하며, 다양한 네트워크 간의 데이터를 전달하는 역할을 합니다.
- 프로토콜: IP(Internet Protocol), ICMP(Internet Control Message Protocol), ARP(Address Resolution Protocol)
3. 전송 계층
- 역할: 애플리케이션 간에 안정적인 데이터 전송을 관리합니다.
- 기능: 데이터의 흐름 제어, 오류 검출 및 수정, 데이터 재전송을 처리합니다.
- 프로토콜: 주요 프로토콜로 TCP와 UDP가 있습니다. 🤔
4. 응용 계층
- 역할: 사용자와 직접 상호작용하는 애플리케이션 프로토콜이 작동하는 계층입니다.
- 기능: 다양한 네트워크 서비스 및 애플리케이션을 통해 사용자가 데이터를 주고받을 수 있도록 지원합니다.
- 프로토콜: HTTP/HTTPS, FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol), DNS(Domain Name System) 등이 있습니다.
TCP/IP 동작 과정 예시
웹 사이트 접속 시 동작 과정을 예시로 작성해보겠습니다.
1. URL 입력: 사용자가 브라우저에 https://www.muricture.com/ 같은 웹 주소(URL)를 입력합니다. (깨알 홍보)
2. DNS 요청: 브라우저는 URL에 해당하는 웹 서버의 IP 주소를 알아내기 위해 DNS(도메인 이름 시스템) 서버에 요청을 보냅니다.
3. IP 주소로 웹 서버 찾기: 브라우저는 얻은 IP 주소(192.0.2.1)를 통해 해당 서버로 데이터를 보내기 위한 준비를 합니다.
4. TCP 연결 설정 (3-way handshake): 브라우저와 서버 간에 신뢰성 있는 연결을 만들기 위해 TCP 프로토콜을 사용하며, 다음 3단계로 연결을 설정합니다. 즉, 상태가 유지 됩니다.
1) 클라이언트가 서버에 "요청(SYN)" 메시지를 보냅니다.
2) 서버가 "응답(SYN-ACK)" 메시지로 응답합니다.
3) 클라이언트가 "응답(ACK)" 메시지를 다시 보내면 연결이 성립됩니다.
5. HTTP 요청 전송: TCP 연결이 완료되면, 브라우저는 웹 페이지 데이터를 요청하는 HTTP 요청을 서버로 전송합니다. 이 요청은 "패킷"이라고 불리는 작은 데이터 단위로 나누어져 서버에 전달됩니다.
6. 서버의 응답: 서버는 요청을 받으면 웹 페이지 데이터를 TCP 패킷에 담아 브라우저로 전송합니다. 이때도 데이터는 여러 패킷으로 나뉘어 전송됩니다.
7. 데이터 수신 및 조립: 클라이언트는 여러 패킷을 받아 원래의 데이터로 재조립합니다. 만약 중간에 패킷이 손실되면, TCP는 해당 패킷을 다시 요청하여 데이터를 신뢰성 있게 복구합니다.
8. 웹 페이지 표시: 모든 데이터를 받은 후, 클라이언트는 이를 해석하여 사용자가 요청한 웹 페이지를 화면에 표시합니다.
9. TCP 연결 종료 (4-way handshake): 3-way handshake를 통해 클라이언트가 획득해야 되는 데이터를 모두 다운로드 받으면, 서버와의 TCP 연결을 해제하기 위해 4단계를 거쳐 연결을 종료합니다.
1) 클라이언트가 "FIN(Finish)" 메시지를 보냅니다.
ex) 클라이언트 → 서버 : "더 이상 보낼 데이터가 없습니다. 연결을 종료하겠습니다."
2) 서버가 "ACK"로 플래그가 설정된 패킷을 답변합니다.
ex) 서버 → 클라이언트 : "종료 요청을 받았고, 더 이상 데이터 받지 않겠습니다."
식당을 운영하는데 손님(SYN)이 주문한 음식이 더 이상 없고, 주방 마감 시간이 됐을 때 지금까지 들어온 손님의 주문 요청(SYN)이 끝나면 끝내겠다는 답변입니다.
3) "ACK"로 더 이상 보낼 데이터가 없다면 "FIN" 메시지를 덧 붙여서 서버에서도 더 이상 보낼 데이터가 없다는 것을 공유합니다.
4) 클라이언트가 마지막 "ACK"로 음식이 모두 나왔다는 것에 대해 응답하면 연결이 종료됩니다.
주요 차이점
1) 3-way 핸드셰이크는 연결 설정을 위한 과정으로, 데이터 통신을 시작하기 전에 양측이 준비 상태를 확인합니다.
2) 4-way 핸드셰이크는 연결 종료를 위한 과정으로, 데이터 전송이 끝난 후 안전하게 연결을 끊기 위해 사용됩니다.
TCP와 UDP의 차이
구분 | TCP | UDP |
연결 방식 | 연결 지향적(Connection-oriented) | 비연결적(Connectionless) |
신뢰성 | 높음 | 낮음 (단방향이므로) |
전송 방법 | 전이중 | 반이중 |
속도 | 비교적 느림 | 빠름 |
데이터 전송 순서 | 보장 됨 | 보장되지 않음 |
오류 제어 | 오류 제어 수행함 | 오류 제어 수행 안 함 |
흐름 제어 | 흐름 제어 수행함 | 흐름 제어 수행 안 함 |
사용 사례 | 웹 브라우징, 이메일 등 | 실시간 스트리밍, 온라인 게임 등 |
전달 방식 | 유니캐스트 | 유니캐스트, 멀티캐스트, 브로드캐스트 |
재전송 | 손실된 패킷이 있는지 확인하고, 재전송 함 | 재전송 없음 |
UDP는 추후 별도의 포스트에서 다뤄볼 예정입니다. 🙂
네트워크를 다루다 보면 TCP/IP는 범용적으로 사용되기에 자주 접하고 쉽게 넘길 수 있는 용어인 것 같습니다. 이번 포스트를 통해 개념을 정리하며 유익한 학습 시간을 보낼 수 있었습니다.
혹시 오탈자나 잘못된 정보가 있다면 언제든지 댓글로 알려주시면 감사하겠습니다.
다음 포스트에서 뵙겠습니다!
추가 참조 링크:
https://www.ibm.com/docs/ko/aix/7.3?topic=management-transmission-control-protocolinternet-protocol
'Network' 카테고리의 다른 글
[네트워크 기초] 자취방, 아파트, 회사 네트워크 구축 차이점 (4) | 2024.11.10 |
---|---|
[Network] URI, URL, URN이란? (a little deep dive) (0) | 2023.05.19 |
[Network]브라우저 렌더링 원리 (0) | 2023.04.03 |
[Network] 브라우저 요청/응답 원리 (0) | 2023.01.18 |
[Network] 프로토콜(Protocol)이란? (0) | 2022.11.24 |