특징
- 신뢰성이 있음
- 전이중 전송방식
- 연결지향적
- 바이트 스트림
- 흐름제어
- 비실시간적 응용
패킷 모양

- 이미지 출처
- 발신 / 수신 포트
- Sequence Number : 송신측 일련번호. 바이트 단위로 구분되어 순서화 되는 번호임
- Acknowledgement Number : 수신확인 일련번호. 수신하기를 기대하는 다음 바이트 번호
- HLEN : Header Length. 헤더의 길이를 나타냄
- 예약 : 얘도 길이인데 예비용
- TCP 제어 플래그 :
- URG : Urgent. 긴급용. 이 플래그가 켜지면 순서에 상관없이 가장 먼저 처리됨
- ACK : Acknowledgement Number의 유효 여부
- 1 : 수신확인 번호가 유효합니다.
- 0 : 수신확인 번호가 유효하지 않습니다. 무시합니다.
- PSH : Push. 이 플래그가 켜진 패킷을 받는 수신측은 버퍼가 찰 때까지 기다리지 말고 이 패킷을 바로 응용프로그램으로 전달
- RST : Reset. 재연결
- SYN : Synchronize. 일련번호 동기화
- SYN = 1, ACK = 0 : 연결 요청
- SYN = 1, ACK = 1 : 연결 허락
- SYN = 0, ACK = 1 : 연결 설정
- FIN : Finish. 송신자가 데이터 보내기를 마침
- FIN = 1, ACK = 0 : 종료 요청
- FIN = 1, ACK = 1 : 종료 응답
- 윈도우 크기 : 흐름제어를 위해 사용함
- 패킷을 보낼 때마다 보내는 쪽의 수신 여유 버퍼 크기를 알려줌
- “나 이정도 더 받을 수 있음” 이라고 주기적으로 말해주는 것
- 체크섬 : 오류 검출용
- 긴급 포인터 : 수신확인 일련번호부터 긴급 데이터의 끝까지 바이트 오프셋
- 옵션
- 패딩 : 헤더가 20 바이트가 안될 경우에 채워주는 역할
상태들
연결 시도

- 이미지 출처
- LISTEN : 서버가 수신을 받을 준비가 되어 있는 상태
- SYN-SENT : 클라이언트가 서버한테 연결 요청을 보내고 대기하고 있는 상태
- SYN-RCVD : 서버가 클라이언트한테 연결 요청을 받은 상태
- ESTABLISHED : 클라이언트와 서버의 연결이 확립된 상태
연결 해제

- 이미지 출처
- FIN_WAIT_1 : 클라이언트가 서버에게 연결 해제 요청을 보낸 상태
- CLOSE_WAIT : 서버가 클라이언트의 연결 해제 요청을 수신한 상태
- FIN_WAIT_2 : 클라이언트가 서버의 연결 해제 확인을 받은 상태
- LAST_ACK : 서버가 클라이언트의 마지막 응답을 대기하는 상태
- TIME_WAIT : 클라이언트가 서버로 마지막 응답을 보낸 상태
- CLOSED : 연결이 해제된 상태