4장 커넥션 관리
4.1 TCP 커넥션
모든 HTTP 통신은 패킷 교환 네트워크 프로토콜의 계층화된 집합인 TCP/IP 를 통해 이루어진다.
URL 을 입력받은 브라우저는 다음과 같은 단계를 수행한다.
- 1단계~3단계: URL 을 통해 서버의 IP 주소와 포트 번호 확인
- 4단계: 웹 서버가 TCP 커넥션 생성
- 5단계: 커넥션을 통해 요청 메시지 전달
- 6단계: 커넥션 종료
4.1.1 신뢰할 수 있는 데이터 전송 통로인 TCP
TCP 는 충돌 없이 순서에 맞게 HTTP 데이 터를 전달한다.
4.1.2 TCP 스트림은 세그먼트로 나뉘어 IP 패킷을 통해 전송된다
TCP 는 IP 패킷이라고 불리는 작은 조각을 통해 데이터를 전송한다.
- HTTP: IP, TCP, HTTP 로 구성된 프로토콜 스택에서 최상위 계층
- HTTPS: TLS 혹은 SSL 이라 불리기도 하며 HTTP 와 TCP 사이에 있는 암호화 계층
HTTP 가 메시지를 전송할 때 다음과 같은 단계를 수행한다.
- 현재 연결되어 있는 TCP 커넥션을 통해서 메시지 데이터의 내용을 순서대로 전송
- TCP 는 세그먼트라는 단위로 데이터 스트림을 잘게 분리
- 세그먼트를 IP 패킷이라고 불리는 봉투에 담아 인터넷을 통해 데이터 전달
각 TCP 세그먼트는 하나의 IP 주소에서 다른 IP 주소로 IP 패킷에 담겨 전달된다. IP 패킷은 다음을 포함한다.
- IP 패킷 헤더
- 발신지, 목적지 IP 주소, 크기, 기타 플래그
- TCP 세그먼트 헤더
- TCP 포트 번호, TCP 제어 플래그, 데이터의 순서와 무결성을 검사하기 위해 사용하는 숫자 값
- TCP 데이터 조각
4.1.3 TCP 커넥션 유지하기
컴퓨터는 항상 TCP 커넥션을 여러 개 가지고 있다. TCP 는 포트 번호를 통해서 여러 개의 커넥션을 유지한다. IP 주소는 해당 컴퓨터에 연결되고 포트 번호는 해당 애플리케이션으로 연결된다.
TCP 커넥션은 네 가지 값으로 식별한다. 네 가지 값으로 유일한 커넥션을 생성한다.
<발신지 IP 주소, 발신지 포트, 수신지 IP 주소, 수신지 포트>
4.1.4 TCP 소켓 프로그래밍
소켓 API 를 사용하면 TCP 종단 데이터 구조를 생성하고 원격 서버의 TCP 종단에 그 종단 데이터 구조를 연결하여 데이터 스트림을 읽고 쓸 수 있다.
클라이언트와 서버 간에 HTTP 트랜잭션을 수행하기 위한 소켓 API 사용 방법은 다음과 같다.
4.2 TCP의 성능에 대한 고려
HTTP 는 TCP 바로 위에 있는 계층이기 때문에 HTTP 트랜잭션의 성능은 그 아래 계층인 TCP 성능에 영향을 받는다.
4.2.1 HTTP 트랜잭션 지연
HTTP 의 주요 커넥션, 전송, 처리의 지연은 다음과 같다.
트랜잭션을 처리하는 시간은 TCP 커넥션을 설정하고 요청을 전송하고 응답 메시지를 보내는 것에 비하면 상당히 짧다. 대부분의 HTTP 지연은 TCP 네트워크 지연 때문에 발생한다.
HTTP 트랜잭션을 지연시키는 원인은 여러 가지가 있다.