728x90

 

 

 

호스트는 IP 데이터그램을 수신하게 된다. 각 데이터그램에는 source IP address, destination IP address가 있다. 그리고 각 데이터그램은 한개의 트렌스포트 레이어 segment를 운반하고 있다. 즉 데이터 필드에 담아서 오게 되는 것이다. segment는 위의 그림입니다. 그리고 각 segment에는 source와 destination port number를 갖고있다. 

호스트는 IP address port number 사용해서 segment 적절한 소켓으로 전달하게 된다. 작업을 역다중화 라고 부른다. 얘기는 역다중화를 IP address port number 구분자 구실을 하는 것이다. 그래서 IP address port number 따라서 전달되는 소켓이 달라지는 얘기이다. 

728x90

 

multiplexing은 다중화 라고 한다. 다중화는 여러 흐름이 있을 때 그 흐름들을 하나의 묶음으로 처리 해주는 것이 다중화이다.

demultiplexing은 역다중화라고 한다. 역다중화는 하나의 흐름으로 묶여서 multiplexing해서 온 흐름을 다시 나누어 주는 것이 역다중화이다.

 

그러면 컴퓨터네트워크에서 얘기하는 다중화와 역다중화가 프로토콜에서는 어떤 의미를 갖는지 알아볼 것이다. 

 

먼저 각각의 호스트에 어플리케이션 레이어가 있다. 어플리케이션과 스렌스포트 레이어 사이에 있는 것은 “문”역할을 하는 소켓이다. 어플리케이션 안에 있는 하늘색 동그란 것들이 프로세스인데, 이 프로세스가 트렌스포트 레이어에 있는 프로토콜로 통신을 할 때 통로 역할을 하는 것이 소켓이다. 그래서 어플리케이션 프로세스는 소켓에 메시지를 전달하고 소켓을 통해서 트렌스포트 레이어에 있는 프로토콜은 메시지를 전달받아서 segment로 만드는 작업을 하게된다.  위 그림은 P1,2,3,4 다 서로 통신을 하고 있는 그림이다. 

다중화가 어디서 일어나나면,  p1와 p2 각각 가지고 있는 소켓으로 부터 나온 흐름이 오른쪽 왼쪽으로 처리해준다.(그림상으로), 트렌스포트 레이어(중간에 있는 빨간 동그라미)에서 처리해주는 프로토콜이 동일한 프로토콜이면 다중화가 이루어졌다고 얘기한다.  왜냐하면 두개의 흐름으로 하나의 흐름으로 처리가 되기 때문이다.  그래서 보내는 사람(sender)입장에서 다중화가 일어나게 되는데 multiple socket을 다루는 것이고 여기에 트렌스포트 헤더를 붙여준다. 즉 encapsulation 하는 것이다.

그림을 보면, P1, P2는 자기가 사용하는 소켓을 통해서 트렌스포트 레이어로 내려졌고 여기 레이어에 있는 프로토콜에서 트렌스포트 헤더를 붙여서 하나의 흐름으로 만드는 것이다. 이렇게 처리하는 것이 다중화이다. 

 

역다중화는 P3 P4 응답을 해서 segment 전송을 해준다. 그렇게 되면 트렌스포트 레이어에 있는 프로토콜에 두개가 도착하고 각각 P1 P2에게 나눠주게 된다. 헤더에 있는 정보를 사용해서 수신된 segment 적절한 소켓에다가 분배해주는 것이 송신자 입장에서 역다중화가 일어났다 라고 한다.

728x90

 

Session

  • 세션데이터는 쿠키 안에 저장되지 않고 세션ID만 저장하고, 세션데이터는 서버사이드에 저장된다.
  • 서버쪽의 기본 세션 공강인 MemoryStore는 제품 환경을 위해 안만들어 졌고 대부분의 조건에서 메모리 부족 현상이 있을 것 이므로 싱글프로세스를 커버하지 못한다. 그래서 디버깅이나 개발요인 의미이다. 저장공간을 할 때 redis 같은 저장공간이 따로 필요하다

 

Express-session

요청마다 개인의 저장 공간을 만들어준다.

 

밑은 기본 설정 값이다.

 { 

     path: ‘/’, 

     httpOnly: true, 

     secure: false, 

     maxAge: null 

}

 

app.use(session());을 하면 “req.session”이 생긴다. 특별히 아이디같은 것을 정해 줄 필요없이 그 사용자에 대한 고유한 세션이 된다. 그래서 예를 들어 req.session.id = ‘hello’ 를 하면 모든 사용자의 아이디가 다 hello가 되는것이 아니라 그 사용자에 대한 아이디가 hello가 되는 것이다. 

 

 

세션 쿠키 설정

 

session에는 다양한 옵션들이 있다.

 

  • Resave: 요청이 왔을 때 세션에 수정사항이 생기지 않아도 다시 저장할지 여부
  • saveUninitialized: 세션에 저장할 내역이 없더라도 세션을 저장할지
  • Secret: 쿠키 암호화.
  • Cookie: session 일때는 항상 session-cookie를 쓴다. 그 session-cookie에 대한 설정을 여기다가 하는 것이다.
  • httpOnly: 이것은 항상 true로 해 둬야 javascript로 부터 공격받지 않는다.
  • secure: 만약 secure가 설정되면, 당신이 http로 사이트를 접근할 때, 쿠키는 설정되지 않는다. 만약 당신이 proxy뒤에 nodejs를 돌리고 있고, secure: true 라면 express 안에 'trust proxy'를 설정해야한다.
  • Name: 기본적으로 default 값으로 “connect.sid”로 되어있는데 바꿔도 무방하다.[1]

req.session.name = '~~~';  // 세션 등록

req.sessionID;  // 세션 아이디 확인

req.session.destroy();  // 세션 모두 제거

'프레임워크 > Node.js' 카테고리의 다른 글

알아둬야 할 HTTP 응답 헤더  (0) 2021.06.25

+ Recent posts