TCP : Transmission Control Protocol
인터넷을 통한 컴퓨터와 컴퓨터간의 원활한 통신을 가능하게 하도록 하는 통신규약 (protocol)이다.
TCP를 알지는 못하지만, 한 번은 들어본 적이 있다.
🧐 어디서? ❗️Browser 작동 방식에서❗️
Browser 작동방식에 대한 포스팅도 있으니 다들 구경 한 번 가세요. [포스팅 링크]
1️⃣ 3way handShake로 연결한다.
2️⃣ 4way handShake로 해제한다.
3way handshake 은 client 와 server가 통신하기전에 서로 연결을 확인하기 위한 과정이다.
3way handshake 는 TCP socket을 열기 위해 3가지 step으로 진행한다.
1️⃣ client는 server에 접속을 요청하는 SYN packet을 보낸다.
client 는 이제 SYN/ACK 응답을 기다리는 SYN_SENT상태가 된다.
2️⃣ server는 Listen 상태로 SYN 요청을 받고 client에게 요청을 수락한다는 ACK 와 SYN flag가 포함된 packet을 발송한다.
그리고, 다시 client가 ACK로 응답하기를 기다린다.
이때의 server는 SYN_RECEIVED상태이다.
3️⃣ client는 server에 다시 ACK를 보내고, data를 주고 받을 수 있는 상태가 된다.
👍 pros
👎 cons
위의 3way handshake에서 2️⃣ 단계에 server가 client의 응답을 기다릴때, 없는 client의 IP로 1️⃣ 단계 요청을 많이 보내 백로그 큐를 포화상태로 만들어 사용자의 요청을 받지 못하게 하는 공격이다.
💡 solution
TCP의 연결 해제를 위한 과정.
1️⃣ client 에서 server로 연결을 종료를 요청하며 FIN flag를 전송한다. (아직은 연결된 상태)
2️⃣ server에서 확인 메세지를 보내고, 통신이 끝날 때까지 기다린다.(만약 전송해야 할 data가 있다면 마저 전송한다.)
3️⃣ server에서 client로 연결종료를 동의한다는 의미로 FIN flag를 전송한다.
4️⃣ client가 확인했다는 메시지를 전송한다.