더북(TheBook)

발신지 포트(16비트), 목적지 포트(16비트): 전송 계층 포트 번호이다.

시퀀스 번호(32비트): 단조 증가하는 식별 번호이다. 개념상 TCP로 보내는 각 바이트마다 시퀀스 번호가 식별자로 부여된다. 발신자와 수신자는 데이터 전송 중도에 답신을 위한 표식으로 이 번호를 사용한다. 대개 세그먼트의 시퀀스 번호는 세그먼트에 포함된 데이터 첫 바이트의 시퀀스 번호이다. 처음 연결을 맺을 때는 예외적으로 다른 번호가 부여되는데, 이는 2.6.2.2 3-웨이 핸드셰이킹 절에서 알아보자.

ACK 번호(32비트): 발신자가 응답받기를 기다리는 다음 시퀀스 번호이다. TCP는 데이터를 모두 순서를 지켜 전송하므로 호스트가 매번 기다리는 시퀀스 번호는 그전에 받은 번호에 항상 1을 더한 값이 된다. 수신자가 ACK 번호를 보내면 그 ACK 번호에 해당하는 시퀀스뿐만 아니라 그 아래 모든 시퀀스를 받았다는 뜻이므로 주의하자.

데이터 오프셋(4비트): 헤더의 길이를 32비트 워드로 지정한다. TCP 헤더와 데이터 사이에 옵션 헤더를 최대 44바이트까지 집어넣을 수 있다. 데이터 오프셋은 옵션 헤더가 끝나고 데이터가 시작되는 지점을 가리키며, 헤더 시작을 기준으로 20~64 사이의 값이 된다.

제어 비트(9비트): 헤더의 메타 정보 플래그를 포함한다. 뒤에 자세히 다루겠다.

수신 윈도(16비트): 발신자가 데이터 전송에 사용하는 버퍼 용량이 얼마나 남아있는지 알려주는 역할이다. 나중에 다루겠지만, 흐름 제어에 사용된다.

긴급 포인터(16비트): 세그먼트 데이터 시작 위치를 기준으로 긴급 데이터의 위치를 나타낸다. 제어 비트에 URG 플래그가 설정된 경우에만 유용하다.

Note ≣

바이트가 8비트가 아닌 플랫폼도 일부 있으므로, 주요 전송 계층 프로토콜을 정의하는 RFC를 비롯해 여러 RFC에서 8비트 단위 데이터 뭉치를 가리켜 옥텟(octet)이라 한다. 요즘은 그다지 상관없는 이야기인데, 특히 게임 개발 관련 플랫폼은 바이트가 모두 8비트이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.