이 아티클은 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 공부한 내용을 정리하기 위해 작성되었습니다.
1. 인터넷 통신
인터넷에서 컴퓨터가 통신하는 방법으로는 클라이언트와 서버가 인터넷 망이라는 거대한 연결 고리를 통해서 서로 통신하게 된다. 조금 더 구체적으로 말하자면 인터넷은 여러 지점에 뿌려진 물류 집화장 같은 것으로 서로의 관계가 복잡하게 얽혀있어 복잡하지만 서로 혼선 없이 통신하기 위해 나름의 규칙을 정해 사용하고 있다.
2. IP(Internet Protocol)
- 서로가 인터넷에서 원할한 통신을 하기 위해 지키기로 약속한 규정된 약속
- 지정한 IP 주소에 패킷(Packet)이라는 통신 단위로 데이터를 주고 받는다.
- 주로 호스트의 주소를 지정하는 것과 패킷 분할, 조립을 등의 기능을 수행합니다.
2-1. IP의 한계점
- 비연결성 : 패킷을 받을 대상이 문제가 발생해도 받아야할 서버가 현재 받을 수 있는 상황인지 알 수 없다.
- 비신뢰성 (데이터 소실 우려 및 순서 보장 X)
- 패킷의 유실 문제 : 중간에 패킷을 가로채거나 중간 노드(중계 서버)에 이상이 생기면 패킷이 소실된다.
- 패킷의 순서 문제 : 데이터 크기를 나눠 전송하면서 중계 서버 경위에 따라 합쳐질 순서가 뒤바뀔 수 있다.
- 프로그램 구분 : 동일한 IP를 사용하는 서버에서 복수의 애플리케이션에 대해 구분할 방법이 없다.
ex) 유튜브로 영상을 보면서, 웹 메신저로 채팅을 하는 등 프로그램을 2개 이상 동작시키는 경우를 말한다.
3. PORT
- 동일한 IP에서 프로그램을 식별하기 위해 사용하는 식별 정보
- 비유하자면 아파트의 동이 IP 라고 할 때, 호가 PORT가 된다.
- 수신자가 택배(=패킷)를 받기 위해서는 발신자에게 정확한 아파트의 동, 호를 알려주어야 한다.
3-1. PORT의 정보
- 0 ~ 65535 포트 사이에 선택해서 할당할 수 있다.
0 ~ 1023 포트는 이미 나름의 약속되어 정해진 포트로 사용하지 않는 것이 좋다.- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
- IP와 PORT 정보를 합쳐서 소켓 주소(Socket Address)라고 부른다.
4. TCP (Transmission Control Protocol) ⭐️⭐️⭐️
- OSI 계층 중 전송 계층에서 사용하고 있는 프로토콜 (전송 제어 프로토콜)
- 출발지, 목적지에 대한 PORT, 전송 제어 순서, 체크섬 관련 정보로 인해 기존 IP가 가지고 있던 한계점을 보완하고 있다.
4-1. TCP 특징
- 연결 지향적이다.
- 데이터의 전송을 제어하므로 데이터의 신뢰성(데이터 전송 및 순서)을 보장한다.
- 데이터 양이 크고 전송 속도가 느리다는 단점이 있다.
4-2. TCP 3 way handshake (가상 연결)
- 클라이언트에서 서버로 접속 요청(SYN)을 보낸다.
- 서버에서 요청을 수락하고(ACK), 클라이언트에게 연결 요청을 보낸다(SYN).
- 클라이언트에서 요청을 수락한다(ACK).
- 연결이 모두 완료되면 클라이언트에서 서버로 데이터를 보낸다.
여기서 연결은 물리적 연결이 아니라 논리적 연결을 의미한다.
5. UDP (User Datagram Protocol)
- IP에서 PORT 정보와 체크섬(=유효성 검증 정보) 정보만 추가된 상태
- 거의 비어있는 하얀 도와지 같은 형태로 애플리케이션에서 추가 작업을 통해 기능을 확장 할 수 있다.
5-1. UDP 특징
- 비연결지향
- 비신뢰성(데이터 유실 + 전송 순서 보장 X)
- TCP보다 가볍기 때문에 단순하고 빠른 장점이 있다.
- TCP 보다 더욱 성능을 최적화 하기 위한 목적으로 사용한다.
- 예) 실시간 동영상 플레이어, 게임, DNS
6. DNS
- IP 주소의 단점을 보완하기 위해 나온 서비스
- 기억하기 어려운 이름은 다른 곳(DNS 서버)에 저장해두고, 사람이 기억하기 쉬운 도메인 이름을 사용
- 사용자는 긴 이름을 직접 모르더라도 아래와 같이 도메인 이름을 사용하여 그 서비스에 접근할 수 있게 된다.
6-1. DNS 전달 과정
- 도메인 명을 도메인 서버에 등록한다.
google.com 등록
- 사용자는 기억하기 쉬운 도메인 이름으로 요청을 보내게된다.
google.com 요청!
- DNS 서버에는 도메인 명에 연결된 IP주소를 사용자에게 응답(전달)한다.
200.200.200.2 전달
- 최종적으로 사용자의 서버에서는 전달 받은 IP 주소를 이용해 해당 서비스에 접속하게 된다.
200.200.200.2 접속
더 알아보기
1. 패킷
- Pack + Bucket의 합성어
- 정보를 보낼 때 특정한 형태로 네트워크를 통해서 전송되는 작은 데이터 조각
- 패킷 교환 방식
- 큰 사진 하나를 상대에게 보낸다고 했을 때, 패킷으로 나누어진 사진은 작인 패킷의 데이터 조각이 되어 상대방에게 전달할 때 그 조각들에게 일련의 번호를 붙여서 전달한다. (나중에 합칠 때, 순서가 꼬여있으면 안되니깐😅)
❓데이터를 통으로 안 보내고 이렇게 조각을 나누어 전송하는 방식을 취하는 이유는 뭘까?
- 데이터 크기에 따라 신호에 전송하는 주파수 범위에서 많이 차지하기 때문에 패킷의 흐름이 원활하지 못하고, 또 트래픽이 커지기 때문에 네트워크 전송이 정체 되기 쉬워서 이렇게 조각을 나누어 패킷을 전송하는 방식을 채용했다고 한다.
2. 패킷의 구조
- IP 패킷은 헤더로 정의되며, 해당 헤더에 많은 필드가 포함된다.
- 헤더의 주요 요소는 아래와 같다.
- 버전
- 사용 중인 IP 버전을 식별하는데 사용
- 현재 버전 4와 6중 하나만 선택 가능 ( IPv4, IPv6 )
- TTL(Time to Live)
- 패킷이 네트워크에 남아 있을 수 있는 시간
- 이것을 처리하는 각 라우터는 이 카운터를 하나 이상 감소
- 프로토콜
- IP패킷의 데이터 부분에 전달되는 전송 계층 프로토콜 ( TCP vs UDP )
- 헤더 체크섬
- 검증 계산의 기반이 되는 데이터
- 이 헤더가 손상되지 않은 경우 IP는 패킷이 양호하다고 간주한다.
- 소스 주소
- 패킷을 네트워크로 보는 장치의 IP 주소
- ICMP(Internet Control Message Protocol) 전송 실패 또는 제어 메시지를 포함하여 네트워크 수준 오류 메시지가 전송 되는 곳
- 대상 주소
- 패킷이 전송되는 주소
- 데이터
- 이더넷 프레임과 같이 데이터 부분이 전송 계층, TCP 혹은 UDP로 전송
- 버전
참조
2. https://enlqn1010.tistory.com/9