TCP 과 3way handShake

HeeJin.log·2021년 8월 11일
0

 🗃지식 상자

목록 보기
8/13
post-thumbnail

📍 TCP가 뭔데?

TCP : Transmission Control Protocol

인터넷을 통한 컴퓨터와 컴퓨터간의 원활한 통신을 가능하게 하도록 하는 통신규약 (protocol)이다.

TCP를 알지는 못하지만, 한 번은 들어본 적이 있다.

🧐 어디서? ❗️Browser 작동 방식에서❗️

Browser 작동방식에 대한 포스팅도 있으니 다들 구경 한 번 가세요. [포스팅 링크]

1️⃣ 3way handShake로 연결한다.
2️⃣ 4way handShake로 해제한다.

❓왜 TCP 통신을 해야 할까❓

  • application 간의 신뢰를 할 수 있다.
  • 오류를 체크하고 전송할 수 있다.

🤝 3way handshake

3way handshake 은 client 와 server가 통신하기전에 서로 연결을 확인하기 위한 과정이다.

3way handshake 는 TCP socket을 열기 위해 3가지 step으로 진행한다.

1️⃣ clientserver에 접속을 요청하는 SYN packet을 보낸다.
client 는 이제 SYN/ACK 응답을 기다리는 SYN_SENT상태가 된다.

2️⃣ serverListen 상태로 SYN 요청을 받고 client에게 요청을 수락한다는 ACKSYN flag가 포함된 packet을 발송한다.
그리고, 다시 clientACK로 응답하기를 기다린다.
이때의 serverSYN_RECEIVED상태이다.

3️⃣ clientserver에 다시 ACK를 보내고, data를 주고 받을 수 있는 상태가 된다.

👍 pros and 👎cons

👍 pros

  • 신뢰도가 높다.
  • 용량이크고, 실시간 통신이 필요하지 않을때 효율이 좋다.

👎 cons

  • 느리다!! (실시간 스트리밍등의 서비스에서 지연이 일어나 불편함이 생긴다 => UDP protocol 사용)
  • SYN Flooding방식으로 서버가 공격 당할 수 있다.

💻 SYN Flooding

위의 3way handshake에서 2️⃣ 단계에 serverclient의 응답을 기다릴때, 없는 clientIP로 1️⃣ 단계 요청을 많이 보내 백로그 큐를 포화상태로 만들어 사용자의 요청을 받지 못하게 하는 공격이다.

💡 solution

  1. 다음 단계로의 연결시간을 짧게 만든다.
  2. 백로그 큐의 사이즈를 늘린다.
  3. 쿠키🍪 를 이용하여 전체연결 전에 할당을 연기한다.

🙌 4way handshake

TCP의 연결 해제를 위한 과정.

1️⃣ client 에서 server로 연결을 종료를 요청하며 FIN flag를 전송한다. (아직은 연결된 상태)

2️⃣ server에서 확인 메세지를 보내고, 통신이 끝날 때까지 기다린다.(만약 전송해야 할 data가 있다면 마저 전송한다.)

3️⃣ server에서 client로 연결종료를 동의한다는 의미로 FIN flag를 전송한다.

4️⃣ client가 확인했다는 메시지를 전송한다.

참고한 자료들

0개의 댓글