개발자 aloe 2023. 5. 14. 17:04
728x90

친구와 서로의 리눅스에 접근 하는 것을 해봤음

이때 상대의 접속을 받아 들이기 위해 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()를통해 새로운 소켓을 만들어 클라랑 연결하는 것임 기본적으로 대기하기 위한 소캣을 하나 계속 가지고 있음 

 

 

 

 

 

 

 

728x90