-
TCP
- HTTP가 전송하려는 메세지를 세그먼트 단위로 자른 뒤, IP 패킷에 담아 인터넷을 통해 전달.
- IP 패킷
TCP 커넥션
- <발신지 주소, 발신자 포트 , 수신지 IP주소 , 수신지 포트> 조합으로 TCP 커넥션 생성/식별
TCP 소켓 프로그래밍
- 운영체제는 TCP 커넥션 생성과 관련된 여러기능을 제공. 소켓 API.
- 소켓 API를 통해 1) TCP 종단 데이터 구조를 생성하고 - 2) 데이터 구조를 원격 서버의 TCP 종단에 연결해 - 3) 데이터 스트림을 읽고 쓴다.
- 웹서버는 소켓 생성 후 커넥션을 기다린다. 브라우저는 소켓 생성 후, 서버 IP주소:포트로 TCP 커넥션을 생성한다.
TCP 성능 고려
HTTP 트랜잭션 지연
- HTTP 지연은 TCP 네트워크 지연으로 발생.
- 처음/오랜만에 방문한 URI의 호스트명을 IP주소로 변환 시간
- 서버에 TCP 커넥션 요청 후 허가 회신 대기 시간
- HTTP 요청 메시지가 인터넷을 통해 전달, 서버에서 처리까지 걸리는 시간
- 서버가 HTTP 응답 메시지를 보내는데 걸리는 시간
성능 중요 요소
- TCP 커넥션 핸드셰이크 지연
- 데이터 전송시 새로운 TCP 커넥션을 맺기 위해 두번 연속 패킷을 교환한다.
-
- 커넥션요청 목적 패킷 교환 → 2) 커넥션맺음 알림 목적 확인응답 패킷 교환
- 작은 데이터 전송 사용시 HTTP 성능저하 초래.
- 확인응답지연 알고리즘
- 세그먼트 잘 받으면 수신자는 송신자에게 확인응답 패킷 반환. TCP는 확인응답 패킷은 같은방향 데이터패킷에 편승(piggyback) 한다.
- 확인응답이 같은 방향으로 가는 데이터 패킷에 편승되는 경우를 늘리기 위한 알고리즘. (편승안되면 별로 패킷 생성 후 전송)
- 요청/응답 뿐인 HTTP 동작방식에선 편승 기회가 적어 알고리즘에 의한 지연이 자주 발생.
- TCP의 느린시작(slow-start)
- nagle 알고리즘 TCP_NODELAY
- TIME-WAIT 지연과 포트 고갈
HTTP 커넥션 관리
Connection 헤더
- 현재 맺는 커넥션에만 적용할 옵션 명세. 다른 커넥션에 전달되지 않는다. 전달시점에 삭제됨.
순차 처리 대안 HTTP 커넥션
- 병력커넥션
- 지속커넥션
- 파이프라인커넥션
- 다중커넥션
커넥션 끊기