TCP/IP stack의 통신 과정
Application 레이어: 데이터의 생성과 헤더 추가
브라우저에서 서버로 요청을 보낼 때, 데이터는 Application 레이어에서 생성됩니다. 이 레이어에서는 HTTP와 같은 어플리케이션 프로토콜을 사용하여 서버에 요청을 전달합니다.
- 데이터와 메시지: Application 레이어에서 송수신되는 데이터는 Data 또는 Message라고 부릅니다.
- 페이로드: Application 레이어의 데이터와 어플리케이션 헤더 부분을 합쳐 Payload라고 합니다. 이는 실제 데이터 전송 시 다른 계층에서도 동일하게 사용되는 개념입니다.
Transport 레이어: 데이터의 전달과 식별
데이터는 Application 레이어를 지나 Transport 레이어로 내려갑니다. 이 레이어는 프로세스 간의 통신을 관리하며, 데이터를 목적지 프로세스로 전달하는 역할을 합니다.
- 프로토콜: Transport 레이어에서는 주로 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)를 사용합니다.
- 헤더 추가: Transport 레이어에서는 Transport 헤더가 추가되며, 이 헤더에는 송신자와 수신자의 포트 번호가 포함됩니다.
- 데이터 단위:
- TCP: 데이터를 세그먼트(Segment)라고 부릅니다.
- UDP: 데이터를 데이터그램(Datagram)이라고 부릅니다.
Internet 레이어: 호스트 간의 라우팅
Transport 레이어에서 처리된 데이터는 Internet 레이어로 전달됩니다. 이 레이어는 호스트 간의 데이터 전송과 라우팅을 담당합니다.
- 프로토콜: 주로 IP(Internet Protocol)를 사용하며, IPv4와 IPv6가 있습니다.
- 헤더 추가: Internet 레이어에서는 IP 헤더가 추가되며, 이는 IP 패킷(IP Packet) 또는 IP 데이터그램(IP Datagram)으로 불립니다.
- IP 헤더 정보:
- 출발지 IP 주소와 목적지 IP 주소.
- 프로토콜 식별자: IPv4에서는 Protocol 필드에, IPv6에서는 Next Header 필드에 TCP는 6, UDP는 17이 저장됩니다.
- 페이로드: Transport 레이어와 Application 레이어의 헤더 및 데이터를 포함합니다.
Link 레이어: 물리적 전송과 프레임화
인터넷 레이어에서 처리된 데이터는 링크 레이어로 내려가 물리적 네트워크를 통해 전송됩니다.
- 데이터 단위: 링크 레이어에서는 데이터를 프레임(Frame)이라고 부릅니다.
- 헤더와 트레일러 추가: 링크 레이어에서는 헤더와 트레일러가 추가됩니다. 헤더에는 출발지와 목적지의 물리적 주소(MAC 주소 등)가 포함되며, 트레일러는 오류 검출을 위한 정보를 포함합니다.
- 동작 과정:
- 데이터는 프레임으로 캡슐화되어 네트워크를 통해 전송됩니다.
- 라우터는 프레임을 수신하고, IP 헤더를 확인하여 다음 목적지를 결정한 후 다시 프레임으로 캡슐화하여 전송을 이어갑니다.
라우터에서의 데이터 처리 과정
데이터가 라우터를 통과할 때, 다음과 같은 과정이 이루어집니다:
- Link 레이어에서 프레임 수신: 라우터는 Link 레이어에서 프레임(Frame)을 수신합니다.
- 프레임 해제: 프레임의 헤더와 트레일러를 제거하고, IP 헤더와 페이로드를 추출합니다.
- 라우팅 테이블 확인: IP 헤더의 목적지 IP 주소를 기반으로 라우팅 테이블을 조회하여 다음 홉(next hop)을 결정합니다.
- 재캡슐화: 다음 홉으로 전송하기 위해 페이로드를 다시 프레임으로 캡슐화합니다.
- 다음 홉으로 전송: 결정된 경로를 따라 프레임을 전송합니다.
서버에서의 데이터 수신 과정
서버에 도착한 데이터는 다음과 같은 과정을 거쳐 처리됩니다:
- Link 레이어에서 프레임 수신: 서버의 네트워크 인터페이스는 프레임을 수신합니다.
- 프레임 해제: 링크 레이어는 프레임의 헤더와 트레일러를 제거하고, IP 패킷을 추출합니다.
- Internet 레이어 처리: IP 패킷의 헤더를 분석하여 Transport 레이어로 전달할 프로토콜(TCP/UDP)을 식별합니다.
- Transport 레이어 처리:
- TCP: 세그먼트를 재조립하고, 연결 상태를 관리합니다.
- UDP: 데이터그램을 그대로 전달합니다.
- 디멀티플렉싱(Demultiplexing): 트랜스포트 레이어는 데이터의 목적지 포트 번호를 사용하여 적절한 소켓으로 데이터를 전달합니다.
- TCP의 경우:
- 리스닝 소켓: 새로운 연결 요청(SYN 플래그가 설정된 세그먼트)이 들어오면 리스닝 소켓으로 전달합니다.
- 기존 연결 소켓: 이미 연결된 세그먼트는 출발지 IP와 포트, 목적지 IP와 포트에 따라 해당 소켓으로 전달됩니다.
- UDP의 경우: 포트 번호를 기반으로 단순히 해당 포트로 전달됩니다.
- TCP의 경우:
멀티플렉싱과 디멀티플렉싱
멀티플렉싱(Multiplexing)
멀티플렉싱은 여러 개의 데이터 스트림을 하나의 통신 경로로 결합하는 과정을 말합니다. 예를 들어, 여러 개의 애플리케이션 프로세스가 동시에 네트워크를 통해 데이터를 송신할 때, Transport 레이어는 이 데이터를 하나의 네트워크 연결로 결합하여 전송합니다.
- 애플리케이션 레벨: 여러 애플리케이션이 데이터를 생성하고, 각각의 데이터는 포트 번호를 통해 식별됩니다.
- Transport 레이어: 각 애플리케이션의 데이터를 포트 번호를 기준으로 분리하여 하나의 네트워크 연결로 전송합니다.
디멀티플렉싱(Demultiplexing)
디멀티플렉싱은 하나의 통신 경로로 들어온 데이터를 각 애플리케이션 프로세스로 분리하는 과정을 말합니다. 서버는 수신한 데이터 패킷을 분석하여, 해당 데이터가 어느 애플리케이션 프로세스로 전달되어야 하는지를 결정합니다.
- 인터넷 레이어: IP 패킷을 수신하고, Transport 레이어로 전달합니다.
- 트랜스포트 레이어: IP 헤더의 프로토콜 필드를 확인하여 TCP 또는 UDP를 결정하고, 포트 번호를 기반으로 해당 소켓으로 데이터를 전달합니다.
용어 정리 및 주의 사항
주요 용어
- Packet: 일반적으로 인터넷을 통해 송수신되는 데이터의 단위로, 인터넷 레이어뿐만 아니라 다른 계층에서도 사용되는 범용적인 용어입니다.
- Datagram: 주로 UDP와 관련된 용어로, UDP 데이터그램 또는 IP 데이터그램을 의미합니다. UDP는 연결 지향적이지 않기 때문에 데이터그램이라는 용어가 적합합니다.
- Segment: TCP에서 사용하는 데이터 단위로, 연결 지향적이고 신뢰성을 보장하기 위해 세그먼트라는 용어를 사용합니다.
- Frame: 링크 레이어에서 사용하는 데이터 단위로, 물리적 네트워크 전송을 위해 캡슐화된 데이터입니다.
- Payload: 각 계층에서 실제 전송되는 데이터의 일부로, 상위 계층의 데이터와 헤더를 포함합니다.
용어 사용 시 주의 사항
- Packet과 Datagram: 때로는 동일한 의미로 사용되기도 하지만, 정확히 구분할 필요가 있습니다. Packet은 일반적인 용어로, 다양한 계층에서 사용될 수 있으며, Datagram은 주로 UDP 또는 IP와 관련된 데이터 단위를 의미합니다.
- Segment와 Datagram의 혼용: 일부 문서나 책에서는 TCP 세그먼트와 UDP 데이터그램을 편의상 모두 Datagram이라고 부르기도 합니다. 그러나 기술적으로는 다르므로 명확한 구분이 필요합니다.
소켓 식별 방식의 중요성
Transport 레이어에서 소켓을 식별하는 방식은 데이터의 정확한 전달을 보장하는 데 필수적입니다. 소켓은 IP 주소와 포트 번호의 조합으로 식별되며, 이를 통해 데이터가 올바른 애플리케이션 프로세스로 전달됩니다.
- UDP의 소켓 식별: UDP는 단순히 포트 번호를 사용하여 소켓을 식별합니다. 데이터그램의 목적지 포트 번호를 확인하여 해당 포트로 데이터를 전달합니다.
- TCP의 소켓 식별: TCP는 연결 지향적이기 때문에, 단순히 포트 번호뿐만 아니라 연결 상태도 고려해야 합니다. 새로운 연결 요청(SYN 플래그)이 들어오면 리스닝 소켓으로 전달하고, 기존 연결의 경우 출발지 IP와 포트, 목적지 IP와 포트를 기반으로 해당 소켓으로 데이터를 전달합니다.
참조
https://www.youtube.com/watch?v=eveNtda0_yk&t=1019s
'ComputerScience > Network' 카테고리의 다른 글
[Network] 프로토콜과 OSI 7 layer, 그리고 네트워크의 기능들이 어떻게 구조화 돼서 동작하는지 (3) | 2024.12.05 |
---|---|
[Network] 웹 서버와, 웹 애플리케이션 서버 (+ Apache, Apache Tomcat, Nginx) (0) | 2024.07.22 |
[Network] 프로토콜 표준과는 다르게 실제로는 소켓(Socket)이 어떻게 식별되는가? (0) | 2024.02.20 |
[Network] 프로토콜 표준 스펙에서 정의한 Socket(소켓), Port(포트), TCP connection(연결) 개념 (0) | 2024.02.20 |
[Network] World Wide Web와 인터넷, HTTP의 역사 (0) | 2024.02.09 |