1. 인터넷 네트워크
* 인터넷 통신
* IP (Internet Protocol)
* TCP, UDP
* PORT
* DNS
1-1. 인터넷 통신
복잡한 '인터넷 망' 을 이해하기 위해서는 IP에 대한 이해가 필요하다.
단순하게 통신하면 주소라는게 필요없겠지만,
바다건너 보이지않는 곳으로까지 통신하려면 인터넷 망을 거쳐야하는데 복잡한 망을 지나 목적지까지 정확하게 가려면 목적지 주소가 필요하다.
1-2. IP
- 지정한 IP주소에 데이터를 전달한다.
- Packet 단위
[ IP Protocol의 한계 ]
* 비연결성
* 비신뢰성
- IP Protocol만 사용한다면 의문이 생긴다.
같은 PC에서 여러 패킷을 요청할경우에는? 동시에 여러 패킷을 받게 될 경우에는?!
이런부분을 해결하고자 TCP/UDP가 등장한다.
1-3. TCP/UDP
[ 인터넷 프로토콜 스택의 4계층 ]
애플리케이션계층 FTP/HTTP 웹브라우저
전송계층 TCP/UDP OS
IP
네트워크
인터페이스계층 LAN
1-3-1. TCP (Transmission Control Protocol)
- 연결지향 (TCP 3-ways handshake) -> 가상연결
- 데이터 전달보증
- 순서보장
- 신뢰할 수 있는 프로토콜
* SYN : 연결요청
* ACK : 연결수락
- 3-ways handshake 는 서로 연결을 확인한 후에 연결을 주고받는다.
이때, 물리적으로 정확하게 연결된 것이 아니라 논리적으로 연결을 확인한? '가상연결'이다.
기존에는 마지막 ACK 응답 이후에 데이터를 전송했지만,
최근에는 ACK + 데이터 전송을 함께 진행하기도 한다.
1-3-2. UDP (User Datagram Protocol)
- IP와 크게 다를것이 없다.
신뢰성? 순서? 전달보증? 아무런 기능이없다.
다만, IP와 다르게 PORT 번호나 Checksum이 추가된다.-> IP주소가 같을때 PORT 구분정도 가능하겠다.
- 기능도 없는데 왜쓸까?
TCP가 연결이 됐는지 안됐는지 3번이나 확인하는동안 UDP는 보내버리니까 빠르다.
1-4. PORT
- IP는 아파트 PORT는 동호수 느낌으로 생각하라고한다.
- 같은 IP내에서 프로세스를 구분하게 해준다.
이런식으로 하나의 클라이언트가 채팅도하고 음악도듣고 메일도 보내고 싶을때,
각각의 서버에서 주는 데이터가 요청한 정확한 프로세스에 들어가야하는데
이때, 사용하는게 PORT!
* http : 80
* https : 443
1-5. DNS (Domain Name System)
- IP는 기억하기 어렵다.
- IP는 변경될 수 있다.
- DNS는 이런 단점을 보완해준다.
- DNS서버에 google.com이라는 도메인명의 IP가 200.200.200.3 이라고 등록해두면
클라이언트가 google.com이라고 입력했을때 DNS서버가 IP주소를 알려주고 클라이언트는 알려준 IP주소로 통신하게된다.
2. URI와 웹 브라우저의 흐름
2-1. URI
- URI는 Locator , Name 또는 둘다로 분류가능하다.
- 자원이 어디에 있는지 식별할 수 있도록 한다.
- URN : 리소스 이름
- URL : 리소스 위치 -> URL을 주로 사용한다.
https:// www.google.com :443 /search ?q=hello
프로토콜 호스트명 PORT PATH 쿼리¶ms
#fragment ->HTML내부이동
2-2. 웹브라우저 요청 흐름
웹브라우저에서
https://www.google.com:443/search?q=hello
를 입력하면
DNS 서버에서 www.google.com의 IP를 찾고
웹브라우저가 HTTP 요청메세지를 만든다.
GET/search?q=hello
Host:www.google.com
Socket라이브러리를 통해 TCP/IP로 전달해서 패킷을 씌우고
서버 www.google.com으로 전달한다.
도착한메세지를 서버가 확인하고
HTTP응답메세지를 전송한다.
200OK + 요청한것들
클라이언트는 서버에서 온 응답을 확인하고
HTML렌더링이 진행된다.
웹은 알면알수록 나에게 어렵게 느껴져서
계속 반복해서 보려고한다.
웹이랑 어서 더 친해지고 싶다 ㅠ.ㅠ
유익하네요!