008

01. 연결지향형 TCP 프로토콜

01-1. TCP 프로토콜

  • 전송 계층(Transport Layer) 프로토콜
  • 전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있도록 한다. → 연결 지향적
  • TCP의 안정성을 필요로 하지 않는 어플리케이션의 경우, 일반적으로 비접속형 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)을 사용한다.
  • TCP는 UDP보다 안전하지만 느리다.

01-2. TCP 프로토콜 구조

Untitled

  • 출발지 포트 2바이트, 목적지 포트 2바이트
  • 일반적인 길이는 20바이트, 최대 60바이트까지 늘어날 수 있음.
  • Offset → 헤더의 길이
  • Reserved → 예약된 필드로 사용되지 않는 필드
  • Window → 상대방과 연결이 된 상테에서 데이터를 주고받는데, 받을 수 있는 data의 양을 알려주는 역할을 한다. (잔여 TCP buffer 공간)
  • Urgent Pointer → 어디서부터가 긴급 데이터인지 알려주는 역할

01-3. TCP Flags

Untitled 1

  • Flags : 여러가지 형태로 데이터를 보낼 때, 해당 형태를 나타내는 값
  • U : Urgent Flag(긴급 비트), 우선 순위가 높은 데이터
  • A : Acknowledgment Flag(승인 비트), 데이터 요청에 대한 승인 처리
  • P : Push Flag(밀어넣기 비트), TCP buffer과 상관 없이 계속해서 데이터를 밀어 넣겠다는 Flag
  • R : Reset Flag(초기화 비트), 상대방과 연결이 되어있는 상태에서 문제가 발생했을 때, 초기화가 필요하다는 Flag
  • S: Syn Flag(동기화 비트), 상대방과 연결을 시작할 때 동기화의 시작을 나타내는 Flag
  • F: Fin Flag(종료 비트), 상대방과의 연결을 종료함을 나타내는 Flag

Untitled 2

Flag는 중복 사용이 가능하다.




02. TCP를 이용한 통신과정

02-1. 3Way Handshake(연결 수립 과정)

  1. 클라이언트가 서버에게 요청 패킷을 보내고

    Untitled 3

  2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고

    Untitled 4

  3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.

Untitled 5

클라이언트는 크롬, 웹 서버는 아파치, NGINX 등이 있다. SYN(Synchronize sequence number), ACK(Acknowldegement → 요청과 응답에 대한 패킷 SYN(a) 패킷 → ACK(a+1)와 SYN(b) → ACK(b+1) 과정 후에 연결이 성립(establish)

Untitled 6


인캡슐레이션

Untitled 7 Untitled 8 Untitled 9

  • 어플리케이션에서 데이터를 데이터 플로 계층으로 내려보내면서 패킷에 데이터를 넣을 수 있도록 분할하는 과정
  • TCP(4계층) → IP(3계층) → eth(2계층)
  • 네트워크 전송을 위한 정보를 헤더에 붙여넣어 줌

디캡슐레이션

  • eth(2계층) → IP(3계층) → TCP(4계층)
  • 헤더를 확인하고 자신에게 온 패킷이 맞으면 해당 헤더를 벗겨내고 상위 계층으로 정보를 보내준다.

02-2. 데이터 송수신 과정

TCP를 이용한 데이터 통신을 할 때, 단순히 캡슐화해서 통신하는 것이 아닌 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙이 있다.

  1. 보낸 쪽에서 또 보낼 때는 SYN, ACK 번호가 그대로.
  2. 받는 쪽에서 SYN 번호는 받은 ACK 번호
  3. 받는 쪽에서 ACK 번호는 받은 SYN번호 + 데이터의 크기

Untitled 10

→ 데이터 100을 보냈을 때, ACK가 101 + 100

Untitled 11

→ 데이터 500을 보냈을 때, ACK가 2001 + 500

02-3. TCP 상태전이도

Untitled 12

  • LISTEN : 클라이언트의 요청을 계속 ‘듣고 있는 상태’ → 바로 응답이 가능한 상태
  • ESTABLISHED: 3Way Handshake로 연결이 수립된 상태

Untitled 13


02-4. 4Way Handshake(연결 헤제 과정)

Untitled 14

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그가 담긴 패킷 전송
  2. 서버는 클라이언트의 요청을 받고 알겠다는 확인 ACK를 보낸다. 데이터를 모두 보낼 때 까지 TIME_OUT 상태
  3. 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그 전송
  4. 클라이언트는 FIN 메세지를 확인했다는 ACK를 보낸다.
  5. 클라이언트의 ACK 메세지를 받은 서버는 소캣 연결을 CLOSE 한다.
  6. 클라이언트는 아직 서버로부터 받지 못할 데이터가 있을 것을 대비해 일정 시간동안 세션을 남겨놓고 잉여 패킷을 기다리는 TIME_WAIT 상태를 가진다.

카테고리: ,

업데이트:

댓글남기기