본문 바로가기

네트워크, 서버/소켓,프로토콜5

(소켓,프로토콜)TCP 소켓의 종료 1. 깔끔한 종료 TCP에서 연결된 소켓을 종료할때는 4-way handshake라는 과정을 거친다. 총 4단계로 tcp의 특성에 맞게 안전하게 종료 가능한 방법이다. - 과정 먼저 종료를 원하는 쪽에서 closesocket과 같은 소켓 종료함수를 호출한다. 그럼 해당 소켓에 대한 권한이 tcp커널로 넘어가게 되고 만약 소켓이 블로킹 소켓이면 위의 종료과정이 완전히 끝날때까지 블로킹되고, 논블로킹 소켓이면 EWOULDBLOCK을 리턴한다. 그리고 해당 호스트는 FIN_WAIT상태에 들어가고 상대호스트의 FIN을 기다린다(FIN_WAIT). FIN 메시지를 받은 상대 호스트는 받은 메시지에 대한 ACK 신호를 보내고 역시나 closesocket과 같은 소켓종료함수를 보내기 전까지 ClOSE_WAIT상태가 .. 2020. 10. 5.
(소켓,프로토콜) UDP소켓 데이터의 경계 UDP는 TCP와 다르게 데이터의 경계가 있다. 그래서 하나의 패킷이 하나의 데이터가 되는데, 이때문에 UDP소켓이 전송하는 패킷을 데이터그램이라고 부른다. TCP는 데이터의 경계가 없다. send, recv 함수를 통해 해당 소켓의 입출력 버퍼를 읽고 쓰고 하지만 실제 OS가 보낼때 해당 데이터가 나뉘어서 갈수도 있다. 그래서 받는 입장에선 내가 받을 데이터의 용량 만큼 계속 recv해줘야 한다. 하지만 UDP는 입출력 버퍼에 먼저 저장되는게 아닌 곧 바로 OS단에서 데이터를 전송한다. 물론 그렇다고 함수가 리턴했을때 바로 데이터를 보냈다고 확신되는건 아니다. 다만 보낸 횟수에 따라 데이터가 나뉘어서 상대 호스트에 전달되기 때문에 3번 send하였으면 상대방도 3번 recv해줘야 한다. .. 2020. 9. 22.
(소켓, 프로토콜)엔디안 변환 CPU의 종류에 따라 메모리에 바이트를 저장하는 순서가 달라진다. Little Endian은 우리가 주로 사용하는 Intel, ARM CPU방식이다. 바이트의 순서를 정할때 큰자리의 비트가 뒤쪽부터 채워지게 된다. 그에 반에 Big Endian은 IBM, 모토로라에서 사용되며 바이트의 순서는 큰자리의 비트가 앞쪽부터 채워진다. 개발자가 상식적으로 생각할때는 당연히 Big Endian이 익숙하고 자연스럽다. 그러면 굳이 왜 Intel과 ARM은 Little Endian을 선택해서 우릴 혼란스럽게 만드는 걸까? Little Endian도 몇가지 장점이 있다. 만약 해당 바이트의 하위 값을 쓰고자 할때는 하위 바이트가 앞에나온 Little Endian이 유리하다. 또한 가산기에서 덧셈을 하는 방식 중 아래 자.. 2020. 9. 8.
(소켓,프로토콜)소켓 프로토콜 프로토콜이란? 네트워크 통신을 위한 상호간의 약속이라고 보면 된다. 소켓프로그래밍에서도 상호간의 전달방식을 규정하는 프로토콜을 정의해야 한다. 소켓을 만드는 함수에서 사용자는 소켓의 프로토콜을 정의할수 있는데 한번 알아보도록 하자. int socket(int domain, int type, int protocol) domain -> 소켓이 사용할 프로토콜 체계정보 type -> 소켓의 데이터 전송 방식 protocol -> 두 컴퓨터 간 통신에 사용되는 프로토콜 정보전달 - 프로토콜 체계(sys/socket.h) PF_INET IPV4 인터넷 프로토콜 PF_INET6 IPV6 인터넷 프로토콜 PF_LOCAL 로컬통신 위한 UNIX 프로토콜 체계 PF_PACKET LowLevel 소켓을 위한 프로토콜 체계.. 2020. 7. 2.