본 내용은 “성공과 실패를 결정하는 1%의 네트워크” 를 참고하여 작성하였습니다.
지난단원의 정리
DNS서버에 도메인 명을 보내는것으로 우리는 IP값을 가져온다.
하지만 이렇게 IP 값을 가져오기 위해서는 도메인을 웹 서버에 전송해야하는데
이때 OS의 내부에 있는 네트워크 조절 프로그램인, 프로토콜 스택에 의뢰를 하게 된다.
soket?, Soket?, 소켓?
Soket은 Soket 라이브러리를 의미한다.
soket은 Soket 라이브러리의 부붐중 하나로 파이프 라인의 입구인 소켓을 만들기 위해 불리는 부붐이다.
소켓은 Soket라이브러리의 부품인 soket에 의해서 생성된 파이프 라인의 입구를 의미한다.
프로토콜 스택의 동작
프로토콜 스택은 총 4단계로 나눌수 있다.
- 소켓을 만든다.
- 서버측의 소켓에 파이프를 연결한다.
- 데이터를 파이프를 통해서 송, 수신한다.
- 파이프를 분리하고 소켓을 말소한다.
이러한 동작을 프로토콜 스택 내부에서는 다음과 같은 순서의 코드로 이루어지게 된다.
ㅡㅡㅡ프로토콜 스택ㅡㅡㅡㅡㅡ
1. gethostbyname
2. soket
3. connect
4. write
5. read
6. close
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. gethostbyname
프로토콜 스택이 작동하기 시작하면, url값으로 부터 받아온 도메인값을 DNS서버로 보내주기 위한 메세지를 제작하게 된다.
이때 불리우는 gethostbyname이라는 부품을 통해서 도메인값을 포함한 메세지를 생성하게 된다.
2. soket
soket이라는 Soket라이브러리의 부품을 통해서 파이프라인의 소켓(입구)을 생성하게 된다.
이때 디스크립터 라는 값을 리턴하게 된다.
이렇게 리턴된 디스크립터를 어플리케이션 내부에 저장하게 된다.
디스크립터?
디스크립터는 소켓을 식별하기위한 고유 번호이다.
컴퓨터 내부에서는 다양한 정보의 송수신이 동시에 동작되기 때문에 다양한 소켓이 생성되는데
컴퓨터는 이러한 소켓을 구별하지 못한다. 따라서 디스크립터라는 고유번호를 부여하는것으로 어느 소켓을 통해서 데이터를 송,수신할것인지 구별하게 된다.
3. connect
Soket라이브러리의 connect라는 프로그램을 호출하는것으로 파이프를 연결한다.
connect를 호출할때는 3개의 값이 지정되는데 1. 디스크립터 2. IP주소 3. 포트번호 이다.
- 디스크립터
프로토콜 스택의 통지를 받아서 어느 소켓인지 디스크립터를 통해서 구별하여 서버측 소켓과 연결한다.
- IP주소
IP주소는 DNS서버를 조회하여 조사할 엑세스 대상 서버의 IP주소이다.
- 포트번호
IP주소로는 네트워크에 존재하는 각 다른 컴퓨터까지만을 구별할수 있다.
따라서 해당 컴퓨터의 어느 소켓인지 까지는 명확하게 구별할수 없다.
보통 포트번호는 규칙에 의해서 정해져있다.
브라우저에서 웹 서버로의 액세스는 80번, 메일은 25번 과 같이 말이다.
4. write
소켓이 상대방 측과 연결되면 이제 데이터를 파이프라인을 통해 보내주면 된다.
write를 호출할때 데이터와, 디스크립터를 지정하게 되고
지정된 디스크립터를 통해서 소켓의 번호를 파악하고 해당 소켓을 통해서 데이터를 부어준다.
http프로토콜에서는 이때 보내주는 데이터가 http request message가 되겠다.
5. read
데이터의 전달이 완료되면 서버측에서는 응답 메세지를 반송하게된다.
이때 메모리에 수신버퍼라는 메모리영역을 할당하고 해당 응답 메세지를 저장하게 된다.
이렇게 저장된 메모리 내용을 어플리케이션에 전달하게 된다.
6. close
모든 데이터의 송, 수신이 끝나면 close를 호출한다.
close를 통해서 소켓연결을 끊게 되고 이를 브라우저에게 통보한다.
Uploaded by N2T