인터넷 네트워크 (IP, TCP, PORT, DNS)
인터넷 통신
클라이언트와 서버 사이에는 인터넷이 있다
그 인터넷은 수많은 노드들의 연결로 이루어져있다.
그 수많은 노들들 사이에서 많은 정보들이 왔다 갔다 한다.
그런데 과연 정보들이 어떠한 규칙으로 왔다갔다 할까?
아래의 영어 문자들이 바로 그 규칙들이다.
IP(인터넷 프로토콜)
모든 클라이언트와 서버는 IP주소를 가지고 있다.
IP주소는 말 그대로 주소다.
역할 : 지정한 IP주소에 데이터 전달 O
++ 패킷이라는 통산 단위로 데이터 전달
IP 패킷이란? 데이터의 포장지다!(택배 박스) / 출발지IP, 목적지IP, 기타..
IP 패킷을 보면서 노드들이 서로 데이터를 던진다 그러다보면 도착
패킷은 패키지와 버킷의 합성어
BUT,
IP 프로토콜의 한계
- 비연결성 : 받을 수 없는 상황인데도 던진다(통신 불능, 도착 대상 X)
- 비신뢰성 : 중간에 패킷(포장지)이 사라진다 OR 패킷이 순서대로 안온다.
- 프로그램 구분 : 동일한 IP가 존재? / 여러명이 같은 IP주소를 돌려쓰는 상황(가정집, 회사)
비신뢰성 ++
전달과정에서 정보를 나눠보내다가 순서가 섞여서 도착하기도 한다
-> TCP, UDP 필요
TCP, UDP
애플리케이션 계층 - HTTP, FTP 전송 계층 - TCP, UDP 인터넷 계층 - IP 네트워크 인터페이스 계층 |
1. 프로그램이 HELLO, WORL 메시지 생성
2. SOCKET 라이브러리를 통해 전달
3. TCP 정보 생성, 메시지 데이터 포함
4. IP 패킷 생성, TCP 데이터 포함
이후에 LAN카드 통해서 인터넷 타고 서버로 전달
메시지 바깥에 TCP / TCP 겉에 IP / IP 바깥에 인터넷 프레임(랜카드 내에 있는 MAC 주소 등)
TCP/IP 패킷 정보
IP : 출발지 IP, 목적지 IP, 기타.. |
TCP : 출발지 PORT, 목적지 PORT 전송 제어, 순서, 검증 정보.. |
전송데이터 |
전송데이터를 감싸는 TCP(Transmission Control Protocol)!
: 전송제어 프로토콜
- 연결지향 - TCP 3 way handshake (가상 연결) / 먼저 연결을 해야 데이터를 보낸다 / 컴퓨터 꺼져있으면 전송 X
- 데이터 전달 보증 / 전달이 잘 되었는지 알려준다. (서버에서 데이터를 잘 받았다고 알려준다)
- 순서 보장 / 전송 순서를 잘 유지해준다. ( 중간에 데이터가 섞이면 다시 보내라고 응답한다)
=>
신뢰할 수 있는 프로토콜
현재는 대부분 TCP 사용
TCP 3 way handshake? / connect 연결과정!
1. 클라이언트가 먼저 서버에 SYN 전송
2. 서버가 응답으로 SYN+ACK 전송
3. 클라이언트는 확인하고 다시 서버에 ACK 전송
4. 핸드쉐이크 끝났으면 양쪽에서 데이터 전송(3번 과정에서 클라이언트가 데이터를 보내기도 함)
근데 개념적인 연결이다! / 그 중간에 수많은 노드(인터넷)들이 존재하기 때문에
별거 없지만 IP를 보완하는 UDP(User Datagram Protocol)
기능이 거의 없다
데이터 전달 및 순서 보장 X, 단순하고 빠름
핵심기능 => 같은 IP를 사용하는 어플리케이션(멜론, 휴대폰 게임)들을 구분해준다
쓰는 이유 : TCP는 핸드쉐이크 하느라 너무 오래걸린다.. 간소화된것도 필요
UDP |
IP 정보 + PORT (IP에는 없기 때문에) + 체크섬(메시지가 정확한지 검증) ++ 어플리케이션에서 추가작업은 필요 |
현재 : 거의 모든 것을 TCP로 연결!
이후 트렌드 : UDP 통신을 통해 최적화를 시도중에 있다! (어플리케이션에서 검증하겠다!)
PORT - 같은 IP 내에서 프로세스 구분
IP : 출발지 IP, 목적지 IP, 기타.. |
|
TCP : 출발지 PORT, 목적지 PORT 전송 제어, 순서, 검증 정보.. |
UDP: IP 정보 + PORT + 체크섬 |
전송데이터 |
포트는 TCP나 UDP에 들어있다.
PORT를 통해서 게임, 화상통화 등 다양한 한 기기에서 이루어지는 다양한 요청들을 구분할 수 있다.
100.100.100.1(IP)/8080(PORT)
100.100.100.1(IP)/21000(PORT)
게임 - 8080
화상통화 - 21000
...
PORT
0~65535 : 할당가능
0~1023 : 잘 알려진 포트, 사용 X
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS -443
DNS(도메인 네임 시스템) - IP 주소의 전화번호부
만약 누가 IP주소를 바꾼다면? 전송이 안된다!
구글이 IP주로를 바꿔도 되는이유! => DNS서버가 있기 때문에~
DNS 서버에서 google.com을 등록!
이제 DNS서버에서 IP주소를 바꾸면 모든게 해결!
내가 어떤 도메인을 치면 먼저 DNS서버에서 해당 아이피로 처리해버린다