[Coursera Google] GCC 컴퓨터 네트워킹의 모든 것 : 전송 및 애플리케이션 계층(전송계층, 애플리케이션 계층)

2024. 5. 29. 23:50GCC/IT 지원

728x90
반응형

 

728x90

 

 

 

 

 

 

전송 및 애플리케이션 계층 개론

 

컴퓨터가 서로 데이터를 주고받을 수 있을 뿐만 아니라 
컴퓨터에서 실행되는 프로그램도 서로 데이터를 주고받을 수 있도록 하기 위한 것으로 여기에서 네트워킹 모델의 전송 및 애플리케이션 계층이 작동합니다.
간단히 말해 전송 계층은 트래픽이 특정 네트워크 애플리케이션에 전달되도록 하고 애플리케이션 계층은 이러한 애플리케이션이 이해하는 방식으로 서로 통신할 수 있게 합니다.

 

 

전송계층(Transport layer)

 

1. 전송계층

전송 계층은 신뢰할 수 있는 컴퓨터 네트워킹에서 중요한 기능을 많이 담당합니다.

여기에는 트래픽의 멀티플렉싱과 디멀티플렉싱, 장기 실행 연결 설정 오류 검사 및 데이터 검증을 통한 데이터 무결성 보장 등이 포함됩니다.

전송 계층에는 멀티플렉싱과 디멀티플렉싱 기능이 있는데, 이 계층을 다른 모든 계층과 구별하는 특성입니다.

전송 계층에서 멀티플렉싱은 네트워크의 노드가 많은 다양한 수신 서비스로 트래픽을 전달할 수 있다는 의미이며, 디멀티플렉싱은 수신 측에서 동일한 개념으로 동일한 노드를 대상으로 하는 트래픽을 모두 가져와 적절한 수신 서비스에 전달합니다.
전송 계층은 포트를 통해 멀티플렉싱과 디멀티플렉싱을 처리합니다.

포트(Port)는 16비트 숫자로 네트워크상의 컴퓨터에서 실행 중인 특정 서비스에 트래픽을 전달하는 데 사용됩니다.
서버 또는 서비스는 데이터 요청을 기다리는 컴퓨터에서 실행되는 프로그램이고 클라이언트는 이 데이터를 요청하는 또 다른 프로그램입니다.
특정 포트에서 들어오는 요청을 수신 대기하는 동안 다양한 네트워크 서비스가 실행됩니다.

예를 들어, HTTP 또는 암호화되지 않은 웹 트래픽의 기존 포트는 포트 80입니다 IP 10.1.1.100에서 수신 대기 중인 컴퓨터에서 실행되는 웹 서버의 웹페이지를 요청하면 트래픽이 해당 컴퓨터의 포트 80으로 전달됩니다.
포트(Port)는 일반적으로 IP 주소 뒤에 콜론으로 표시되며, 위의 예에서는 전체 IP와 포트를 10.1.1.100:80으로 나타낼 수 있습니다. 이런 식으로 쓴 주소를 소켓 주소 또는 소켓 번호라고 합니다.

동일한 기기가 FTP, 즉 파일 전송 프로토콜 서버를 실행 중일 수도 있습니다. FTP는 컴퓨터 간에 파일을 전송하는 데 사용되는 오래된 방법이지만 오늘날에도 여전히 사용되고 있습니다.
FTP는 일반적으로 포트 21에서 수신 대기하므로 예제 웹 서버와 동일한 IP에서 실행되는 FTP 서버로 연결을 설정하려면 트래픽을 10.1.1.100 포트 21로 전달합니다.

단일 서버가 비즈니스 운영에 필요한 거의 모든 애플리케이션을 호스팅할 수 있습니다. 동일한 컴퓨터가 내부 웹사이트, 회사의 메일 서버 파일 공유용 파일 서버 네트워크 프린터 공유를 위한 인쇄 서버 등 거의 모든 것을 호스팅할 수 있으며, 이런 환경은 멀티플렉싱과 디멀티

 

 

2. TCP 세그먼트 분석

TCP 세그먼트(TCP segment) 구조:

  1. 소스 포트와 대상 포트:
    • 대상 포트(Destination port): 트래픽이 도달할 서비스의 포트 번호 (예: 웹 서버의 포트 80).
    • 소스 포트(Source port): 임시 포트로, 응답을 받을 때 특정 프로그램에 데이터를 전달하기 위해 사용됩니다.
  2. 시퀀스 번호(Seguence number):
    • 32비트 숫자로, 각 TCP 세그먼트의 순서를 추적합니다.
    • 대량의 데이터를 작은 세그먼트로 나누어 전송할 때, 각 세그먼트의 위치를 파악하는 데 사용됩니다.
  3. 확인 번호(Acknowledgement number):
    • 다음에 올 예상 세그먼트의 번호를 지정합니다.
    • 예를 들어, 시퀀스 번호가 1이고 확인 번호가 2라면, 현재 세그먼트가 첫 번째이고 다음 세그먼트는 두 번째라는 의미입니다.
  4. 데이터 오프셋(Data offset field):
    • TCP 헤더의 길이를 나타내는 4비트 숫자입니다.
    • 수신 네트워크 기기가 데이터 페이로드가 시작되는 위치를 파악할 수 있게 합니다.
  5. TCP 제어 플래그(TCP control flags):
    • 6개의 비트로 구성되어 있으며, 다양한 제어 기능을 제공합니다.
  6. TCP 창(TCP window):
    • 16비트 숫자로, 확인 없이 전송될 수 있는 시퀀스 번호의 범위를 지정합니다.
    • TCP는 확인을 통해 데이터의 수신 여부를 확인합니다.
  7. 체크섬(TCP Checksum):
    • 16비트 숫자로, 데이터의 손실이나 손상을 확인합니다.
    • 수신 기기에서 체크섬을 계산하고 헤더의 체크섬과 비교하여 데이터의 무결성을 확인합니다.
  8. 긴급 포인터(Urgent pointer field):
    • 특정 세그먼트를 중요하게 표시하는 데 사용되지만, 실제로는 거의 사용되지 않습니다.
  9. TCP 옵션(TCP options field):
    • 더 복잡한 흐름 제어 프로토콜에 사용되지만, 거의 사용되지 않습니다.
  10. 패딩(Padding):
    • 데이터 페이로드 섹션이 예상 위치에서 시작하도록 0으로 채워집니다.

이러한 각 필드는 TCP가 데이터를 안정적으로 전송하고 올바르게 순서를 맞추는데 필요한 정보를 포함하고 있습니다. TCP의 작동 방식을 이해하면 네트워크 트래픽 문제를 해결하는 데 큰 도움이 됩니다.

 

 

 

3. TCP 제어 프래그 및 3방향 핸드셰이크

TCP 제어 플래그

TCP 헤더에는 6개의 제어 플래그가 있습니다. 각 플래그는 특정 기능을 수행하는데, 이를 통해 TCP 연결을 설정하고 관리할 수 있습니다.

  1. URG (긴급, urgent):
    • 긴급 데이터를 나타내며, 긴급 포인터 필드가 관련 데이터를 가리킵니다.
    • 실제로 거의 사용되지 않습니다.
  2. ACK (확인, acknowledged):
    • 확인 번호 필드를 검사해야 함을 나타냅니다.
    • 대부분의 TCP 세그먼트에서 사용됩니다.
  3. PSH (푸시, push):
    • 수신 기기가 현재 버퍼링된 데이터를 즉시 애플리케이션에 전달하도록 요청합니다.
    • 대용량 데이터 전송 시 유용하며, 긴급 데이터 전송 시 사용됩니다.
  4. RST (재설정, reset):
    • TCP 연결에 문제가 발생해 복구할 수 없을 때 사용됩니다.
    • 연결을 재설정하여 다시 시작할 때 사용됩니다.
  5. SYN (동기화, synchronize):
    • TCP 연결 설정 시 사용되며, 초기 시퀀스 번호를 동기화합니다.
    • 연결을 시작할 때 사용됩니다.
  6. FIN (완료, finish):
    • 데이터 전송이 완료되었음을 나타내고, 연결을 닫을 준비가 되었음을 알립니다.
    • 연결 종료 시 사용됩니다.

 

TCP 연결 설정: 3방향 핸드셰이크(The Three-way handshake)

Handshake : 두 기기가 동일한 프로토콜을 말하고 서로를 이해할 수 있도록 하는 방법

 

TCP 연결을 설정하기 위해서는 3방향 핸드셰이크 과정을 거쳐야 합니다. 컴퓨터 A와 컴퓨터 B가 연결을 설정하는 과정을 살펴보겠습니다.

  1. SYN: 컴퓨터 A는 SYN 플래그가 설정된 TCP 세그먼트를 컴퓨터 B로 전송합니다.
    • "연결을 설정하고 싶습니다. 시퀀스 번호를 확인해 주세요."
  2. SYN/ACK: 컴퓨터 B는 SYN 플래그와 ACK 플래그가 설정된 TCP 세그먼트로 응답합니다.
    • "연결을 설정합시다. 시퀀스 번호를 확인했습니다."
  3. ACK: 컴퓨터 A는 ACK 플래그가 설정된 TCP 세그먼트로 응답합니다.
    • "확인했습니다. 데이터 전송을 시작합시다."

이 과정이 완료되면 TCP 연결이 설정되며, 양방향 데이터 전송이 가능해집니다.

이 과정을 "3방향 핸드셰이크"라고 부릅니다.

 

TCP 연결 종료: 4방향 핸드셰이크(The four-way handshake)

TCP 연결을 종료할 때는 4방향 핸드셰이크를 사용합니다.

  1. FIN: 연결을 닫을 준비가 된 컴퓨터는 FIN 플래그가 설정된 TCP 세그먼트를 전송합니다.
    • "연결을 닫겠습니다. 더 이상 전송할 데이터가 없습니다."
  2. ACK: 다른 컴퓨터는 ACK 플래그로 응답합니다.
    • "알겠습니다. 확인했습니다."
  3. FIN: 두 번째 컴퓨터도 연결을 닫을 준비가 되면 FIN 플래그가 설정된 TCP 세그먼트를 전송합니다.
    • "저도 연결을 닫겠습니다."
  4. ACK: 첫 번째 컴퓨터는 ACK 플래그로 응답합니다.
    • "확인했습니다."

이 과정이 완료되면 TCP 연결이 안전하게 종료됩니다.

 

 

 

4. TCP 소켓 상태

 

TCP 소켓(Socket)과 상태에 대한 이해

TCP 소켓은 TCP 연결의 끝점(endpoint) 역할을 합니다. 이는 포트와 같은 가상의 개념을 실제로 구현한 것입니다. 소켓이 열려 있어야 해당 포트로 전송된 트래픽에 응답할 수 있습니다. TCP 소켓의 다양한 상태를 이해하면 네트워크 문제를 해결하는 데 유용합니다.

TCP 소켓 상태

  1. LISTEN:
    • 설명: TCP 소켓이 연결 요청을 기다리는 상태입니다.
    • 위치: 서버 측에서만 볼 수 있습니다.
    • 예시: 웹 서버가 클라이언트의 연결을 기다릴 때 이 상태에 있습니다.
  2. SYN_SENT:
    • 설명: 클라이언트가 연결 요청을 보내고 응답을 기다리는 상태입니다.
    • 위치: 클라이언트 측에서만 볼 수 있습니다.
    • 예시: 클라이언트가 서버에 연결을 시도할 때 이 상태가 됩니다.
  3. SYN_RECEIVED:
    • 설명: 서버가 클라이언트의 연결 요청을 받고, SYN-ACK 응답을 보냈으나 최종 ACK를 기다리는 상태입니다.
    • 위치: 서버 측에서만 볼 수 있습니다.
    • 예시: 서버가 클라이언트의 연결 요청을 받은 후 응답을 보낼 때 이 상태가 됩니다.
  4. ESTABLISHED:
    • 설명: TCP 연결이 성공적으로 설정되어 양쪽이 자유롭게 데이터를 주고받을 수 있는 상태입니다.
    • 위치: 클라이언트와 서버 양쪽에서 볼 수 있습니다.
    • 예시: 웹 브라우저가 웹 서버와 연결되어 데이터를 주고받는 상태입니다.
  5. FIN_WAIT:
    • 설명: 한쪽에서 연결 종료 요청(FIN)을 보냈지만, 아직 반대쪽에서 확인(ACK)을 받지 못한 상태입니다.
    • 위치: 연결의 양쪽에서 볼 수 있습니다.
    • 예시: 클라이언트가 서버에 연결을 종료하려고 요청했지만, 서버에서 확인 응답을 보내지 않은 상태입니다.
  6. CLOSE_WAIT:
    • 설명: 한쪽에서 연결 종료 요청을 받았으나, 소켓을 연 애플리케이션이 소켓을 아직 닫지 않은 상태입니다.
    • 위치: 연결의 양쪽에서 볼 수 있습니다.
    • 예시: 서버가 클라이언트로부터 연결 종료 요청을 받았지만, 애플리케이션이 아직 소켓을 닫지 않은 상태입니다.
  7. CLOSED:
    • 설명: 연결이 완전히 종료되고 더 이상 통신할 수 없는 상태입니다.
    • 위치: 연결의 양쪽에서 볼 수 있습니다.
    • 예시: 클라이언트와 서버 간의 통신이 완전히 종료된 상태입니다.

 

TCP 소켓 상태의 운영체제별 차이

소켓 상태와 이름은 운영체제마다 다를 수 있습니다. 이는 TCP 정의에 포함되지 않기 때문입니다. 운영체제 수준에서 소켓 상태를 설명하는 방식은 표준화되어 있지 않지만, TCP 프로토콜은 보편적으로 사용되므로 모든 시스템이 동일한 방식으로 작동해야 합니다. TCP 계층의 문제를 해결할 때는 사용 중인 시스템의 정확한 소켓 상태 정의를 확인하는 것이 중요합니다.

 

 

 

5. 연결 지향 프로토콜(Connection-oriented protocol)과 비연결 프로토콜(Connectionless protocol)

 

TCP와 UDP(User Datagram Protocol):

  • TCP: 연결 지향적이며 안정성이 중요한 프로토콜. 데이터의 정확성을 확인하고 재전송함.
  • UDP: 연결 설정 없이 빠른 데이터 전송에 사용되는 프로토콜. 데이터의 순서가 중요하지 않음.

TCP의 기능:

  • 연결 설정: 데이터 안정성을 위해 연결 설정하고 확인 스트림을 통해 데이터의 정확성을 확인함.
  • 시퀀스 번호: 데이터의 순서를 관리하여 손상된 데이터를 재전송할 수 있도록 함.
  • 재전송 기능: 데이터의 손실을 감지하고 필요한 경우 재전송하여 안정성을 유지함.

TCP의 오버헤드:

  • 연결 설정, 확인 스트림 전송, 연결 해제 등의 추가 트래픽이 필요함.

UDP의 특징:

  • 연결 설정 없이 데이터를 빠르게 전송함.
  • 데이터의 순서가 중요하지 않은 경우에 사용됨.

네트워크 이슈 대응:

  • 라우터 등의 장비 문제나 트래픽 정체 등 다양한 이유로 데이터 전달에 실패할 수 있음.
  • TCP는 연결 설정 및 확인 스트림을 통해 이러한 상황을 방지함.
  • UDP는 간단한 데이터 전송에 사용되며, 데이터의 손실이 큰 문제가 되지 않는 경우에 적합함.

 

  1. 포트 범위: 0부터 65535까지의 숫자로 나타낸다.
  2. IANA 분할: IANA(Internet Assigned Numbers Authority)에 의해 분할되어 관리된다.
  3. 포트 종류:
    • 포트 0: 네트워크 트래픽에는 사용되지 않지만 동일한 컴퓨터 내의 프로그램 간 통신에 가끔 사용된다.
    • 포트 1~1023(시스템 포트): 잘 알려진 네트워크 서비스의 공식 포트를 나타내며, 주로 HTTP(포트 80)나 FTP(포트 21) 등에 사용된다. 관리자 권한이 필요하다.
    • 포트 1024~49151(등록된 포트): 다양한 네트워크 서비스에 사용된다. 주로 데이터베이스 등에 사용된다. 관리자 권한이 필요하지 않다.
    • 포트 49152~65535(임시 포트): 아웃바운드 연결에 사용되며 클라이언트에만 할당된다. 임시 포트는 IANA에 등록되지 않으며 플랫폼에 따라 다를 수 있다. 최신 운영체제는 이 포트 범위를 사용한다.

 

 

6. 방화벽

 

 


 

애플리케이션 계층(Application layer)

 

1. 애플리케이션 계층

  1. 애플리케이션 계층 개요:
    • 애플리케이션 계층은 데이터 전송에 필요한 프로토콜을 사용하여 서로 통신하는 방법을 다룬다.
  2. TCP 세그먼트의 페이로드:
    • TCP 세그먼트의 페이로드(payload)는 애플리케이션 계층에서 전송되는 실제 데이터의 내용을 의미한다.
  3. 애플리케이션 계층 프로토콜:
    • 애플리케이션 계층에서는 다양한 프로토콜이 사용되며, 웹브라우저와 서버가 통신하는 경우 HTTP가 널리 사용된다.
    • 다른 애플리케이션들도 각각의 프로토콜을 사용하며, 예를 들어 FTP 클라이언트는 FTP 프로토콜을 사용한다.
  4. 프로토콜 표준화:
    • 서로 다른 애플리케이션들이 상호 운용성을 보장하려면 동일한 프로토콜을 사용하여 통신해야 한다.
    • 이를 위해 HTTP와 FTP와 같은 다양한 애플리케이션 프로토콜들은 표준 사양을 따라야 한다.

 

 

2. 애플리케이션 계층 및 OSI 모델

  1. 경쟁하는 네트워크 계층 모델:
  2. OSI (Open Systems Interconnection)모델 (개방형 시스템 상호연결 모델):
    • OSI 모델은 네트워크를 7개의 계층으로 나누어 엄격하게 정의하며, 전송 계층과 애플리케이션 계층 사이에 두 개의 추가 계층이 존재한다.
  3. 세션 계층(Session Layer):
    • OSI 모델의 다섯 번째 계층으로, 실제 애플리케이션과 전송 계층 간의 통신을 원활하게 한다.
  4. 프레젠테이션 계층(Presentation Layer):
    • OSI 모델의 여섯 번째 계층으로, 애플리케이션 계층 데이터를 해당 애플리케이션이 이해할 수 있는 형식으로 변환한다.
  5. 캡슐화와 OSI 모델:
    • OSI 모델에서는 캡슐화가 진행 중이지 않으며, 애플리케이션 계층에 이러한 기능이 포함된다.
  6. 모델 선택:
    • 일상적인 네트워킹 이해를 위해서는 5계층 모델이 가장 유용하지만, OSI 모델도 널리 사용된다.

 

3. Unison에서 사용되는 모든 계층

  1. 네트워크 A, B, C 및 라우터 설정:
    • 네트워크 A: 주소 공간 10.1.1.0/24, 라우터 A의 인터페이스는 IP 10.1.1.1
    • 네트워크 B: 주소 공간 192.168.1.0/24, 라우터 B의 인터페이스는 IP 192.168.1.1
    • 네트워크 C: 주소 공간 172.16.1.0/24, 라우터 B의 인터페이스는 IP 172.16.1.1
  2. 컴퓨터 설정:
    • 컴퓨터 1: 네트워크 A에 속하며 IP 주소 10.1.1.100
    • 컴퓨터 2: 네트워크 C에 속하며 IP 주소 172.16.1.100, 포트 80에서 웹 서버 운영
  3. 웹 브라우저 요청 프로세스:
    • 컴퓨터 1의 웹 브라우저가 172.16.1.100에 대한 웹페이지 요청.
    • 로컬 네트워킹 스택이 요청을 받고, TCP 연결 설정을 시도.
  4. ARP 요청 및 응답:
    • ARP 요청: 컴퓨터 1이 게이트웨이 MAC 주소를 알아내기 위해 ARP 요청 전송.
    • ARP 응답: 라우터 A가 응답하여 MAC 주소 00:11:22:33:44:55 제공.
  5. TCP 세그먼트 및 IP 데이터그램 생성:
    • 컴퓨터 1은 TCP 세그먼트를 생성하고 IP 데이터그램으로 캡슐화.
    • IP 헤더 작성 후, 이더넷 프레임에 캡슐화하여 전송 준비.
  6. 이더넷 프레임 전송:
    • 컴퓨터 1의 네트워크 인터페이스를 통해 이더넷 프레임이 라우터 A로 전송.
    • 스위치를 통해 라우터 A의 인터페이스로 전달됨.
  7. 라우터 A의 처리:
    • 라우터 A가 프레임을 받고 체크섬 확인 후, IP 데이터그램 추출.
    • 라우팅 테이블에서 대상 IP 주소 확인 후, 라우터 B로 전달하기 위해 MAC 주소 설정.
  8. 라우터 B의 처리:
    • 라우터 B가 프레임을 받고 체크섬 확인 후, IP 데이터그램 추출.
    • 대상 IP 주소 확인 후, 컴퓨터 2로 전달하기 위해 MAC 주소 설정.
  9. 컴퓨터 2의 처리:
    • 컴퓨터 2가 프레임을 받고 체크섬 확인 후, IP 데이터그램 추출.
    • TCP 세그먼트 추출 및 대상 포트 확인.
    • 해당 포트에 연결된 소켓에 데이터 전달.
  10. TCP 세션 설정 및 데이터 전송:
  • 컴퓨터 2가 SYN-ACK 응답을 보내어 TCP 연결 설정.
  • 컴퓨터 1이 ACK 응답을 보내어 데이터 전송 가능한 상태가 됨.

이러한 단계를 통해 네트워크 모델의 각 계층이 어떻게 작동하는지를 자세히 이해할 수 있습니다.

728x90
반응형