TCP란, 인터넷 상에서 데이터를 메시지 형태(세그먼트)로 전달하기 위해 IP와 함께 사용하는 프로토콜 입니다. TCP는 애플리케이션에게 신뢰적이고 연결지향적인 서비스를 제공합니다.
일반적으로 IP와 함께 사용되며 IP는 배달(주소지정)을 TCP는 패킷의 추적 및 관리(데이터 전송)를 합니다.
- Full-Duplex : 전이중 : 전송이 양방향에서 동시에 발생할 수 있음 : 전송 효율 좋음
- Point to Point : 점대점 : 1 : 1로 직접 연결 : 안정적
송신과 수신의 속도차이를 조절하여 수신자의 Overflow를 방지
종류
Stop and Wait : 전송한 패킷에 대하여 응답이 와야만 다음 패킷 전송
Sliding Window (Go Back N ARQ) : 수신자가 원하는 윈도우 크기만큼의 패킷데이터를 한번에 전송, 응답에 따라서 윈도우를 옆으로 이동
_그림에서는 data0, data1 처럼 하나씩 보내고 있는데 이는 이해를 위한 것이고 원래는 7의 윈도우 크기만큼의 패킷을 한번에 보내고 응답에 따라서 윈도우를 옆으로 미뤄준다(응답값 + 윈도우 크기 -1)
위 그림처럼 ACK(2)를 받으면 1까지의 데이터는 잘 받았으니 2부터 보내라는 뜻.
네트워크 내의 패킷 수가 넘치지 않도록 방지
- 송신자가 현재 네트워크의 혼잡도를 확인하고 속도를 제어
종류
초기에 ssthresh는 가장 높은 값으로 설정
ACK 3번인 이유는 Fast Retrasmit 방식을 적용했기 때문, 기존에는 패킷 손실을 감지하기 위해 타임아웃을 사용했지만 이것을 감지하는 것이 너무 느렸다. 떄문에, 같은 ACK가 3번, 즉 아직 해당 값을 받지 못했다는 알림이 3번 중복해서 발생하면 진짜로 사라졌다고 판단하고, 타임아웃을 기다리지 않고 재전송 진행
TCP 헤더에는 서로의 요청에 대한 상태를 확인하기위한 플래그 비트가 존재합니다.
중요한 3가지 플래그 비트를 알아보자
- SYN : 000010 : 연결 설정
- ACK : 010000 : 응답 확인
- FIN : 000001 : 연결 해제
UDP란, 데이터를 데이터그램(독릭접인 관계를 지니는 패킷) 단위로 처리하는 프로토콜입니다.
512바이트의 작은 데이터그램 단위를 사용하기 때문에, 512바이트를 넘게되면 TCP를 사용해야함
TCP 통신을 통해 데이터를 전송하기 위해서 네트워크 연결을 설정하는 과정입니다.
양쪽 모두가 데이터를 주고 받을 준비가 되었다는 것을 보장하는 과정입니다.
데이터 전달이 시작되기전에 사전에 세션을 수립하는 과정입니다.
1. 클라이언트가 서버에게 접속을 요청하는 SYN 패킷을 전송합니다. SYN 패킷은 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 보냅니다.
시퀀스 번호 : TCP 세그먼트의 데이터 순서 번호
2. SYN 요청을 받은 Server는 Client에게 요청을 수락한다는 ACK과 접속을 요청하는 SYN 패킷을 전송합니다.
받은 시퀀스 번호에 1을 더해서 ACK로 돌려줍니다.
3. Client는 Server에게 ACK 패킷을 전송하고 이후 부터는 연결이 이루졌음을 의미하고 데이터를 교환하게 된다. 이상태를 ESTABLISHED 라고 한다.
TCP 연결을 해제하기위해 사용합니다.
CLOSE_WAIT : 클라이언트로부터 FIN 신호를 받고, 연결을 정리하기 위해 나머지 데이터를 보내는 시간
Half Close
- 클라이언트 측에서 수신(읽기)은 열어두고, 송신(쓰기)를 닫은 상태
연결을 종료하는 과정에서 바로 연결을 종료한다면 문제가 발생할 수 있기때문에 반정도 종료해놓고 상대의 응답을 기다립니다. 상대로부터 FIN 패킷 응답이 온다면 나머지 반을 종료하고 ACK 패킷으로 응답합니다.
이 과정으로 좀 더 안정적인 종료과정을 수행할 수 있습니다.