컴퓨터 공학/네트워크

[네트워크] TCP 3 way handshake & 4 way handshake

highright96 2021. 11. 10.

프로토콜(Protocol)

컴퓨터와 네트워크 기기가 상호 간에 통신하기 위해서는 서로 같은 방법으로 통신해야 합니다. 예를 들면, 어떻게 상대를 찾고, 어떻게 상대에게 이야기하고, 어떠한 언어로 이야기를 하며, 어떻게 이야기를 종료할까 와 같은 규칙을 정할 필요가 있습니다. 이렇게 서로 다른 하드웨어와 운영체제를 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요한데, 이러한 규칙을 프로토콜이라고 합니다.

 

IP(Internet Protocol)

IP는 인터넷 환경에서의 통신 규약입니다. 패킷이라는 통신 단위로 데이터를 전달하며, 지정한 IP주소로 데이터를 전달합니다. 이때, 패킷을 받는 대상이 존재하는지, 패킷이 올바르게 전달됐는지 확인하지 않아 비 연결성과 비 신뢰성의 특징을 갖고 있습니다.

 

TCP(Transmission Control Protocol)

TCP는 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 연결 지향적 프로토콜입니다. 데이터를 전송하기 전에 3-way handshaking 과정을 통해 연결을 설정하면 통신 선로가 고정되고, 모든 데이터는 고정된 통신 선로를 통해서 전달됩니다. 또한, 클라이언트에서 데이터 전송이 끝나면 4-way handshaking 과정을 통해 데이터가 모두 전달됐는지 확인합니다. 따라서, TCP는 데이터를 정확하고 안정적으로 전달할 수 있어 높은 신뢰성을 보장한다는 특징을 갖고 있습니다.


TCP의 특징을 정리하면 다음과 같습니다.

1. 연결형 서비스로 가상 회선 방식을 제공한다.
2. 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking 과정을 통해 해제한다.
3. 흐름 제어 및 혼잡 제어.
4. 높은 신뢰성을 보장한다.
5. UDP보다 속도가 느리다.
6. 전이중(Full-Duplex), 점대점(Point to Point) 방식.

 

TCP/IP

TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP를 합쳐서 부르는 말입니다. TCP/IP를 사용하겠다는 것은 IP주소 체계를 따르며 TCP의 특성을 활용해 송 수신자의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하겠다는 것을 의미합니다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르는 것입니다.


TCP/IP에서 중요한 개념 중 하나가 계층(Layer)입니다. TCP/IP는 ‘애플리케이션 계층’, ‘트랜스포트 계층’, ‘네트워크 계층’, ‘링크 계층’ 이렇게 4 계층으로 나뉘어 있습니다.

애플리케이션 계층(Application Layer)

사용자와 가장 가까운 계층으로 사용자가 애플리케이션과 소통할 수 있게 해 주며, 애플리케이션끼리 정보를 주고받기 위해 사용됩니다.

대표적인 프로토콜로는 FTP, HTTP, SSH, Telnet, DNS, SMTP 등이 있으며, 브라우저와 웹 서버가 HTTP 요청 응답을 통해 통신하는 것을 예시로 들 수 있습니다.

 

트랜스포트 계층(Transport Layer)

사용자로부터 송신된 데이터를 수신 측 애플리케이션으로 전달하는 것을 도와줍니다.
대표적인 프로토콜로는 TCP, UDP, RTP, RTCP 등이 있습니다.

 

네트워크 계층(Network Layer 또는 Internet Layer)

IP주소를 바탕으로 수신 측까지 데이터를 전달하기 위해 사용됩니다.
대표적인 프로토콜로는 IP, ARP, ICMP, RARP, OSPF 등이 있습니다.

 

링크 계층(Link Layer 또는 Network Access Layer)

물리적 주소인 MAC 주소를 바탕으로 네트워크에 직접 연결된 기기 간의 데이터 전송을 도와줍니다.
대표적인 프로토콜로는 Ethernet, PPP, Token Ring 등이 있습니다.

 

TCP/IP 통신의 흐름

https://velog.io/@conatuseus/2019-09-10-2009-%EC%9E%91%EC%84%B1%EB%90%A8-xsk0ds2eqf

 

TCP/IP로 통신할 때 계층을 순서대로 거쳐 상대와 통신 합니다. 송신하는 측은 애플리케이션 계층에서부터 내려가고, 수신하는 측은 네트워크 계층부터 올라갑니다. 송신할 때는 각 계층을 통과하며 헤더에 필요한 정보가 추가되고, 수신할 때에는 계층마다 사용한 헤더가 삭제됩니다.


웹 브라우저에 www.google.com을 입력했을 때를 예시로 들어 계층마다 어떤 헤더 정보가 추가되는지 살펴보겠습니다. 이때, 계층별로 HTTP, TCP, IP, Ethernet 프로토콜을 사용한다고 가정하겠습니다. 

 

애플리케이션 계층(Application Layer)

웹 브라우저에 www.google.com을 입력하면 송신 측 클라이언트의 애플리케이션 계층(HTTP)에서 ‘어느 웹 페이지를 보고 싶다’라는 다음과 같은 HTTP Request를 지시하는데, 이때 위 그림처럼 HTTP 데이터가 생성됩니다.

 

 

 

트랜스포트 계층(Transport Layer)

애플리케이션 계층에서 생성된 HTTP 데이터는 트랜스포트 계층에 도착하면 TCP 세그먼트 단위로 잘게 나눠집니다. 나눠진 세그먼트마다 송 수신 측 포트 번호(Source port, Destination port)와 세그먼트의 순서(Sequence number)를 포함한 TCP 헤더가 추가됩니다.

 

수신 측에서는 TCP 헤더의 포트 번호로 송 수신 애플리케이션을 구별하고, 시퀀스 넘버로 세그먼트들을 재조립합니다.

 

 

네트워크 계층(Network Layer 또는 Internet Layer)

네트워크 계층에서는 트랜스포트 계층에서 생성된 TCP 세그먼트를 IP 패킷이라고 불리는 봉투에 담습니다. 이때, 추가된 IP 헤더에는 송 수신 측 IP주소가 담겨있습니다.

 

자신의 IP주소는 알지만, 아직 수신 측의 IP주소는 모릅니다. 하지만 www.google.com이라는 도메인 정보로 IP주소를 알아낼 수 있습니다. 이때, DNS 프로토콜을 사용합니다.

 

 

링크 계층(Link Layer 또는 Network Access Layer)

마지막으로 링크 계층에서는 물리 주소인 자신의 MAC 주소를 추가합니다. 이때, IP주소를 MAC 주소로 바꿔주는 ARP 프로토콜을 사용해 MAC 주소를 알아냅니다.

 

TCP 3-way handshake

TCP/IP 4 계층을 통과하며 수신 측으로 데이터를 보낼 준비가 완료됐습니다. 하지만 TCP는 데이터를 전송하기 전에 네트워크 연결을 설정하는 과정이 필요합니다. 이 과정을 3-way handshake라고 합니다.

 

3-way handshake를 수행하기 위해서는 TCP 헤더에 표시한 SYN과 ACK 플래그들이 사용됩니다.

 

우테톡 TCP/IP

 


1. 클라이언트는 서버에게 접속을 요청하는 SYN 플래그가 설정된 패킷을 보냅니다.
2. 이때 서버는 Listen 상태로 포트 서비스가 가능한 상태여야 합니다. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN 플래그가 설정된 패킷을 발송하고 응답을 기다립니다.
3. 클라이언트는 서버로부터 ACK와 SYN 플래그가 설정된 패킷을 받고 ACK 플래그가 설정된 패킷을 발송합니다.
4. 연결이 이루어지고 데이터가 오가게 됩니다.

 

추가로 알면 좋은 내용
현재 저장된 송신 측의 IP는 Private IP를 사용하고 있어 공유기를 통해 나가기 전에 NAT 작업을 통해 Public IP로 변환됩니다. 송신 측의 공유기를 거치고 나서, 구글 서버에 도착하기 위해 여러 라우터를 거쳐야 합니다. 이 과정을 라우팅이라고 합니다. 라우팅을 거쳐 구글(수신 측) 서버의 라우터까지 데이터가 도착하면 IP 헤더에 적힌 구글 서버의 IP주소로 MAC 주소를 요청한 후 물리적인 데이터 전송을 완료합니다.

 

TCP 4-way handshake

데이터 송 수신이 완료되면 TCP의 연결을 해제하는 과정이 필요합니다. 이 과정을 4-way handshake라고 합니다.


4-way handshake를 수행하기 위해서는 TCP 헤더에 표시한 ACK와 FIN 플래그들이 사용됩니다.

 

우테톡 TCP/IP

 

1. 클라이언트가 서버에게 연결을 종료하겠다는 FIN 플래그가 설정된 패킷을 보냅니다.
2. 서버는 확인했다고 알려주기 위해 ACK 플래그가 설정된 패킷을 보낸 후 자신의 통신이 끝날 때까지 기다립니다.(TIME_WAIT). 이때, 자신이 전송할 패킷이 남아있다면 이어서 전송합니다.
3. 서버의 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 클라이언트에게 FIN 플래그가 설정된 패킷을 보냅니다.
4. 클라이언트는 확인했다는 의미로 ACK 플래그가 설정된 패킷을 보냅니다.
5. 연결이 종료됩니다.

 

참고

 

예상 면접 질문 및 답변

링크 참고

'컴퓨터 공학 > 네트워크' 카테고리의 다른 글

[네트워크] Load Balancer  (2) 2021.12.07
[네트워크] DNS  (0) 2021.12.01
[네트워크] HTTP & HTTPS  (0) 2021.11.26
[네트워크] TCP/IP 흐름제어 & 혼잡제어  (0) 2021.11.17

댓글