[김영한 HTTP]인터넷 네트워크
인터넷 통신
어떤 규칙으로 데이터가 이동할까?
IP(인터넷 프로토콜)
패킷이 이동하기 위해서는 최소한의 규칙이 있어야 함.
그게 바로 IP주소를 통해 가능해짐
클라이언트가 IP주소를 부여받고, 서버도 부여받음
IP (인터넷 프로토콜)의 역할
1. 지정한 IP주소(IP Address)에 데이터 전달 할 수 있도록 정해 놓은 규칙
2. 패킷(Packet)이라는 통신 단위로 데이터 전달하게 됨
메시지를 그냥 보내는게 아닌 IP패킷이라는 규칙을 지켜서 보내야 함
전송데이터 밖에 나의 IP, 목적지의 IP를 적어야 함(주소 적듯)
그리고 던지면 IP 프로토콜에 의해서 서버들이 규약을 따르기에 목적지에 도달하도록 서로 던지며 이동
목적지에서 메시지를 받으면 똑같이 출발지, 목적지를 넣고 OK 메시지를 던져줌
적절하게 노드들이 클라이언트가 있는 방향으로 서로 물어가며 던져줘서 최종적으로 도달
*요청할때랑 응답할때랑 서로 다른곳으로 이동할 수도있음
IP 프로토콜의 한계
1. 비연결성
패킷을 받을 대상이 없거나 서비스 불능 상태(PC가 꺼져있는 등) 여도 패킷 전송
서버가 살아있는지 죽어있는지도 모르고(대상서버가 IP패킷을 받을수있는 상태인지 모름)
없는 주소에 편지 보내고 심지어 보낸 사람은 잘 보내졌는지도 모르는 ..
2. 비신뢰성
-중간에 패킷이 사라지면?(전달하다가 전달해주는 노드가 꺼져버리거나..)
소실되어도 모름
-패킷이 순서대로 안오면?(1500바이트정도 넘으면 끊어서전달함)
나뉜 패킷들이 다른 길로 이동하다가 먼저 도착하는 게 내가 원하는 순서와 맞지않는 경우
이러한 문제점을 해결하지 못함
3. 프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
한 PC에서 게임도 하고 음악도 듣는데 IP가 같아 어떻게 구분 할 것이냐의 문제
위와 같은 문제를 해결해주는게 TCP
TCP
IP에 TCP를 올려서 보완한다고 생각하면 됨
채팅 프로그램으로 미국에 있는 친구에게 메시지를 전송할 경우?
4번까지 만들어지면
네트워크 인터페이스를 통해 나갈때 이더넷프레임을 씌움(물리적 정보 포함된, 렌카드에등록된 맥주소 등)
패킷 ; 수화물(Package) , 덩어리(buket) 의 합성어
박스에 데이터넣어서 보내는 것과 비슷
위와 같이 IP 패킷에 TCP 와 관련한 정보가 들어가게됨
전송제어, 순서, 검증 정보 등으로 IP만으로 해결이 안됐던 문제를 해결하게 됨
TCP 특징
전송 제어 프로토콜(Transmission Control Protocool)
특징
1. 연결지향- TCP 3 way handshake(가상연결)
쟤랑 나랑 연결이 됐는지 안됐는지 연결 하고 보냄
1) 클라이언트에서 서버로 SYN이라는 메세지를 보냄
2) 서버에서 ACK(알았어) 보내면서 나도 연결해줘(SYN)보냄
3) 클라이언트에서 ACK(알았어) 보냄
이렇게 3way handshake를 하면 클라이언트에서도 서버를 믿을 수 있고 서버도 클라믿을 수 있음
이렇게 하면 연결이 됐구나 인식
돼고나면 그다음 4)데이터 전송
그렇기 때문에 처음에 서버가 꺼져있었다면 응답(2번)이 없기에 연결 안돼 메시지 안보냄
그리고 요즘은 최적화가 되어서 3번 ACK를 보낼때 데이터도 같이 전송함
그런데 이건 진짜 연결된게 아님, 개념적으로만, 논리적으로만(물리적X) 연결된 것임
그냥 클라이언트가 서버랑 연결이 됐나보다, 우리끼리만 연결이 됐다 생각하자 임
나를 위한 전용 랜선이 연결된게 아님
중간에 거쳐야 할 수많은 서버, 노드들 몰라 연결됐는지
2. 데이터 전달 보증
메시지를 보냈는데 누락 됐으면 알수있음
데이터 받으면 잘 받았다고 보내줌
전송했는데 아무응답이 없으면 문제 인지
3. 순서보장
1,2,3 순을 원하는데 1,3,2 순으로 오면 잘못보내진 3부터 다버리고 2번부터 다시보내
경우에따라 최적화는 할 수 있지만(버리지않고 킵해놓는 등) 기본적으로는 그럼
신뢰할 수 있는 프로토콜
현재는 대부분 TCP사용
전송제어, 순서, 검증정보 들이 추가되어서 위의 연결지향, 순서보장, 데이터보증이 가능함
그렇기에 신뢰할수있는 프로토콜 이라함
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
-하얀 도화지에 비유(기능이 거의 없음)
-연결지향 - TCP 3 way handshake X
-데이터 전달 보증 X
-순서보장 X
-데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
-정리
IP와 거의 같다, PORT, 체크섬 정도만 추가
TCP정보에도 PORT가 있어, 그런데 IP프로토콜에는 PORT가 없어
애플리케이션에서 추가 작업 필요
PORT가 하는일 ?
하나의 IP에서 여러 애플리케이션이
한 PC에 한IP가 할당되는데 네트워크 게임도하고 음악도 스트리밍으로 듣고있다면?
내 IP로 여러 패킷이 와, 그러면 뭐가 게임용이고 뭐가 스프리밍용패킷인지 구분하지? 라고 할때
쓰는게 PORT
추가로 체크섬은 메시지에 대해서 제대로 맞는지 검증해주는 데이터정도만 간단히 추가
TCP, UDP 는 같은 계층에 있는 IP 계층 바로 위에 있는 프로토콜
UDP는 기능이 없음
그런데 UDP를 쓰는 이유?(장점)
TCP는 다좋은데 3 way 할때시간이 걸림, 그리고 연결 잘됐어등등 체크하고 기타 데이터(순서, 전송제어 등) 다 넣으면
데이터 양도 크고 전송속도도 더 빠르게 만들기 어려워 이미 구축된게 많아서
내가 최적화 하고 싶을때 할수가 없어
그래서 인터넷은 다 TCP 기반으로 쓰고있기 때문에(90%이상 점령) 손보기 어려워
그런데 만약에 내가 더 최적화 할수있다면? TCP그대로 쓰고 내가 UDP에 원하는걸 얹히면 됨
최근 각광 받음, 웹브라우저에서 HTTP 통신할때 3way 도 번거로우니까 줄여보자 해서 더 최적화해서 사용하기도
PORT
항구라는 뜻, 같은 IP주소에서 통신하는 여러 애플리케이션과 통신하기 위해 사용
예를들어 게임, 화상통화, 웹브라우저 요청중이면?
한번에 클라이언트가 여러개 서버랑 통신해야 해
메시지 패킷들이 올텐데 게임에서 필요한건지 화상통화에서 필요한 건지 웹브라우저 응답결과로 온패킷인지
알수가 없음, 보낼때도 마찬가지
IP만 가지고는 이걸 해결할 수 없음
그래서 TCP/IP패킷, UDP도 마찬가지로
출발지 , 목적지 PORT가 존재함
IP에 더해서 PORT라는 개념을 붙임
IP는 목적지 서버를 찾는거고 PORT는 그 서버 안에서 돌아가는 애플리케이션 들을 구분하는 것
IP, PORT 합쳐서 TCP/IP 패킷 이라 하기
200.200.200.2 에 있는 11220 으로 연결할거야 하고 패킷을 쏘고
반대로 서버서 응답할 때는 100.100.100.1 에 10010 으로 보내줌
서버에서 어떻게 내 PORT까지 알 수 있지? 패킷 보낼때 출발지 IP, PORT까지 보냈으니까
IP가 아파트 PORT가 몇동몇호 에 비유할 수 있음
PORT
-0 ~ 65535 할당 가능
-0~ 1023 ; 잘 알려진 포트, 사용하지 않는 것이 좋음
대표적인 예)
FTP - 20, 21
TELENT - 23
HTTP -80
HTTPS - 443 (HTTP 에 보안이 추가된)
DNS
IP를 가지고 통신 하는거 문제점
1. 기억하기 어려워
2. 변경가능하기에 신규로 바뀌면 접근불가능해짐, 다시 IP뭐야 물어봐야 함
DNS
도메인 네임 시스템(Domain Name System)
- 전화번호부
- 도메인 명을 IP 주소로 변환
중간에 전화번호부 같은 서버를 제공해줌
도메인주소를 IP주소로 바꿀 수 있게 해줌.
DNS 서버에 도메인 명을 등록(도메인 사서)하고
내가 먼저 도메인으로 접근하면 DNS 서버에 google.com IP를 주세요 하면
주소를 응답해줌 , 받은 IP주소로 서버에 접근 가능
나중에 IP가 바뀌면? 전화번호부 정보가 바뀌기에 문제없음