이번 포스팅에서는 앞으로 자주 나올 Round Trip Time (RTT)와 Http 연결 유지 여부에 따른 Persistent Http, Non-Persistent Http 그리고 Http 메세지에 대해서 알아보자.
RTT : Round Trip Time
- RTT란?
- 아주 작은 패킷이 클라이언트와 서버 사이를 왕복하는데 걸리는 시간이다.
- '아주 작은 패킷'은 Transmission Delay를 무시한다는 뜻이다. 단위 패킷당 네트워크 왕복시간 정도로 해석하자.
- 앞으로 RTT는 기준이 되는 시간처럼 사용한다.
Non-Persistent Http
- 앞에서 Http는 File Tansfer와 비슷하므로 Data Integrity가 중요하다고 했다.
- 따라서 Http는 UDP 가 아닌 신뢰성있는 TCP를 사용한다.
- Non-Persistent Http는 하나의 오브젝트를 받을 때마다 TCP 연결을 다시 맺는다.
- 초장기 버전인 Http 1.0에서 사용하는 방식으로 1.1부터는 Persistent Http를 지원한다.
- 작동방식
- 1. 클라이언트가 서버에게 Http 프로세스 간 TCP 커넥션을 요청한다. 서버는 요청을 받고 응답을 보낸다.
- 2. 클라이언트는 요청 메세지를 TCP 소켓에 넣는다.
- 3. 서버는 받아서 처리 후 응답 메세지를 TCP소켓에 넣고
- 4. 서버는 TCP 커넥션을 종료한다.
- 5. 클라이언트는 응답을 받아 화면에 표시하고 추가 오브젝트를 위해 1~4를 반복한다.
- 어느 정도의 시간이 소모될까?
- 커넥션 생성에 1 RTT, 원하는 오브젝트를 받기 위해 1 RTT가 필요하다.
- 따라서 오브젝트 하나당 2 RTT가 필요하고, 100개의 오브젝트를 받아야 한다면 200 RTT나 필요하다
- 그래서 1.1버전부터는 Persistent Http를 사용한다.
- 그럼 병렬로 TCP 연결을 생성한다면?
- TCP는 신뢰성있는 데이터 전송을 위한 버퍼와 소켓을 가지고 있다.
- 여러개의 TCP 연결을 생성한다면 소켓과 버퍼가 운영체제에 부담을 많이 주게된다.
Persistent Http
- 서버가 Response를 보낸 후에도 TCP 커넥션을 유지한다.
- 커넥션 연결에 1 RTT, 여러 오브젝트들을 전송하는데 약 1RTT가 걸리므로
- 여러개의 오브젝트들을 보낸하해도 2RTT + a의 시간이 걸린다.
- Http 1.1 부터 지원한다.
Http Message : Request와 Response
- Http는 무엇일까?
- Http는 HyperText Tansfer Protocol의 약자이다. 어려운 기술같아 보이지만 어쨌든 Protocol, 규칙이다.
- 웹(WWW)에서 데이터를 주고받기 위한 프로토콜이다. 주로 html문서를 주고 받는다.
- 그럼 웹은 뭘까? 인터넷상에서 정보교환을 위한 서비스이다. 웹은 인터넷의 여러 서비스 중 하나이다.
- Http 메세지의 두 종류, Request와 Response
- Http는 정보를 주고 받기 위한 프로토콜이다. http는 요청(Request)하면 준다(Response)
- Request : 정보를 요청하는 메세지
- ASCII로 되어 있다.
- American Standard Code for Information Interchange의 약자다.
- 컴퓨터는 숫자로 연산하므로 숫자와 문자를 연결하는 규칙이다.
- 즉 사람이 읽을 수 있는 문자로 표현된다.
- ASCII에서 A는 American이니까 영어다.
- Request Line : Request의 첫 줄
- Method : GET or POST 등 어떤 요청인지 적는다.
- Target : 호스트의 어떤 무엇을 필요로 하는지 적는다.
- Http Version : 무슨 버전을 사용하는 지 적는다.
- Header Line : Http 메세지에 대한 정보가 있다.
- Host : 메세지를 받는 호스트의 URL
- User-agent : 요청을 보내는 측의 정보
- Connection : 요청을 받고 커넥션을 유지할 것인지. ex) keep-alive
- 등등등
- Entity body : 메세지의 본문이 들어간다. POST 타입의 경우에 여기에 뭔가가 써진다...!
- ASCII로 되어 있다.
- GET과 POST의 차이
- GET과 POST는 Request message의 대표적인 두가지 메소드다.
- GET : 파라미터를 URL에 ?로 연결하여 보낸다. 조회용 메서드이고, 멱등하며 캐시 가능하다.
- POST : Parameter를 Entity Body에 실어서 보낸다. 서버에 처리를 요청할 때 사용하는 메서드이다.
- 로그인 할 때 아이디와 비밀번호를 어느 메소드로 보내면 좋을 지 생각해보자.
- 다른 메소드들
- HEAD : 테스트 목적으로 본문을 받을 필요가 없을 때 사용한다.
- PUT : File Upload를 하고 싶을 때 사용한다
- DELETE : File Delete를 할 때 사용한다.
- PUT과 DELETE는 관리자만 사용할 수 있는 메소드다.
- Response : 요청에 응답하는 메세지이다.
- Status Line
- Status Code와 Status text가 실린다.
- Status Code - Status Text 의 의미
- 200 OK
- 301 Move Permanently
- 400 Bad Request
- 404 Not Found
- 505 Http Version not Supported
- Status Line
HTTP 메서드 내용은 강의 내용을 그대로 정리했기 때문에 실제 사용과는 다르다.
간단히 설명하자면
Get - 조회용 메서드. 서버 자원 변경 X, 캐시 가능, 본문이 있을 수 있으나 서버에서 처리하지 않을 수 있음. 멱등
Post - 서버에게 처리를 요청하는 메서드, 서버 자원 변경 O, 캐시 하지않음, 멱등하지 않음
Put - 서버 자원 대체, 멱등하지 않음
Patch - 서버 자원 일부 대체, 멱등하거나 않게끔 설계 가능
Delete - 서버 자원 삭제, 멱등
더 자세한 내용은 Rest api를 참고하자.
더보기
본 게시물은 kocw 이화여자대학교 이미정 교수님의 컴퓨터 네트워크 강의를 듣고 정리한 글임을 밝힙니다.
내용상 틀린 부분이 있을 수도 있으며 이에 대한 책임을 지지 않습니다.
틀린 부분이나 오타 지적은 댓글로 남겨주세요.
'컴퓨터 네트워크' 카테고리의 다른 글
네트워크 7강, 8강 - Electronic Mail과 DNS, P2P 아키텍쳐 (0) | 2020.08.07 |
---|---|
네트워크 6강 - 쿠키와 웹캐시 (0) | 2020.08.07 |
네트워크 4강 - Application Layer의 소개 (0) | 2020.08.05 |
네트워크 3강 - Metric, Network, Protocol (0) | 2020.08.04 |
네트워크 2강 - 네트워크의 구성요소 (0) | 2020.08.04 |