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 과정을 거쳐서 연결을 종료하는 이유는 일방적 종료로 인한 데이터의 손실을 막기 위함이다.
'이전것 > 개발' 카테고리의 다른 글
참 좋은 글... 신입부터 2~3년차까지 꼭 알아야 할것!!! (0) | 2017.06.02 |
---|---|
5.1. 에코 클라이언트의 완벽 구현 (0) | 2016.12.05 |
해피해킹 딥스위치 설정 (0) | 2016.12.05 |
Vi/Vim 단축키 모음 (0) | 2016.12.02 |
4.3. Iterative 기반의 서버,클라이언트의 구현 (0) | 2016.12.02 |