본 게시글은 책 'HTTP 완벽 가이드'를 참고해 작성했습니다.
4-1. TCP 커넥션
일단 TCP 커넥션이 맺어지면 클라이언트와 서버 컴퓨터 간에 주고 받는 메시지들은 손실 혹은 손상되거나 순서가 바뀌지 않고 안전하게 전달된다. HTTP 커넥션은 몇몇 규칙을 제외하고는 TCP 커넥션과 거의 동일하다.
TCP 스트림은 세그먼트로 나뉘어 IP 패킷을 통해 전송된다
TCP는 IP 패킷이라고 불리는 작은 조각을 통해 데이터를 전송한다. HTTP가 TCP 커넥션을 통해 메시지 데이터 내용을 순서대로 전송한다.
- TCP 전송 방식 (TCP/IP 에 의해 처리된다)
- 세그먼트라는 단위로 데이터 스트림을 잘게 나누고
- 세그먼트를 IP 패킷에 담아서 인터넷을 통해 전달
- TCP 커넥션 식별값 (유일한 커넥션 생성)
- 발신지 IP 주소
- 발신지 포트
- 수신지 IP 주소
- 수신지 포트
TCP 소켓 프로그래밍
- 프로그램이 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부
- 일반적으로 TCP/IP 프로토콜을 이용함
- TCP/IP 4계층에서 전송 계층 위에 놓임
- 전송 계층 위에서 전송 계층의 프로토콜 제어를 위한 코드 제공소켓
-
소켓 API 호출 설명 s = socket(<p[arameters>) 연결이 되지 않은 익명의 새로운 소켓 생성 bind(x, <local IP:port>) 소켓에 로컬 포트 번호와 인터페이스 할ㄹ당 connect(s, <remote IP:port>) 로컬의 소켓과 원격의 호스트 및 포트 사이에 TCP 커넥션 생성 listen(s, …) 커넥션을 받아들이기 위해 로컬 소켓에 허용함을 표시 s2 = accept(s) 누군가 로컬 포트에 커넥션을 맺기를 기다림 n = read(s, buffer, n) 소켓으로부터 버퍼에 n바이트 읽기 시도 n = write(s, buffer, n) 소켓으로부터 버퍼에 n바이트 쓰기 시도 close(s) TCP 커넥션을 완전히 끊음 shutdown(s, <side>) TCP 커넥션의 입출력만 닫음 getsockopt(s, …) 내부 소켓 설정 옵션값을 읽음 setsockopt(s, …) 내부 소켓 설정 옵션값을 변경 - 소켓 API
- HTTP 프로그래머에게 TCP와 IP의 세부사항을 숨긴다
- 소켓 API 사용하면
- TCP 종단 데이터 구조를 생성하고,
- 원격 서버의 TCP 종단에 그 종단 데이터 구조를 연결해 데이터 스트림을 읽고 쓸 수 있다.
- TCP API
- 기본적인 네트워크 프로토콜의 핸드셰이킹과 같은 모든 세부사항을 외부로부터 숨긴다.
4-2. TCP 성능에 관한 고려
그림에서 실제 트랜잭션을 처리하는 시간은 TCP 연결 설정/요청전송/응답 수신에 비해 굉장히 짦다는 것을 볼 수 있다. 대부분의 HTTP 지연은 TCP 네트워크 지연 때문에 발생한다.
- HTTP 트랜잭션 지연 원인
- 클라이언트가 DNS 이름 분석 인프라로 서버 IP주소와 포트 번호를 알아내는데 시간 소요
- 클라이언트 - 서버 간 TCP 커넥션 수립에 시간 소요
- 요청 메시지가 전달되고, 서버에서 처리하는데 시간 소요
- 웹 서버가 클라이언트로 HTTP 응답을 보내는 것에도 시간 소요
- 그 외, TCP 네트워크 지연은 하드웨어의 성능, 네트워크와 서버의 전송속도, 응답 메시지 크기, 클라이언트 - 서버 간 거리에 따라 달라진다.
- TCP 커넥션 핸드셰이크 지연
- TCP는 커넥션을 만들기 위해 클라이언트 - 서버 간 3-way handshake를 하는데, 이는 HTTP 성능 저하의 원인이 될 수 있다
- 크기가 작은 HTTP 트랜잭션의 경우 50%이상의 시간을 TCP 커넥션에 사용하기에 지연이 발생할 가능성이 있다.
- 3-way handshake
- 클라이언트가 새로운 TCP 커넥션을 생성 요청을 하기 위해 작은 TCP 패킷을 서버에 보낸다
- 서버가 그 커넥션을 받으면 몇 가지 커넥션 매개변수를 산출하고, 커넥션 요청이 받아들여졌음을 의미하는 SYN 과 ACK 플래그를 포함한 TCP 패킷을 클라이언트로 전송한다.
- 클라이언트는 커넥션이 잘 맺어졌음을 알리기 위해 서버로 ACK 플래그가 담긴 패킷을 보낸다.
- 확인응답 지연
- 인터넷 전송 중 패킷 전송이 정상적으로 이뤄지지 않을 가능성이 있기에 TCP는 성공적인 데이터 전송을 보장하기 위해 자체적인 확인 체계를 가진다
- 각 TCP 세그먼트는 순번과 데이터 무결성 checksum을 갖는다
'네트워크 > HTTP' 카테고리의 다른 글
[HTTP] 3장 : HTTP 메시지 (0) | 2023.12.04 |
---|---|
[HTTP] 2장 : URL (0) | 2023.12.04 |
[HTTP] 1장 : HTTP 개관 (0) | 2023.12.04 |