[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/네트워크

[Network] TCP 프로토콜

inu 2021. 4. 7. 01:53
반응형

TCP 프로토콜

기본특징

  • 연결지향성
  • 전송 제어 프로토콜 (Transmission Control Protocol, TCP)
  • 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있음. (패킷 내용으로 이를 확인할 수 있기 때문)
  • 이러한 TCP의 안정성을 필요로 하지 않을 때 UDP를 사용하는 것.
  • TCP는 UDP보다 안정성을 보장하는 만큼 속도가 느리다는 단점이 있다.
  • 3Way Hnadshake : 클라이언트가 서버에게 요청 패킷을 보내고(SYN), 서버는 클라이언트의 요청을 받아들이는 패킷을 보내며(SYN+ACK), 최종적으로 클라이언트가 이를 수락하는 패킷까지 보내는(ACK) 총체의 과정. 연결 수립을 위한 과정이다. (cf. 최근엔 최적화가 되어서 클라이언트 ACK와 동시에 데이터를 보내기도 한다.)
  • TCP의 연결은 어디까지나 '논리적 연결'을 의미할뿐, 둘 간의 완전연결(전용연결)을 보장하는 것은 아님에 유의하자.

TCP 플래그

  • TCP가 통신하면서 상대방에게 어떤 신호를 전달하는 것인지 플래그를 통해 알려준다.
  • C E U A P R S F 가 있는데 이 중 U A P R S F가 주로 사용된다.
  • C(CWR) : 송신자가 자신의 윈도우 사이즈를 줄인다.
  • E(ECE) : 혼잡 감지 시 수신자가 ECE를 설정하여 송신자에게 알림.
  • U(URG) : Urgent Point 필드와 함께 사용되고 플래그 설정 시 TCP는 해당 세그먼트를 전송 큐의 제일 앞으로 보낸다. (긴급한 데이터로 인식)
  • A(ACK) : SYN에 대한 확인의 의미이다. (그외 3Way-Handshacking에서의 SYN과 reset을 제외하고 모든 세그먼트에 ACK가 설정됨.)
  • P(PSH) : 일반적으로 모든 데이터를 전송하고 마지막에 보내는 신호, 수신측은 데이터를 즉시 전송하라는 의미.
  • R(RST) : 송신자가 유효하지 않은 연결을 시도할 때 거부하는데 이용되고 또한 통신의 연결 및 종료를 정상적으로 할 수 없을때 사용하여 리셋한다.
  • S(SYN) : 통신 시작 시 연결을 요청하고 ISN(클라이언트가 최초로 설정하는 SEQ번호)을 교환한다.
  • F(FIN) : 데이터 전송을 종료한다.

TCP 프로토콜 구조

  • Source Port : 출발지 포트
  • Destination Port : 목적지 포트
  • Sequence Number : SEQ번호.
  • Acknowledgment Number : ACK번호.
  • Offset : 헤더의 길이가 주로 표기.
  • Reserved : 미래를 위해 예약된 필드로 항상 0으로 설정된다. (사용하지 않는 필드)
  • TCP Flag : 신호에 대한 정보 표기.
  • Window : 내 사용공간이 얼마나 남아있는지 알려주는 곳
  • Checksum : 확인용 checksum.
  • Urgent Pointer : TCP Flag의 Urgent flag와 함께 사용된다.
  • TCP Options : 변동적인 길이를 가지며, 필수적이지 않다. 일반적으로 잘 붙지 않는다.

TCP를 이용한 통신과정

  • 기본적으로 3Way Hnadshake를 통해 통신을 수립한다.
  • 3Way Handshake에서는 SEQ번호가 최초엔 랜덤값이고 이후엔 받은 ACK번호와 같아진다. ACK번호는 최초엔 0이고 이후엔 받은 SEQ번호+1이 된다.
  • 3Way Handshake로 통신수립이 끝나면 페이로드(실질적 데이터)를 포함해 패킷을 주고받게 되는데, 이 때 SEQ번호와 ACK번호의 일정한 규칙이 존재한다.
  • 1. 보낼 쪽에서 다시 보낼 때는 SEQ번호와 ACK번호가 그대로 이다.
  • 2. 받는 쪽에서 SEQ번호는 받은 ACK번호가 된다.
  • 3. 받는 쪽에서 ACK번호는 받은 SEQ번호 + 데이터 크기가 된다.

TCP 상태전이도

  • TCP에 따라 클라이언트와 서버는 다양한 상태를 가지는데, 그를 표현한 전이도
  • 실선이 클라이언트의 상태변화, 점선이 서버의 상태변화
  • 이 중 주요한 상태변화는 LISTEN과 ESTABLISHED
  • LISTEN : 포트번호를 서버쪽에서 프로그램이 사용중인 상태 (즉, 클라이언트가 요청을 들을 수 있는 상태)
  • ESTABLISHED : 3Way Handshake로 연결이 수립된 상태.

참고 : https://www.youtube.com/watch?v=yY0uQf0BTH8&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=24

반응형

'💻 CS > 네트워크' 카테고리의 다른 글

[Network] HTTP 프로토콜  (0) 2021.04.09
[Network] NAT와 포트포워딩  (0) 2021.04.08
[Network] UDP 프로토콜  (0) 2021.04.05
[Network] 포트  (0) 2021.04.04
[Network] IPv4 프로토콜 / ICMP 프로토콜  (0) 2021.04.01