Principles of congestion control congestion : 긴 딜레이, 패킷 손실 scenario 1 (simplest) 설정 : 하나의 라우터, 무한 크기 버퍼, 입출력 링크 용량 R, 재전송이 필요하지 않음 => 용량이 R/2이면 네트워크 도착이 절반임으로 네트워크가 가득 찬다. 버퍼의 크기가 무한이므로 패킷 손실은 발생하지 않지만, 큐잉 지연이 발생하게 된다. 이에 따라 전송 지연이 증가한다. scenario 2 설정 : 하나의 라우터, 유한 버퍼, 재전송 있음 애플리케이션 레이어은 입력과 출력이 같고, 재전송을 포함한 transport 레이어의 입력은 애플리케이션의 입력보다 크거나 같다. Idealization(이상화) 완벽한 정보 가짐: sender는 라우터 버퍼가 사용 ..
컴퓨터 네트워크
TCP flow control 네트워크 레이어가 전달하는 데이터가 애플리케이션 레이어가 소켓 버퍼에서 삭제하는 데이터보다 빠르면 어떻게 될까? - 이때 필요한게 flow control, receiver의 버퍼가 너무 많고 빠른 전송에 오버플로우되지 않도록, receiver는 sender를 컨트롤한다. TCP receiver는 TCP header의 rwnd field로써 버퍼에 빈자리가 있다고 advertises한다. - 많은 OS에서 RcvBuffer를 자동조정(autoadjust) sender는 rwnd가 도착할때까지 unACKed data의 크기를 제한한다. guarantees(보장된) receive buffer는 overflow되지 않을 것이다. TCP connection management - a..
TCP segment structure A: ACK: 다음에 예상되는 seq number head len: TCP 헤더의 길이 checksum : internet checksum C,E : 혼잡 알림 TCP options : TCP 옵션 RST,SYN,FIN : 연결관리자 seq number : segment seq number : receive window : flow control : TCP sequence numbers, ACKs Sequence numbers - 세그먼트 데이터에서 첫 번째 바이트의 바이트스트림 number Acknowledgements(확인응답) - ACK - 상대방으로부터 예상되는 다음 바이트의 seq number - cumulative ACK (누적) 수신 측에서 순서가 맞지..
Principles of reliable data transfer (신뢰성 있는 데이터 전송의 원칙) 신뢰성 있는 데이터 전송 = reliable data transfer = rdt 신뢰성 없는 채널의 특성(손실, 오염, 재정렬 등)에 따라 신뢰성 있는 transfer protocol의 복잡도가 영향을 받는다. 송신자와 수신자는 서로의 상태를 모르기에 메시지가 수신됐는지 알 수 없다. rdt_send() : 애플리케이션 계층 등 상위 레이어에서 호출됨. 전송할 데이터를 수신 측 상위 레이어에 전달 udt_send() : rdt에서 호출되어 불안정한 채널을 통해 패킷을 수신측에 전송 rdt_rcv() : 수신측 채널에서 패킷이 도착했을 때 호출됨 deliver_data() : rdt에서 호출되어 상위 레이..