http웹 기본지식





개발을 공부하다보면 처음 나왔던 개념들이 계속해서 보완되고 보완되고

그러면서 점점 더 나은방향으로 발전하는데

이런거 보면 아무리 난다긴다하는 천재들이 개발자 중에 많다고해도 사람 사는거 다 똑같다는 생각이 드는게

아무리 위대한 인간이라 할지라도 처음부터 완벽한 모델을 구현할수는 없다는게 그냥 검증된 사실같다.

이러나 저러나 사용하다보면 문제가 발생하고 그 문제를 해결하기 위해

더 나은 대안을 제시하고 그게 한 언어를 더욱 발전시키는 이 사이클이… 그냥 진리라는 생각이 든다.

더 나은 대안을 제시하지 못했을경우에 사양되는거겠지 뭐( IE처럼.. )

그러니까 완벽해질때까지 기다리지말고 그냥 시작하기.



여튼간..

http 웹 통신 기본에 대해서 수업을 듣고 있는데,

어떤 개념 설명 => 한계 => 대안 => 보완

이 사이클인것 같아서 갑자기 끄적끄적 적어봤다





IP

인터넷 프로토콜.

ip주소로 패킷을 전달하는데 이때 패킷은 출발지ip, 목적지ip, 기타 등등을 전송한다.

But 한계가 존재함

  1. 비연결성 : 서버가 만약 죽어있는 상태라면?
  2. 비신뢰성 : 전달해주다가 중간에 서버가 또 죽어버린다면? 중간에 패킷이 사라지면? 패킷이 순서대로 안오면?
  3. 프로그램 구분 : 같은 ip를 사용하는 서버에서 통신하는 어플리케이션이 두개 이상이면 어떻게 구분할것인가?

이걸 보완하기 위해서 사용되는게 tcp임




프로토콜 계층

************** 인터넷 프로토콜 스택의 4계층 **************
1. 애플리케이션 계층 - HTTP, FTP
2. 전송 계층 - TCP, UDP
3. 인터넷 계층 - IP
4. 네트워크 인터페이스 계층 (LAN 장비)

1번 애플리케이션 계층에서 데이터를 전송하면,

2번 전송계층에서 1번 데이터를 감싼 뒤에 TCP정보를 생성한다.

3번 인터넷 계층에서는 2번에서 만든 데이터를 포함한 ip패킷을 만든다.

그리고 마지막으로는 LAN장비를 통해서 이더넷프레임에 포함이 되서 정보를 보내게 된다



  • 패킷 => 패키지 + 버킷
1. 애플리케이션 계층 - HTTP, FTP
2. 전송 계층 - TCP, UDP => 출발지 port, 목적지 port, 전송제어, 순서, 검증 정보
3. 인터넷 계층 - IP => 출발지ip, 목적지ip, 기타...



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

  • 연결지향 - TCP 3 way handshake(가상 연결) => 적어도 3번은 왔다갔다함으로써 둘이 서로 신뢰할 수 있다는 신호가 됨
  • 데이터 전달 보증 => 중간에 누락이 있으면 클라이언트에서 알 수 있음
  • 순서 보장
  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용




PORT

하나의 클라이언트에서 한번에 두개 이상의 서버에 연결해야할때 포트를 통해 구분지어준다

(예를 들어 게임을 하면서 음악을 듣고 채팅을 하고 있다면? 동시에 3개의 서버에 데이터를 보내야함)

클라이언트에서 서버로 패킷을 던질때,

출발지 ip, 목적지ip, 출발지 port, 목적지 port, 순서 등등등을 함께 보내기 때문에

이게 하나의 클라이언트에서 왔다고 하더라도 어느 클라이언트에서 요청했는지 알 수 있다

그래서 ip가 아파트라면, port는 호수를 알려주는 개념이라고 생각하면 좋다




DNS (domain name system)

ip는 암기하기 어렵다. 더욱이, ip주소를 바꿀 수 있다.

dns는 ip를 위한 전화번호부 같은 개념인데, 도메인을 등록하고나면 해당 도메인에 접근하면 연결된 ip에 접속할 수 있다




URI (Uniform Resource Identifier)

  • Uniform : 리소스 식별하는 통일된 방식
  • Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음)
  • Identifier : 다른 항목과 구분하는데 필요한 정보

URI는 URL(리소스가 있는 위치를 지정)과 URN(리소스에 이름을 부여)을 포함하는 개념이다.

(걍 URI와 URL을 똑같은 개념으로 보면 됨)



< URL 전체문법 >

scheme://[userinfo@]host[:port][/path][?query][#fragment]

https://www.google.com:443/search?q=hello&hl=ko
  • 프로토콜 ( https )
  • userinfo@ : 거의 사용안함
  • 호스트명 ( www.google.com )
  • 포트번호 ( 443 ) : 생략가능
  • 패스 (/search ) : 리소스 경로
  • 쿼리 파라미터 ( q=hello&hl=ko ) : key=value 형태. ?로 시작, &로 추가 가능
  • fragment : 서버로 전송되는 데이터는 아님. html파일에서 분기처리할때 씀

















© 2018. by sora

Powered by sora