TCP와 UDP

NETWORK

목록 보기
4/4
post-thumbnail

안녕하십니까 코딩 파인애플입니다
이번 시간에는 TCP와 UDP에 관해 알아보겠습니다.

🔒 TCP

Transmission Control Protocol


TCP는 컴퓨터들이 네트워크를 통해 데이터를 안전하고 정확하게 주고받기 위해 사용하는 전송 제어 프로토콜입니다

인터넷은 본질적으로 불안정적이기에 TCP를 통하여 안정적이고 신뢰성 있는 전송을 보장합니다

대표적인 특징들로는

  • 신뢰성 보장 : 데이터를 작은 조각(패킷)으로 나누어 보낸 후, 유실된 조각이 있으면 다시 보내라고 요청하여 데이터 손실을 막습니다

  • 순서 유지 : 패킷이 뒤바뀌어 도착하지 않도록 올바른 순서대로 조립합니다

  • 연결형 통신 : 통신을 시작하기 전 3-way handshake 과정을 통해 연결을 먼저 맺고 신뢰할 수 있는 상태를 만듭니다

  • 혼잡 제어 : 네트워크 상황에 맞춰 전송 속도를 조절해 과부하를 방지합니다

등이 있습니다

신뢰성이 높은 특징으로 HTTP/HTTPS, 이메일, 파일 전송(FTP), SSH 등에 사용됩니다

3️⃣-Way-Handshake


3-Way-Handshake는 TCP 연결을 시작하기 전에 상대방 컴퓨터와 사전에 세션을 수립하는 과정입니다

총 세 단계를 거쳐서 교환을 하는데 각각 단방향적으로 서로 패킷을 주고받습니다 뭐, HandShake (악수) 니까 서로 악수하는 게 더 어울릴련지

3-Way-Handshake는 다음과 같은 과정을 거칩니다

SYN (클라이언트 → 서버): 단방향 요청

SYN + ACK (서버 → 클라이언트): 단방향 응답 및 역방향 연결 요청

ACK (클라이언트 → 서버): 단방향 확인 응답

조금 예시를 들자면 코딩 파인애플과 제 친구 더미가 서로 게임을 시작했다 가정해봅시다

코딩 파인애플 (SYN) (확인) : 야이 @&%#@ㅑ!! &#@*야!!! 

더미 (SYN + ACK) : (욕설 감지)

더미 (ACK) (반응) : ㅇ~ ㅄ ㅋ ㅗㅗ

(진짜 서로 게임 시작하면 이럶)

ㅔ...뭐 이런 식입니다 (...)

4️⃣-Way-Handshake


TCP 연결을 안전하게 종료하기 위한 과정입니다.

3-Way는 연결을 시작할 때, 4-Way는 연결을 끝낼 때 사용됩니다.

한쪽이 "연결 끝낸다" 라고 하더라도, 상대방이 아직 보낼 데이터가 남아있을 수 있기 때문입니다

따라서 양쪽이 모두 "정말 더 이상 보낼 게 없다"는 신호를 주고받아야 합니다

4-Way-Handshake는 다음과 같은 과정을 거칩니다

FIN (클라이언트 → 서버): 연결 종료 FIN 패킷을 보냄

ACK (서버 → 클라이언트): FIN을 받으면 잘 받았다는 ACK를 보냄

FIN (서버 → 클라이언트): 서버도 클라이언트도 끝낼 준비를 마친 FIN패킷을 보냄

ACK (클라이언트 → 서버): 마지막으로 확인용 ACK를 보내고 종료.
코딩 파인애플 (FIN) : 야 이거 재미없다

더미 : 그러게.

코딩 파인애플 : 걍 시마이 하실?

더미 : ㅇㅇ ㅂㅂ

⚡ UDP

User Datagram Protocol


UDP는 비연결형이고 신뢰성을 보장하지 않는 프로토콜입니다

UDP는 TCP와 다르게 패킷이 손실될 수도 있고 3-Way-HandShake도 안거치며 재전송또한 하지 않는 뭐, TCP 샌님의 못난 누이에 가깝지만...

TCP와 다르게 3-Way-HandShake를 거치지 않아 속도가 매우 빠르고 효율이 높다는 장점이 존재합니다

그래서인지 실시간 영상/음성 통화, 온라인 게임, DNS 조회, 스트리밍에 UDP가 주로 쓰입니다

✅ Checksum


체크섬은 그냥 무지성으로 데이터를 주고받기만 하는 UDP의 그나마 남은 지성 (...) 에 가깝습니다

그러니까... UDP는 최소한의 검증 장치로에 가깝습니다

체크섬이 과정은

UDP 패킷 안의 모든 데이터를 2바이트 단위로 쪼개서 모두 더하고 그 더한 값을 바탕으로 계산된 최종 결과를 UDP 헤더의 'Checksum' 칸에 적어서 보냅니다

패킷이 도착하면, 수신 측 컴퓨터도 똑같이 패킷의 데이터를 16비트 단위로 다시 모두 더해봅니다

만일, 직접 더한 값과 패킷 헤더에 적혀 온 'Checksum' 값이 일치하는지 확인하고 맞으면 올리고 틀리면 그 패킷을 재전송 없이 폐기합니다

예, 그냥 UDP는 무지성이 맞긴 합니다




뭐...사실 TCP는 이것 말고도 다룰 요소가 더 많긴 하지만 추후 글을 수정하면서 더 보완할 예정입니다


이상으로 글을 마치겠습니다 감사합니다.

profile
풍성한 한가위 보내시길 바랍니다.

0개의 댓글