본문 바로가기
CS

IP(인터넷 프로토콜), PORT, DNS

by 김선지 2024. 6. 3.

인터넷 프로토콜의 약자로

IP 패킷이라는 통신 단위로 지정한 IP 주소에 데이터를 전달하는 역할을 한다.

 

IP패킷 정보

- 출발지 IP

- 도착지 IP

- 전송 데이터

- 등

 

IP프로토콜의 한계

 - 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송됨

 - 비신뢰성 : 패킷이 중간에 사라지거나 패킷이 순서대로 안오면??? 해결방법이 없다. (패킷들이 다른 노드를 탈 경우)

 - 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?? 구분 방법이 없다.

 

이를 위해 TCP프로토콜이 생겼다.

 

인터넷 프로토콜의 4계층

애플리케이션 계층 - HTTP, FTP (웹브라우저, 네트워크게임, 채팅 프로그램) - socket라이브러리
전송 계층 - TCP, UDP
인터넷 계층 - IP 
네트워크 인터페이스 계층 (랜카드, 랜드라이버)

 

동작 방식 

1. 애플리케이션 계층 

    a. 프로그램이 HELLO라는 메시지 생서

    b. SOCKET 라이브러리를 통해 전달

2. OS 계층

   a. TCP 정보 생성, 메시지 데이터 포함

   b. IP 패킷 생성, TCP 데이터 포함

3. 네트워크 인터페이스

   a. 랜카드를 통해서 인터넷 -> 서버에 도착

 

TCP/IP패킷 정보

IP패킷 출발지 IP, 목적지 IP, 기타
TCP 세그먼트 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증정보
전송데이터 전송데이터

 

TCP의 특징

 TCP : 전송 제어 프로토콜 (Transmission Control Protocol)

- 연결지향 (TCP 3 way handshake) 가상연결

- 데이터 전달 보증 (req => res)

- 데이터 순서 보장 (잘못오면 서버가 클라이언트에게 다시 보내라는 response 전달 - TCP 세그먼트에 순서)

- 신뢰할 수 있는 프로토콜

- 현재는 대부분 TCP사용 

 

그래서 저번 토이프로젝트 웹소켓 관련해서 HTTPS로 바꿨을때 TCP/IP 요청이 여러번 와있었구나...... 이제야 알았다.

 

TCP 3 way Handshake란? =>  수많은 노드들을 거친 논리적 연결임.

1. SYN(C => S) (synchronize) - 클라이언트 => 서버  : 접속요청
2. SYN(S => C) + ACK(acknowledge) (C => S)   : 접속요청 , 요청수락
3. ACK (S => C)와 함께 데이터 전송가능   : 요청수락 , 데이터 전송
이후 4. 데이터 전송  : 데이터 전송

 

 

UDP 프로토콜

사용자 데이터그램 프로토콜 (User Datagram Protocol)

- 기능이 없다

- 연결지향

- 순서, 전달 보증 x

- 단순하고 빠르다 (핸드쉐이킹 x)

- IP + PORT + 체크섬(메세지에 대해서 제대로 검증하는 데이터)이 추가된 IP와 비슷한 프로토콜이다.

- 애플리케이션에서 추가 작업이 필요하다.

 

결론: 포트가 있어 한 아이피로 여러 행동을 할 수 있고 빠르다.

 

 

PORT

TCP/IP 패킷을 받을 때 port 구분을 하여 하나의 아이피로 여러 종류의 패킷을 받을 수 있게끔 하는 것

같은 IP 내에서 프로세스 구분

0 ~ 65535 할당가능

0 ~ 1023: 잘 알려진 포트로 사용하지 않는 것이 좋음

FTP - 20, 21

TELNET - 23

 

 

DNS( Domain Name System)

ip를 기억하기 어려우니까 DNS 서버에서 도메인을 IP로 매칭해주는 시스템

클라이언트가 도메인을 => DNS서버로 보내면 => DNS 서버는 매칭되는 IP를 반환하고 이를 통해서 클라이언트는 IP주소에 요청을 보낸다.

'CS' 카테고리의 다른 글

HTTP 헤더 - 헤더2 (캐시, 조건부)  (0) 2024.06.09
HTTP 헤더 - 헤더1  (0) 2024.06.09
HTTP 상태코드  (0) 2024.06.09
URI와 웹 브라우저 요청 흐름, Stateful  (0) 2024.06.04
Webpack, Babel, Polyfill  (0) 2024.04.07