Clolent

TCP에게는 데이터의 경계가 없다.

이 특성에 의해 전송을 할때 TCP의 룰에따라 재포장 되는 것에 의해 문제가 생길 수 있다.

한글 1글자가 1바이트라 가정하자


"아버지가 방에 들어가신다" 를 TCP 룰을 바꿔 전송을 한다고 치면


4바이트씩 끊어전송

아버지가 / 방에 들어 / 가신다


3바이트씩 끊어 전송

아버지 / 가방에 / 들어가 / 신다


둘의 의미는 확연히 달라지게 된다. 


어플리케이션 프로토콜의 정의

서버, 클라이언트의 구현과정에서 하나 둘씩 만들어지는 약속들을 모아 '어플리케이션 프로토콜' 이라 한다.

목적에 맞는 프로그램의 구현에 따라서 정의하게 되는 약속이라 할 수 있다.


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


A : 데이터의 전송, 수신이 일어나는 순간은 언제일까요 ?

Q : Write, Read 함수가 호출되는 순간 아닐까요 ?

A : 정확히는 WRITE 함수가 호출될 때, 데이터는 출력버퍼로 이동을 하고, 

Read 함수가 호출되는 순간 입력버퍼에 저장된 데이터를 읽어 들이게 된답니다.

Q : 예?


WRITE 함수가 호출되면 출력버퍼란 곳에서 데이터가 전달되어서 상황에 맞게 적절히 데이터를 상대방의 입력버퍼로 전송한다.

그럼 상대방은 Read 함수 호출을 통해 입력버퍼에 저장된 데이터를 읽는 것이다.


특성을 정리하면 다음과 같다.

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

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

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

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


Q : 50 바이트만큼의 입력버퍼가 여유가 있는데 만약 100바이트가 전송되면 난리나는거 아닌가요 ?

A : 그런일은 일어나지 않습니다.

Q : ?!


TCP 는 rwnd 를 통해 현재 비어있는 분량을 지속적으로 알려주기 때문에, 입력버퍼의 크기를 초과하는 데이터의 전송은 일어나지 않습니다 !


- 복습 -


연결 = SYN

ACK = 이제 받아야할 패킷의 번호를 부여

FIN = 종료










댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글