인터넷 프로토콜 스택의 4계층
- IP의 단점을 TCP를 살짝 올려서 그걸 보완해주는 역할을 한다고 보면 된다.
- UDP는 비연결성, 비신뢰성, 순서을 보장해주진 않지만 장점이 있다.
프로토콜 계층
- 소켓 라이브러리라는 걸 보통 쓰는데, 소켓 라이브러리를 통해서 os 계층에다가 hello라는 메세지를 넘긴다.
- tcp에서 tcp 정보를 씌우고(녹색 씌우는 느낌)
- 그 밑에 ip와 관련된 데이터들을 씌웁니다.
- 이렇게 IP 패킷을 생성하고, 그 안에 IP 정보, TCP 정보, 메시지가 포함 되어있다.
- 그게 이더넷 프레임을 통해서 나간다.
- 패킷 : 진짜 패키지(수화물 + 덩어리(버킷)) -> 택배 박스에 데이터 넣듯이 해서 보내는 거랑 비슷
TCP 특징(신뢰할 수 있는 프로토콜)
- IP만으로 해결이 안됐던 전송 정보를 넣게 된다.
- 전송제어 프로토콜(Transmission Control Protocol)
- 연결지향 - TCP 3 way handshake (가상 연결)
- 일단 쟤랑 나랑 연결이 되었나 안되었나 연결을 하고 메세지를 보낸다.
- 데이터 전달 보증
- 내가 메세지를 보내고, 중간에 패킷이 누락이 되었으면 내가 알 수 있다.
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
- 연결지향 - TCP 3 way handshake (가상 연결)
- 클라이언트도 SYN(접속 요청)을 보내고, ACk를 보내서 요청을 수락한다.
- SYN, SYN+ACK, ACK 이렇게 연결을 하게 된다.
- 연결이 되고나면 바로 데이터를 전송한다.
- 만약에 서버가 중간에 꺼져버렸다. 그러면 신 메세지를 보냈을 때 서버에서 응답이 없다.
- 그럼 지금 문제가 있네하고 연결이 안되는 거다.
- 요즘은 최적화가 되어서, ACK를 보낼 때 데이터도 전송한다.
- 물리적으로 연결이 된다는 표현은
- 그 전화포트를 뽑아서 옆에다 꽂아주는 거였다.
- TCP, IP 연결은 개념적 연결이다. 논리적으로 연결이 된거고, 중간에 수많은 서버들이 있다. 그 노드들을 모른다. 그냥 우리끼리만 연결이 되었다고 생각하자라고 된 거로 보면 된다.
- 나를 위한 전용 랜선이 보장된 건 아니다.
- 데이터 잘받았다고 다시 보내줌
- 1번 다음 2번이 와야하고 3번이 와야하는데, 잘못 보냈다고 하면 다시 보내라고 준다.
- 최적화들은 내부적으로 일어날 수 있지만, 기본적으로는 서버가 클라이언트한테 다시 보내라고 한다.
- 그래서 순서가 보증이 된다.
- 그래서 TCP를 신뢰할 수 있는 프로토콜이라고 한다.
UDP 특징(사용자 데이터그램 프로토콜(user Datagram Protocol))
- 하얀 도화지에 비유(기능이 거의 없음)
- 연결 지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- 정리
- IP와 거의 같다. + PORT + 체크섬 정도만 추가
- 애플리케이션에서 추가 작업 필요
- 내 피시에는 하나의 IP가 할당되어있을 텐데, 내 IP로 여러 패킷이 오는데, 이건 게임용 패킷이고, 음악용 패킷인지 구분하지 할 때 포트를 사용한다.
- 이 UDP가 이렇게 데이터 이걸 왜쓰지 할텐데, 3way 핸드쉐이킹 하려면 시간이 걸릴텐데, 데이터 다넣고 하면 데이터 양도 크고 전송속도도 더 빠르게 만들기 어렵다.
- 근데 내가 이걸 최적화하고 싶은데 할 때, tcp는 손을 못떼요
- 내가 더 최적화할 수 있다고 할 때, tcp는 그냥 그대로 쓰고, udp에 손을 대면 된다.
- 이 위에 원하는 걸 어플리케이션 레벨에서 만들면 된다.
- 시간이 지나면서 tcp 프로토콜이 90% 이상 전달을 하게되는데,
- HTTP 최근에 스펙이 나왔는데, TCP IP 핸드쉐이킹 (SYN, ACK) 그런거까지 다 줄여보자해서 HTTP 3에서 UDP 프로토콜을 사용하면서 지금 UDP 프로토콜이 각광받는 추세이다.
'웹 애플리케이션' 카테고리의 다른 글
5. HTTP 웹 기본 지식 - DNS (0) | 2023.10.13 |
---|---|
4. HTTP 웹 기본 지식 - PORT (0) | 2023.10.13 |
2. HTTP 웹 기본 지식 - 인터넷 통신(IP) (0) | 2023.10.13 |
1. HTTP 웹 기본 지식 (0) | 2023.10.13 |
node.js 백엔드 기초 (4) | 2023.08.30 |