인터넷 통신
인터넷 통신은 컴퓨터와 다른 장치들이 인터넷을 통해 정보를 주고 받는 과정을 의미한다. 이 과정은 다양한 프로토콜과 기술을 사용하여 이루진다
- 인터넷 통신망: 인터넷은 전 세계적으로 분산된 여러 네트워크로 구성되어 있다. 네트워크들은 서로 다른 지리적 위치에 있는 여러 노드들로 구성되며, 이 노드들이 서로 연결되어 정보를 주고 받는다.
- 프로토콜과 기술: 인터넷 통신은 다양한 프로토콜과 기술을 사용하여 이루어짐. 예를들어 TCP/IP 프로토콜 스택은 인터넷에서 데이터 전달을 담당하고, HTTTP/HTTPS, FTP, SMTP등은 인터넷을 통한 다양한 서비스와 응용프로그램에 사용되는 프로토콜이다.
- 노드: 네트워크를 통해 장치 간 데이터를 주고받을 때, 여러 노드들을 거친다. 여기서 노드는, 네트워크에서 컴퓨터, 서버,라우터, 스위치 등의 장치를 의미한다. 이러한 노드들이 연결되어 데이터를 주고 받으며, 데이터가 노드 간에 전송된다.
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층
- HTTP, FTP, SMTP, DNS 등: 이 계층에서는 데이터 포맷, 메시지 형식, UI 등을 다루며, 사용자 및 응용 프로그램에 서비스를 제공한다.
- 전송 계층
- TCP, UDP: 장치간 신뢰성 있는 데이터 통신을 제공한다. 포트 번호를 사용하여 서비스나 프로세스를 식별하고, 송신자와 수신자 간의 연결 설정과 해제를 처리한다.
- 인터넷 계층
- IP, ICMP 등: 이 계층은 데이터 패킷을 목적지로 라우팅하고 패킷을 관리한다.
- 네트워크 인터페이스(접속) 계층
- 이 계층은 실제 물리적인 네트워크 하드웨어와 상호 작용함.
- 물리적인 매체(케이블, 무선 등)를 통해 데이터를 전송하고, MAC주소를 사용하여 장치를 식별한다.
- 주로 이더넷, WIFI, 블루투스 같은 프로토콜이 사용된다.
TCP/IP 프로토콜
IP(Internet Protocol)
- 인터넷에서 데이터를 주고받기 위한 주요 프로토콜 중 하나
- 각각의 컴퓨터는 고유한 IP주소를 사용하며, 이 IP주소를 통해 네트워크 환경에서 장치 간 데이터를 주고받을 수 있다.
- 이때 장치 간 데이터를 주고 받을 때 패킷이라는 단위로 전송된다.
- 패킷은 데이터 통신에서 정보를 더 작은 단위의 블록으로 쪼갠 것을 의미한다.
- IP패킷은 네트워크를 통해 전송되며, 각 IP패킷에는 목적지 IP주소 , 출발지 IP주소, 데이터 일부 등이 포함됨.
그러나 IP만으로는 신뢰성 있는 데이터 전송을 보장할 수 없다.
- IP는 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. (비연결성)
- 중간에 패킷이 사라지거나 순서가 보장되지 않을 수 있다. (비신뢰성)
- 이때, 신뢰성있는 데이터 전송을 담당하는 것이 TCP이다.
TCP(Transmission Control Protocol)
- 데이터의 신뢰성을 보장하고 순서를 지켜 데이터를 전송한다.
- 신뢰성: 데이터 전송 중 데이터 손실을 최소화하고, 손실된 데이터를 재전송하여 데이터의 정확성을 보장
- 순서 보장: 데이터 패킷은 전송된 순서대로 순신되어 데이터의 일관성을 유지
TCP/IP패킷
IP 프로토콜은 비연결성과 비신뢰성의 특성을 가지고 있으나, 이것이 꼭 단점만 있는 것은 아니다. 이러한 특성 때문에 IP는 빠르고 유연한 데이터 전송을 가능하게 한다. 반면, TCP는 데이터의 신뢰성과 순서성을 보장하지만, 이로 인해 상대적으로 느린 전송속도를 가지며, 높은 리소스 사용량을 가져갈 수 있다.
따라서, 서로의 단점을 보완한 개념이 TCP/IP 패킷이다. TCP/IP에서 TCP는 데이터의 신뢰성을 보장하기 위해서 패킷의 순서를 관리하고, 잃어버린 패킷을 다시 요청하는 등의 기능을 한다. 이러한 기능은 IP의 비신뢰성을 보완하고, IP는 데이터를 빠르고 유연하게 전송할 수 있는 구조를 가지고 있으므로 TCP의 상대적으로 느린 전송 속도와 높은 리소스 사용량을 어느 정도 해소 할 수 있다. 이를 통해 TCP/IP는 전체 네트워크의 효율성을 증가시킨다.
그래서 TCP/IP 패킷이 네트워크 환경에서 어떻게 데이터를 전송한다는걸까?
TCP/IP패킷 기반 데이터 전송
- IP패킷에서는 출발지 IP, 목적지 IP등이 포함되어 있다.
- 출발지 IP(Source IP): 패킷을 보내는 장치의 IP주소이다. 이 정보를 통해 수신자가 응답을 어디로 보내야 하는지 알 수 있음.
- 목적지 IP(Destination IP) 패킷을 받을 장치의 IP주소이다. 이정보를 통해 라우터나 스위치가 패킷을 올바른 목적지로 전달할 수 있다.
- TCP세그먼트에는 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등이 포함된다.
- PORT란 : 네트워크 서비스나 특정 프로세스를 식별하는 구분자 역할을 한다.
- 출발지 PORT : 패킷을 '보내는 장치'의 포트 번호이다.
- 목적지 PORT : 패킷을 '받을 장치'의 포트 번호이다.
- 전송 제어(Transmission Control) : TCP 세그먼트에는 흐름 제어, 혼잡 제어 등을 위한 다양한 플래그와 옵션이 포함 될 수 있다. (SYN, ACK, FIN등)
- 순서: 전송되는 각 패킷에는 순서 번호가 부여된다.
- 검증 정보: 패킷의 무결성을 확인하기 위한 검증 정보이다. 수신자는 이 정보를 통해 패킷이 중간에 손상되지 않았는지 검증할 수 있다.
TCP/ 패킷의 전송 흐름 (웹)
패킷 생성 -> 패킷 전송 -> 패킷 도착 및 재조립
패킷의 생성 과정
- 1. 애플리케이션 계층: 사용자가 데이터를 생성. 예를 들어, 웹 브라우저가 HTTP 요청(GET, POST 등)을 생성한다.
- 2. 전송 계층(TCP)
- TCP 연결 설정(3way Handshake) : 클라이언트와 서버 사이 TCP 연결을 설정한다. 이 과정에서 SYN, SYN-ACK, ACK 패킷이 주고 받아진다. (TCP 3-way Handshake에 대해서는 아래에 설명한다.)
- 데이터 세그먼트화: 생성된 데이터는 TCP 계층에서 세그먼트로 쪼개진다. 각 세그먼트에는 출발지 PORT, 목적지 PORT, 전송 제어 정보, 순서 정보, 검증 정보 등이 포함된다.
- 3.인터넷 계층(IP) : TCP 세그먼트는 IP헤더와 결합하여 IP패킷을 형성한다. IP헤더에는 출발지 IP와 목적지 IP가 포함된다.
패킷 전송
- 1. 라우팅 : IP헤더의 목적지 IP주소를 기반으로 라우터는 패킷을 어느 경로로 전송할지 결정한다.
- 라우터란(Router)? 라우터는 네트워크에서 패킷을 특정 목적지로 전달하기 위한 하드웨어 장치이다. 라우터는 여러 개의 네트워크를 연결하고, IP 패킷의 헤더에 포함된 목적지 IP를 확인하여 어떤 경로로 데이터를 전송할지 결정한다. (단, 전체 경로를 결정하는 것이 아니며, 다음 라우터나 목적지까지의 경로)
- 라우팅이란(Routing)? 네트워크에서 데이터 패킷이 소스에서 목적지까지 어떻게 이동할지 결정하는 과정이다. 라우팅 알고리즘을 사용하여 최적의 경로를 찾고, 이 경로를 통해 패킷을 전달한다.
- 2. 중간 노드 : 패킷은 여러 중간 노드(라우터나 스위치 등)를 거쳐 목적지 웹 서버로 전달된다.
패킷 도착 및 재조립
- 1. 목적지 도착: 패킷이 목적지에 도착하면, IP 계층에서 패킷을 해제하고 TCP세그먼트를 추출한다. 이 과정에서 전송된 IP 패킷에 포함된 출발지 IP와 출발지 PORT를 통해 응답 경로로 사용한다.
- 2. 전송 계층 (TCP): TCP 계층에서 세그먼트의 순서 정보를 확인하고, 원래의 데이터 순서대로 재조립한다.
- 3. 애플리케이션 계층 : 재조립된 데이터는 최종적으로 웹 서에 전송되고 요청을 처리한 후 HTTP Reponse를 생성해서 앞서 동일한 과정을 거쳐 응답을 한다.
이후 TCP연결이 종료되고, 클라이언트는 받은 HTTP Response를 렌더링하여 사용자에게 최종 결과를 보여준다.
TCP 3-way handshake
- TCP 프로토콜을 사용하여 장치 간에 안정적인 연결 설정을 하는 과정
- 이 과정은 데이터 전송 전에 수행되며, 세션을 초기화하고 양쪽 장치 간에 통신이 가능한 상태를 설정함.
- TCP 3-way handshake는 다음과 같은 단계로 이루어진다.
- SYN(Syncrhronize)- 클라이언트 단계
- 클라이언트에서 서버로 연결 요청하는 첫 단계
- 클라이언트는 무작위로 선택한 시퀀스 번호를 SUN 패킷에 포함
- SYN패킷을 서버에게 보낸 뒤, 클라이언트는 SYN_SENT 모드로 전환됨.
- SYN-ACK(Syncrhronize-Acknowledgment)- 서버 단계
- SYN 단계에서 클라이언트에게 요청을 받고 연결을 받아들이기 위해 클라이언트에 대한 응답으로 SYN-ACK패킷에 포함
- 서버 또한, 자체적으로 무작위로 선택한 시퀀스 번호를 SYN-ACK패킷에 포함
- SYN-ACK 패킷을 클라이언트에게 보내고 서버는 SYN_RECEIVED모드로 전환
- ACK(Acknowledgment) - 클라이언트 단계
- 서버의 SYN-ACK응답을 받으면, ACK 패킷을 생성하여 서버에게 전달
- 이 ACK 패킷을 서버에게 전달하면, 클라이언트와 서버는 최종적으로 연결이 설정된 상태가 되며, 비로소 안전하게 데이터를 주고 받을 수 있게됨
- 위, 3-way handshake가 완료되면 클라이언트와 서버 간의 TCP 연결이 확립되고 비로소 데이터 전송이 가능해진다.
UDP 프로토콜
위 TCP프로토콜은 다소 시간 비용이 발생할 수 있다. 더 빠른 데이터 전송이 필요한 경우 UDP 프로토콜 방식을 고려해볼 수 있으나, 데이터 전송 중 손실이나 에러 위험이 있으므로 상황에 따라 선택적으로 결정하는 것이 옳다.
- IP위에서 동하며, PORT와 체크섬 정도만 추가된 형태 (데이터 전송 중 손실이나 에러 위험 있음)
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠른 전송을 원할 때 유용함.
- 이러한 특성 떄문에 실시간 스트리밍, 게임같은 애플리케이션에서 주로 사용된다.
'HTTP' 카테고리의 다른 글
http method (0) | 2023.11.10 |
---|---|
http 상태코드 (0) | 2023.11.10 |
웹 브라우저 요청 흐름 (간략) (0) | 2023.10.27 |
URI(Uniform Resource Identifier)란? (0) | 2023.10.26 |
HTTP (Hyper Text Transfer Protocol), HTTP 메시지 (1) | 2023.10.26 |