친구와 서로의 리눅스에 접근 하는 것을 해봤음
이때 상대의 접속을 받아 들이기 위해 NC라는 프로그램을 이용했음
NET CAT
nc -l 하면 서버로 돌리겠다
nc -l -p 8080 해당 포트 번호를 열고 서버를 가동시킴
우선 순위로 따지면 서버가 먼저 동작하고 있어야 하고
외부에 것을 받아들이는 역할도 하고 있어야함
SYN 가 접속을 위한 플레그임
이 접속 관련된 요청을 클라이언트가 먼저 보내고
이것을 서버가 담아두기 위한 대기큐를 생성 하고 있음
대기큐에 들어있는 것에 대하여 접속수 락하면 서비스를 제공함
이전시간에 클라이언트 구조중 socket(), connect(), close() 순으로 연결 해보는 작업을 해보았음이와 상응 되는
서버 쪽을 구현 해볼 것임
서버는 해당 3단계가 네트워크 자원들 받고 대기를 받는 단계를 통해 준비하고 있어야함
서버의 기본적 준비가 끝나면 accept함수를 통해 요청을 수락하고 커넥션이 만들어지면 그다음 데이터 통신이 가능함
반드시 외우기 시험 (이그림 순서 맞춰줘야함)
socket 이라는 함수를 통해 하나의 fd를 만들었음 (애플리케이션에서) 여기서 만든 소켓은 껍데기임 아직 뒤에 네트워크에 관련된 링크고리를 만들어야 하는데그런 과정중 하나임 ip주소와 tcp 주소인 포트번호로 연결시켜줌 (우측 그림처럼) bind 함수 역할
서비스를 받기전에 자기 차례가 될때까지 대기해야함 그래서 대기 큐라는 공간이 필요하고 이 공간을 만드는 함수가 listen 함수임
인자 소캣id, 대기큐 개수 (얼마나 대기 공간을 만들 것인지 : 몇개의 클라이언트 접속을 받고 대기 시킬 것인지 backlog 라고함)
대기큐에 쌓여 있다면 거기서 꺼내서 다시 서비스를 진행 해줘야함 수락을 해주는 함수가 accept 함수임
클라이언트 쪽에서 connect 함수를 통해 요청(syn 체크하고)을 하면 요청은 대기 큐에 들어가 있는 것이고 accept 함수를 사용하면
대기 큐에 있는 요청을 하나 빼옴 성공적으로 접속이 됬으면 그 이후로는 TCP 기반 통신을 수행 할 수 있음
대기큐에 아무것도 없으면 들어가자 마자 빠질 것임
accept 함수를 이용하여 접속을 수락하면 syn + ack 값으로 회신
그럼 다시 클라이언트는 syn 보고 아 서버도 뭔가 요청하는게 있네 하면서 다시 ack로 회신을 보냄
다시 서버쪽으로 회신까지 해주는게 connect 함수역할
서버쪽에서는 다른 요청 들어오는 것을 확인하기 위해서 소캣을 하나 계속 돌리고
클라쪽 소캣이랑 서버쪽 소캣(n개) 연결을 위해 다른 소캣을 계속 생성함 하나 길 만들면 다른 요청오면 다른 길을 만들기 위해
즉 accept()를통해 새로운 소켓을 만들어 클라랑 연결하는 것임 기본적으로 대기하기 위한 소캣을 하나 계속 가지고 있음
'자료구조, 운영체제, 네트워크, 시스템설계 > 정보보안' 카테고리의 다른 글
UDP 서버 만들기 및 채팅 프로그램 만들기 (0) | 2023.05.30 |
---|---|
MultPlex 서버 Poll & Select 기법 활용하여 채팅 프로그램 만들기! (0) | 2023.05.23 |
네트워크용기본 API바이트 순서 및 주소체계 변환 호스트정보 취득 및 송수신 함수들 (0) | 2023.05.02 |
파일기술자, 바이트 배열 처리 함수 (0) | 2023.04.18 |