HTTP 명세는 HTTP 메시지에 자세하게 설명하고 있지만, HTTP 커넥션과 이제 그것이 어떻게 사용되는지 잘 알고 있어야 한다.
어떤걸 배우는지?
- HTTP 는 어떻게 TCP 커넥션을 사용하는가
- TCP 커넥션의 지연, 병목, 막힘
- 병렬 커넥션, keep-alive 커넥션, 커넥션 파이프라인을 활용한 HTTP 의 최적화
- 커넥션 관리를 위해 따랴아할 규칙들
TCP 커넥션?
전 세계 모든 통신들은 이제 대부분 이 TCP 커넥션을 맺어서 이루어진다...!
1) 브라우저가 www.google.com 호슽명을 추출@
2) 이 브라우저가 호스트 명에 대한 IP 주소를 찾아낸다.
3) 브라우저가 포트번호를 얻는다
4) 브라우저가 서버로 HTTP GET 요청 메시지를 보낸다
브라우저 --> 서버
5) 브라우저가 서버에서 온 HTTP 응답 메시지를 받는다
서버 --> 브라우저
6) 브라우저가 커넥션을 끊는다.
라는 위의 일련의 과정을 통해서 진행이 됩니다. 또한 TCP 는 이제 IP 패킷이라는 작은 조각을 통해 데이터를 전송하는데 이제 필요한 것이다.
컴퓨터는 여러 TCP 커넥션을 가지고 있고 TCP 는 포트 번호를 통해 여러 개의 커넥션을 유지한다!
그렇다면 이제 처음에 서버가 소켓을 만든다는데... 소켓은 무엇일까?
네트워크 통신에서 두 시스템 간의 데이터 교환을 위해 사용하는 엔드포인트입니다. 소켓은 IP 주소와 포트 번호로 식별되며, 다양한 네트워크 프로토콜을 통해 데이터를 송수신할 수 있습니다. 소켓은 주로 TCP/IP와 UDP/IP 프로토콜을 기반으로 동작하며, 다음과 같은 주요 구성 요소를 포함합니다:
아래는 Python 을 이용한 간단한 소켓 프로그래밍 예제입니다.
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8080))
server_socket.listen(1)
print("Server is listening on port 8080...")
conn, addr = server_socket.accept()
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
print(f"Received data: {data.decode()}")
conn.sendall(data)
conn.close()
server_socket.close()
이런 TCP 네트워크 지연은, 하드웨어의 성능, 네트워크와 서버의 전송속도, 그리고 요청과 응답 메시지의 크기, 클라이언트와 서버 간의 거리에 따라 크게 달라진다.
성능 관련한 중요 요소
아래는 TCP 지연에 있어서 이제 문제가 생기는 것을 의미한다.
- TCP 커넥션의 핸드 쉐이크 설정
- 인터넷의 혼잡을 제어하기 위한 TCP 의 느린 시작
- 데이터를 한데 모아 한 번에 전송하기 위한 네이글 알고리즘
- TCP 의 편승(piggyback) 확인응답( acknowledgement) 을 위한 확인응답 지연 알고리즘
- TIME_WAIT 지연과 포트 고갈
'이유's Programming > HTTP' 카테고리의 다른 글
HTTP 1장 - HTTP 개관 (0) | 2024.07.19 |
---|