-
728x90
1. 접속의 의미
접속이란 무엇일까? 생각해보면 케이블은 언제나 회선에 연결되어 있기 때문에 데이터를 주고 받는 일은 언제나 가능하다. 서버와의 연결을 끊는다고 해서 케이블 연결을 해제하지도 않는다. 적어도 물리적인 연결을 얘기하지는 않는 것 같다.
접속은 이전의 통신 기술에서 유래되었다. 이전에는 전화 기술이 주류였는데, 전화의 준비 단계는 전화번호를 다이얼링하여 상대에 접속하는 것이었다. 그래서 현재의 컴퓨터 네트워크의 준비 동작도 접속이라고 하는 것이다.
접속은 데이터를 주고 받을 수 있는 상태로 만드는 것이다.
- 클라이언트는 서버의 IP 주소, 포트 번호 등을 통해 서버를 식별한다.
- 클라이언트는 클라이언트의 IP 주소, 포트 번호 등과 함께 연결을 요청한다.
- 서버도 클라이언트의 제어 정보를 넘겨 받아 통신할 준비가 완료된다.
- 클라이언트, 서버는 각자 송 · 수신하는 데이터를 저장할 버퍼 메모리 공간을 확보한다.
2. 맨 앞부분에 제어 정보를 기록한 헤더를 배치한다
통신 동작에 이용하는 제어 정보는 2가지 종류가 있다.
- 패킷 헤더에 기입되는 정보
- 소켓에 기록되는 정보
패킷 헤더에는 접속의 각 단계에 필요한 정보들과 데이터를 주고 받을 때 필요한 정보들이 담겨 있다. 포트 번호, ACK 번호, 컨트롤 비트, 체크섬 등과 같은 정보들이다. 패킷에는 다른 종류의 헤더도 있기 때문에 헤더의 이름을 적어줘야 한다.
소켓에는 프로토콜 스택에 필요한 정보들이 담긴다. 애플리케이션에서 통지된 정보, 통신 상대로부터 얻은 정보, 송 · 수신 동작의 상태 등이 수시로 기록된다. 프로토콜 스택도 수시로 이 정보들을 참조하며 동작한다.
3. 접속 동작의 실제
- Socket 라이브러리의 connect(<디스크립터>, <서버측의 IP 주소와 포트 번호>, ···) 호출
- 프로토콜 스택의 TCP 담당에 제어 정보들이 전달됨
- 컨트롤 비트 중 SYN 비트의 값을 1로 만든 데이터 송신 동작의 개시를 나타내는 제어 정보를 기록한 헤더 생성
- IP 담당 부분에 패킷 송신을 의뢰하고 패킷이 네트워크를 통해 서버로 전달됨
- 서버측의 IP 담당 부분이 TCP 담당 부분에 패킷을 넘겨줌
- TCP 담당 부분은 헤더를 참조해 해당 소켓을 찾아 필요한 정보를 기록하고 접속 동작을 진행중 상태로 변경함
- SYN, ACK 비트를 1로 설정한 패킷을 클라이언트에 응답
- 클라이언트도 ACK 비트를 1로 설정한 패킷을 서버에 응답
- 커넥션이 생성됨 (close를 호출할 때까지 계속 존재)
728x90'네트워크' 카테고리의 다른 글
08. 서버에서 연결을 끊어 소켓을 말소한다 (0) 2021.10.07 07. 데이터를 송 · 수신한다 (0) 2021.10.03 05. 소켓을 작성한다 (0) 2021.09.28 04. 프로토콜 스택에 메시지 송신을 의뢰한다 (0) 2021.09.27 03. 전 세계의 DNS 서버가 연대한다 (0) 2021.09.25 댓글
