Protocol Stack
- 액세스 대상 웹 서버에 메시지를 송신하도록 의뢰하는 OS 내부 스택
- 이 동작은 웹에 한정되지 않고 모든 네트워크 애플리케이션에 해당한다. *DNS 서버를 사용하여 IP 주소를 조사하는 동작도 모든 애플리케이션 공통
- 프로토콜 스택에 메시지 송신 동작을 의뢰할 땐, Socket 라이브러리 프로그램 부품을 결정한 순번대로 호출한다.
- 데이터 송,수신 동작을 하기 전에는 양자 사이를 파이프로 연결하는 동작이 필요하다.
→파이프 양 끝에 있는 데이터의 출입구를 “소켓” 이라고 부른다.
프로토콜 스택이 소켓 연결
- 서버측에서 소켓을 만든다. (소켓 작성)
- 클라이언트 측에서도 소켓을 만들고 서버측에 소켓 연결. (접속)
- 데이터 송,수신
- 파이프 분리하고 소켓 말소(연결 끊기)
- 소켓을 분리할 땐 어느 쪽에서 분리해도 상관 없으나, HTTP 라면 서버 측에서 클라이언트 측에 웹 페이지 데이터 보내기를 완료하면 서버에서 먼저 분리한다.
소켓 작성
- Socket 라이브러리에 socket 이라는 프로그램 부품 호출
- 소켓이 생기면 “디스크립터” 를 메모리에 기록.
- *소켓을 식별하기 위해 사용하는 번호표
✅ 애플리케이션은 “디스크립터” 로 소켓을 식별한다.
디스크립터 | 컴퓨터 한 대의 내부에서 소켓을 식별하기 위해 사용 |
포트 번호 | 접속 상대 측에서 소켓을 식별하기 위해 사용 |
접속
- 소켓을 서버측 소켓에 접속하도록 프로토콜 스택에 의뢰
- Socket 라이브러리에 connect 호출
- 디스크립터, IP주소, 포트 번호 지정
디스크립터 | 소켓을 만들 때 돌아온 디스크립터 | 애플리케이션이 소켓을 식별 |
IP 주소 | 액세스 대상 서버의 IP 주소 | 클라이언트-서버가 상대 소켓 식별 |
포트 번호 | 어느 소켓과 접속할지 식별 | 클라이언트-서버가 상대 소켓 식별 |
- 서버 측의 포트 번호는 애플리케이션 종류에 따라 미리 결정된 값을 사용하도록 규칙이 있음
- 웹은 80, 메일은 25 …
- 클라이언트 소켓의 포트 번호는 소켓을 만들 때 프로토콜 스택이 적당한 값을 골라 할당
- 이 값을 프로토콜 스택이 접속 동작을 실행할 때 서버 측에 통지
결론
- connect 를 호출하면 프로토콜 스택이 접속 동작 실행
- 상대와 연결되면 연결된 상대의 IP 주소, 포트 번호 등의 정보를 소켓에 기록
- 데이터 송 수신이 가능한 상태가 됨
송,수신 단계
- 소켓에서 데이터를 쏟아 부으면 상대측 소켓에 데이터가 도착한다.
- 애플리케이션은 소켓을 직접 다룰 수 있으니 프로토콜 스택에 의뢰.
- Socket 라이브러리의 write를 이용.
송신
- 애플리케이션이 송신 데이터를 메모리에 준비
- write 를 호출할 때 디스크립터와 송신 데이터를 지정
- 프로토콜 스택이 송신 데이터를 서버에 송신
- 서버가 응답 메시지를 반송
수신
- Socket 라이브러리의 read 이용, 프로토콜 스택에 수신 동작 의뢰
- 수신 응답 메시지를 저장하기 위한 메모리 영역을 지정
- 수신 버퍼
연결 끊기
- Socket 라이브러리의 close 호출하여 연결 끊기
웹에서 사용하는 HTTP 프로토콜은, 응답 메시지의 송신을 완료하면 웹 서버 측에서 연결 끊기 동작을 실행
- 웹 서버에서 close 호출하여 연결 끊기
- 클라이언트 측에 전달, 클라이언트도 연결 끊기
- 브라우저가 read 로 수신 동작을 의뢰했는데 연결이 끊겼다는 사실을 통지받으면 종료
✅ HTTP 프로토콜은 HTML 문서나 영상 데이터를 하나하나 별도의 것으로 취급하여 1개의 데이터를 읽을 때마다 접속, 리퀘스트 메시지 송신, 응답 메시지 수신, 연결 끊기 라는 동작을 반복한다.
728x90
'개발공부 개발새발 > Network' 카테고리의 다른 글
Network) 연결 끊기와 데이터 송수신 요약 (0) | 2023.07.27 |
---|---|
Network) 데이터 송수신 (0) | 2023.07.27 |
Network) 서버에 접속하자! (0) | 2023.07.26 |
DNS ) DNS 서버 (0) | 2023.07.25 |
HTTP) HTTP Request Message 작성 (0) | 2023.07.25 |