Network에 대해 공부하면서 TCP에 대해 정리해본다.
TCP (Transmission Control Protocol) 은 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP 란 명칭으로 널리 불린다.
TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간의 일련의 옥텟 을 안정적으로, 순서대로, 에러 없이 교환 할 수 있게 한다.
TCP 는 OSI 7 계층 중 4 계층에 해당하며, 통신하고자 하는 양쪽 단말(EndPoint)이 준비 여부, 데이터의 정상 전송 여부, 데이터의 변질 여부 등을 점검한다.
이런 정보들은 TCP Header에 담겨 있으며, 신뢰성 보장과 흐름 제어, 혼잡 제어에 관리할 수 있는 요소들이 포함되어 있다.
💡 옥텟(octet) : 컴퓨팅에서 8개의 비트가 한데 모인 것으로 초기 컴퓨터들은 1바이트가 꼭 8비트만을 의미하지 않았었기 때문에 octet이 필요
Segment (세그먼트) 란 IP Header & TCP Header를 제외하고 TCP가 실을 수 있는 데이터의 크기를 말한다.
TCP 는 신뢰성 있는 통신을 위해 3-way-handshake 를 사용하여 통신을 진행한다.
위 순서는 다음과 같은 그림으로 표현 가능하다.
TCP로 이루어지는 모든 통신은 반드시 3-way handshake 를 통해 시작한다.
💡 SYN : TCP 연결 설정 과정에서 사용되는 플래그로 데이터 통신을 시작하기 전 클라이언트와 서버 간 초기화를 수행하는데 사용된다.
💡ACK: 데이터 수신 확인을 나타내기 위한 플래그, 데이터의 신뢰성을 보장하기 위해 사용된다.
TCP 의 특징은 흐름제어 와 혼잡제어 이다.
TCP 의 흐름제어
💡 Window Size : 16비트 필드로 수신자가 처리할 수 있는 데이터의 양을 나타낸다. 이 값을 사용하여 송신자는 데이터의 전송 속도를 조절 가능하다.
💡Acknowledgment Number : 32비트 필드로 수신자가 다음에 기대하는 데이터의 시퀀스 번호를 나타낸다. 이 값은 수신자가 성공적으로 데이터를 받았다는 것을 송신자에게 알리는데 사용된다.
TCP의 혼잡제어
💡 CWR(Congestion Window Reduced) : TCP 세그먼트 헤더에 포함되는 비트로 TCP 송신자에게 네트워크 혼잡이 발생했음을 알려주는 플래그이다. 혼잡을 감지하면 송신자는 데이터의 전송속도를 줄이는 조취를 취한다.
💡ECE(ECN-Echo) : ECE는 TCP 수신자에게 혼잡 관련 정보를 전달한다. 수신자가 ECE 플래그를 받으면 이 정보는 송신자에게 돌아가고 이를 토대로 혼잡 윈도우 크기를 조절한다.
💡RTT (Round-Trip-Time) : 네트워크에서 데이터 패킷이 한번 전송되고 그 응답이 돌아오는데 걸리는 시간을 나타낸다. RTT는 연결의 지연을 측정하고 네트워크 성능을 평가하는 지표 중 하나이다.