[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. 패킷의 기본
- 패킷은 헤더와 데이터 두 부분으로 구성