TCP는 두개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜.
TCP는 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장한다.
연결하고자 하는 두 장치 간의 논리적 접속을 하기 위해 사용하는 연결방식.
3번의 확인 과정을 거치기 때문에 3 way handshake 라고 불림
SYN (synchronize sequence numbers) - 연결 확인을 위해 보내는 무작위의 숫자값
ACK (acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK
ISN (Initial sequence numbers) - Client와 Server가 각각 처음으로 생성한 SYN
Connection을 맺을 때 사용하는 포트는 유한 범위내에서 사용하고 시간이 지남에 따라 재사용된다. 이에 따라 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용할 가능성이 높다.
서버 측에서 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 숫자가 전송되면 이전의 Connection으로 부터 오는 패킷으로 인시할 수 있기 때문에 ISN 을 무작위 난수로 사용한다.
| 상태 | 설명 |
|---|---|
| CLOSED | 연결 수립을 시작하기 전의 기본 상태 (연결 없음) |
| LISTEN | 포트가 열린 상태로 연결 요청 대기중 |
| SYN-SENT | SYN 요청을 한 상태 |
| SYN-RECEIVED | SYN 요청을 받고 상대방의 응답을 기다리는 중 |
| ESTABLISHED | 연결의 수립이 완료된 상태, 서로 데이터를 주고 받을 수 있음 |
3 way handshake 와 반대로 가상 회선 연결을 해제할 때 주고 받는 확인작업
4번의 확인을 거친다고 하여 4 way handshake 라고 부름

| 상태 | 설명 |
|---|---|
| CLOSE | 연결 수립을 시작하기 전의 기본 상태 (연결 없음) |
| ESTABLISHED | 연결의 수립이 완료된 상태, 서로 데이터를 교환할 수 있다. |
| CLOSE-WAIT | 상대방의 FIN(종료 요청)을 받은 상태. 상대방 FIN에 대한 ACK를 보내고 애플리케이션에 종료를 알린다. |
| LAST-ACK | CLOSE-WAIT 상태를 처리 후 자신의 FIN요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태. |
| FIN-WAIT-1 | 자신이 보낸 FIN에 대한 ACK를 기다리거나 상대방의 FIN을 기다린다. |
| FIN-WAIT-2 | 자신이 보낸 FIN에 대한 ACK를 받았고 상대방의 FIN을 기다린다. |
| CLOSING | 상대방의 FIN에 ACK를 보냈지만 자신의 FIN에 대한 ACK를 못받은 상태 |
| TIME-WAIT | 모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태. 새 연결과 겹치지 않도록 일정 시간 동안 기다린 후 CLOSED로 전이한다. |
먼저 연결을 끊는쪽에 생성되는 소켓으로 혹시 모를 패킷 전송 실패에 대비하기 위해 존재하는 소켓
출처 :