TCP 란 ?
Transport Layer에 있는 프로토콜의 한 종류
[ Stream Delivery ]
- Stream Delivery 를 아주 잘 표현해준 사진 이다.
- 생산한 ( 보내기 위해 만든 ) 데이터를 Buffer에 쌓는다. ( 얼마나 만들든 상관없이 )
- TCP 의 RULE 에 따라 재포장한다.
- 즉 생산 = 전송이 아니란 뜻
- 어플리케이션에서 만든대로 나갈수도, 안 나갈수도 있음
- 여러분 이건 거짓말일수도 아닐수도있습니다 같은 말처럼 보이지만 진짜다
- 이 때, BUFFER 가 EMPTY, SENT, NOT SENT 로 구분되어 신뢰성을 담당하는것
- 이와 반대되는 방식은 Boundary Delivery로 만들어지는대로 그대로 전송해버린다.
[ Numbering System ] ( 역시 TCP가 한다 )
- 패킷에 번호를 부여하는 일 또한 TCP 가 하고 있는데 일단 시작번호는 Random
- 1000 byte 단위로 끊는다고 칠때, 시작이 10001 이라면 끝은 11000 !
- 그럼 다음 패킷의 시작은 11001 이고 그 끝은 12000 일 것이다. 참 쉽다
TCP 는 신뢰성을 책임진다고 했다.
- 앞서 BUFFER 에서 책임진다 했던 신뢰성을 보다 확실히 책임지기 위해서 응답이 필요한 법이다. 즉 보냈으면 받았다, 못받았다 응답을 해줘야 다시 보내던가 다음걸 보내던가 할 것 아닌가. 인간관계에서도 중요하다
- 두가지 방식이 있다.
기호1번 : Selective ACK
1번을 보내면 나 1번 받았다 !
2번을 보내면 나 2번 받았다 ! 하는 방식
기호2번 : Cumulative ACK
1번을 보내면, 이제 2번보내줘 !
2번을 보내면, 이제 3번 보내줘! 하는 방식
- Cumulative ACK 가 채택 되어있다.
Checksum
- 패리티 비트 마냥, 건네 받은 값이 이상이 없는지 확인하는 녀석으로 후에, 더 깊숙이 다룬다.
SYN : 클라이언트가 보내는 신호로 나 이제 요청한다! 하는 뜻
ACK : 위의 기술 되어있던대로 다음껄 달라는 것
FIN : 이제 끝 냅시다.
SYN 은 번호 1개 소모
ACK 은 데이터가 없으면 값 소모 X
FIN 은 번호 1개 소모
이와 같은 규칙을 기억하고 밑의 그림을 통해 이해하자