TCP 프로토콜
TCP가 하는 일
TCP 프로토콜의 구조

- 출발지 포트
- 목적지 포트
- Seq번호 : TCP 패킷의 순서 번호
- Ack번호 : Seq 번호에 대한 응답번호
- 오프셋 : 헤더의 길이, IP 헤더의 길이와 성격이 비슷, 최대 15, Offset * 4 = 실제 헤더의 크기
- Reserved : 예약된 필드로써 사용하지 않는 곳
- TCP Flags : 현재 패킷의 종류를 표시
- URG : 긴급 bit, 우선순위가 높은 데이터를 포함한 패킷
- ACK : 승인 bit, 승인의 뜻을 포함한 패킷
- PSH : 밀어넣기 bit, TCP Buffer가 일정한 크기만큼 쌓여야 패킷을 추가 전송하는데 이를 생략하고 계속 데이터를 전송하게 함
- RST : 초기화 bit, 데이터를 주고받는 거에 문제가 발생했으니 서로의 연결을 초기화하겠다는 패킷
- SYN : 동기화 bit, Seq 번호를 동기화하고 연결 수립을 요청한다는 패킷
- FIN : 종료 bit, 서버와 클라이언트가 연결을 종료하겠다는 패킷
- 체크썸: 헤더의 오류를 확인하기 위한 값
- Urgent Pointer: 어디가 긴급 데이터인지를 가리키는 곳
TCP플래그
TCP 플래그의 종류

- Acknowledgment : 대답
- Syn : 요청
TCP를 이용한 통신과정
연결 수립 과정
- 연결을 먼저 수립을 시킨다
- 그 후 데이터를 주고 받는다
- 갔다 왔다 갔다 3번 한다
- 이 과정을 거처야 송수신을 한다
3Way Hand Shake

- syn : 너랑 연결해도 돼?
- syn+ack : 응 해도 되 근데 나도 해도 돼?
- ack : 응 너도 해
- 시퀀스 번호는 임의로 지정해준다
데이터 송수신 과정

- 그 다음 클라이언트가 서버에 새로운 것을 요구해서 결과물을 볼 수 있다.
(ex. 우리 이제 서로 신뢰해 나 이제 이 자료 보여줘!)
- syn 할때 3way handshake 할때 시퀀스 번호 그대로 사용하는데 새로운 데이터를 요구할때는 데이터 크기만큼 증가시켜 보내게 된다(ex 101 에서 201)
실습
가상PC2에 가상PC1이 접속할수 있게 만들기(wireshartk로 상태확인하기)

- 가상 pc2(서버)에 쉐어프로그램 설치
- 서버는 꺼지면 안된다! 서버가 지속 시간에 따라 등급을 정하기도 한다.
- 가상 pc1(클라이언트)에서 쉐어프로그램 접속

- 맨 위가 3way 방식으로 처음에 주고 받으며 서로를 신뢰 할지 말지 정하는 것
TCP 상태전이도
TCP 연결 상태의 변화

- 점선은 서버의 상태변화
- 실선은 클라이언트의 상태변화
- 점선과 실선이 주고 주고받으며 서로 estalshed 상태가 되어야 한다.
3Way Hand Shake과 함께 보기
- netstat -ano 사용하여 확인
- 서버 리스닝 클라이언트 싱크센드
- 서버 싱크 리시브드 싱크 액트 보내고

- 서로 연결 된 상태 (서로의 화면에 establshed)