4장
1. TCP 커넥션

1장에서 잠시 살펴본 것처럼 TCP는 서버와 클라이언트가 서로 커넥션을 맺고 메세지를 주고받는 통신 방식을 말한다. 커넥션을 맺는다는 건 서버와 클라이언트가 통신 경로를 설정하는 것이다. 커넥션을 맺기 위해서 서버와 클라이언트는 각각 소켓을 생성하고 포트를 열어 서로의 정보를 확인한다. 그리고 데이터 전송을 위한 통신 경로를 확보한다. TCP 통신은 커넥션을 맺은 후 주고 받는 메세지는 소실 혹은 손상되지 않음을 보장하므로 신뢰성 있는 통신 방식을 제공한다고 볼 수 있다.
1.1. TCP 세그먼트

HTTP 메세지를 원본 그대로 보내면 데이터가 전달되는 도중 소실되거나 손상될 우려가 있어 신뢰성 있는 전송을 보장하기 어렵다. 따라서 HTTP가 TCP 커넥션을 통해 메세지를 전송하면, TCP는 메세지를 잘게 나누어 세그먼트로 만든 후 IP 패킷에 담는다. 그리고 세그먼트를 순서대로 다른 IP 주소에 전달한다. 이 과정은 TCP/IP 소프트웨어에 의해 처리되므로 HTTP 프로그래머는 알 수 없다.

TCP 세그먼트는 다양한 정보를 포함한다.
IP 패킷 해더(보통 20바이트)
발신지 IP 주소
목적지 IP 주소
크기
기타 플래그
TCP 세그먼트 헤더(보통 20바이트)
TCP 포트 번호
TCP 제어 플래그
데이터의 순서와 무결성을 검사하는 숫자 값
TCP 데이터 조각(0 혹은 그 이상의 바이트)
1.2. TCP 커넥션 구성요소

TCP 커넥션은 다음 네 가지 값으로 식별한다.
발신지 IP 주소
발신지 포트
수신지 IP 주소
수신지 포트
위 그림과 같이 TCP 커넥션은 일부 같은 값을 가질 수 있다. 그러나 네 가지 구성요소가 전부 같을 수는 없다.
1.3. TCP 소켓 프로그래밍

운영체제는 TCP 커넥션과 관련된 여러 기능을 제공한다. 소켓 API를 활용하면 TCP 종단(endpoint)에 데이터 구조를 생성하고 원격 서버의 TCP 종단에 데이터 구조를 연결해서 데이터 스트림을 읽고 쓸 수 있다. 소켓 API는 TCP/IP에 대한 모든 세부사항을 숨긴 채 기능만 제공한다.
2. TCP의 성능
2.1. HTTP 트랜잭션 지연

TCP 연결은 커넥션을 맺은 후 요청과 응답을 주고받으므로 트랜잭션을 처리하는 시간보다 메세지를 주고받으며 소모하는 시간이 길다. 특수한 상황을 제외하고 대부분의 HTTP 지연은 TCP 네트워크 지연으로 발생한다. TCP 네트워크 지연의 원인에는 하드웨어의 성능, 네트워크와 서버의 전송 속도, 요청과 응답 메세지의 크기, 클라이언트와 서버 간의 거리 등이 있다.
Last updated