IP의 단점
- 데이터 전달이 제대로 안 이루어질 수 있다.
- 데이터를 보내기만 하고 잘 전달됐는지 확인할 수 없다.
- 라우팅 과정에 패킷이 버려질 수 있다.
- framing이 제대로 안 이루어져 데이터가 손상될 수 있다.
이러한 단점들을 보안하기 위해 만들어진 프로토콜이 TCP이다.
TCP(Transmission Control Protocol)
TCP는 Connection-Oriented 커넥션 지향 프로토콜이다. 즉, 어플리케이션 소통이 끝날 때까지 커넥션이 꺼지지 않는다.
TCP는 데이터가 잘 전달됐는지 확인한다. 그리고 제대로 전달이 안됐을 시 다시 보낸다.
TCP는 IP 패킷 내부에 존재한다.
3 way 핸드쉐이크 과정 (TCP 연결 과정)
1. (클라이언트 → 서버)Flag가 SYN(Syncronize)인 TCP를 보낸다.(Sequence 번호는 임의의 숫자)
2. (서버 → 클라이언트) SYN TCP에 대한 응답으로 Acknowledgment 번호를 담은 ACK(Acknowledgment) TCP를 보내고, 받은 Sequence 번호와 같은 번호로 SYN TCP 요청을 보낸다.
* ACK: TCP를 잘 전달 받았다는 의미의 TCP Flag이다.
* Acknowledgment 번호: 이후 SYN TCP의 Sequence 번호를 해당 번호로 받겠다는 의미.
3. (클라이언트 → 서버) 받은 Acknowledgment 번호로 Sequence 번호를 설정하여 ACK TCP로 다시 클라이언트 측에서 서버 측으로 보낸다.
Data 전송하기
1. (서버 → 클라이언트) 연결과정에서 Acknowledgment 번호로 주어진 번호를 Sequence 번호로 서버측에서 클라이언트 측으로 데이터와 함께 보낸다.
2. (클라이언트 → 서버) 클라이언트는 받았다는 응답을 ACK TCP로 (Sequence 번호 + data의 byte수)만큼의 Acknowledgment 번호를 담아 서버측으로 보낸다.
연결 종료하기
1. (서버 → 클라이언트) 이전에 ACK 에 담아 보냈던 Acknowledgment 번호를 Sequence 번호로 FIN Flag TCP를 보낸다.
2. (클라이언트 → 서버) FIN TCP를 받았으니 응답으로 ACK TCP를 보낸다(이 때 Acknowledgment 번호는 더 이상의 응답이 없을 것이므로 상관없다).
3. (클라이언트 → 서버) ACK TCP를 보냈으나 더 이상의 응답이 없으므로 FIN TCP를 보낸다. 아까 3 way 핸드쉐이크로 연결할 당시 클라이언트 측에서는 ACK TCP를 받았음에도 응답하지 않았으므로 Sequence 번호는 해당 Acknowledge 번호이다.
4. (서버 → 클라이언트) ACK TCP를 보내지만 서버 측에서 FIN TCP를 받았으므로 더 이상의 응답은 없다.
'네트워크' 카테고리의 다른 글
TLP(Transport Layer Protocol) - 1. 프로토콜과 포트 (0) | 2024.07.18 |
---|---|
DHCP(Dynamic Host Configuration Protocol) (0) | 2024.07.16 |
Private IP vs Public IP (4) | 2024.07.16 |
Internet Protocol - IPv4 (6) | 2024.07.16 |
패킷과 라우팅 (0) | 2024.07.12 |