모든 개발자를 위한 HTTP 웹 기본 지식 (1) - 인터넷 네트워크
인프런 모든 개발자를 위한 HTTP 웹 기본 지식을 학습하고 정리한 내용 입니다.
인터넷 네트워크
- 인터넷 통신
- IP(Internet Protocol)
- TCP, UDP
- PORT
- DNS
인터넷 통신
인터넷에서 컴퓨터 둘은 어떻게 통신하는가?

해저 광케이블, 위성 뭐 어떻든 타고 타고 넘어갈텐데, 어떻게?
IP(인터넷 프로토콜)

두 컴퓨터에 IP라는 주소를 부여하는 것이다.
IP의 역할
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
패킷 안에는 출발지 ip, 목적지ip, 기타 정보 + 전송할 데이터가 담기게 된다.

서버들은 패킷에 규약을 잘 따르고 있기 때문에, 목적지에 잘 찾아가도록 전송해줌.

목적지 서버에서도 이 정보를 받았으면 OK를 내려주게된다.
그때 타고 타는 서버는 또 다를 수도 있다.
IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성
- 중간에 패킷이 사라지면?
- 패킷이 순서대로 안오면?
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면?
이런 문제를 어떻게 해결해야 할까?
TCP, UDP
IP 프로토콜의 한계를 극복하기 위해 TCP라는 프로토콜이 등장한다.
인터넷 프로토콜 스택의 4계층

IP 계층의 한계를 보완하기 위해 TCP, UDP같은 전송 계층이 추가되는 것이다.

hello 정보에 TCP를 한번 감싸고, 그 위에 또 IP로 감싸고, 또 랜카드를 통해 Ethernet frame을 감싸서 세상 밖으로 보낸다.

TCP 특징
전송 제어 프로토콜 (Transmission Control Protocol)
- 연결지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 데이터 소실을 방지한다.
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 현재 대부분 TCP 사용
TCP 3 way handshake

클라이언트가 서버 살아있나 먼저 SYN 보내고,
서버는 살아있으면 클라이언트한테 살아있다 SYN을 보내면서 클라이언트 너도 살아있냐? ACK 보냄
클라이언트도 ACK를 받아서 나 살아있어 ACK를 보냄
참고로 마지막 3. ACK시에 데이터도 같이 전송
참고로 이건 실제로 연결된 건 아니고 둘 다 살아있다는 걸 확인 했으니까 논리적으로 연결 되어있다고 생각하는 것이다.
데이터 전달 보증

데이터 전송하면 서버도 받았다는 데이터를 보낸다.
이로 인해 데이터 소실을 한지 안 한지 판단할 수 있다.
순서 보장

패킷의 순서 정보를 TCP가 가지고 있기 때문에 순서대로 안 오면 다시 보내라고 클라이언트한테 요청을 보낸다.
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
UDP도 TCP와 같은 전송계층인데, 사실 큰 기능이 없다. IP 계층이랑 다를게 없지만 딱 하나 기능이 추가된다.
PORT
하나의 서버에서 여러 애플리케이션이 돌고 있을 때 이를 구분하기 위한 정보다.
- 하얀 도화지에 비유 (기능이 거의 없음)
- 연결 지향 X → TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- IP와 거의 같다. +PORT +체크섬 정도만 추가
- 애플리케이션에서 추가 작업 필요
HTTP3.0에서 UDP를 사용 한다 함.
PORT
지금 내가 게임도 하고, 화상 통화도 하고, 웹 서핑도 하고 있다.

내 IP로 패킷이 오고 갈텐데, 이걸 어떻게 구분할껀가?

이때 사용하는 것이 PORT다.

같은 IP 내에서 프로세스를 구분하기 위해 사용하는 것이 PORT다.
각종 포트 정보
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS
IP는 기억하기 어렵다. IP는 변경될 수 있다.
이때 사용하는 것이 DNS도메인 네임 시스템(Domain Name System)이다.
전화번호부라고 생각하면 된다. 도메인 서버에다 서버 도메인주소와 IP 등록해 놓으면
나중에 클라이언트가 도메인 명으로 접근하면 IP 주소로 변환해준다.

댓글남기기