TCP 소켓에 존재하는 입출력 버퍼

- 입출력 버퍼는 TCP 소켓 각각에 대해 별도로 존재한다.

- 입출력 버퍼는 소켓 생성시 자동으로 생성된다.

- 소켓을 닫아도 출력버퍼에 남아 있는 데이터는 계속해서 전송이 이뤄진다.

- 소켓을 닫으면 입력버퍼에 남아 있는 데이터는 소멸되어 버린다.


이와 같은 버퍼가 존재하기 때문에 데이터의 슬라이딩 윈도우 프로토콜의 적용가능하고, 이로 인해서 버퍼가 차고 넘치는 상황은 발생하지 않는다.


소켓 A : 야 50바이트까지는 보내도 괜찮아!

소켓 B : OK!


소켓 A : 내가 20 바이트 비었으니까 70바이트까지 괜찮아.!!

소켓 B : OK!


-> 슬라이딩 윈도우 프로토콜의 데이터 송수신 유형


TCP의 내부동작 원리 1: 상대 소켓과의 연결

- [Shake 1] 소켓 A : Hi! 소켓 B, 내가 전달할 데이터가 있으니 우리 연결 좀 하자.

- [Shake 2] 소켓 B : Okay! 지금 나도 준비가 되었으니 언제든지 시작해도 좋다.

- [Shake 3] 소켓 A : Thank you! 내 요청을 들어줘서 고맙다.



TCP의 내부동작 원리 2 : 상대 소켓과의 데이터 송수신


ACK의 값을 전송된 바이트 크기 만큼 증가시키는 이유는 패킷의 전송유무 뿐만 아니라. 데이터의 손실유무까지 확인하기 위함이다.

ACK번호 -> SEQ 번호 + 전송된 바이트 크기 + 1

SEQ 전송 시 타이머 작동, 그리고 SEQ에 대한 ACK가 전송되지 않을 경우 데이터 재전송


TCP의 내부동작 원리3 : 상대 소켓과의 연결종료

- 소켓 A : 전 연결을 끊고자 합니다.

- 소켓 B : 아 ! 그러세요 ? 잠시만 기다리세요.

- 소켓 B : 네 저도 준비가 끝났습니다. 그럼 연결을 끊으시지요.

- 소켓 A : 네! 그동안 즐거웠습니다.



four-way handshaking 과정을 거쳐서 연결을 종료하는 이유는 일방적 종료로 인한 데이터의 손실을 막기 위함이다.


블로그 이미지

잉비니

,