본문 바로가기

728x90

ComputerScience/Network

(61)
TCP - 3. flow control, connection management 1. flow control 통신을 필요로하는 application은 socket을 통해 os와 소통한다. 위 그림은 sender로 부터 패킷을 수신하는 과정을 나타낸다. tcp socket을 만들면 자동으로 할당되는 receive buffers에 payload(메시지)가 저장된다. application layer에서 receive()로 버퍼에 저장된 메시지를 읽어오게 된다. 그런데 만약 receiver가 저 버퍼에서 메시지를 읽는 속도보다 버퍼에 메시지가 쌓이는 속도가 더 빠르면 버퍼를 꽉 채우고 남은 메시지들은 그냥 버리게 된다. 그래서 receiver는 overflow를 피하도록 sender가 패킷을 보내는 속도를 통제한다. 이게 flow control이다. flow control 방식은 다음과 같..
How does Skype work? 1. Multimedia networking 크게 세가지 응용이 있다. 1. streaming audio, video ex) netflix, youtube 스트리밍이랑 전체 파일을 다 다운받지 않더라도 play를 할 수 있는 것을 말한다. piece를 연속적으로 다운 받아 빠른 play가 가능하도록 한다. 네트워크가 많이 바빠서 latency가 크다면 버퍼링 등을 활용하여 더 좋은 품질을 제공할 수 있다. 2. streaming live audio, videa 실시간의 경우는 quality를 희생하더라도 빠른 응답시간이 매우 중요하다. 3. conversational voice/video over ip ex) skype, kakao audio call 위의 1,2는 단방향 통신이였지만 이 경우는 양방향 ..
TCP - 2. Reliable data transfer 1. Reliable data trasfer tcp는 best effort 방식의 비신뢰성 ip위에서 동작한다고 했다. timeout 발생, 중복 ack 수신 시에 sender는 재전송을 시도한다. timer는 한 stream(여러 segement들로 구성)에 대해 한번 설정된다. 가장 oldest unacked segment를 시작점으로 설정된다. timeout내에 ack가 도달하지 않아 재전송할때는 기존 timeout 해제 -> 재전송 -> timeout길이를 두배로 다시 설정한다. 이렇게 하는 이유는 network를 더 혼잡하게 만들지 않도록 하기 위해서다. 즉 좀 더 천천히 재전송하기 위해 이렇게 한다. 만약 ack가 timeout내에 도달하면 해당 세그먼트를 전송완료 체크하고 윈도우를 이동하는 ..
TCP - 1. connection-oriented-transport tcp는 internet protocol의 표준으로 채택되었고 계속해서 발전해 왔다. 지금까지 계속해서 tcp에 대해 설명해왔지만 이번 장에서는 TCP의 특징들에 대해 더 자세히 알아본다. 1. Attributes connection-oriented : 데이터 전달 전에 logial end-to-end 연결이 필요하다. 이를 위해 control message를 주고 받는 것을 handshaking이라고 한다. point-to-point : 한명의 sender, 한명의 receiver간의 연결이다. full duplex data : 한 connection을 두고 양방향으로 통신이 가능하다. flow controlled : 송신자는 수신자의 버퍼 크기를 초과해서 보내지 않는다. (서로 연결할 때 내용을 전달..
Transport Layer - 4. Reliable data transfer Design (3) 1. 성능을 높여보자! 지난 시간에 마지막으로 설계한 신뢰성 있는 전송 방식은 stop&wait protocol 이다. 아무리 대역폭이 커지더라도 한 패킷씩 보내고 기다리기 때문에 성능이 좋지 않다. 따라서 이번에는 지난 설계 모델을 수정해서 성능을 높여보자. 성능을 높이기 위해 새로운 테크닉 몇가지가 더 필요하다. 1. cack(cumulative acknowledge) sender가 cack(x) 를 받으면 수신자가 x번까지의 패킷은 잘 수신했다고 인지한다. 위의 예시의 경우 수신자는 6번을 받지 못하고 7, 10을 이어서 받았으므로 ack5를 보낸다. 2. pipelined protocols stop&wait protocol 방식이 매우 느리다는 것을 지난 시간에 확인했다. stop&wait 방식..
Transport Layer - 3. Reliable data transfer Design (2) 1. Reliable data transfer design 이제 reliable data transfer에 대한 기본적인 내용은 다 배웠다. 이번장에서는 reliable data transfer 설계를 수행한다. 구체적으로 우리가 할 일은 하위 계층이 제공하는 udt_send(), rdt_rcv()(비신뢰성 패킷 전달 채널을 사용하는 api)를 사용해서 신뢰성 있는 전달 기능을 구현한 다음 상위 계층에게 rdt_send(), deliver_data() 라는 api를 제공하는 것이다. 설계 복잡도를 살짝 낮추기위해 아래 두가지를 가정한다. 1. checksum으로 bit error를 탐지할 수 있다. 2. packet loss는 없다고 가정한다. 2. case1 : no error 패킷을 전송하고 ack를..
Transport Layer - 2. Reliable data transfer Design (1) 1. Reliable data transfer 송신자가 에러 없이 모든 패킷이 순서에 맞게 수신자에게 도달하길 원한다고 해보자. 사실상 네트워크에서는 어느 계층으로 내려가더라도 패킷이 올바르게 순서대로 전송된다고 보장하지 못한다. 그래서 Link layer끼리 신뢰성있는 전달을 구현했다고 하자. 하지만 얼마든지 그 상위 계층에서의 전달에 문제가 생길 수 있기 때문에 전체 전송에서 신뢰성을 보장할수는 없다. 모든 link가 신뢰성을 보장하더라도 queue loss, drop이 발생할수도 있다. 따라서 end 지점끼리의 check가 필요하다. 그래서 선택한 방법이 "application layer에서 신뢰성있는 transport layer의 서비스(TCP)를 사용하도록 하자"이다. 그러면 applicatio..
Transport Layer - 1. Introduction transport layer는 서로 다른 호스트에서 돌아가는 application process끼리의 logical end-to-end communication을 제공한다. 실제로는 여러곳을 경유해 목적지를 찾아가지만 application layer의 view에서는 end지점끼리 직접 연결돼 있는 것처럼 보인다. transport layer에서 send side는 application layer로부터 내려온 message를 segments들로 쪼개서 network layer에게 전달한다. receive side는 segment들을 다시 모아서 message를 만들고 application layer에게 올려준다. 여러 종류의 transport protocol들이 있고 인터넷에서는 TCP, UDP가 가장 많..

728x90