강의 '모든 개발자를 위한 HTTP 웹 기본 지식'를 듣고 개인적으로 공부한 내용을 정리하였습니다.
목차
- IP 인터넷 프로토콜
- TCP
- UDP
- DNS
인터넷 네트워크
웹이나 HTTP도 인터넷 네트워크 안에서 일어난다. 인터넷 망을 통해 두 컴퓨터가 통신하기 위해서 여러 노드를 거치는 데, 이 요청을 잘 전달하기 위한 방법이 IP(인터넷 프로토콜)이다.
📌 IP
- 복잡한 인터넷 망에서 서로 데이터를 송수신하려면 IP 주소를 통해서 보낼 수 있습니다.(클라이언트, 서버 모두 IP주소가 존재합니다.)
- 지정한 IP주소(IP Address)에 데이터 전달
- 패킷이라는 통신 단위로 데이터 전달합니다.(패키지+버킷 합성어입니다.)
통신이미지
패킷정보
- 출발지 아이피 목적지 아이피 기타 >>> 인터넷 망에 던진다.
- 규약을 따라서 출발지 목적지를 노드끼리 읽는다(출발지IP, 목적지IP, 기타정보, 전송할 데이터)
IP 인터넷 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송합니다.
- 비신뢰성
- 중간에 패킷 사라지거나 중간에 받은 노드에서 문제가 생긴다면 그에 따른 실패반응을 알 수 없습니다.
- 대략 1500Byte로 데이터를 끊어서 보내게 되는데, 끊어서 전송된 데이터의 순서를 보장하지 않습니다.
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션(음악들으면서 게임)이 둘 이상이라면 구분하지 못합니다.
📌 TCP(Transmission Control Protocol)
IP 프로토콜의 한계를 해결해줍니다.
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 (랜카드 랜드라이버 등등)
- TCP/IP 패킷 정보
프로토콜 계층
1. 전송할 메시지를 OS 계층에서 TCP 정보를 넣어서 감쌉니다.
2. IP에서 패킷으로 다시 감쌉니다.
3. 네트워크 인터페이스 계층에서 진짜 물리적 랜 카드에 등록된 맥주소 등을 포함해서 이더넷 프레임이라는 걸로 감쌉니다.
TCP 특징
IP 프로토콜에 TCP를 추가로 감싸서 IP프로토콜의 단점을 보완해줍니다.
전송제어 프로토콜
연결지향: TCP 3 way handshake (가상연결): 연결을 먼저 한다음에 메세지를 보냅니다.(비연결성 해결)
- syn : 상대가 꺼져있다면 syn 메세지 보낼 때 응답 없습니다.
- syn+ACK
- ACK
- 데이터전송
- 요즘엔 최적화가 되어서 ACK할 때 데이터를 전송합니다.
- 개념적으로만 연결이 된거고 사이에 있는 노드들은 연결된지 모릅니다.
데이터 전달 보증: 중간누락 상대가 받지 못한 것 알 수 있다.
- 패킷이 중간에 소실될 경우 클라이언트가 해당 사실을 인지할 수 있게 알려줌
- 요청을 정상적으로 받을 경우, 응답 서버에서 클라이언트에 데이터 잘 받았다고 알려줍니다.
순서보장
- 기본적으로 응답을 받는 곳에서 패킷이 순서대로 도착하지 않는다면, 보낸 곳에게 순서가 바뀐 곳 부터 다시 보내달라고 요청합니다. (서버 내부 최적화 가능합니다.)
TCP/IP 패킷정보에 순서,
현재는 대부분 TCP 사용하며 신뢰할 수 있는 프로토콜로 알려져있습니다.
📌 UDP(User Datagram Protocol)
- 애플리케션에서 추가 작업 필요
- IP와 거의 같습니다.
- 하얀 도화지에 비유합니다.(기능 없습니다)
- 연결지향도 아닙니다.
- PORT +체크섬 정도만 추가할 수 있습니다.
그럼 언제 UDP를 사용하는가?
- 옛날에는 영상같은 데이터를 통신할 때 사용했는데, 요즘에는 영상조차 TCP/IP로 통신함(TCP 점유율 90%이상)
- TCP 계층은 이미 네트워크 표준이라 더 이상 최적화 불가능합니다.
- 최근 HTTP3 통신할 때 TCP/IP 3way 때문에 느리기 때문에 더욱 최적화하기 위해 UDP 프로토콜을 채택하게 되면서 각광을 받게 되었습니다.
- 같은 IP에서 두 가지 이상 연결해야 하게된다면(ex게임, 화상통화, 웹 여러가지) 패킷이 오는데 구별 어떻게 할 것인가? 이럴 때 파로 UDP의 PORT를 사용하여 같은 IP내에 애플리케이션을 구분해줍니다.
PORT
- 같은 IP내에서 프로세스 구분해줍니다.
- 한 아파트(ip) 안에서 호수(PORT) 비유합니다.
- 패킷정보에 출발지, 목적지 PORT들이 담겨있기 때문에 서버, 클라이언트에서 포트번호 파악할 수 있습니다.
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
📌 DNS(Domain Name System)
why DNS?
- 아이피로만 서버 송수신이 가능하지만 기억하기 어렵습니다.
- 아이피가 변경되면 어떻게 찾아갈 것인가?
이러한 문제점 때문에 DNS(Domain Name Server를 사용합니다.)