● 오늘 배운 것
- OSI의 7계층
OSI의 7계층은 응용계층, 표현계층, 세션계층, 전송계층, 네트워크 계층, 데이터링크계층, 물리계층으로 이루어집니다. 만약 사용자가 웹사이트에 방문했을 때를 가정해보겠습니다.
웹사이트에 방문을 한다면, 응용계층에서 HTTP를 사용하여 요청을보냅니다. (request) 보내고나면 전송계층으로 내려와 3-way 핸드셰이크 과정이 이루어집니다. 전송계층에서는 포트번호가 적힌 TCP헤더가 데이터 앞에 붙게 되고, 이런 데이터를 세그먼트라고 합니다.
핸드셰이크 과정 중에서 데이터를 패킷으로 전달해야하는데, 상대방의 버퍼의 크기가 얼만큼 되는지 알기위해서는 3-way 셰이크 과정 속에서 TCP헤더의 윈도우 크기를 주고받으면서 서로 윈도우의 크기가 얼만큼 큰지 알게 됩니다.
다음 네트워크 계층으로 내려와 이 패킷들을 어디에 보낼지 전송계층에서 전달받은 데이터 앞에 헤더를 붙이게되는데, 이를 IP헤더라고 합니다. 그리고 이런 데이터를 IP패킷이라고 합니다. 그 다음 데이터 링크계층으로 내려오게 됩니다.
데이터 링크 계층은 MAC주소를 붙여서 보내게 됩니다. 데이터 앞에 붙여지는 걸 이더넷 헤더라고 합니다. 뒤에는 트레일러라는게 붙게됩니다. 컴퓨터는 1과 0이라는 숫자밖에 읽지 못하기때문에, 여러 패킷들들을 이어서 전송을 했을때, 어디부터 어디까지가 하나의 패킷인지 모르기때문에 이를 구분하는게 이더넷 헤더와 트레일러가 됩니다. 이런 데이터를 프레임이라고 하게 됩니다.
물리계층으로 내려와서 1과 0이라는 숫자를 아날로그 신호로 변환하게 됩니다. 그리고 상대방의 물리계층으로 보내지게 됩니다.
그러고 나서 다시 서버의 물리계층에서 아날로그 신호를 1과 0이라는 숫자로 변환하게되고, 앞의 헤더들을 하나씩 제거해가면서 (역캡술화) 맨 마지막에 응용계층에서는 데이터만 전달받을 수 있게 됩니다.
- TCP/UDP
TCP/UDP라는 개념은 전송계층에서 이뤄지는 개념인데, TCP같은 경우는 목적지로 패킷을 전달할 때 제대로 전달할 수 있는 방법이기때문에 신뢰성과 정확성이 높습니다. 하지만 UDP는 TCP라는 개념보다는 신뢰성이 떨어지지만 전달되는 속도가 빠르다는 점이 있습니다.(효율성) TCP같은경우 3-way-shaking 과정이 이루어지기 때문에, 전달하기 이전에 송신자와 수신자의 연결을 약속하고, 패킷이 제대로 전달되었는지 확인할 수 있습니다. 또한 제대로 전달이 되지 않았다면 다시 재전송할 수 있습니다. 하지만 한번 연결이 끊기게되면 다시 3-way-shaking을 해야한다는 비효율적인면이 있었습니다. 따라서 HTTP 1.1버전부터는 Keep Alive 속성을 통해 완전히 패킷을 주고받지 않을때까지 연결을 유지할 수 있게 되었습니다. 하지만 연결이 끊긴다면 다시 3-way-shaking을 해야하긴 합니다.
- HTTPS
https란 http에 s만 붙은것인데, s는 secure를 뜻합니다. 즉, 기존 http 프로토콜을 좀 더 안전하게 사용할 수 있게됩니다. 우리는 request와 response를 하면서 개발자도구로 헤더에 무엇이 있는지 데이터를 직접적으로 접근해 볼 수 있습니다. https같은 경우, 서버와 클라이언트가 주고받는 데이터들을 암호화해주기 때문에 좀 더 안전하게 통신할 수 있게 됩니다.
그렇다면 어떤 로직으로 HTTPS는 작동할까요?
먼저 클라이언트가 서버에게 요청을 하게 된다면, 서버는 CA(certificate Authority)라는 기관에게 서버 공개키를 주면서 인증서를 요구하게 됩니다. 여기서 CA기관은 서버의 신원을 인증해주는 기관이라고 생각하면됩니다. 그러면 CA는 서버에게 공캐키가 암호화된 인증서를 건네주게되고, 서버는 클라이언트에게 인증서를 보내주게 됩니다.
클라이언트는 브라우저에 등록되어있는 CA의 리스트들을 확인합니다. 리스트에는 공개키가 내장되어있습니다. 해당하는 CA 공개키를 가져와서 인증서를 복호화합니다. 그러고 난 뒤, 서버의 공개키를 얻음으로써, 서버를 신뢰할 수 있습니다.
그뒤, 클라이언트는 대칭키를 만드는데요, 이 대칭키를 서버 공캐키로 암호화하여 서버에게 전송합니다. 그리고 난 뒤 서버는 서버 비밀키로 복호화해, 대칭키를 얻습니다.
그 이후, 클라이언트와 서버는 대칭키를 통해 데이터를 주고 받게 됩니다. (암호화 < = > 복호화)
● 수업 이외에 공부한 것
- node.js
- express
- mongodb
- 네트워크 책 읽기
- 알고리즘 6문제 풀기