일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- EC2
- Spring Security
- docker
- 코딩테스트
- 형상관리
- 프로토콜
- 백준
- 스프링부트
- Java
- 로그인
- 알고리즘
- RDS
- 동시성 문제
- 네트워크
- 4-way-handshake
- JMeter
- OSI 7계층
- TCP/IP
- 인메모리
- 객체지향
- Spring
- 트러블 슈팅
- redis
- AWS
- OOP
- 성능 개선
- JWT
- N+1 문제
- 3-way-handshake
- Today
- Total
열공스토리
[Network] TCP/IP 모델 본문
이번 포스팅에서는 TCP/IP 모델에 대해 정리해 보았습니다.
TCP/IP란?
TCP/IP란 인터넷에서 컴퓨터들이 정보를 주고 받는데 쓰이는 프로토콜의 집합을 의미합니다.
프로토콜 : 네트워크 통신을 위해 미리 정해놓은 공통된 메뉴얼
TCP/IP 4 계층
TCP/IP 모델은 다음 왼쪽 그림과 같이 4개의 계층으로 구성되어 있습니다.
오른쪽 그림은 OSI 모델의 7계층을 나타내는데 OSI 계층 중 Application Layer, Presentation Layer, Session Layer가 TCP/IP 모델에서 Application Layer와 대응되는 것을 의미하고 Data Link Layer, Pysical Layer가 Network Access Layer(Network Interface)와 대응되는 것을 의미합니다.
TCP/IP 각 계층의 역할 간단 설명
- Application Layer
- 특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받을 수 있다.
- ex) HTTP, FTP, SSH, Telnet, DNS, SMTP
- Transport Layer
- 송신된 데이터를 수신 측 애플리케이션에 확실하게 전달하게 한다.
- ex) TCP, UDP, RTP, RTCP
- Internet Layer
- 수신 측까지 데이터를 전달하기 위해 사용된다.
- ex) IP, ARP, ICMP, RARP, OSPF
- Network Access Layer
- 네트워크에 직접 연결된 기기 간 전송을 할 수 있도록 한다.
- ex) Ethernet, PPP, Token Ring
TCP/IP 흐름
다음 TCP/IP 기반의 네트워킹 과정을 질문에 대한 답을 토대로 이해해보면서 각 계층의 역할에 대해서 좀 더 자세히 보도록 하겠습니다.
질문 : 검색엔진에 www.google.com을 입력하면 무슨 일이 벌어질까요?
흐름
1. 검색엔진에 (http)www.google.com(:80)을 입력
2. 패킷에 각 계층에 필요한 데이터를 넣어 생성 (이 때, 계층에서는 각각 HTTP, TCP, IP, Ethernet을 사용한다고 가정)
(1) Application Layer (사용 프로토콜 : HTTP)
- Http Request 데이터가 들어감
(2) Transport Layer (사용 프로토콜 : TCP)
- SP(시작지 포트번호, 알고있음)
- DP(목적지 포트번호, 알고있음)
(3) Internet Layer (사용 프로토콜 : IP)
- SA(시작지 IP주소, 알고있음)
- DA(목적지 IP주소, 모름)
- 목적지 IP주소는 송신측에서 알고 있지 않으므로 DNS 서버를 통해 목적지 IP주소를 받아와야함
- 브라우저가 OS에게 도메인 주소(www.google.com)를 가지고 IP 주소 요청 → OS서버가 DNS 서버로 요청 → DNS 서버가 IP주소를 응답
DNS 서버란?
1) Applicatin Layer 프로토콜이다.
2) DNS 서버 주소는 각 컴퓨터에 등록되어 있다.
3) DNS 서버로부터 도메인 서버의 IP 주소를 얻을 수 있다.
4) 전화번호부와 같은 역할을 한다.
(4) Network Access Layer Header (사용 프로토콜 : Ethernet)
- MAC 주소
- 물리적으로 연결 된 자신의 공유기(게이트웨이)의 MAC주소가 필요함
- 공유기의 IP주소를 ARP라는 주소해석 프로토콜을 이용하여 MAC 주소를 알아냄
ARP란?
1) Internet Layer 프로토콜이다.
2) 주소해석 프로토콜이다(IP to MAC).
3) 기기의 IP주소를 해석하여 해당 기기의 MAC주소를 알아낼 수 있다.
3. 데이터 전송
(1) 라우팅
- 송신측 라우터(게이트웨이)의 MAC주소를 가지고 목적지 서버가 존재하는 라우터까지 라우팅이 이루어짐
라우팅이란?
- 라우터가 목적지 경로를 찾아 나가는 과정이다. 라우터는 네트워크와 네트워크를 연결하는 역할을 한다.
(2) 목적지 서버 도착
- 데이터가 목적지 서버가 존재하는 라우터까지 도착을 하면 이전에 획득한 목적지 IP주소(DA)를 이용하여 MAC주소를 얻어와 목적지서버에 도착함
목적지 서버의 MAC주소를 얻는 방법
- ARP 주소해석 프로토콜을 이용하여 목적지 서버가 MAC주소를 반환한다. 이때, ARP는 라우터가 연결된 네트워크에 브로드캐스팅 된다.
(3) 목적지 서버의 요청한 application에 데이터 전달
- 수신측 Transport Layer에서 DP(목적지 포트번호)를 이용하여 80번 포트를 가지는 application에게 데이터를 전달함
(4) Request 데이터 받은 후 Response 반환
- 수신측 Application Layer에서 HTTP Request 데이터를 받은 후에 HTTP Response를 반환함
연결 지향형 프로토콜, TCP
TCP는 비연결 지향형 프로토콜인 UDP와는 반대로 연결지향형 프로토콜입니다. 이러한 연결 지향형 프로토콜인 TCP는 송수신 기기 간의 연결을 성립하고 유지하며 정확한 데이터를 전달해주는데 이때, 두 기기 간의 연결을 위해 3-Way-Handshake라는 방식이 사용됩니다.
3-Way-Handshake가 뭔지 밑에서 자세히 보도록 하겠습니다.
[3-Way-Handshake]
3-Way-Handshake란?
"TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해
상대방 컴퓨터와 사전에 세션을 수립하는 과정을 말한다."
출처 : https://jeongkyun-it.tistory.com/180
어떠한 과정으로 3-Way-Handshake가 이루어지는 아래 그림을 참고하여 보겠습니다.
우선, 연결 과정에서 TCP 헤더의 SYN과 ACK이라는 플래그가 쓰이는 것을 알 수 있습니다. 자세한 과정은 다음과 같습니다.
(1) Client가 Server에게 연결을 요청하는 SYN 패킷을 보낸다.
(2) Server는 SYN 요청을 받고 Client에게 요청을 수락한다는 SYN과 ACK 플래그가 설정된 패킷을 보낸다.
(3) Client는 다시 ACK을 보내게 되고 Server가 ACK을 받으면 연결이 성립되어 데이터 오가게 된다.
이렇듯 총 세 번의 요청/응답이 이루어지기 때문에 3-Way-Handshake라고 부른다 합니다. 그리고 반대로 연결이 성립되는 과정이 있다면 연결을 종료하는 과정도 있는데요. 이를 4-Way-Handshake라고 합니다.
4-Way-Handshake에 대해서 자세히 살펴보겠습니다.
[4-Way-Handshake]
4-Way-Handshake란?
"4way handshake는 세션을 종료하기 위해 수행되는 절차를 말한다."
출처 - https://jeongkyun-it.tistory.com/180
4-Way-Handshake는 다음과 같은 과정으로 이루어집니다.
연결 종료 과정에서는 TCP 헤더의 FIN과 ACK 플래그가 사용됩니다. 과정은 아래와 같습니다.
(1) Client가 Server에게 연결을 종료하겠다는 FIN 플래그를 전송한다.
(2) Server가 FIN 플래그를 받으면 확인했다는 의미로 ACK 플래그를 전송하고 자신의 통신이 끝날 때까지 기다린다.
(3) Server가 통신이 끝나면 Client에게 FIN 플래그를 보낸다.
(4) Client는 FIN 플래그를 받고 확인했다는 의미로 Server에게 다시 ACK 플래그를 전송한다.
연결 종료 과정에서는 총 4번의 요청/응답이 이루어지기 때문에 4-Way-Handshake라고 부른다 합니다.
하지만 여기서 주의해야할 점이 있습니다. 만약, 3단계 과정에서 Client가 Server로부터 FIN 플래그를 받고 즉시 소켓을 닫아버리면 FIN 플래그보다 늦게 도착하는 데이터는 받지 못하게 되고 결국 데이터 유실이 발생하는 문제가 생길 수 있습니다.
이러한 문제를 예방하기 위해서 Client는 Server로부터 FIN 플래그를 받는다 하더라도 소켓을 바로 닫지 않고 일정 시간 소켓을 열어두어 뒤늦게 도착할 가능성이 있는 데이터를 위해 기다립니다. 그리고 이러한 잉여 데이터 존재의 가능성을 위해 소켓을 닫지 않고 일정시간 열어두는 상태를 TIME_WAIT이라고 합니다.
참고
'Network' 카테고리의 다른 글
[Network] OSI 모델 (0) | 2023.07.27 |
---|