0. 개요
이 게시물에서는 제목에 적힌대로 웹 개발에 필수적인 지식들인 IP, TCP, UDP, 포트, DNS에 대해 간단한 개념과 내용을 정리할 것이다. 사실 각각의 개념들은 하나하나 깊게 살펴봐야할 내용들이지만, 추후에 더 깊은 공부를 하여 작성할 예정이다.
1. 프로토콜 계층
클라이언트에서 서버로 통신을 할때, 데이터를 바로 전달하지 않고 감싸서 보내게 된다.
데이터 생성 -> TCP 세그먼트 생성 -> IP 패킷 생성 -> 이더넷 프레임 생성 -> 전송
2. IP(Internet Protocol)
IP란, 인터넷에 연결되어 있는 장비들(컴퓨터, 스마트폰 등등..)을 식별하기 위해 각각의 장비들에게 부여되는 주소를 뜻한다.
따라서 각 기기의 IP 주소를 이용하여 수많은 노드들로 이루어져 있는 인터넷에서 서로 통신이 가능하게 만들어준다. 이때, 데이터를 "IP 패킷"에 담아서 전달해준다.
IP 패킷에 데이터를 담아 보냄으로서, 데이터의 출발지, 목적지를 알 수 있게 된다.
하지만 IP 프로토콜에는 명확한 한계가 존재한다.
1) 비 연결성
IP 패킷을 보내는 기기에 입장에서는 봤을때 목적지 서버가 켜져있는지, 애초에 존재하는지 조차 확인할 수 없다. 따라서 패킷을 받을 대상이 없거나 서비스 불능 상태이더라도, 패킷을 전송해버린다.
2) 비 신뢰성
- 패킷 소실
만일에 패킷이 중간에 소실되어도 보낸 클라이언트, 서버 둘다 이에 대해 알 수 없다. 따라서 클라이언트는 정상적으로 데이터를 전달했을거라고 생각할 것이고, 서버는 클라이언트가 데이터를 보냈다는 사실을 아예 모를것이다.
- 패킷 전달 순서
여러개의 패킷을 동시에 보낸다고 가정해보자. 동시에 보내더라도 패킷들은 같이 보내지지 않기 때문에, 도착한 후 정보가 바뀔 수 있다.
3. TCP(Transmission Control Protocol)
TCP(전송 제어 프로토콜) 세그먼트를 포함한 IP 패킷의 모양은 다음과 같다. 이는 데이터를 순서대로, 에러 없이 교환하도록 도와준다.
TCP의 특징에 대해 정리해 보자.
1) 연결 지향
- TCP 3 way handshake
앞서 IP 프로토콜의 비 연결성 문제를 완벽하게 해결해주는 기능이다. 클라이언트와 서버가 데이터를 통신하기 전, 그림처럼 서로 정보를 주고받는다.
1. 클라이언트가 서버에게 접속 요청(SYN)을 보낸다.
2. 서버는 연결에 대해 허가한다는 응답(ACK)와 함께 연결 확인 요청(SYN)을 보낸다.
3. 클라이언트는 다시 연결 확인 요청에 대한 응답(ACK)를 보낸다.
-> 마지막 ACK와 동시에 데이터를 전송하기도 한다.
즉, 이는 서로 데이터를 보내고, 받을 준비가 되었는지 확인하는 기능이다. 참고로 연결을 해제할때는 4 way handshake를 사용한다.
2) 데이터 전달 보증
데이터를 전송하면, 데이터를 받았다고 응답받기 때문에 패킷이 중간에 누락되면 알 수 있다. 이는 앞서 IP 프로토콜의 비 신뢰성, 패킷 소실 문제를 해결해준다.
3) 순서 보장
위에 TCP 세그먼트를 포함한 IP 패킷을 보면, "순서" 라는 항목이 있다. 만일 받는 순서가 잘못된 경우, 서버가 "어디서부터 어디까지 다시 보내라" 라는 정보를 전달해준다. 이는 앞서 IP 프로토콜의 비신뢰성, 패킷 전달 순서 문제를 해결해준다.
따라서 TCP는 신뢰할 수 있는 프로토콜이며, 현재 대부분은 TCP를 사용한다.(HTTP 1.1기준)
4. UDP(User Datagram Protocol)
UDP(사용자 데이터그램 프로토콜)는 데이터 제어에 대한 어떠한 기능도 없다. TCP에서 제공해주는 TCP 3 way handshake, 데이터 전달 보증, 순서 보장 모두 제공하지 않는다.
하지만, 단순한 만큼 그 속도가 빠르다.
정리해조면, IP와 거의 같고 여기에 포트, 체크섬 정도만 추가된 기능이다. 따라서 애플리케이션에서 추가 작업이 필요하다.
5. 포트(PORT)
포트는 TCP/IP 프로토콜을 사용할 때, 클라이언트가 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용한다. IP로 서버를 구분한다고 하면, PORT로 같은 IP 내에서 프로세스를 구분하는 것이라고 볼 수 있다.
포트번호는 0 ~ 65535로 할당 가능한데, 0 ~ 1023번은 잘 알려진 포트이며, 사용하지 않는 것을 권장한다. 대표적으로
- FTP: 20, 21
- TELNET: 23
- HTTP: 80
- HTTPS: 443
6. DNS(Domain Name System)
DNS는 도메인 이름을 IP주소로 변환해주는 역할을 한다. IP 주소는 기억하기 어려우며 중간에 변경될 수도 있기 때문에, DNS에서 IP 주소를 찾아 데이터를 보내게 된다.
위 내용은 김영한 님의 인프런 강의 "모든 개발자를 위한 HTTP 웹 기본 지식"의 내용과 강의자료를 토대로 작성된 게시글입니다.
강의 링크:
'cs > 컴퓨터 네트워크' 카테고리의 다른 글
HTTP 상태코드 (0) | 2023.01.12 |
---|---|
HTTP API 설계하는 법 (0) | 2023.01.12 |
HTTP 메서드(GET, POST, PUT, PATCH, DELETE) (0) | 2023.01.12 |
HTTP란?, HTTP 메시지 (0) | 2023.01.12 |
URI, URL, URN란? (0) | 2023.01.11 |
댓글