차분히 하나씩 정리해 보자.
www.naver.com을 입력하면 발생하는 일에 대해서 정리해야 한다.
→ 주소창에 입력하면,
→ 주소는 DNS에 의해서 IP를 찾아내게 된다.
→ DNS는 먼저 컴퓨터의 캐쉬를 확인하게 되고, 브라우저, OS, 라우터, ISP 순서대로 도메인을 찾아내게 된다.
→ TCP 연결을 시도한다.
→ TCP연결에서는 3way handshake라는 과정이 들어간다.
3way handshake
TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에
먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
클라이언트와 서버에서 SYN(synchronize sequence numbers)와 ACK(acknowledgment) 패킷을 주고 받으며 서로 TCP 연결을 맺는 과정.
[STEP 1]
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
[STEP 2]
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
[STEP 3]
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.
위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식
→ 이렇게 서로 연결된 TCP연결 위에 HTTP라는 프로토콜 형식으로 Request를 보내게 된다.
→ 인터넷을 통해서 서버에 Get, Post 등 Request가 전달 된다. (헤더나 바디에 정보가 포함 될 수 있음)
→ 서버는 요청을 받아들이고(헤더, 바디에 포함된 정보(데이터))를 로직에 따라 응답을 반환
→ 서버는 요청이 정상이면 2xx대, 클라이언트의 잘못된 요청은 4xx대, 서버의 문제인 경우 5xx대 HTTP Status code를 반환하면서 값을 클라이언트로 전달해준다.
→ 클라이언트는 HTML는 DOM트리로 파싱, CSS는 CSSOM트리로 파싱되고 렌더 트리를 만들게 되고JavaScript는 브라우저의 V8엔진이란 곳에서 해석이되고, JS코드가 렌더트리에 붙게 되면서 동작이 완료 된다.
→ 이후 연결이 성립되었으니 4way handshake로 연결을 종료시키는 과정이 진행된다.
TCP의 4-way Handshaking 과정
[STEP 1]
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
[STEP 2]
서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.
[STEP 3]
서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
[STEP 4]
클라이언트는 확인했다는 메시지를 보낸다.
정리하고 배워야 할 네트워크 CS 개념들 나올 수 있는 키워드들..
추가적으로 하나씩 개념들을 정리해두어야 한다.
위는 전반적인 흐름만 정리했고, 아래 키워드마다 개념을 정리해두어야 겠다.
DNS
OSI 7계층
3way handshake, 4way handshake
TCP/UDP의 차이
TCP/IP 동작 방식, 무결성 검사 방식
SSL, TLS, 대칭키, 공개키
HTTP, HTTPS
HTTP Status
REST API