기본적으로 '소켓' 이란곳에 데이터를 담아서 서버에 보낸다고 가정 했을때, 그사이에 인터넷망이 '노드' 라는것을 통해 서버까지 ip주소로 전달해준다.
하지만 이러한 ip주소로만 전달하는 방식은 문제점이있다. 사용자가 서버에 데이터를 보낼떄 그 서버가 안켜져있을수도 있거나, 중간에 소켓을 잃어버리거나, 아니면 데이터 순서가 잘못 전달 될수 있다.
그걸 해결하고자 나온게 TCP UDP 이다
-> ip프로토콜만 사용했을때 문제점들을 해결 해준다.
사용자 데이터그램 프로토콜(User Datagram Protocol)
• 하얀 도화지에 비유(기능이 거의 없음)
• 연결지향 - TCP 3 way handshake X
• 데이터 전달 보증 X
• 순서 보장 X
• 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
• 정리
• IP와 거의 같다. +PORT +체크섬 정도만 추가
그림에서처럼 데이터 위에 TCP를 감싸고 그다음 IP를 감싸서 보낸다고 생각하면된다.->TCP를 감싸고 보내니 노드끼리 주고 받을떄 문제가 발생하지 않는다.
간단히 말하면 서버가 켜져있는지 확인 하는 작업이다. 그래야 소켓을 보냈을때 잘 도착하니까. 서버 열렸어? 응 열렸어 이런식으로 주고 받는 느낌이다.
이 외에도 위에 설명 했듯이 데이터전달보증과 순서보증에 대한 것도 있다.
ip주소는 너무 길어서 외우기가 힘들고 언제든지 바뀔수 있다. 이를 해결하기위해 DNS라는것이 나왔다.
ip 주소가 바뀌어도 같은 도메인 이름을 입력하면 그 변경된 ip주소로 간다.
주로 프로토콜 사용
프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
http는 80포트 ,https 443포트를 주로 사용 , 생략 가능
URL 에서 요청할 PORT와 IP주소를 가져온다.
알아온주소로 TCP/IP 에 출발지 ip,port 목적지 ip,port를 심고 그 안에 요청메시지를 넣어서 보내준다
• HTML, TEXT
• IMAGE, 음성, 영상, 파일
• JSON, XML (API)
• 거의 모든 형태의 데이터 전송 가능
• 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
서버가 클라이언트의 상태를 보존 x
서버의 확장성이 높지만 클라이언트에게 추가 데이터 전송을 해야한다
갑자기 클라이언트가 몰려도 서버를 대거 투입 할수 있다.
중간에 서버1이 끊어져 서버2로 옮겨도 그전 데이터(내용) 에는 지장이 없다. 계속해서 이어나갈수 있다.
중간에 서버가 바뀌면 안된다.
서버가 클라이언트의 상태를 보존 ㅇ
중간에 서버 1이 끊기고 서버 2로 가면, 기존데이터들이 없어져 처음부터 다시 시작해야함
실무 한계
• 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
• 무상태
• 예) 로그인이 필요 없는 단순한 서비스 소개 화면
• 상태 유지
• 예) 로그인
• 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
• 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
• 상태 유지는 최소한만 사용
연결유지 모델은 처음한번 TCP/IP 연결을 한뒤에도 계속 연결 상태를 유지해 클라이언트가 요청한 데이터를 쉽게 주고받을수 있지만 계속 서버를 유지해야 하기 떄문에 서버자원이 소모된다.
연결을 유지하지 않는 모델은 서버자원을 아낄 수 있지만, 요청과 응답이 끝난뒤 클라이언트가 또 요청을 하면 다시한번 TCP/IP 를 연결하고 HTML CSS 등 다시 다 받아야한다.
-> 그래서 요즘은 연결유지 모델로 가는 추세이다. HTTP도 버전이 있는데 2 와 3에서 더많은 최적화가 되 있다.
크게 start line 과, 헤더 ,바디 부분으로 나눈다.
start line 은 http 메서드, path , httpverion 등 으로 이루어져 있다.
헤더는 HTTP전송에 필요한 모든 부가정보( 바디의 내용, 크기, 압축, 인증, UTF-8 등등)
바디는 실제 전송할 데이터 /HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능