계층 구조
- 애플리케이션 아랫 부분에는 Socket 라이브러리가 있다.
- 그 안에는 리졸버가 있다.
- OS 내부에는 프로토콜 스택이 있다.
- TCP 와 UDP 라는 프로토콜을 사용해 데이터 송수신 동작을 한다.
TCP | 브라우저나 메일 등 일반적인 애플리케이션 |
UDP | DNS 서버 조회 등 짧은 제어용 데이터 송수신 |
- IP 프로토콜을 사용해 데이터 송수신을 한다.
- *패킷을 통신 상대까지 운반하는 역할 *분할된 데이터의 덩어리
- ICMP 와 ARP 프로토콜을 다룬다.
ICMP | 패킷을 운반할 때 발생하는 오류나 제어용 메시지 통지 |
ARP | IP 주소에 대응하는 이더넷의 *MAC 주소 조사 *표준화된 LAN 방식의 기기가 사용하는 형식의 주소 |
- LAN 드라이버
- LAN 어댑터의 하드웨어 제어
- LAN 어댑터
- 실제 송수신 동작, 즉 케이블에 대해 신호를 송수신하는 동작 실행
소켓의 실체 ?
- 프로토콜 스택 내부에는 제어 정보를 기록하는 메모리 영역이 있다
- 통신 상대의 IP 주소
- 포트 번호
- 통신 동작
- 이 제어 정보, 또는 메모리 영역이 소켓의 실체라고 생각해도 된다.
✅ 프로토콜 스택은 소켓에 기록된 제어 정보를 참조하면서 움직인다.
소켓을 만든다
- 여기에 새로 한 행의 제어 정보를 추가하고
- 여기서부터 통신을 시작하는 곳이라는 식으로 상태를 기록하거나
- 송수신 데이터를 일시적으로 저장하는 버퍼 메모리를 준비하는 등
- 통신을 준비하는 작업
Socket 을 호출했을 때
- 소켓을 만든다.
- 소켓 한 개 분량의 메모리 영역을 확보한다.
- 소켓을 나타내는 디스크립터를 애플리케이션에 알려준다.
- 이후 애플리케이션은 프로토콜 스택에 데이터 송수신을 할 때 디스크립터를 통지한다.
서버 접속
- 서버 IP주소나 포트번호를 프로토콜 스택에 알린다.
- 클라이언트에서 서버측에게 통신 동작 개시를 알린다.
- 송수신 데이터를 일시 저장하는 메모리 영역 “버퍼 메모리”를 확보한다.
제어 정보
→ 클라이언트와 서버가 서로 연락을 절충하기 위해 주고받는 정보
- 접속, 송수신, 연결 끊기에 각 단계에서 제어 정보를 추가한다.
- 통신 동작 정체에서 어떤 정보가 필요한지 검토하여 내용을 TCP 프로토콜 사양으로 규정하고 있다.
헤더
→ 제어 정보를 패킷의 맨 앞부분에 배치하는 곳부터 헤더라고 부른다.
✅ 통신 동작에 이용하는 제어 정보
- 헤더에 기입되는 정보
- 소켓(프로토콜 스택의 메모리 영역)에 기록되는 정보
접속이란
- 데이터 송수신 동작 개시를 나타내는 제어 정보를 기록한 TCP헤더를 만든다.
- 헤더의 송신처와 수신처의 포트번호로 접속하는 소켓을 지정한다.
- 컨트롤 비트인 SYN이라는 비트를 1로 만든다.
- 담당 IP 부분에 건네주어 송신 의뢰한다.
- 네트워크를 통해 패킷이 서버에 도착하면, 서버측의 IP 가 TCP 에게 넘긴다.
- 서버측 TCP가 TCP헤더를 조사해 수신처 포트번호에 해당하는 소켓을 찾아낸다.
- 소켓에 필요한 정보를 기록하고 접속 동작은 진행중 상태가 된다.
- 서버측 TCP 가 TCP 헤더를 만든다.
- 컨트롤 비트인 ACK의 비트를 1로 만든다.(패킷을 받은 것을 알린다.)
- 패킷이 없어진다면 패킷이 도착한 것을 확인하는 동작이 진행된다. 이것을 확인하기 위해 ACK 비트를 1로 만든다.
- TCP 헤더를 IP 에 넘겨주어 클라이언트에 반송한다.
- 패킷이 클라이언트에게 돌아오고
- IP 를 경유하여
- TCP에 도착한다.
- TCP 헤더를 조사하여 서버측 접속 동작이 성공했는지 확인한다.
- SYN이 1이면 접속 성공!
- 소켓에 서버 IP주소와 포트번호 등과 함께 접속 완료를 나타내는 제어 정보를 기록한다.
- 패킷의 도착을 알리기 위해 ACK 비트를 1로 만든 TCP 헤더를 서버에 반송한다.
- 이것이 서버에 도착하면 접속 동작 끝! 이로서 소켓은 데이터를 송수신 할 수 있는 상태가 된다.
→ 파이프 같은 것으로 소켓이 연결되었다고 생각하면 좋은데, 이 파이프를 커넥션이라고 한다.
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 |