본문 바로가기

연구실/네트워크 이해하기

(12)
SO_LINGER는 무슨 옵션이냐? SO_LINGER는 소켓 설정에 대한 옵션이다. 소켓이 colse 하게 될 때, 이 옵션의 영향을 받는다. 이것은 TCP소켓에 대해서만 적용 된다 소켓은 close 한다고 해서 바로 소켓이 닫히지 않는다. 일정 시간 동안 대기 상태가 되는데 그 대기시간이 소켓의 TIME_OUT 상태이다. 이 TIME_OUT 상태의 시간을 SO_LINGER 옵션을 통해서 바로 소켓을 닫게 할 수가 있다. 그렇다면 왜 TIME_OUT 이라는 상태를 두엇는가? TCP는 신뢰성을 보장하는 프로토콜이다. A 와 B가 TCP 로 연결 되어 잇을때 A가 B에거 접속을 끝자 라고 신호를 보내고 나서, 서로 3번에 걸쳐 이 신호가 오고 가서 접속을 끊는다. 자세한 이야기는 인용을 한다. http://kldp.org/node/165 내용..
소켓의 우아한 종료가 무엇이며 왜 필요한가? 종료를 말하기 전에 우선 시작된 상태를 말해야 할 것같다. 글보단 그림이 더 좋기 때문에, 그림을 바로 띄우면 아래 그림과 같다. 1. 소켓의 우아한 종료가 왜 필요 할까? 이 모습은 소켓의 정상적인 연결 상태를 보여준다. 각각의 소켓은 입·출력 스트림을 가지고(가진다는 표현이 좋겠다) 있어, 입력을 받거나, 출력을 하게 된다. 그리고 접속을 종료하게 될때 우리는 closesoket 함수를 이용하여, 소켓을 닫는다. 그럼 아래와 같은 그림이 보이게 된다. 이렇게 HOSTA는 소켓을 닫음과 동시에 입·출력 스트림도 닫아 버리고, 자신에게 가지고 있던, 버퍼부터 시작한 모든 리소르를 운영체제에게 반환해준다. 물론 일반적인 경우에 문제가 되지는 않지만, "어떤 중요한 정보"를 HostB가 전송도중이였다면, 그..
자꾸 이곳 저곳에서 보는 내용들 때문에 어디서 부터 정리를.. 어디서 부터 정리를 해야 할지 모르겠다~ 중구남방식으로 정리를 하자면 1. 윈속에는 블로킹과 넌블로킹 두가지 소켓 모드가 있다. 2. Windows 플랫폼은 기본적으로 블록킹과 넌블록킹 모드의 소켓을 지원하지만, 지원되는 기술은 Windows NT 이하에선 .. IOCP 를 사용 할수 없다. 3. 블록킹 모드란, 윈속 API 호출이 되는 얼마간의 시간동안 블록 되는것을 뜻한다. 4. 블로킹 모드와 넌블록킹 모두에는 각기 장단점이 있다. 바로 데이터 송수신하는 순서를 관리 안하느냐와 관리하는냐이다. 5. 서버는 넌블로킹 모드로 개발을 해야 하는데, 윈속에선 가장 쓰기 편하고, 가장 성능이 좋은것이 IOCP 이다. 6. Completion Port 에 소켓을 지정하고 나면 소켓 핸들에 대하여 I/O 요청 완..
어려운것 기본 개요 overlapped http://www.redwiki.net/wiki/wiki/Overlapped%20I/O%20%C0%CC%BE%DF%B1%E2 정리 overlapped http://sanaigon.tistory.com/17 구체적인 이야기 http://keegan.tistory.com/109 부터 내부에 강좌형식으로 쭉 있음 좀 더 편한 글 http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=437
5.TCP와 UDP는 무엇인가요? 1~4장까지 다 읽었다면 무슨 이야기 하는지 알수 있을 것 이다. 현실에선 언어를 통해서 다른 사람에게 정보를 준다 소켓에선 TCP 나 UDP를 통하여 다른 프로그램에게 데이터를 준다! (물론 TCP 나 UDP 말고 많이 있지만, .. 우선 제낀다.) 즉, TCP 나 UDP는 소켓 끼리 데이터를 주고 받기 위한 통신 규약(Protocol)이다! 자. 다시 그렇다면 TCP와 UDP는 무엇을 해 줄까? TCP(Transmission Control Protocl)는 데이터 전송 과정을 컨트롤 해 주는데, 데이터를 보내고 그 데이터가 잘 갔는지 확인을 해 준다. UDP(User Datagram Protocol)도 데이터 전송 과정을 컨트롤 해 주는데, 데이터를 보내고 그 데이터가 잘 갔는지 확인해 주지 않는다!..
4. IP 와 Prot 는 무엇인가요? 전화번호는 내 전화기로 상대의 전화기에 연결을 하기 위한 번호를 뜻한다. 예) 010-5850-6666, 010-6666-4444 등 소켓 역시 이런 번호로 쓰는데 이런 번호를 IP 라 부른다. 이 IP는 인터넷 프로토콜(Internet Protocol)을 뜻하는데, 전화기처럼 상대의 컴퓨터를 찾기 위한 번호이다. 예) 127.0.0.1, 192.168.0.1, 223.145.9.45 등이 있다. 자. 이제 IP 를 알아 상대의 컴퓨터로 연결을 할수 있다고 생각한다면 오산이다!. 전화번호만 안다고 해서 원하는 사람과 통화 할수 없드시 말이다.(.. 물론 휴대폰은 높은 확율로 원하는 사람이 받지만, 가끔 다른 사람도 받지 않는가?) 즉 전화번호가 사람을 가르키는게 아니듯이, IP 역시 내가 통신하고 싶은 ..
3. 그러면 소켓은 어떻게 만드나? 저번장에 소켓이 전화기와 비슷하다고 설명했다면, 이번에는 소켓을 만드는 방법을 알아본다. 다시 전화기로 가서.. 내가 전화기를 들고 일본에 전화를 하면, 일본에선 받을것이고 나는 당연이 한국어로 말하고 일본에선 일본어로 말할것이다. 그러면, .. 서로 대화가 되지 않아, "무슨 소리를 지껄이는거야!" 라고 생각하고 끊어 버릴것이다. 그래서 서로 어떤 언어로 이야기 하자! 라고 규약을 만들었다. 네트워크 프로그래밍에선, 이 통신 규약을 "프로토콜(Protocol)" 이라 한다! 프로토콜의 종류로 치자면, .. 이미 개념 수준이 넘었기 때문에 제끼고, 일반적인 네트워크 프로그래밍에선 IPv4 인터넷 프로토콜(후에 IPv6 을 많이 사용할것이다)과 TCP, UDP를 많이 사용 한다고 알고만 있으면 된다. 전화..
2. 어떻게 컴퓨터간에 연결이 이루어 지나요? 현실에선 전화기를 이용하여, 원하는 사람과 통화 하듯이 컴퓨터에선 소켓을 이용해 통화한다. 소켓이란 무엇인가? 소켓은 연결을 하고 끊는 전화기와 비슷하다. 전화기에선 1. 전화기를 구입 2. 전화번호를 할당 받고 3. 전화를 건다. 4. 상대가 전화를 받는다. 5. 통화 한다. 소켓은 1. 소켓을 생성 2. IP주소 할당 3. 연결을 요청한다. 4. 연결을 수락한다. 5. 통화 한다. 코드는 아직 필요 없다. 개념만 이해하면 된다. 모든 것을 파일처럼 취급하는 유닉스에 어떻게 조작하는지 알아 본다, 소켓이란 말이 많이 혼동 되는데 이건 외우는게 좋다. 1. 서버 소켓 - 서버에서 문지기 역활을 하는 소켓을 뜻한다. 2. 통신 소켓 - 클라이언트와 서버와 통화하기 위한 소켓을 뜻한다. 3. 라이브러리 소켓..