네트워크 - 해당되는 글 20건

9장 10장

----------------------------------------------------------------------------------
입력및 출력버퍼의 크기
데이타 전송방식  TCP _ UDP
TTL time to live

소켓관련 옵션 관련 함수
getsockopt 현제 설정옵션가져옴
setsockopt 옵션 설정

소켓의 옵션들
get 함수에서 사용할수 있는 옵션들은 소켓의 설정을 볼수만있고 설정은불가한것들도있다.

전송버퍼 수신버퍼 타임아웃에 대한 반응도 설정해줄수있다.
뒤에 네이클알고리즘에대해서 쓸건지 안쓸건지도 할수있다.
-----------------------------------
타임웨잇상태라는것은
연결종료시에 4웨이 핸드쉐이킹을한다.
1.핀신호를 에이에서주면(종료합시다)
2.비는 에크신호로 응답하고(오키)
   핀페킷으로 끝내자고한다.(나도종료하겠다.)
3.핀페킷을 받은 에이쪽에서 에크신호를 보내서 연결종료한다.(나도종료했어)
이 이후에 타임웨잇값을 두어서 대기하고있기 때에 이 타임웨잇 시간안에는
다시 서버를 설정하기위해서 같은 포트로 아이피로 바인딩이안된다.
타임웨잇시간은 생각보다 길어 질 수 있다.
왜냐하면 3번에서 에이쪽에서 신호를 보내는것이 비가받지못해서이기때문이다.

SO_REUSEADDR을 트루로설정하면 타임웨잇상태에 있더라도 포트를 제할당 받아서 쓸수가있다.
================================================
네글알고리즘을 쓰게 되면
에이쪽에서 신호를 보내면 비에서 에크신호가 올때까지 다시 보내지않는다.
장점:네트워크의 효율성이 높아진다 (적은패킷양)
단점:전송속도가 느리다 꼭 에크신호가 온담에 다시 다음주소를 보내기때문에
 에크신호가 오기전에 여러가지 신호를 보내고 에크신호를 받는 것과는 차이가 있다.
===================================================
다중접속서버의 구현 방법들
1.하나는 멀티 태스킹 서버의구현 = 포크함수쓰면되고
     부모프로세스가 하는역할이 클라이언트가 접속을 하면 포크를 호출해주고 자식프로세스에 할당해준다.
 데이타 스택 힙은 프로세스가 별도로 항당받아서쓴다.
2.다른하나의 방법은셀렉트의 함수를 사용해서 멀티플렉싱을한다.
3.쓰레드기반으로 하는 멀티 쓰레딩 서버의 구현= 쓰레드함수쓰면된다.
     멀티쓰레드는 클라이언트가 접속하면 쓰레드를 하나 할당해준다.
====================================================
프로세스로 할당하는 방법

억셉트가 호출이되면 새로운 클라이언트 소켓이 들어오게되면
이전에 가지고 있던 소켓번호를 모르니까 클로우즈해준다.

부모프로세스에서 자식 프로세스를 생성한후에는 부모 프로세스를 끊어 버린다.
왜냐면 다른 클라이언트에서 접속할때 부모프로세스는 계속 덮어쓰기 되니까
나중에 접속끈키위해서 해제할려고하면 전에 값들을 모두가진상태에서 하나씩 해제해나가야된다.
어차피 자식 프로세스가 통신하기때문에 부모프로세스는 통신할필요가없다.

부모클라이언트에서는 뒤에 가서 클라이언트 소켓을 끊을려면 값을 가지고 있어야되니까 미리끊어버린다.
자식프로세스는 서버프로세스를 끊고 시작하는것이다.
자식프로세스를 보면 실제로 읽어서라이트하고 클라이언트에서 읽으면 연결종료


--------------------------------------
위에것은 리드함수를 호출하면
라이트를 못하고
라이트를 하면리드를 못하기 때문에 입출력을 분리하는것이 중요하다.
보내는것도 마음대로 할수있고
받는것도 마음대로 할수있다.


멀티클라이언트
멀티클라이언트 포크로
부모는리드만하고
자식은 라이트만한다.

반환값이 영이아니면 계속
메세지를 화면에 뿌려주고있다.

      네트워크  |  2007. 10. 26. 10:01





출력스트림 입력스트림은 데이타 전송을 위한 통로이다.
서버의 출력 스트림이 클라이언트 입력스트립과연결

클라이언트에서 큐라는 무자가 들어오면 일방적으로 연결을끊는것은
안전한 방법이아닌 문제가 될수 있다.
하프 클로으즈라는것을 쓰면 입력 및 출력 스트림중 하나만 종료하는행위이다.
이것이 리눅스에서는 셧타운 이라는 함수이다.
입력스트림이라는건 언제 들어올지 모르기 때문에 입력스트림은 나두고 출력스트림은 종료할수있다.
내가 안쓰면 그만이기때문에 eof메세지를 서버쪽에 전송해주고 서버가 입력스트림을 끝내고
서버가 더이상 클라이언트에 할말이 없을때 연결은 끈나게된다.


서버로부터 파일을 받아서 저장을 한다.
서버쪽에서 출력스트림을 닫게 되면 0을 리턴을하고
클라이언트는 서버쪽에서 더이상 받을 데이타가 없다고 인식하고
땡큐를 날리고 닫는다.
데이타파일을 서버가 생성해서준다. 그래서 클라이언트에서 보면 파일이 하나 받아져있고
받은 파일을 보면 소스파일이다.



파일서버에서                                                                            클라이언트
                                                                                     접속하면
서버가 환영 메세지를 보내준다.
                                                                                     파일명을 날려준다
오픈해서 파일명을보고 반환값을 봐서
파일의 존재여부를 알려준다.  
                                                                                    전송요쳥을한다.
서버가 전송요청을 받고
루푸안에서 파일을 전송해준다.
write sock 클라이언트 전송해준다.
read fd 파일에서 계속 읽어서
                                                                                    루푸안에서 계속 리드하면서(read sock)
                                                                                    파일에다가 계속 라이트한다 (Wirte fd)
      네트워크  |  2007. 10. 25. 10:50




echo_clinet에서만 만 컨넥트 함수가 필요하다.
서버에서는 필요없다
      네트워크  |  2007. 10. 25. 10:44



sokoban's Blog is powered by Daum & Tattertools