OSI 7 계층에 대해 공부하던 중 전송 계층에서 TCP의 3-Way Handshake를 발견! 저게 뭔지 알아보기 전 tcp/udp에 대해 자세히 알아보도록 하겠습니당
들어가기 전, 전송 계층 다시 알아보기
양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해줌
송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하여 재전송 요구 제어 등을 담당
전송 프로토콜 중 가장 잘 알려진 것이 바로 TCP와 UDP임
TCP와 UDP는 OSI 표준 모델과 TCP/IP 모델의 전송(Transport)계층에서 사용되는 프로토콜
TCP/IP
- 데이터가 의도된 목적지에 닿을 수 있도록 보장하는 통신 규약
- 인터넷으로 디바이스를 연결하는 네트워크 프로토콜의 집합
- 인터넷의 기본 통신 언어
- TCP/IP를 사용하면 한 컴퓨터가 데이터 패킷을 컴파일하고 올바른 위치로 전송하여 인터넷을 통해 다른 컴퓨터와 통신할 수 있음
TCP와 UDP는 포트 번호를 이용해 주소를 지정하는 것과 데이터 오류 검사를 위한 체크섬이 존재한다는 두 가지의 공통점을 가지고 있지만,
정확성(TCP)을 추구할지 신속성(UDP)을 추구할지 구분하여 나뉨
데이터를 중요하게 생각 해 확실히 주고받고 싶을 때는 TCP
를 사용
TCP는 통신할 컴퓨터끼리 "보냈다" "받았다"라고 서로 확인 메세지를 보내면서 데이터를 주고받아 통신의 신뢰성을 높임
웹이나 메일, 파일 공유처럼 데이터를 누락시키고 싶지 않을 때 TCP사용
반대로 신뢰성보다는 일단 빨리 보내버리고 싶을 때는 UDP
를 사용
UDP는 데이터를 보내기만 하면 그걸로 끝이니 신뢰성은 없지만 확인 응답과 같은 절차를 생략할 수 있어 통신의 신속성은 높음
인터넷 전화나 실시간 영화 스트리밍처럼 특히 속도를 필요호하는 서비스들이 UDP사용
TCP와 UDP는 "포트 번호"로 컴퓨터 안의 어떤 서비스(애플리케이션)에게 데이터를 전달하면 좋은지를 식별함
포트 번호는 "0~65536"(16비트)까지의 숫자로 되어 있고, 범위에 따라 용도가 정해져 있음
- 0 ~ 1023(잘 알려진 포트 : well-known port) 웹 서버나 메일 서버 등과 같은 일반적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용
- 1024 ~ 49151(등록된 포트 : registered port) 제조 업체의 독자적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용
- 49152 ~ 65535(동적 포트 : dynamic port) 서버가 클라이언트를 식별하기 위해 사용
TCP에서 자꾸 강조되는 내용은 데이터를 정확하고 안정적으로 전달할 수 있다는 것
근데 대체 어떻게 통신하길래 신뢰성이 있다는 거임??
클라이언트가 연결을 요청(SYN 데이터 전송)하고 서버가 연결을 수락하면 통신 선로가 고정되고 모든 데이터는 고정된 통신 선로를 통해서 순차적으로 전달
(데잍터를 정확하고 안정적으로 전달할 수 있음)
위 그림처럼 TCP프로토콜은 신뢰성 있는 데이터 전송을 위해 확인 작업을 하는데 패킷을 성공적으로 전송하면 ACK라는 신호를 날리고 만약 ACK신호가 제 시간에 도착하지 않으면 TimeOut을 발생시켜 손실이 발생한 패킷을 다시 전송함
이렇게 TCP는 데이터를 송신할때마다 확인 응답을 주고받는 절차가 있어서 통신의 신뢰성이 올라감
저는 TCP를 정확한데 유도리 없는 타입이라 정의하겠습니다.
3-way handshake는 다음 글에서 자세하게 정리할 예정임
비연결 지향적 : 데이터를 주고받을 때 연결 절차를 거치지 않고 발신(송신)자가 일방적으로 데이터를 보내는 방식
연결 과정이 없어 TCP보다는 전송이 빠르지만 데이터 전달의 신뢰성은 떨어짐
UDP는 전송에 할당되는 논리적인 경로가 없음
각각 패킷은 다른 경로로 전송되고 각각 독립적인 관계를 지님
이렇게 데이터를 서로 다른 경로로 독립적으로 처리하는 프로토콜을 UDP라고함
그래서 먼저 보낸 패킷이 느린 선로를 통해 전송되면 나중에 보낸 패킷보다 늦게 도착할 수 있고 최악의 경우 잘못된 선로로 전송되어 유실될 수도 있음
TCP와는 다르게 중간에 패킷이 유실되거나 변조가 되어도 재전송 X
UDP는 좀 무책임한 친구라고 정의하겠습니다^__^
좀 더 설명하면, UDP는 연결을 설정하고 해제하는 과정이 없음
서로 다른 경로로 독립적으로 처리함에도 패킷에 순서를 부여하여 재조립하거나 흐름 제어, 혼잡 제어를 하지않아 속도가 빠르고 네트워크 부하가 적다는 장점이 있지만 데이터 전송의 신뢰성이 낮음 (연속성이 중요한 실시간 스트리밍에 좋다)
공통점
포트 번호를 이용하여 주소를 지정
데이터 오류 검사를 위한 체크섬 존재
차이점
TCP | UDP | |
---|---|---|
연결방식 | 연결형 | 비연결형 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 보장 | 보장 X |
수신 여부 확인 | 확인 | 확인 X |
통신 방식 | 1:1 | 1:1/1:N/N:N 모두 가능 |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
이론 공부할 때 TCP/UDP는 항상 같이 붙어있어서 그냥 한 묶음 세트인 줄 알았는데 공부하다 보니 굉장히 성격이 다른 애들이라는 것을 알게되었ㄷㅏ
3-way handshake에 대해 알아보기 전 가볍게 이론 정리식으로 작성한 글이 이렇게 길어지다니ㅠ_ㅠㅠ 흐극ㄱㅈㄷ화이팅
참고
https://coding-factory.tistory.com/614#google_vignette
https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake