김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 보고 작성한 내용이며 학교에서 배운 내용을 추가적으로 작성하였습니다
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
인터넷 상에서 컴퓨터가 통신 하는 방법
인터넷 망을 통해 메세지를 보내고 받는다
인터넷 망은 복잡하게 구성이 되어 있는데 어떻게 메세지가 도달할까?
➡️ IP 주소를 이용해서 목적지까지 메세지를 전달한다
인터넷 프로토콜 역할
지정한 IP 주소에 데이터 전달
패킷이라는 통신 단위로 데이터 전달
출발지 IP
목적지 IP
전송 데이터 (메세지)
IP 패킷을 인터넷 망에 전달하면 인터넷 망의 라우터를 거쳐 목적지 IP까지 전달
이러한 전달 과정은 보통 Hop-By-Hop으로 이루어진다
비연결성
연결 설정 과정을 거치치 않기 때문에 데이터그램이 독립적으로 전달
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송
비신뢰성
중간에 패킷이 사라지는 경우 (패킷 소실)
패킷이 순서대로 오지 않는 경우
오류 복구 서비스를 지원하지 않기 때문에 오류와 상태 정보에 대해 알 수 있도록 ICMP 서비스를 지원한다
프로그램 구분
➡️ IP 프로토콜의 이러한 문제를 해결하기 위해 TCP, UDP를 이용
TCP는 응용 프로세스간 신뢰 전송, 저성능 전송
UDP는 응용 프로세스간 비신뢰 전송, 고성능 전송이며, 실시간으로 동작하는 것이 더 중요한 경우에 UDP를 사용한다
하나의 호스트는 하나의 IP 주소를 가지며, 여러 개의 응용 프로세스가 동작하고 있을 수 있다
이 떄 포트번호를 통해 응용 프로세스를 구분한다
응용 프로세스 주소는 IP 주소 + 포트 번호
소켓이란 응용 프로세스가 네트워크로 메세지를 송신하고 수신하는 통로 자료구조이며 트랜스포트 계층 상에서 구현한다
소켓 주소 = 응용 프로세스 주소 = IP 주소 + 포트 번호
socket 라이브러리 ( 소켓 API ) : 응용(어플리케이션) 계층과 전송 계층을 연결하는 기능을 제공하는 프로그래밍 인터페이스
출발지 포트
목적지 포트
전송 제어
순서
검증 정보
Transmission Control Protocool : 전송 제어 프로토콜
연결 지향 - TCP 3 way handshake (가상 연결)
연결 후에 메세지를 전달한다
IP 프로토콜의 비연결성 문제 해결
데이터 전달 보증
데이터가 전송되면 수신 측이 데이터를 잘 받았다고 전달
메세지가 제대로 전달되지 않으면 그 사실을 알 수 있음
순서 보장
신뢰할 수 있는 프로토콜
현재는 대부분 TCP 사용
SYN : 접속 요청
ACK : 요청 수락
User Datagram Protocool : 사용자 데이터그램 프로토콜
기능이 거의 없음
연결 지향 - TCP 3 way handshake X
데이터 전달 보증 X
순서 보장 X
데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
정리
IP 와 거의 같다 + PORT + checksum
어플리케이션에서 추가 작업 필요
0 ~ 65535 할당 가능 ( 16비트 )
0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
FTP - 20, 21
TELNET - 23
HTTP - 80
HTTPS - 443
Domain Name System : 도메인 네임 시스템
IP 주소는 변경될 수 있고, 외우기 어렵기 때문에 DNS 를 사용한다
즉, 도메인 주소를 사용하면 IP 주소가 변경되어도 문제가 발생하지 않고, 사용자도 IP주소로 접속하는 것보다 이름으로 접속하는 것이 편하기 때문에 사용자 편리성도 제공한다
DNS 서버에 도메인을 등록해서 사용 ( 도메인명 + IP 주소 )
DNS 서버에 도메인명을 전달하면 응답으로 그에 해당하는 IP 주소가 전달되고 전달받은 IP로 접속
보통 전달하는 DNS 서버는 본인 네트워크 내의 로컬 DNS 서버로 전송한다
로컬 DNS 서버는 반복적 혹은 재귀적 질의 방식으로 IP 주소를 알아낸다
특정 서버가 질의하고 응답을 받으면 클라이언트 방향으로 전달하기 전에 자신의 캐시 메모리에 저장한다
이렇게 저장된 캐시 정보는 TTL이 지나면 자동적으로 삭제된다
DNS는 IP 주소 변환 외에도 호스트 별칭, 메일 서버 별칭 등의 서비스를 제공한다