https://asfirstalways.tistory.com/318
https://kwongyo.tistory.com/22
0. 웹 (www)
웹은 인터넷을 활용하는 서비스 중의 하나로 인터넷에 연결된 컴퓨터를 통해서 정보를 공유할 수 있는 공간이다.
하이퍼 텍스트와 그림을 통하여 서비스를 이용할 수 있다.
1. 웹 서버와 웹 클라이언트
웹은 웹 서버와 웹 클라이언트로 구성되어있다.
1) 웹 서버 ( web server )
- 웹 사이트를 올린다.
- 웹에 있는 문서, 파일, 이미지, 동영상 등의 데이터를 저장하고 관리한다.
- 웹 클라이언트의 요청을 받고 웹 문서를 전송한다.
2) 웹 클라이언트 ( web client )
- 웹 클라이언트는 웹 브라우저(크롬, 웨일, 엣지 등)와 같은 웹에 접근할 수 있는
인터넷이 연결된 소프트웨어를 말한다.
- 사용자의 인터페이스를 담당한다.
- 웹 서버에게 웹 문서를 요청하고, 웹 서버로부터 받은 웹 문서를 사용자에게 보여준다.
2. 웹 브라우저의 동작과정
3. DNS ( Domain Name System )
1) DNS
네트워크 상에서 컴퓨터는 ip주소로 서로를 식별하고 통신한다.
그렇기 때문에 네트워크를 통해서 서버 등에 접속하기 위해서는 ip주소를 이용해야 한다.
그러나 복잡한 ip주소를 하나하나 외우고 다닐 수 없기 때문에 ip주소의 별칭과 같은 DNS 체계게 만들어졌다.
2) DNS 체계
4. 패킷 전송 과정
1) 패킷 ( packet )
패킷은 네트워크를 통해 전송하기 쉽도록 쪼갠 데이터의 전송단위이다.
사실상 OSI 7 Layer에서 3계층의 pdu를 패킷이라고 하긴 하지만,
계층을 가리지 않고 그냥 "전송 단위"의 의미로 사용하는 것이 보편적이다.
2) 패킷 전송과정
① 프로토콜 스택에 HTTP 리퀘스트 메세지를 남긴다.
프로토콜 스택 :
컴퓨터가 네트워크를 통해 데이터를 주고받기 위해서는 프로토콜이 필요하다.
프로토콜 스택은 계층화된 구조로 모여있는 프로토콜의 집합이다. 계층화를 하는 이유는 프로토콜의 역할을 분담하기 위해서이다. 한 계층에 있는 하나의 프로토콜이 가까운 계층의 다른 프로토콜과 통신을 한다. 이와 같은 방식으로 가장 아래있는 계층부터 꼭대기에 있는 계층까지 (프로토콜 스택 내에서)통신이 이루어진다.
cf) 프로토콜 스택은 5계층으로 구성되어있다.
프로토콜의 스택의 5계층
Application |
Transport |
Network |
Link |
Physical |
이러한 프로토콜 스택은 MTU라는 매개변수를 바탕으로 데이터 저장기준을 판단한다.
MTU :
한 패킷으로 운반할 수 있는 디지털 데이터의 최대 길이이다. (패킷 앞부분의 여러 헤더를 포함한 값)
MSS :
한 패킷으로 운반할 수 있는 디지털 데이터의 최대 길이이다. (패킷 앞부분의 여러 헤더를 제외한 값)
② 데이터가 클 때는 분할하여 보낸다.
HTTP 리퀘스트 메시지는 보통 한 개의 패킷 안에 들어간다.
하지만 긴 데이터의 경우에는 더 많은 패킷안에 들어갈 수 있다. (ex.게시판)
이럴 때는 송신 버퍼에 들어가있는 데이터를 MSS 크기에 맞춰 나눈 뒤 tcp 헤더를 붙이고 패킷에 넣어 송신한다.
③ ACK를 사용하여 패킷이 도착했는지 확인한다.
TCP 방식은 패킷이 상대방에게 올바르게 도착해야 다음 동작을 이어서 한다.
만약 도착하지 않았다면 재송신한다.
흠.. 도착 유무를 어떻게 판단하는가?
TCP 담당 부분은 데이터를 패킷으로 나눌 때, 패킷이 몇 번째 바이트인가를 센다.
그리고 이 패킷을 송신할 때마다 몇 번째인가 세어둔 값인 시퀀스 넘버를 TCP 헤더에 기록한다.
(사실 시퀀스넘버는 여러 이유 때문에 1부터 시작하지 않고 난수 산출한 값으로 설정된다.)
1번째 바이트 | ... | 316번째 바이트 | 804번째 바이트 |
1번째 바이트의 ACK 번호는 1이다.
316번째 바이트의 ACK 번호는 316이다.
804번째 바이트의 ACK 번호는 804이다.
즉, n 번째 바이트의 ACK 번호는 n이다.
이렇게 시퀀스 넘버를 이용하면 수신측에서 패킷이 누락되었는지 확인할 수 있다.
④ 패킷 평균 왕복 시간으로 ACK 번호의 대기 시간을 조정한다.
ACK가 돌아올 때까지의 대기시간을 타임아웃이라고 한다. 네트워크의 정체가 일어나면 타임아웃 값이 커진다.
이 타임아웃 값을 어느정도 길게 설정해줘야 재전송의 낭비가 없다.
음 다시 말하면, 데이터의 수신이 정상적으로 처리되었는데도 불구하고 데이터를 재전송하는 일이 일어나지 않는다는 말이다.
그러면 무조건 타임아웃을 길게 잡으면 되는 것 아닌가?
아니다! 띠용
너무 크기 잡으면 속도 저하가 될 수 있다.
아니 그러면 너무 작게 잡아도 안 되고 너무 크게 잡아도 안 되고, 어떻게 해야되는건가...
그래서 TCP는 타임아웃을 일정한 값으로 지정하는 것이 아니라
ACK 번호가 돌아오는 시간을 기준으로 대기시간을 동적으로 변경하는 방법을 사용한다.
⑦ HTTP 응답 메시지를 수신한다.
⑧ 데이터를 모두 보냈을 때 연결을 끊는다.
⑨ 소켓을 말소한다.
5. GET & POST
GET과 POST는 HTTP 프로토콜을 이용해서 서버에 어떤 것을 전달해야할 때 사용하는 방식이다.
둘의 전달 방식은 다르다.
1) Get
- 파라미터가 웹 페이지 주소에 노출되는 방식이다.
http://localhost/asdf?name=doyeon&condition=baegopa
파라미터는 name과 value로 이루어져있으며 ? 기호를 붙여서 사용한다.
여러 값을 서버에 넘길 때는 &로 구분지어준다.
- 데이터의 용량제한이 있다.
- 보안에 취약하다.
- 보안에 취약하기 때문에 중요한 정보를 담고 있지 않는 페이지에서 주로 사용한다.
2) Post
- 주소가 파라미터에 노출되지 않는다.
- 전달할 수 있는 데이터의 용량 제한이 없다.
- 중요 정보( 게시판, 회원가입 )를 서버로 넘길 때 사용한다.
'Sunrin > Layer7' 카테고리의 다른 글
HackCTF Sysrop (0) | 2020.11.27 |
---|---|
HackCTF : Cryptography, Smooth CipherText, Classic Cipher (0) | 2020.11.06 |
컨테이너와 도커 (0) | 2020.09.16 |
객체지향 프로그래밍 (Object-Oriented Programming) (0) | 2020.09.09 |
Stack pivoting (0) | 2020.09.08 |