🟢TCP (전송 제어 프로토콜)
TCP 프로토콜는 IP 프로토콜의 문제점인 패킷이 순서대로 안 가거나, 패킷이 가는 도중에 손실되는 문제점을 보완해준다. UDP는 직접적인 해결을 해주지는 않지만, 도움이 되는 부분이 있다.
Hello 라는 메세지에 TCP 정보를 씌우고 ,
그 외부에 IP와 관련된 데이터를 또 씌운뒤에,
맨 마지막에 이더넷 프레임 이라는 게 씌워져서 최종적으로 나간다.
이더넷 프레임은 렌카드에 포함된 Mac 주소 같은 거다.
TCP는 IP보다 먼저 씌워진다.
TCP의 특징은,
🟣연결지향
- 즉, 상대가 연결되었는지를 확인한 후에 메세지를 보낸다.
- 이것이 3way-handshaking이다.
- 클라이언트가 접속요청 SYN메세지를 보냄 ( 이때 서버측에서 응답이 없으면 메세지 보내지 않음)
- 서버측에서 요청을 수락(ACK)을 하고 다시 자신도 연결해달라는 SYN을 보낸다.
- 클라이언트 측에서도 ACK을 보내면 클라이언트 측과 서버측의 연결이 완료된다.
- 연결이 되면, 그 담에 데이터를 전송하게 된다!
요즘엔 마지막 ACK을 보낼때 메세지도 함께 보내진다고 한다. (그럼 1단계를 줄이게 됌)
🟣데이터 전달 보증
데이터를 전달하면 거기에 대한 응답을 기대하는데,
응답이 오지 않으면 데이터에 문제가 생긴것으로 간주한다.
🟣순서 보장
- 예를 들어, 큰 메세지가 있어서 1,2,3 으로 잘라서 보냈다고 가정한다.
그런데, 서버에 1 -> 3 -> 2 순서로 도착하면
기본적으로는 잘못된 순서의 시작점부터 다 삭제하고 다시 보내라고 요청한다.
이 예시 같은 경우는 패킷 2번부터 다시 보내라고 한다.
근데, 서버는 어떻게 순서를 알고 2번부터 보내라고 하는 건가??
상단에 TCP/IP 패킷 정보 이미지를 확인해보면, TCP 안에 순서 정보가 들어있는 것을 알 수있다. 즉, 서버는 어떤 데이터가 올 지 순서를 알고 검증한다.
🟢UDP (사용자 데이터그램 프로토콜 User Datagram Protocol)
- 하얀 도화지에 비유(기능이 거의 없다)
- TCP와 같은 계층에 있는 프로토콜이나 TCP처럼 3 way hadshacke는 없다
- 데이터 전달 보증이 없다
- 순서 보장이 없다
- 데이터 전달 및 순서 보장이 되지 않지만 단순하고 빠르다
- IP와 거의 같으며 PORT와 체크섬 정도만 추가한다. ( 체크섬은 PORT메세지에 대해서 맞는지 검증해주는 데이터)
애플리케이션에서 추가작업이 필요하다.
결과적으로 IP와 유사하지만 UDP에는 PORT가 존재한다.
그럼, PORT가 무엇일까?
한개의 PC로 여러개의 작업 (음악, 게임, 검색 등)을 동시에 할때 이에 관한 패킷이 여러개가 들어오면 각각의 패킷들이 어떤 용도로 들어온건지 구분해야하는데 이 때 쓰이는것이 PORT이다.
TCP와 유사한데, TCP보다 뒤떨어지는 UDP의 사용을 하는 이유는,
- TCP는 다 좋은데, "3 way handshaking" 하려면, 시간이 걸린다.
또한, 메세지에 TCP 프로토콜까지 짚어넣으면, 데이터 양도 커진다.
즉, 뭔가 전송 속도도 더 빠르게 만들기 어렵다.
뭔가를 더 최적화하고 싶은데, 할 수가 없는 상황이다.
즉, TCP는 이미 손을 못 댄다. 인터넷은 이미 다 TCP 기반이기 때문이다. - 여기서 최적화를 하려면 백지상태인 UDP를 이용할 수 있다. UDP어플리캐이션에 내가 원하는것을 만들면 된다.
그래서 요즘 뜨는 추세라고 한다.
'CS > HTTP' 카테고리의 다른 글
URI(Uniform Resource Identifier) (0) | 2024.03.16 |
---|---|
IP(인터넷 프로토콜) 이란 무엇일까. (0) | 2024.03.14 |
GET 과 POST 의 차이점 (0) | 2024.01.12 |