IP는 osi 7계층 중, 3계층인 네트워크 계층에서 사용하는 프로토콜이다.
IP는 서로 다른 운영체제 등을 쓰는 다양한 컴퓨터들이 서로 통신할 때 사용하는 약속된 데이터 이동 간의 규약이다.
인터넷에서 이메일을 확인하거나, 파일을 전송하거나 등의 모든 행위를 할 때 컴퓨터(서버) 간에 데이터 전송이 이루어지게 되는데 이러한 데이터 통신에 대한 규약을 IP (인터넷 프로토콜) 이라고 한다.
각 컴퓨터는 고유 주소를 가지고 있어야, 그 컴퓨터를 식별하여 데이터를 보내거나 받을 수 있다. 192.168.1.35
등과 같은 형태를 띠며 이를 IP 주소 라고 한다.
쉽게 말해 데이터 오고가는 이러한 통신에 필요한 각 컴퓨터의 숫자로된 고유주소를 의미한다.
메시지가 목표로 하는 컴퓨터에 잘 도착하도록 해주는 역할을 한다. 지정한 이 IP 주소로 데이터를 전달할 수 있다.
패킷이라는 통신 단위로 데이터를 전달하는데, IP 패킷에는 출발지 IP, 목적지 IP, 전송하는 데이터 등이 포함되어있다.
1) 비연결성: 패킷을 받을 대상이 없거나, 서비스 불능 상태여도 패킷을 전송한다
(예를 들어, 클라이언트는 대상 서버가 패킷을 받을 수 있는지 받을 수 없는 상태인지를 알 수가 없다)
2) 비신뢰성: 에러제어와 흐름제어를 하지 않는다. 중간에 패킷 소실 또는 패킷 전달 순서에 문제가 발생할 때 이러한 부분들을 조절해주는 작업을 하지 않는다
참고.
택배로 내용물을 보낸다는 상황에 비유하자면, 택배를 받는 사람이 집에 있는지 등을 고려하는 부분이 "연결성"과 연관되고,
내용물의 상태를 보장하는 부분은 "신뢰성"과 연관된다.
우선, TCP와 UDP는 osi 7계층 중, 4계층인 전송계층에서 사용하는 프로토콜이다.
TCP는 네트워크 망에 연결된 컴퓨터 프로그램 간 데이터를 순서대로, 에러없이 교환하게 해주는 역할을 한다.
전송 제어 프로토콜 (전송을 어떻게 할지 제어..)
1) 연결형
2) 순서 보장
3) 데이터 전달 보증
4) 신뢰할 수 있는 프로토콜
5) 현재 대부분 TCP 사용
6) 흐름제어 및 혼잡제어
-> 이 모든 것들이 가능한 것은 TCP 세그먼트 안에 전송제어 정보, 순서 정보, 검증 정보들이 포함되어 있기 때문에 가능한 것이다.
다시 말해서, TCP는 신뢰할 수 있는 프로토콜이다.
SYN
)을 보낸다.ACK
)과 함께 연결 확립 요청(SYN
)을 보낸다.ACK
)를 보내게 된다. 이렇게 연결형 통신인 TCP 프로토콜은 연결확립을 한 후 통신을 시작하게 된다. 데이터를 보내기 전에 패킷을 3번 교환하면서 통신 상대방과 연결확립하는 과정을 3-way handshake라고 한다.
예를 들어, 만약 서버가 꺼져있을때 클라이언트가 접속하려고 한다던지 등의 경우 SYN
요청을 보냈을때 서버는 응답이 없을테고, 그러면 클라이언트가 서버에 문제가 있음을 파악하고 데이터를 보내지 안보낼 것이다.
요즘은 마지막에 ACK
를 보냄(송신호스트->수신호스트)과 동시에 데이터를 함께 전송하기도 한다.
사용자 데이터그램 프로토콜
1) 데이터 제어에 관한 어떠한 기능이 없음
2) 비연결형
3) 신뢰성이 낮음
4) TCP보다 속도 빠름
5) IP와 거의 비슷하되, PORT와 체크섬이 추가된다 : ( IP에는 PORT가 없음 )
패킷에 순서를 부여하여 재조립하거나 흐름 제어 또는 혼잡 제어와 같은 기능을 하지 않기에, TCP보다 속도가 빠르며 네트워크 부하가 적다는 장점이 있다.
다만, 신뢰성있는 데이터 전송을 보장하지는 못한다.
따라서 실시간 서비스(steaming)등과 같이 신뢰성보다는 연속성 및 성능이 중요한 서비스에 자주 사용된다.
포트는 한마디로 "논리적인 접속장소"이다.
특히 TCP/IP
프로토콜을 사용할 때에 클라이언트가 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용된다.
정리
IP
는 목적지 서버를 찾는다면,PORT
는 그 서버 안에서 돌아가는 애플리케이션을 구분하는 것이라고 할 수 있다.
즉 같은IP
내에서 프로세스를 구분하는 것이 포트 번호(PORT) 이다.
IP
: 아파트
PORT
: 몇 동, 몇 호
포트번호는 0 ~ 65535까지 할당 가능한데,
0~1023은 잘 알려진 포트 (well-known port)로, 특정 용도로 사용하기 위해 IANA에서 정한 포트이다. 아래 몇가지를 명시하겠다.
FTP : 20, 21
TELNET : 23
DNS : 53
HTTP : 80
HTTPS : 443
200.200.200.2
)이러한 점 때문에 문자로 된 www.naver.com
과 같은 호스트네임을 쓰게 되고, 이는 기억하기 훨씬 쉽다. 그러나 호스트네임은 컴퓨터가 알아듣지 못한다.
따라서 호스트네임을 IP주소로 변환해주는 서비스가 필요한데, 이것이 바로 DNS(도메인 네임 시스템)이다.
-> DNS는 계층 구조를 가지는 분산데이터베이스 구조이다.
1) PC 브라우저를 통해 www.naver.com
이라는 호스트네임에 접근 요청
2-1) Local DNS에 해당 IP 주소가 있는 경우 바로 IP주소를 PC에 보내준다
2-2) 그렇지 않은 경우 Root DNS 서버에 해당 도메인에 대한 IP 주소를 알려달라고 요청한다
3) Root DNS는 해당 정보가 없기 때문에, "com 도메인"을 관리하는 DNS 서버의 주소를 전달해준다
4) Local DNS는 com DNS 서버에게 해당 도메인에 대한 IP 주소를 알려달라고 요청한다
5) com DNS 또한 해당 정보가 없기 때문에, "naver.com 도메인"을 관리하는 DNS 서버의 주소를 전달해준다
6) Local DNS는 naver.com DNS 서버에게 해당 도메인에 대한 IP 주소를 알려달라고 요청한다
7) naver.com DNS 서버에는 요청한 호스트네임 www.naver.com
에 대한 IP 주소가 존재하므로 Local DNS에게 IP 주소를 넘겨주며 응답한다.
8) 이를 수신한 Local DNS는 www.naver.com
에 대한 IP 주소를 캐싱하고 그 IP 주소 정보를 단말(PC)에 전달한다
-> Local DNS 서버가 여러 DNS 서버를 차례대로 물어봐서, 그 답을 찾아가는 과정을 Recursive Query(재귀적 질의) 라고 한다.
http://www.naver.com/index.html
:
URL
http://
:
Protocol (프로토콜)
--> 어떤 방식으로 자원에 접근할 것인가 하는 약속 (ex) http
, https
, ftp
...
naver.com
:
Domain/ Domain Name (도메인)
www.naver.com
, www
:
Host Name(호스트 네임)
네이버 메일인 http://mail.naver.com
과 네이버 웹툰인 http://comic.naver.com
주소에서, mail
과 comic
:
Host Name 호스트 네임 (도메인 네임에서 각각의 서비스를 구분하기 위함)
.com
:
Top-level Domain Name
[References]