인터넷 망 속에서 클라이언트와 서버 간에 통신 할수 있게 IP 주소와 패킷과 같은 규칙을 통해 통신을 하는 것
TCP (Transmission Control Protocol)
IP 규칙으로만 통신하기 부족하거나 불안정하던 여러단점들(패킷 순서가 이상하거나 패킷이 유실)을 커버해, 패킷 전송을 제어하여 신뢰성을 보증하는 프로토콜
은행 업무나 메일과 같은 반드시 수신자 정보를 받아야하는 신뢰성 있는 통신이 필요할때 사용.
신뢰성 프로토콜
통신을 시작할 때와 종료할 때 서로 준비가 되어 있는지 반드시 미리 물어보고 패킷을 전송할 순서를 정하고 나서야 본격적인 통신을 시작한다.
이러한 과정을 3 Way HandShake 4 Way HandShake 과정이라한다.
3 Way 는 통신을 시작할때
4 Way는 통신을 마칠때 거치는 과정
한번 통신할때 handshake를 두번 해서 신뢰성을 보장한다.
패킷 내부에 들어있는 인증 플래그 값들을 확인하여 클라이언트와 서버가 서로 보낸 패킷의 순서와 패킷을 제대로 받았는 지를 검증한다.
Flag 종류
Flag
내용
SYN
- 접속요청을 할 때 보내는 패킷
- TCP 접속시에 가장먼저 보내는 패킷이다.
ACK
- 상대방으로 부터 패킷을 받은 뒤에, 잘 받았다고 알려주는 패킷
- 다른 플래그와 같이 출력되는 경우도 있다.
PSH
데이터를 즉시 목적지로 보내라는 의미
FIN
접속종료를 위한 플래그
이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 접속을 끊고자 할때 사용된다.
handshake
3-way handshake 과정
클라이언트는 접속을 요청하는 SYN 패킷을 보낸다. 이때 클라이언트 응답을 기다리기 위해 SYN_SENT 상태로 변한다.
LISTEN 상태였던 서버는 SYN 요청을 받으면, 클라이언트에게 요청을 수락하는 ACK 패킷SYN 패킷을 보낸다. (서버도 클라이어ㄴ트에 접속해야 양방향 통신이 되기 때문) 그리고 SYN_RCVD(SYN_Received)상태로 변하여 클라이언트가 ACK 패킷을 보낼때 까지 기다리게 된다.
클라이언트는 다시 서버에 ACK 패킷을 보내고, 이 후 ESTABLISHED 상태가 되어 데이터 통신이 가능하게 된다.
데이터 통신 과정
ESTABLISHED 된 상태에서 서버에게 데이터를 보낸다.
서버는 잘 전송받았다고 ACK 플래그를 넣어 응답한다.
만약 클라이언트가 서버로 부터 ACK를 못받았으면 제대로 송신하지 못한걸로 판단하고 데이터를 재전송한다.
4-way handshake 과정
서버와 클라이언트가 TCP 연결이 되어있는 상태에서 클라이언트가 접속을 끊기 위해 CLOSE() 함수를 호출한다. 그러면 FIN 플래그를 보내게 되고 클라이언트는 FIN_WAIT1 상태로 변한다.
서버는 클라이언트가 CLOSE() 한다는 것을 알게되고 CLOSE_WAIT 상태로 바꾼 후 ACK 플래그를 전송한다. 만일 서버에서 클라이언트로 보낼 남은 데이터가 있을 경우 이때 나머지를 모두 전송시킨다.
ACK를 받은 클라이언트는 FIN_WAIT2로 변환되고, 이때 서버는 CLOSE() 함수를 호 출하고 FIN 플래그를 클라이언트에게 보낸다.
서버도 연결을 닫았다는 신호를 클라이언트가 수신하면 ACK 플래그를 보낸후 TIME_WAIT상태로 전환된다. 이 후 모든것이 끝나면 CLOSED 상태로 변환된다.
TCP 란?
IP
인터넷 망 속에서 클라이언트와 서버 간에 통신 할수 있게 IP 주소와 패킷과 같은 규칙을 통해 통신을 하는 것
TCP (Transmission Control Protocol)
IP 규칙으로만 통신하기 부족하거나 불안정하던 여러단점들(패킷 순서가 이상하거나 패킷이 유실)을 커버해, 패킷 전송을 제어하여 신뢰성을 보증하는 프로토콜 은행 업무나 메일과 같은 반드시 수신자 정보를 받아야하는 신뢰성 있는 통신이 필요할때 사용.
신뢰성 프로토콜
통신을 시작할 때와 종료할 때 서로 준비가 되어 있는지 반드시 미리 물어보고 패킷을 전송할 순서를 정하고 나서야 본격적인 통신을 시작한다.
이러한 과정을 3 Way HandShake 4 Way HandShake 과정이라한다.
3 Way 는 통신을 시작할때 4 Way는 통신을 마칠때 거치는 과정
한번 통신할때 handshake를 두번 해서 신뢰성을 보장한다.
패킷 내부에 들어있는 인증 플래그 값들을 확인하여 클라이언트와 서버가 서로 보낸 패킷의 순서와 패킷을 제대로 받았는 지를 검증한다.
Flag 종류
- 접속요청을 할 때 보내는 패킷
- TCP 접속시에 가장먼저 보내는 패킷이다.
- 상대방으로 부터 패킷을 받은 뒤에, 잘 받았다고 알려주는 패킷
- 다른 플래그와 같이 출력되는 경우도 있다.
접속종료를 위한 플래그
이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 접속을 끊고자 할때 사용된다.
handshake
3-way handshake 과정
데이터 통신 과정
4-way handshake 과정