Internet
: 전 세계의 걸쳐, 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크의 시스템
참고) 해외와는 바다 밑의 광속케이블을 통해 연결되어 있다
Internet을 통한 네트워크 통신
이러한 거대한 인프라를 통해, 데이터를 디지털 신호로 전달 / 받은 디지털 신호를 다시 데이터로 바꿔가며 네트워크 통신이 이루어진다.
참고) 네트워크 통신을 위해 미리 정해 놓은 공통된 메뉴얼을 “프로토콜”이라고 한다.
TCP / IP
: 인터넷에서 컴퓨터들이 서로 정보를 주고 받으며 쓰이는 프로토콜의 집합
Application Layer
: 특정 서비스를 제공하기 위해 애플리케이션끼리 정보를 주고 받기 위한 계층
ex) 브라우저-Web Server 간 HTTP 요청, 응답을 통해 통신할 때 사용
Transport Layer
: 송신된 데이터를 수신측 애플리케이션에 확실히(신뢰성 있도록) 전송하기 위한 계층
How? ⇒ port 번호를 바탕으로, 애플리케이션을 찾아주는 역할을 한다.
ex) TCP, UDP 프로토콜 사용
참고) 네트워크 통신을 하는 애플리케이션은 port 번호를 사용
Internet Layer
: 수신 측 까지 데이터를 전달하기 위한 계층
How? ⇒ IP 주소를 바탕으로, 올바른 목적지로 찾아갈 수 있도록 해주는 역할
ex) IP, ARP 프로토콜 사용
참고) 송신 측, 수신 측 모두 IP 주소를 보유 중
Network Access Layer
: 네트워크에 직접 연결된 기기 간의 데이터 전송을 위한 계층
How? ⇒ MAC(물리적 주소)를 바탕으로, 직접 연결된 기기 간 데이터 전송
ex) PPP, Ethernet
TCP/IP의 흐름
“www.google.com”을 웹브라우저에 입력하면, 무슨일이 일어날까??
(http)www.google.com(:80)
- 구글 Web Server의 port 80번으로 HTTP Request 메시지를 보낸다.
- 해당 요청을 인터넷을 통해 구글 Web Server에 전달하기 위해 패킷을 만들어야 한다.
- 패킷: 각 계층에 필요한 정보들이 담겨야한다.
각 계층별로 HTTP - TCP - IP - Ethernet 프로토콜 사용
1. Application Layer
: Http Request
2. Transport Layer
: port 80번으로, 아래와 같은 TCP Header 내 정보를 채운다.
SP: 출발지 port 번호 ( 나의 컴퓨터에서 만든 소켓의 port 번호 )
DP: 목적지 port 번호 ( 80번 = 구글 Web Server의 wellknown port 번호 )
3. Internet Layer
: IP Header 내 정보를 채운다.
- SA: 시작 IP 주소
- DA: 목적지 IP 주소 (아직 잘 모른다.. www.google.com이라는 도메인만 알고 있다.)
- 이 때! DNS 프로토콜을 통해 도메인 정보로 IP주소를 알아낼 수 있다!!
4. Application Layer의 DNS Protocol 활용
DNS Server - Application Layer ( port 53번 )
⇒ 브라우저는 OS에게 도메인(www.google.com)에 대한 ip 주소를 알고 싶다고 요청한다.
⇒ 이를 받고, OS에서 DNS Server로 요청을 보낸다.
참고) OS는 DNS Server 주소는 이미 컴퓨터에 등록되어 있다.
1. DNS는 도메인이 담긴 쿼리를 도메인 서버로 보낸다. (Application Layer의 HTTP Request와 유사)
2. 도메인 서버가 IP 주소를 응답해준다.
3. DNS Transport Layer에서 “UDP 프로토콜”을 사용한다.
참고) UDP Header는 비연결지향형 프로토콜이기 때문에 port 번호 말고 다른 게 없다.
5. Network Access Layer
: 마지막으로, Ethernet 프로토콜에 대한 Header를 만들어야 한다.
이제, MAC 주소가 필요하다.
MAC 주소를 어떻게 알아와야 하는지 알아보자.
단, 여기에서 MAC 주소는 구글 서버의 MAC주소가 굳이 필요하진 않고, 물리적으로 연결된 우리집 공유기의 MAC주소만 있으면 된다. 왜냐하면, 이 공유기를 통해 다른 네트워크와의 연결이 가능하니 “게이트웨이”라고 부르기도 한다.
게이트웨이의 IP
IP 주소로 MAC주소를 알아내기 위해 ARP 프로토콜을 사용한다.
참고) ARP: IP주소를 MAC주소로 바꿔주는 주소해석 프로토콜
TCP 연결지향형 프로토콜
위 과정들을 통해 패킷을 네트워크 상으로 보낼 준비가 다 되었다!
그런데, 요청을 보내기전에 한 가지 더 봐야할 것이 있다. 바로 TCP가 연결지향형 프로토콜 이기 때문에 특정 연결 통로가 필요하다는 것이다.
⇒ TCP 프로토콜에서는 데이터를 전송하기 전, 송신측과 수신측이 서로 연결되는 작업이 필요하다. - 3 Way Handshaking
6. 3-Way-Handshaking
: TCP 통신을 이용하여, 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정
⇒ 이를 통해, 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장한다.
이를 위해서는 TCP Header에 표시된 플래그들이 사용된다.
참고) 이러한 플래그들을 컨트롤 비트라고 부른다
3-way-handshake에 대해서는 다음 포스팅에서 더 자세히 알아보도록 하겠다!
⇒ 결론부터 말하자면 이제부터, 연결이 이루어지고 데이터가 오고갈수 있게 된다.
7. NAT(Network Address Translation)
: 우리가 사용하는 컴퓨터는 Private IP를 사용하고 있다.
외부의 네트워크 환경에서는 Private IP 주소를 찾지 못하기 때문에, 이를 Public IP로 변환해주는 과정이 필요하다.
⇒ 즉, 공유기를 통해 패킷이 전송될 때, public IP 주소로 변환해서 나가는 작업(=NAT)이 필요하다.
8. Routing
우리집 공유기를 거쳤다. 이제 구글 서버에 도착하기 위해서는 여러 라우터를 거쳐야 한다.
Router: 네트워크와 네트워크를 연결해주는 역할
Routing: 라우터가 목적지 경로를 찾아 나가는 과정
라우팅을 거쳐, 구글 서버가 연결된 라우터까지 데이터가 도착을 하면
패킷의 IP Header에 기록된 구글 서버 IP 주소를 통해 MAC 주소를 얻어와야 한다. 이 때, 이전에 설명했던 ARP 프로토콜을 사용한다. ARP는 라우터가 연결된 네트워크에 브로드캐스팅 된다.
목적지인 구글 서버가 자신의 IP 주소로 온 ARP 요청을 받고, MAC 주소를 응답해준다.
⇒ 이제 목적지인 구글 서버의 MAC주소를 알아냈다! = 데이터가 물리적으로 전달될 수 있다.
9. 구글 서버 데이터 도착 그 이후..
Network Access Layer & Internet Layer
목적지 구글 서버에 Network Access Layer를 통해 데이터가 도착했다.
이제는 Internet Layer의 IP주소를 통해 Network Access Layer의 MAC 주소를 사용해서, 목적지 구글 서버에 더 들어간다.
Transport Layer
Transport Layer의 목적지 port 번호에는 80번이 적혀있따.
80번 포트를 사용하는 애플리케이션에게 데이터를 전달해줘야 한다는 것을 알 수 있다.
Application Layer
Web Server가 사용될 HTTP Request 데이터를 얻을 수 있게 되었다.
Web Server에서 HTTP Request를 받고, 응답을 돌려보낸다. “/”에 매핑된 GET요청을 처리해서 적절한 HTML을 응답해준다.
10. 4-way-handshaking
HTTP의 요청과 응답과정이 끝나면, 연결을 종료해줘야 한다.
⇒ TCP 컨트롤 비트(ACK, FIN 플래그) 사용해서, 4-way handshake를 하여 안정적인 연결 종료를 완료해준다.
이번시간에는 큰 틀에 대해서 살펴봤다고 하면,
다음 시간에는 TCP 3-way-handshake, 4-way-handshake, 패킷을 신뢰성을 지닌 데이터로써의 전송을 보장하는 방법 등등.. 모르는 게 너무 많군 TCP에 대해서 더 면밀히 알아보도록 하자!
참고
https://www.cctvnews.co.kr/news/articleView.html?idxno=217287
https://www.youtube.com/watch?v=BEK354TRgZ8
https://www.geeksforgeeks.org/tcp-3-way-handshake-process/
'OS' 카테고리의 다른 글
OSI 7 Layer (0) | 2023.07.22 |
---|---|
여러 대의 컴퓨터가 통신하려면?? feat.Router (0) | 2023.07.20 |
TCP/UDP (0) | 2023.07.19 |
Process Thread (0) | 2023.07.12 |
OS 메모리 관리 (0) | 2023.07.04 |