Finn의 개발블로그
2-1. 소켓을 작성한다. 본문
1. 프로토콜 스택의 내부 구성
- 네트워크 애플리케이션
-
브라우저, 메일러(메일을 읽고 쓰는 소프트웨어), 웹 서버, 메일 서버 등의 프로그램이 여기에 해당합니다.
-
애플리케이션의 아랫부분에서는 Socket 라이브러리가 있으며, 그 안에는 리졸버(DNS 서버에 조회하는 동작을 실행)가 내장되어 있습니다.
-
- 프로토콜 스택
-
프로토콜 스택의 윗부분에는 TCP라는 프로토콜을 사용하여 데이터 송 수신을 담당하는 부분과 UDP라는 프로콜을 사용하여 데이터 송 수신을 당담하는 부분이 있습니다.
-
TCP 또는 UDP는 애플리케이션에서 보낸 의뢰를 받아 송 수신 동작을 실행합니다.
- TCP는 브라우저나 메일 등의 일반적인 애플리케이션이 데이터를 송 수시할 경우에 사용합니다.
- UDP는 DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송 시산할 경우에 사용합니다.
- IP 프로토콜은 패킷 송 수신을 동작을 제어 합니다. 패킷은 작게 나누어진 데이터 입니다.
- IP 안에는 ICMP와 ARP라는 프로토콜이 포함되어 있습니다,
- ICMP는 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메시지를 통지할 떄 사용됩니다
- ARP는 IP 주소에 대응하는 이더넷의 MAC 주소를 조사할 때 사용합니다.
-
- LAN 드라이버
- LAN 어댑터의 하드웨어를 제어합니다.
- LAN 어댑터
- 실제 송 수신 동작, 즉 케이블에 대해 신호를 송 수신하는 동작을 실행합니다.
2. 소켓의 실체는 통신 제어용 제어 정보
- 프로토콜 스택은 내부에 제어 정보를 기록하는 메모리 영역을 가지고 있으며 여기에 통신 동작을 제어하기 위한 제어 정보를 기록합니다.
- 대표적인 정보
- 통신 상대의 IP
- 포트 번호
- 통신 동작이 어떤 진행 상태에 있는가
- 소켓은 개념적인 것이어서 실체가 없으므로 제어 정보를 기록한 메모리 영역이 소켓의 실체입니다.
- 프로토콜 스택은 제어 정보를 탐조하면서 동작합니다.
- 데이터를 송신할 때는 소켓에 기록되어 있는 상대측의 IP 주소나 포트 번호를 보고 그 IP 주소와 포트 번호를 대상으로 데이터를 송신합니다.
- 데이터를 송신하면 상대로 부터 데이터가 도착했다는 응답이 돌아와야 하므로 응답을 기다립니다. 그런데 도 중에 데이터가 없어질 수 있으며, 이 경우 응답이 돌아오지 않습니다. 이 때는 아무리 기다려도 소용이 없으므로 송신 동작을 실행한 후 어느 정도 시간이 경과하면 포기하고 없어진 데이터를 다시 보내야 합니다.
- 소켓에는 응답이 돌아오는지의 여부와 송신 동작 후의 결과 시간 등이 기록되어 있습니다.
- 프로토콜 스택은 이 정보를 보고 포기하거나 다시 보내는 동작을 실행하는 것입니다.
3. Socket을 호출했을 때의 동작
- socket을 호출하여 소켓을 만들 것을 의뢰하면 프로토콜 스택은 의뢰에 따라 한 개의 소켓을 만듭니다.
- 프로토콜 스택은 소켓 한 개 분량의 메모리 영역을 확보합니다.
- 소켓의 제어 정보를 기록하는 메모리 영역은 처음부터 존재하는 것이 아니므로 먼저 그것을 확보해 두어야 합니다. 메모리 여역을 확보한다는 것은 제어 정보를 담을 그릇을 준비하는 것과 같습니다.
- 그릇만으로는 어떤 역할도 하지 못하므로 초기 상태임을 나타내는 제어 정보를 메모리 역역을 기록하는데, 이 과장을 통해 소켓이 만들어집니다.
- 소켓이 만들어지면 소켓을 나타내는 디스크립터를 애플리케이션에 알려줍니다.
- 디스크립터를 받은 애플리케이션은 이후 프로토콜 스택에 데이터 송 수신 동작을 의뢰할 때 디스크럽터를 통지합니다
- 디스크립터가 어느 소켓인지를 나타내면 필요한 정보는 전부 프로토콜 스택쪽에서 알 수 있습니다. 이러면 통신 상대의 정보를 애플리케이션에서 일일이 통지받을 필요가 없어집니다.
'Network' 카테고리의 다른 글
1-4. 프로토콜 스택에 메시지 송신을 의뢰하다 (0) | 2019.04.25 |
---|---|
1-3. 전 세계의 DNS서버가 연대한다 (0) | 2019.04.16 |
1-2. 웹 서버의 IP주소를 DNS서버에 조회한다 (0) | 2019.04.09 |
1-1. HTTP 리퀘스트 메시지를 작성한다 (0) | 2019.04.04 |