[네트워크] TCP 3 way handshake & 4 way handshake
cs-study에서 스터디를 진행하고 있습니다.
프로토콜 (Protocol)
컴퓨터와 네트워크 기기가 상호 간에 통신하기 위해서는 서로 같은 방법으로 통신해야 한다. 예를 들면, 어떻게 상대를 찾고 어떻게 상대에게 이야기하고 어떠한 언어로 이야기를 하며 어떻게 이야기를 종료할까 등과 같은 규칙을 정해야 한다. 이렇게 서로 다른 하드웨어와 운영체제를 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요한데, 이러한 규칙을 프로토콜이라고 한다.
IP (Internet Protocol)
IP는 인터넷 환경에서의 통신 규악이다. 패킷이라는 통신 단위로 데이터를 전달하며, 지정한 IP 주소로 데이터를 전달한다. 이때, 패킷을 받는 대상이 존재하는지, 패킷이 올바르게 전달됐는지 확인하지 않아서 비연결성, 비신뢰성이라는 특징이 있다.
TCP (Transmission Control Protocol)
TCP는 클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 연결 지향적 프로토콜이다. 데이터를 전송하기 전에 3-way handshaking 과정을 통해 연결을 설정하면 통신 선로가 고정되고, 모든 데이터는 고정된 통신 선로를 통해서 전달된다. 또한, 클라이언트에서 데이터 전송이 끝나면 4-way handshaking 과정을 통해 데이터가 모두 전달됐는지 확인한다. 따라서, TCP는 데이터를 정확하고 안정적으로 전달할 수 있어 높은 신뢰성을 보장한다는 특징이 있다.
아래는 TCP의 특징이다.
- 연결형 서비스로 가상 회선 방식을 제공한다.
- 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking 과정을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성을 보장.
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
TCP/IP
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP를 합쳐서 부르는 말이다 TCP/IP를 사용하겠다는 것은 IP 주소 체계를 따르며, TCP의 특성을 활용해 송 수신자의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하겠다는 것을 의미한다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP라고 부른다.
TCP/IP에서 중요한 개념 중 하나가 계층인데, TCP/IP는 애플리케이션 계층, 트랜스포트 계층, 네트워크 계층, 링크 계층 이렇게 4 계층으로 나뉘어 있다.
애플리케이션 계층
사용자와 가장 가까운 계층으로, 사용자가 애플리케이션과 소통할 수 있게 해 주며 애플리케이션끼리 정보를 주고 받기 위해 사용된다. 대표적인 프로토콜로는 FTP, HTTP, SSH, Telnet, DNS, SMTP 등이 있으며, 브라우저와 웹 서버가 HTTP 요청 응답을 통해 통신하는 것을 예시로 들 수 있다.
트랜스포트 계층
사용자로부터 송신된 데이터를 수신 측 애플리케이션으로 전달하는 것을 도와준다. 대표적인 프로토콜로는 TCP, UDP, RTP, RTCP 등이 있다.
네트워크 계층
IP 주소를 바탕으로 수신 측까지 데이터를 전달하기 위해 사용된다. 대표적인 프로토콜로는 IP, ARP, ICMP, RARP, OSRF 등이 있다.
링크 계층
물리적 주소인 MAC 주소를 바탕으로 네트워크에 직접 연결된 기기 간의 데이터 전송을 도와준다. 대표적인 프로토콜로는 Ethernet, PPP, Token Ring 등이 있다.
TCP/IP가 계층화 된 이유
- 변경에 자유롭다. 만약, 인터넷이 하나의 프로토콜로 되어 있으면 어디선가 사양이 변경되었을 때 전체를 바꿔야 하지만, 계층화되어 있으면 사양이 변경된 계층만 바꾸면 된다.
- 설계를 편하게 할 수 있다. 애플리케이션 층에서 애플리케이션은 자기 자신이 담당하는 부분을 고려하면 되고, 상대가 어디있는지, 어떠한 루트로 메시지를 전달하는지, 전달한 메시지가 확실하게 전달되고 있는지와 같은 고려는 하지 않아도 된다.
TCP/IP 통신의 흐름
TCP/IP로 통신할 때 계층을 순서대로 거쳐 상대와 통신한다. 송신하는 측은 애플리케이션 계층부터 내려가고, 수신하는 측은 네트워크 계층부터 올라간다. 송신할 때는 각 계층을 통과하며 헤더에 필요한 정보가 추가되고, 수신할 때는 계층마다 사용한 헤더가 삭제된다.
웹 브라우저에 'www.google.com'을 입력했을 때를 예시로 들어 계층마다 어떤 헤더 정보가 추가되는지 살펴보자. 이때, 계층 별로 HTTP, TCP, IP, Ethernet 프로토콜을 사용한다고 가정한다.
- 애플리케이션 계층
웹 브라우저에 'www.google.com'을 입력하면 송신 측 클라이언트의 애플리케이션 계층에서 '어느 웹 페이지를 보고 싶다'라는 다음과 같은 HTTP Request를 지시하는데, 이때 아래 그림처럼 HTTP 데이터가 생성된다.
- 트랜스포트 계층
애플리케이션 계층에서 생성된 HTTP 데이터는 트랜스포트 계층에 도착하면, TCP 세그먼트 단위로 잘게 나뉘어 진다. 나뉘어진 세그먼트마다 송 수신 측 포트 번호 (Source port, Destination port)와 세그먼트의 순서(Sequence number)를 포함한 TCP 헤더가 추가된다. 수신 측에서는 TCP 헤더의 포트 번호로 송 수신 애플리케이션을 구별하고 시퀀스 넘버로 세그먼트들을 재조립한다.
- 네트워크 계층
네트워크 계층에서는 트랜스포트 계층에서 생성된 TCP 세그먼트를 IP 패킷이라고 불리는 봉투에 담는다. 이때, 추가된 IP 헤더에는 송 수신 측 IP 주소가 담겨 있다. 자신의 IP 주소는 알지만, 아직 수신 측의 IP 주소는 모른다. 하지만 'www.google.com'이라는 도메인 정보로 IP 주소를 알아낼 수 있는데, 이때 DNS 프로토콜을 사용한다.
- 링크 계층
마지막으로 링크 계층에서는 물리 주소인 자신의 MAC 주소를 추가한다. 이때, IP 주소를 MAC 주소로 바꿔주는 ARP 프로토콜을 사용해 MAC 주소를 알아 낸다.
TCP 3-way handshake
TCP/IP 4 계층을 통과하며 수신 측으로 데이터를 보낼 준비가 완료되었다. 하지만, TCP는 데이터를 전송하기 전에 네트워크 연결을 설정하는 과정이 필요한데, 이 과정을 3-way handshake라고 한다.
3-way handshake를 수행하기 위해서는 TCP 헤더에 표시한 SYN과 ACK 플래그들이 사용된다.
- 클라이언트는 서버에게 접속을 요청하는 SYN 플래그가 설정된 패킷을 보낸다.
- 이때 서버는 Listen 상태로 포트 서비스가 가능한 상태이어야 한다. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK과 SYN 플래그가 설정된 패킷을 발송하고 응답을 기다린다.
- 클라이언트는 서버로부터 ACK과 SYN 플래그가 설정된 패킷을 받고 ACK 플래그가 설정된 패킷을 발송한다.
- 연결이 이루어지고 데이터가 오가게 된다.
추가로 알면 좋은 내용
현재 저장된 송신 측의 IP는 Private IP를 사용하고 있어 공유기를 통해 나가기 전에 NAT 작업을 통해 Public IP로 변환된다. 송신 측의 공유기를 거치고 나서, 구글 서버에 도착하기 위해 여러 라우터를 거쳐야 하는데, 이 과정을 라우팅이라고 한다. 라우팅을 거쳐 구글(수신 측) 서버의 라우터까지 데이터가 도착하면 IP 헤더에 적힌 구글 서버의 IP주소로 MAC 주소를 요청한 후 물리적인 데이터 전송을 완료한다.
TCP 4-way handshake
데이터 송 수신이 완료되면 TCP의 연결을 해제하는 과정이 필요하다. 이 과정을 4-way handshake라고 한다.
4-way handshake를 수행하기 위해서는 TCP 헤더에 표시한 ACK와 FIN 플래그들이 사용된다.
- 클라이언트가 서버에게 연결을 종료하겠다는 FIN 플래그가 설정된 패킷을 보낸다.
- 서버는 확인했다고 알려주기 위해 ACK 플래그가 설정된 패킷을 보낸 후, 자신의 통신이 끝날 때까지 기다린다. (TIME_WAIT) 이때 자신이 전송할 패킷이 남아있다면 이어서 전송한다.
- 서버의 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 클라이언트에게 FIN 플래그가 설정된 패킷을 보낸다.
- 클라이언트는 확인했다는 의미로 ACK 플래그가 설정된 패킷을 보낸다.
- 연결이 종료된다.
예상 질문 & 답변
TCP/IP란?
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP를 합쳐서 부르는 말이다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP라 부른다.
TCP란?
TCP는 클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 연결 지향적 프로토콜이다.
TCP의 특징은?
연결형 서비스로 가상 회선 방식을 제공하며, 3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking 과정을 통해 연결을 해제하기 때문에 정확하고 안정적으로 데이터를 전달할 수 있다는 특징이 있다.
TCP/IP 4계층이란?
TCP/IP는 애플리케이션 계층, 트랜스포트 계층, 네트워크 계층, 링크 계층으로 이루어져 있다. 애플리케이션 계층은 애플리케이션끼리 주고 받을 데이터를 생성하고, 트랜스포트 계층은 수신 측 애플리케이션으로 전달하는 것을 도와주며, 네트워크 계층은 IP 주소를 바탕으로 수신 측까지 데이터를 전달하는 것을 도와준다. 마지막으로 링크 계층은 물리적 주소인 MAC 주소를 바탕으로 네트워크에 직접 연결된 기기 간의 데이터 전송을 도와준다.
TCP/IP 통신의 흐름을 설명하라. (ex. 웹 브라우저에 'www.google.com'을 입력한 경우
본문을 참고할 것.
3-way handshaking이란?
TCP/IP 4 계층을 통과하며 데이터를 보낼 준비가 되면 수신 측이 받을 준비가 되었는지 확인하는 과정을 3-way handshaking이라고 한다.
3-way handshaking의 과정
본문을 참고할 것.
4-way handshaking이란?
데이터 송 수신이 완료된 후 TCP의 연결을 해제하는 과정을 4-way handshake라고 한다.
4-way handshaking의 과정
본문을 참고할 것.
'스터디 > CS 스터디' 카테고리의 다른 글
[네트워크] TCP/IP 흐름 제어 & 혼잡 제어 (0) | 2021.11.18 |
---|---|
[네트워크] HTTP & HTTPS (0) | 2021.11.18 |
[네트워크] OSI 7 계층 (1) | 2021.11.13 |
[운영체제] PCB & Context Switching (1) | 2021.11.13 |
[운영체제] 프로세스 & 스레드 (0) | 2021.11.13 |
댓글