승무_ 2023. 4. 6. 15:47

www.google.com에 접속할 때 생기는 과정에 대해 설명해주세요.

https://mangkyu.tistory.com/91

1. 먼저, 클라이언트는 웹 브라우저를 통해 www.google.com에 접속하려고 시도합니다.

2. 클라이언트는 DNS(Domain Name System) 서버에게 www.google.com의 IP 주소를 요청합니다. DNS 서버는 www.google.com의 도메인 이름을 IP 주소로 변환하여 클라이언트에게 응답합니다.

3. 클라이언트는 변환된 IP 주소를 사용하여 www.google.com 서버에 연결을 시도합니다. 이때, 클라이언트는 TCP(Transmission Control Protocol) 프로토콜을 사용하여 연결을 시도합니다.

4. www.google.com 서버는 클라이언트의 요청에 응답하고, HTTP(Hypertext Transfer Protocol) 프로토콜을 사용하여 클라이언트에게 요청한 웹 페이지의 데이터를 전송합니다.

5.클라이언트는 받은 데이터를 웹 브라우저를 통해 표시하고, 사용자는 웹 페이지를 볼 수 있게 됩니다.

 

TCP와 UDP의 차이

TCP는 신뢰성 있는 데이터 전송을 보장하는 연결형 프로토콜입니다. 데이터 전송 전에 3-way handshake라는 과정을 거쳐 클라이언트와 서버 간의 연결을 설정하고, 데이터 전송 후에는 ACK 패킷을 보내 에러 검사 및 데이터 수신 여부를 확인합니다. 이러한 방식으로 데이터를 전송함으로써, 데이터 손실이나 중복 전송을 방지하고, 데이터의 정확성과 일관성을 보장합니다. 하지만, 이러한 신뢰성 있는 데이터 전송을 위해 오버헤드가 발생하며, 전송 속도가 느리다는 단점이 있습니다.

반면, UDP는 비연결형 프로토콜로, 데이터 전송 전에 별도의 연결 설정 과정을 거치지 않습니다. 데이터를 전송할 때는 각 패킷에 대한 에러 검사만을 수행하며, 데이터 전송 후에는 수신 여부를 확인하지 않습니다. 이러한 방식으로, 데이터 전송 속도가 빠르고 오버헤드가 적습니다. 하지만, 데이터 손실이나 중복 전송 등의 문제가 발생할 수 있으며, 데이터의 정확성과 일관성을 보장하지 않습니다.

따라서, TCP는 파일 전송, 이메일 등 데이터의 정확성이 중요한 통신에 주로 사용되고, UDP는 동영상, 음성 등 실시간 스트리밍 서비스에 주로 사용됩니다.

 

3 way-handshake와 4 way-handshake

3-way handshake와 4-way handshake은 TCP 프로토콜에서 연결 설정과 해제를 위해 사용되는 과정입니다.

3-way handshake는 TCP 연결 설정 과정으로, 클라이언트와 서버 간의 연결을 설정하기 위해 사용됩니다. 이 과정은 다음과 같이 진행됩니다.

클라이언트는 SYN 패킷을 서버에 보냅니다. 이 패킷은 클라이언트가 연결을 시작하겠다는 것을 나타냅니다.
서버는 SYN 패킷을 받고, 수신할 준비가 되었다는 의미로 SYN+ACK 패킷을 클라이언트에 보냅니다.
클라이언트는 SYN+ACK 패킷을 받고, 수신할 준비가 되었다는 의미로 ACK 패킷을 서버에 보냅니다. 이로써 연결 설정 과정이 완료됩니다.

반대로 4-way handshake는 TCP 연결 해제 과정으로, 클라이언트와 서버 간의 연결을 해제하기 위해 사용됩니다. 이 과정은 다음과 같이 진행됩니다.

클라이언트는 연결을 종료하겠다는 FIN 패킷을 서버에 보냅니다.
서버는 FIN 패킷을 받고, 클라이언트로부터 받은 데이터를 모두 처리하였다는 의미로 ACK 패킷을 클라이언트에 보냅니다.
서버는 더 이상 보낼 데이터가 없다면, 연결을 종료하겠다는 FIN 패킷을 클라이언트에 보냅니다.
클라이언트는 FIN 패킷을 받고, 서버로부터 받은 데이터를 모두 처리하였다는 의미로 ACK 패킷을 서버에 보냅니다. 그리고 1~2분 정도 TIME_WAIT 상태를 유지했다가 연결 해제를 완료 합니다. 

여기서 TIME_WAIT을 하는 이유는 안정성을 보장하기 위해서 입니다. 서버 같은 경우 클라이언트를 IP와 PORT로만 구분 하는데 ACK을 보내자마자 연결을 바로 해제하면, 다음 연결시 동일한 PORT를 부여 받아 이전에 보낸 패킷에 영향받을 가능성이 생기기 때문에 TIME_WAIT 상태를 유지했다가 연결을 해제합니다.