반응형
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 |