STEP 1
client → (SYN) → server
STEP 2
server → (SYN + ACK) → client
STEP 3
client → (ACK) → server
STEP 1
client -> (FIN) -> server
STEP 2
server -> (ACK) -> client
STEP 3
server -> (FIN) -> client
STEP 4
client -> (ACK) -> server
client가 데이터 전송을 마쳤다고 하더라도 server는 아직 보낼 데이터가 남아있을 수 있기 때문에 FIN에 대한 ACK만 보내고 데이터를 모두 전송한 후에 server도 FIN을 보낸다
client에서 FIN 플래그를 받은 후 일정 시간 기다린 후(TIME-WAIT) 연결을 종료하기 때문에 해당 문제를 해결할 수 있다.
송신자가 보내는 데이터 바이트 순서이다.
Ex) 송신자 3000bytes의 데이터를 보낸다고 가정
첫번째 sequence number: 1
두번째 sequence number: 1001
세번째 sequence number: 2001
받은 데이터에 대한 응답이다.(앞으로 받아야할 다음 데이터의 Sequence Number이다.)
Ex) sequence number=1 -> acknowledgement number=1001
TCP | UDP |
---|---|
연결형 플로토콜 | 비연결형 프로토콜 |
데이터의 경계를 구분하지 않음(Byte-Stream Service) | 데이터의 경계를 구분함(Datagram Service) |
신뢰성 있는 데이터 전송(데이터의 재전송 존재) | 비신뢰성 있는 데이터 전송(데이터의 재전송 없음) |
일 대 일(Unicast) 통신 | 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신 |