[Infra] 네트워크(Network)(2)-운반(transfer)

업데이트:

네트워크(Network)(2)-운반(transfer)

1. 소켓 작성

  • 브라우저에서 받은 메시지를 서버에 송출하는 동작 탐험.

프로토콜 내부 윗부분

  • TCP라는 프로토콜을 사용하여 데이터 송수신을 담당하는 부분과,
  • UDP라는 프로토콜을 사용하여 데이터 송수신을 담당하는 부분이 있음.

프로토콜 내부 아랫부분

  • IP 프로토콜을 사용하여 패킷 송수신 동작 제어.
  • 패킷: 인터넷에 데이터를 운반할 때는 데이터를 작게 나누어 패킷이라는 형태로 운반.
  • LAN 드라이버는 LAN 어댑터의 하드웨어 제어

  • 프로토콜 스택은 내부에 제어 정보를 기록하는 메모리 영역을 가지고 있으며, 여기에 통신 동작을 제어하기 위한 제어 정보를 기록합니다.
  • 통상 상대 IP는 무엇인가, 포트 번호는 몇번인가, 통신 동작이 어떤 진행 상태에 있는가.
  • 소켓은 실체가 없는 개념적인 것으로 제어 정보가 소켓의 실체라고 할 수 있음.
  • 또는 제어 정보를 기록한 메모리 영역이 소켓의 실체라고 생각해도 좋음.
  • 프로토콜 스택이 최초로 하는 일은 소켓 한 갭 분량의 메모리 영역을 확보하는 것.

2. 서버에 접속한다.

  • 접속 동작의 첫 번째 동작: 통신 상대와의 사이에 제어 정보를 주고받아 소켓에 필요한 정보를 기록하고 데이터 송수신이 가능한 상태로 만드는 것.
  • 버퍼 메모리: 데이터 송수신 동작 시 송시신 데이터를 일시적으로 저장하는 메모리 영역 확보가 필요한데, 이 메모리 영역을 버퍼 메모리라고 부른다.

  • 맨 앞부분에 제어 정보를 기록한 헤더를 배치.
  • 제어 정보에는 크게 나누어 두 종류가 있음.
  • 하나는 클라이언트와 서버가 서로 연락을 절충하기 위해 주고받는 제어 정보.
  • 헤더: 제어 정보를 패킷의 맨 앞부분에 배치하는 곳부터 헤더라고 부름.

3. 데이터를 송, 수신 한다.

3-1. 프로토콜 스택에 HTTP 리퀘스트 메시지를 넘긴다

  • 애플리케이션이 write를 호출하여 송신 데이터를 프로토콜 스택에 건네주는 곳부터 시작.
  • 프로토콜 스택은 받은 데이터의 내용을 알지 못함.
  • 프로토콜 스택은 받은 데이터를 곧바로 송신하는 것이 아니라 어느 정도 데이터를 저장하고 나서 모아서 송,수신한다.
  • 얼마나 저장했다 송신하느냐는 MTU라는 매개변수를 바탕으로 판단함.
  • MTU: 한 패킷으로 운반할 수 있는 디지털 데이터의 최대길이, 이더넷에서는 보통 1500바이트.(헤더포함)
  • MSS: 헤더를 제외한 하나의 패킷으로 운반할 수 있는 최대 길이
  • 또 한 가지 판단 요소는 타이밍임.

3-2. 데이터가 클 때는 분할해서 보낸다

  • HTTP 리퀘스트 메시지는 그다지 길지 않으므로 한 개 패킷에 들어감.
  • 블로그나 게시판에 긴 글을 쓸때는 하나의 패킷에 안들어감.
  • 송신 버퍼에 들어있는 데이터를 맨 앞부터 차례대로 MSS 크기에 맞게 분할하고, 분할한 조각을 한 개씩 패킷에 넣어 송신함.

3-3. ACK 번호를 사용하여 패킷이 도착했는지 확인

3-4. 패킷 평균 왕복 시간으로 ACK 번호의 대기 시간을 조정함

  • 타임아웃: ACK 번호가 돌아오는 것을 기다리는 시간.
  • 대기시간이 너무 길어지면 패킷을 다시보내는 동작이 지연되어 속도 저하의 원인이 됨.

3-5. 윈도우 제어 방식으로 효율적으로 ACK 번호 관리

3-6. ACK 번호와 윈도우를 합승

3-7. HTTP 응답 메시지 수신

4. 서버에서 연결을 끊어 소켓을 말소한다.

4-1. 데이터 보내기를 완료했을 때 연결을 끊는다.

4-2. 소켓을 말소한다.

4-3. 데이터 송, 수신 동작을 정리한다.

5. IP와 이더넷 패킷 송수신 동작

5-1. 패킷의 기본

  • 패킷은 헤더데이터 두 부분으로 구성

6. UDP 프로토콜을 이용한 송수신 동작