본문 바로가기
기타/HTTP

[HTTP] HTTP 통신 과정

by 방배킹 2024. 1. 16.

HTTP란?

HTTP(Hyper Text Transfer Protocol)

HTML 문서를 주고 받는데 쓰이는 통신프로토콜(통신규약)이며, TCP 와 UDP 를 사용하여 통신하며 80번 포트를 사용한다

HTTP의 통신 과정

  1. URL 입력후 해당 URL을 바탕으로 DNS를 조회하여 IP 탐색
    • DNS 서버로 이동해서 해당 URL과 연결된 IP 주소를 알아낸다.
    • 캐시에 남아있다면 DNS 서버 이동X (시간 절약)
  2. IP를 찾아 해당 IP가 존재하는 서버로 이동
    • 네트워크 레이어에서 길찾기 (IP) (여러 라우터를 지나 호스트로 이동한다.)
    • 이때, ARP를 이용해 MAC 주소 알아내 사용한다.
    • IP - 논리주소, MAC - 물리주소
  3. WEB 서버와 TCP 연결 시도 (3-way handshake)
    1. web 서버와 TCP를 이용해 연결을 시도한다.
    2. 이때 3-way handshake 과정을 거친다.
      • 1. SYN: 클라이언트가 서버로 임의의 시퀀스 번호를 전달
      • 2. SYN-ACK: 서버는 클라이언트가 서버로 전달한 시퀀스에 1을 더하여 클라이언트로 전달
      • 3. ACK: 클라이언트는 서버에서 전달해준 시퀀스 + 1하여 다시 서버로 전달
      • SYN - 연결요청(임의의 시퀀스 번호를 같이 보낸다), ACK - 응답

 

4. HTTP 메시지 송신 (클라이언트가 요청)

  • 3가지 부분으로 나누어진다
    • Start line
      • method - GET, POST, PUT, PATCH, DELETE 등 요청 방식
      • path - request가 전송되는 주소
      • protocol version - 해당 프로토콜 버전
    • Header - request에 대한 추가정보 (메세지 body의 길이, 인증 관련, 쿠키/세션 관련 등)
    • Body -  전송하는 데이터가 들어가는 부분

5. HTTP 메시지 수신 (서버가 응답)

  • Status Line - 버전, 상태코드, 상태 메시지
    • 상태코드란?
      • HTTP 요청이 성공적으로 완료되었는지 알려준다. (정보응답 100, 성공응답 200, 리다이렉션 300, 클라이언트에러 400, 서버에러 500)
  • Header - request와 동일, 단 response에서만 사용되는 값들이 존재한다.
  • Body - 전송하는 데이터가 들어가는 부분

6. 통신 종료 (4-way handshake)

  • TCP에서 3-way handshake를 이용해서 연결을 했지만 연결을 종료할때는 4-way handshake를 사용한다.
    • 1. FIN(finish): 클라이언트가 연결을 종료 하겠다는 FIN 플레그를 서버로 전달
    • 2. ACK: 서버는 클라이언트가 보낸 FIN을 잘 받았다는 ACK를 클라이언트에게 보내줌
    • 3. FIN : 서버는 close 준비를 하고 FIN을 클라이언트에게 전달
    • 4. ACK: 클라이언트가 마지막으로 ACK를 보내고 통신이 종료된다.

 

연결시도는 3-way handshake 이지만 연결 종료 과정은 왜 4-way handshake일까?

➨ Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아 있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메세지를 보내기 때문이다.

TCP, UDP 차이, 장단점

TCP 특징

  • 연결 지향 방식으로 패킷 교환 방식을 사용한다 (가상 회선 방식이 아님).
  • 흐름 제어혼잡 제어.
    • 흐름제어 - 데이터 송신 속도와 수신 속도 조절(데이터 송신 속도가 더 빠를 경우 오버플로우가 발생할 수 있다.) stop and wait, sliding window 등이 있다.
    • 혼잡제어 - 네트워크 내의 패킷의 수가 넘치지 않게 조절 (마찬가지로 패킷이 너무 많아지면 해당 라우터가 처리하지 못해 오버플로우가 발생할 수 있다.)
  • UDP보다 속도가 느리다. 높은 신뢰성을 보장한다. 전송 순서 보장
  • 서버와 클라이언트는 1대1로 연결된다.
  • 전이중(Full-Duplex) - 전송이 양방향에서 동시에 가능 , 점대점(Point to Point) 방식.

 

UDP 특징

  • 비연결형 방식으로 데이터그램 방식을 사용한다.
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • TCP보다 속도가 빠르다. 신뢰성이 낮다. 전송 순서가 변경될수 있다. 데이터 수신여부 확인X
  • 서버와 클라이언트가  N대M 연결 가능.

 

 

TCP는 연결 방식, 순서 보장, 수신 여부 확인, 1대1 통신, 신뢰성 ⭡, 속도 ⭣

UDP는 비연결 방식, 순서 보장 X, 수신 여부 확인 X, N대M 통신 가능, 신뢰성 ⭣, 속도

 

 

멱등성 (PUT, PATCH,POST)

https://bangbaeking.tistory.com/81

 

[HTTP] POST, PUT, PATCH 차이점

일반적으로 조회는 GET, 생성은 POST, 수정은 PUT, 삭제는 DELETE를 사용한는데 PUT과 PATCH의 차이점이 뭔지 알아보다가 POST와 PUT의 차이점이 뭔지 궁금해져서 공부를 하다가 기록함 PUT 과 PATCH PUT과 PATC

bangbaeking.tistory.com

 

멱등성이란? 같은 요청을 여러번 날렸을 때 서버의 상태가 유지되어야 하는 성질

 

PUT /posts/ HTTP/1.1 ⭢ 해당 요청을 100번 날려도 서버의 상태는 유지되지만 ⭢ 멱등

POST /posts/1 HTTP/1.1 ⭢ POST를 100번 보내면 데이터가 100개가 생성된다 ⭢ 멱등X

 

 

PUT과 PATCH의 차이

  • PUT은 해당 정보의 전체를 수정, PATCH는 해당 정보의 부분을 수정한다.

PUT과 PATCH 멱등성

  • PUT은 멱등하지만, PATCH는 멱등하지 않다.

 

PUT과 PATCH 모두 수정이지만 왜 PATCH는 멱등하지 않을까?

  • PUT은 해당 리소스를 완전히 교체해 버리기 때문에 멱등이지만
  • PATCH는 멱등으로 설계할 수도 있지만, 멱등이 아니게도 설계할 수 있기 때문이다.
    • ex) 한번 호출 할때 마다 나이를 10씩 더하는 경우  멱등X
  • PUT은 리소스 대체, PATCH는 리소스 수정

 

 

GET, PUT, DELETE 멱등

POST, PATCH 멱등X

 

Wireshark 실습

telnet을 활성화 한뒤 telnet으로 www.naver.com으로   GET 요청을 보내보자. 

 

SYN  ⭢ SYN-ACK ⭢ ACK를 확인할수 있다.

 

3-way handshake를 한뒤 HTTP request 메시지가 전달되었다.

 

 

HTTP response 메시지가 수신되었다.

 

Q) www.naver.com 으로 GET 요청을 보내면 네이버 웹사이트가 respose 메시지로 수신되어야 하는데 왜 302번 코드가 발생했을까?

⭢ https가 아닌 http로 request 메시지를 전송했기 때문에 302 코드가 수신되었다. (300번대 상태코드는 리다이렉션, 302 는 요청한 리소스가 Location (en-US) 헤더에 지정된 URL로 일시적으로 이동되었음을 나타낸다. )

 

 

Reference

 

'기타 > HTTP' 카테고리의 다른 글

CS스터디 - 4주차 Network  (0) 2024.08.15
REST API  (0) 2024.01.29
[HTTP] HTTP 버전 별 차이, UDP기반 프로토콜을 사용하는 HTTP/3,  (0) 2024.01.19
Web Server 와 WAS  (0) 2024.01.17
[HTTP] POST, PUT, PATCH 차이점  (0) 2023.11.01

댓글