-
[Network] 인터넷 네트워크(IP, TCP, UDP, PORT, DNS)Network/HTTP 2024. 4. 10. 13:41
IP
컴퓨터에 "주소"를 부여하는 것이라고 보면 된다. 클라이언트 컴퓨터가 서버 컴퓨터에 요청을 보낼 때 어떤 컴퓨터에 보낼지 지정해야하고, 그리고 서버 컴퓨터도 클라이언트에 요청에 대한 응답을 보내려면 클라이언트 컴퓨터에 대한 주소를 알아야 할 것이다. 그럴 때 사용하는 것이 IP이다. (우리가 택배를 보내는 것과 비슷하다고 보면 된다. )
IP 패킷
IP와 IP가 서로 요청과 응답을 주고 받을 때 패킷이라는 것을 통해 요청과 응답을 주고받는다. 이 패킷에는 요청을 보낸 클라이언트 서버의 ip와 목적지 IP의 서버, 전송 데이터 등의 정보가 들어있다. -> 비유하자면 우체국의 송장과 같은 역할.
이렇게 패킷 단위로 전송하면 노드들은 목적지 IP에 도달하기 위해 서로 데이터를 전달. 노드는 하나의 서버 컴퓨터를 의미. 이 패킷 단위 전송을 통해 복잡한 인터넷 망 속에서도 정확한 목적지로 패킷이 전송 가능.
클라이언트로 요청을 받은 서버도 똑같이 IP패킷을 통해 요청에 대한 응답을 전송한다.
IP 프로토콜의 한계
- 비연결성: 패킷을 받을 대상이 없거나(목적지 서버가 꺼져있다거나), 서비스가 되지 않는 상태여도 패킷이 전송되는 문제.
- 비신뢰성: 중간에 패킷이 사라지거나 순서대로 안올 수 있다. (패킷에 담긴 전송 데이터의 크기가 클 경우 여러 패킷에 쪼개 요청을 보내게 되는데, 이때 잘못된 순서로 패킷이 서버에 전달되는 문제가 발생할 수 있다. )
- 프로그램 구분: 한 서버에서 두 개 이상의 애플리케이션이 돌아가고 있을 때 클라이언트는 어떻게 요청을 보내야할까?(아파트로 생각하면 편하다. 아파트로 택배를 보내는데 동과 호수를 안적는 것과 같은 격)
->TCP와 UDP를 통해 해결 가능
인터넷 프로토콜 스택의 4계층
IP의 한계를 해결하기 위해 TCP 계층이 위에 하나 덮였다.
IP 패킷 안에 TCP 세그먼트를 넣어 세부 정보들을 넣어주고 있다.
TCP
- 전송 제어 프로토콜(Transmission Control Protocol)
- 연결 지향 - TCP 3 way handshake(가상 연결) -> 클라이언트와 서버가 연결이 가능한지 아닌지 확인을 먼저 하고 연결 후 요청을 보냄. -> IP의 한계중 하나인 "비연결성"을 해결
- 데이터 전달 보증: 데이터를 전달 하는 중 패킷이 누락될 경우 클라이언트가 누락을 알 수 있다.
- 순서 보장 (패킷 1, 2, 3 순서로 와야하는데 1, 3, 2 순서로 왔을 경우 2번부터 다시 보내라고 클라이언트에게 알려줌)
- 신뢰할 수 있는 프로토콜로 현재는 대부분 TCP를 사용한다.
UDP
- 사용자 데이터그램 프로토콜(User Datagram Protocol)
- 연경지향 x
- 데이터 전달 보증 x
- 순서 보장 x
- 단순하고 빠름
- -> IP와 거의 같고, Port와 체크섬 정도만 추가됨. -> 애플리케이션에서 추가 작업 필요
- 그럼 쓰는 이유? 내가 원하는대로 최적화할 수 있음.
Port
같은 IP(같은 컴퓨터 서버) 내에서 프로세스를 구분하기 위해 사용
예를 들어 클라우드를 이용해 서버를 배포했을 때 한 서버에서 rds, 스프링부트, redis 애플리케이션을 모두 실행하고 있다고 하고, 그 서버의 ip가 200.200.200.2로 요청을 보냈을 때 이 서버가 스프링부트 애플리케이션에 요청을 받았는지, rds에 요청을 받았는지 등을 구분하기 위해 필요한 것이 바로 port이다.
한마디로 ip주소가 아파트이고 port가 동 호수라고 생각하면 된다. 예를 들어 스프링부트의 애플리케이션의 포트 번호가 8080이라고 할 때 클라이언트는 200.200.200.2:8080으로 요청을 보내면 된다.
- 0 ~ 65535 범위에서 할당 가능
- 0 ~ 1023은 잘 알려진 포트로 사용하지 않는 것이 좋다.
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS
- 도메인 네임 시스템(Domain Name System)
- ip는 서버가 꺼졌다가 켜지면 바뀔 수 있다. 따라서 등장한 것이 도메인이다.
- 예를 들어 naver의 도메인은 naver.com이다. 이 naver의 ip는 바뀔 수 있다.
- 하지만 클라이언트가 바뀔 때마다 계속 다른 주소에 요청을 보내기 힘들 것이다. 예를 들어 naver의 ip주소가 200.200.200.1이었다가, 200.200.200.2로 바뀌면 우리는 주소 입력 창에 200.200.200.2를 쳐야 들어갈 수 있는 것이다. 하지만 DNS를 이용하면 우린 서버 ip가 바뀌던지 말던지 naver.com 으로만 요청을 보내면 언제든지 네이버에 요청을 보낼 수 있다.
References
인프런(김영한) - 모든 개발자를 위한 HTTP 웹 기본 지식(https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard)
https://velog.io/@starrypro/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%8B%AC%ED%99%94
https://creatijin.netlify.app/http/http-01/
'Network > HTTP' 카테고리의 다른 글
[Network/HTTP] HTTP란? HTTP의 동작 과정 (1) 2024.04.10