본문 바로가기
개발공부 개발새발/Network

Network) 서버에 접속하자!

by 휴일이 2023. 7. 26.

 

계층 구조

  • 애플리케이션 아랫 부분에는 Socket 라이브러리가 있다.
    • 그 안에는 리졸버가 있다.
  • OS 내부에는 프로토콜 스택이 있다.
    • TCP 와 UDP 라는 프로토콜을 사용해 데이터 송수신 동작을 한다.
TCP 브라우저나 메일 등 일반적인 애플리케이션
UDP DNS 서버 조회 등 짧은 제어용 데이터 송수신
  • IP 프로토콜을 사용해 데이터 송수신을 한다.
    • *패킷을 통신 상대까지 운반하는 역할 *분할된 데이터의 덩어리
    • ICMP 와 ARP 프로토콜을 다룬다.
ICMP 패킷을 운반할 때 발생하는 오류나 제어용 메시지 통지
ARP IP 주소에 대응하는 이더넷의 *MAC 주소 조사
*표준화된 LAN 방식의 기기가 사용하는 형식의 주소
  • LAN 드라이버
    • LAN 어댑터의 하드웨어 제어
  • LAN 어댑터
    • 실제 송수신 동작, 즉 케이블에 대해 신호를 송수신하는 동작 실행

소켓의 실체 ?

  • 프로토콜 스택 내부에는 제어 정보를 기록하는 메모리 영역이 있다
    • 통신 상대의 IP 주소
    • 포트 번호
    • 통신 동작
  • 이 제어 정보, 또는 메모리 영역이 소켓의 실체라고 생각해도 된다.

 

✅ 프로토콜 스택은 소켓에 기록된 제어 정보를 참조하면서 움직인다.

 

소켓을 만든다

  • 여기에 새로 한 행의 제어 정보를 추가하고
  • 여기서부터 통신을 시작하는 곳이라는 식으로 상태를 기록하거나
  • 송수신 데이터를 일시적으로 저장하는 버퍼 메모리를 준비하는 등
  • 통신을 준비하는 작업

Socket 을 호출했을 때

  1. 소켓을 만든다.
    1. 소켓 한 개 분량의 메모리 영역을 확보한다.
  2. 소켓을 나타내는 디스크립터를 애플리케이션에 알려준다.
    1. 이후 애플리케이션은 프로토콜 스택에 데이터 송수신을 할 때 디스크립터를 통지한다.

서버 접속

  • 서버 IP주소나 포트번호를 프로토콜 스택에 알린다.
  • 클라이언트에서 서버측에게 통신 동작 개시를 알린다.
  • 송수신 데이터를 일시 저장하는 메모리 영역 “버퍼 메모리”를 확보한다.

제어 정보

→ 클라이언트와 서버가 서로 연락을 절충하기 위해 주고받는 정보

  • 접속, 송수신, 연결 끊기에 각 단계에서 제어 정보를 추가한다.
  • 통신 동작 정체에서 어떤 정보가 필요한지 검토하여 내용을 TCP 프로토콜 사양으로 규정하고 있다.

헤더

→ 제어 정보를 패킷의 맨 앞부분에 배치하는 곳부터 헤더라고 부른다.

 

 

 ✅ 통신 동작에 이용하는 제어 정보
- 헤더에 기입되는 정보
- 소켓(프로토콜 스택의 메모리 영역)에 기록되는 정보


접속이란

  1. 데이터 송수신 동작 개시를 나타내는 제어 정보를 기록한 TCP헤더를 만든다.
    1. 헤더의 송신처와 수신처의 포트번호로 접속하는 소켓을 지정한다.
    2. 컨트롤 비트인 SYN이라는 비트를 1로 만든다.
  2. 담당 IP 부분에 건네주어 송신 의뢰한다.
  3. 네트워크를 통해 패킷이 서버에 도착하면, 서버측의 IP 가 TCP 에게 넘긴다.
  4. 서버측 TCP가 TCP헤더를 조사해 수신처 포트번호에 해당하는 소켓을 찾아낸다.
  5. 소켓에 필요한 정보를 기록하고 접속 동작은 진행중 상태가 된다.
  6. 서버측 TCP 가 TCP 헤더를 만든다.
    1. 컨트롤 비트인 ACK의 비트를 1로 만든다.(패킷을 받은 것을 알린다.)
    2. 패킷이 없어진다면 패킷이 도착한 것을 확인하는 동작이 진행된다. 이것을 확인하기 위해 ACK 비트를 1로 만든다.
  7. TCP 헤더를 IP 에 넘겨주어 클라이언트에 반송한다.
  8. 패킷이 클라이언트에게 돌아오고
  9. IP 를 경유하여
  10. TCP에 도착한다.
  11. TCP 헤더를 조사하여 서버측 접속 동작이 성공했는지 확인한다.
    1. SYN이 1이면 접속 성공!
  12. 소켓에 서버 IP주소와 포트번호 등과 함께 접속 완료를 나타내는 제어 정보를 기록한다.
  13. 패킷의 도착을 알리기 위해 ACK 비트를 1로 만든 TCP 헤더를 서버에 반송한다.
  14. 이것이 서버에 도착하면 접속 동작 끝! 이로서 소켓은 데이터를 송수신 할 수 있는 상태가 된다.

→ 파이프 같은 것으로 소켓이 연결되었다고 생각하면 좋은데, 이 파이프를 커넥션이라고 한다.

728x90

'개발공부 개발새발 > Network' 카테고리의 다른 글

Network) 연결 끊기와 데이터 송수신 요약  (0) 2023.07.27
Network) 데이터 송수신  (0) 2023.07.27
Network) Protocol Stack  (0) 2023.07.25
DNS ) DNS 서버  (0) 2023.07.25
HTTP) HTTP Request Message 작성  (0) 2023.07.25