본문 바로가기

전체 글

(18)
스레드와 프로세스의 차이를 이해해보자 스레드는 어쩌다 생겨났을까? 스레드가 생기기 전엔 멀티프로세스 기반으로 서버를 만들었다. 멀티프로세스는 나름의 장점도 있지만, 단점이 명확하다. 프로세스 생성작업이 운영체제 차원에서 부담되는 작업이라는 것이다. 하지만 생성작업 자체는 처음에만 이루어지기 때문에 굳이?라는 생각이 들 수 있지만 다음 단점은 정말 심각하다. 많게는 초당 수천 번까지 일어나는 컨텍스트 스위칭(Context Switching)이 상당히 부담된다. ※컨텍스트 스위칭이란? →간단히 말하면 CPU가 둘 이상의 프로세스를 실행시키기 위해 두 프로세스를 오가는 과정에서 프로세스들의 데이터들을 저장, 불러오는 과정이다. 이런 단점들을 최소화하기위해 '경량화된 프로세스' 로써 스레드가 탄생했다. 그럼 프로세스와 뭐가 달라? 프로세스는 데이터..
Select 모델을 위한 Select 함수를 이해해보자 들어가며 ※ 윈도우환경을 기준으로 작성된 글입니다. Select 함수가 뭘까? select함수는 멀티 플렉싱 서버의 구현에 있어 가장 대표적인 방법이다. 멀티 플렉싱서버란 하나의 프로세스를 통해 여러 개의 클라이언트들과 통신하는 방식의 서버를 말한다. 그럼 어떤 식으로 Select는 하나의 프로세스만으로 여러 클라이언트를 관리할까? 입출력 관찰자 Select Select 함수는 여러 소켓들을 모아두고 이 소켓들을 관찰할 수 있다. 이때 관찰하는 것은 다음 3가지와 같다. 수신 데이터를 지니고 있는 소켓이 존재한가? 블로킹되지 않고 데이터의 전송이 가능한 소켓이 존재하는가? 예외상황이 발생한 소켓이 존재하는가? 쉽게 말하면, read, write, except 입출력이 발생했는지를 관찰하는 것이다. (수신..
Nagle 알고리즘을 이해해보자 들어가며 Nagle알고리즘은 패킷들이 너무 많아 넘쳐나는 것을 막기위해 나오게 된 알고리즘이다. 매우 간단하지만 이번엔 Nagle알고리즘이 무엇인지, 어떨 때 쓰는지 알아보자. Nagle 알고리즘?? Nagle알고리즘은 전송한 패킷의 ACK 패킷을 받아야지만 다음 데이터를 전송하는 간단한 알고리즘이다. Nagle 알고리즘 의 특징 장점 Nagle알고리즘을 적용하면 Network Traffic(네트워크에 걸리는 부하,혼잡 정도)이 감소한다. 1바이트를 보내더라도 패킷의 헤더의 크기는 수십바이트이기 때문이다. 단점 Nagle알고리즘은 ACK 패킷을 받고 정보를 다시 전송하기 때문에 속도 측면에서 좋지않다. 하지만 속도가 느리다고 Nagle알고리즘을 적용하지 않으면 엄청난 트래픽이 상당히 부담되기 때문에 상황..
주소할당 에러(Binding Error)를 이해해보자 들어가며 때때로 서버 프로그램을 강제종료하고 다시 서버를 켜려고 하면 Bind 하는 과정에서 오류가 발생한다. 이러한 상황은 왜 발생하는 것일까? Time-wait 상태 Time-Wait?? Time-wait는 TCP의 연결종료 과정인 four-handshaking에서 일어난다. 먼저 연결 종료 요청(FIN)을 보낸 Host A는 마지막 ACK를 보내고 소켓이 바로 사라지지 않고, 일정 시간을 대기하게 되는데 그 상태를 Time-wait이라고 한다. Time-wait을 사용하는 이유 아까와 같은 four-handshaking 상황에서 바로 소켓을 소멸시켰다. 하지만 마지막 ACK가 손실되어 버렸다. 얼마 뒤 Host B는 자신의 FIN메시지를 보낸다고 해도 Host A의 소켓은 이미 소멸해 버렸기 때문에..
TCP 소켓의 우아한 연결종료(Half-close)를 이해해보자 들어가며 Half-close?? 이게 뭘까? 상대방 소켓이 데이터를 보내는 중인데 연결을 끊어버린다면, 심지어 그게 중요한 데이터였다면 큰일 날 것이다..! 이런 경우는 어떻게 해야 할까? Half Close 일방적인 연결종료의 문제점은 서두에서 이해했을 것이다. 연결 종료를 좀 더 자세히 살펴보자. TCP소켓은 두 개의 스트림을 가지고 있다. (스트림? -> 두 소켓이 연결되어 데이터가 송수시 가능한 상태를 스트림으로 봄) 스트림은 양방향이 아닌 한 방향이기 때문에 각 각 다른 방향의 스트림이 2가지 존재하는 것이다. 결국 Half-close란? 스트림을 한쪽만 닫아, 보낼 순 없지만 받을 순 있는 상태, 받을 순 없지만 보낼 순 있는 상태를 만드는 것을 의미한다. Half-Close의 필요성 굳이 써..
UDP를 파헤치며 이해해보자 들어가며 UDP는 비연결지향형 방식이다. 간단한 특징을 읊어보면 전송 도중 데이터가 손실될 수 있다. 속도가 빠르다 로 볼 수 있다. 그럼 UDP는 어떤식으로 동작하길래 속도가빠른걸까?? UDP 내부 동작 원리 UDP는 TCP와 달리 흐름제어를 하지 않는다. UDP 동작 과정을 그림으로 이해해보자. UDP 통신엔 IP의 역할, UDP의 역할이 나뉜다. IP의 역할: 정해진 경로로 송신하고자하는 곳 까지 전송 UDP의 역할: 송신하고자하는 Host에서 어느 Port의 소켓으로 전송할 것 인지 정하고 전송 UDP의 특징 UDP가 TCP보다 빠르다 UDP가 TCP보다 빠른이유는 단지 이 두 가지 때문이다. 데이터 송수신 전/후에 하는 연결설정, 해제 과정이 없다. 데이터 송수신 과정에서 발생하는 신뢰성보장을 ..
TCP의 내부 동작 원리를 이해해보자 들어가며 이번 글에선 TCP에서 어떤 식으로 통신을 하길래 그렇게 신뢰 있게 통신되는지, 내부의 동작 원리를 공부해 본다. TCP의 동작원리 입/출력 버퍼 알다시피 TCP엔 데이터의 바운더리가 없다. Host1이 Host2에게 40바이트를 송신했는데 Host2가 10바이트씩 받는다면, 남은 30바이트는 어디에 있는 것일까? 네트워크상에 떠돌고 있는 걸까? 바로 입력버퍼로 들어가게 된다. TCP소켓엔 각각 입력, 출력 버퍼가 존재한다. send를 하면 출력버퍼에 있다가, 상대방의 입력버퍼에 들어가게 된다. 또한 recv를 할 시 자신의 입력 버퍼에 있는 데이터를 받아오게 된다. Q. 그럼 소켓을 닫았을 때 입/출력 버퍼에 남아있는 데이터는 어떻게 되나요? A. 출력버퍼에 있는 데이터는 계속해서 전송되지만,..
TCP/IP 프로토콜을 이해해보자 들어가며 인터넷을 통한 효율적인 데이터의 송수신 에 대한 회의를 통해 여러가지 프로토콜이 만들어졌고, 이것들은 계층구조를 통인해 상호간에 관계를 맞게되었다. 그것을 TCP/IP 프로토콜이라고한다. 이 프로토콜은 개방형 시스템이다. 개방형시스템이란? 표준을 감추는 것이 아닌 공개해 많은 사람들이 이것을 따르도록 하는 것을 말한다. 이로 인해 라우터 장비를 교체한다거나, 랜카드를 교체할 때 아무것도 신경쓰지 않고 타사 제품으로 교체할 수 있다. 모두 표준을 따르고 있기 때문이다. 계층 하나씩 살펴보기 TCP/IP 프로토콜 스택 TCP/IP프로토콜은 네 개로 계층화 되어있다. LINK계층, IP계층, 전송(TRANSPORT)계층, APPLICATION계층이다. 각 계층이 하는 일 다른 계층으로 나뉜 만큼 각 ..