client host request, receives service from always on server
e.g. Web browser/server; email client/server
💡
즉, client는 원할 때 link를 통해 server로부터 정보를 받을 수 있는 것이다. 서버는 상시 link에 연결되어있어 client로부터의 요청을 항상 기다리는 것이다.
peer-peer model
minimal use of dedicated servers
e.g. Skype, BitTorrent
Transmission을 하는 방식은 2가지가 존재한다. 각각에 대해서 알아보면 다음과 같다.
Connection-oriented service
Goal : data transfer between end systems
TCP (Transmission Control protocol) service의 특징은 다음과 같다
reliable, in-order byte stream data transfer
→ 메세지가 유실되지 않고 간다는 것. 추가적으로 in-order라는 것은 보낸 순서를 지키면서 도착지까지 간다는 것
flow control
→ sender와 receiver의 속도가 다르면 조절을 해줘야 한다. 소화할 수 있는 능력에 맞춰서 전달해야한다.
congestion control
→ senders “slow down sending rate” when network congested
→ 중간 네트워크 회선의 상황을 고려해서 보낸다는 것이다.
💡
대부분의 경우 TCP를 사용한다. 단 computing resource 와 network resource를 UDP보다 많이 사용하게 된다.
Connectionless-oriented service
TCP와 반대되는 개념인 UDP (User Datagram Protocol)이다. 특징은 다음과 같다.
connectionless
unreliable data transfer
no flow control
no congestion control
💡
sender 입장에서는 그냥 보내면 된다. 그래서 상대적으로 보내는 속도가 TCP보다 더 빠르다. 즉, reliable이 필요하지 않는 경우 UDP를 통해 보내주면 된다. 예를 들어 실시간 오디오 (voIP)같은 경우는 일부 유실되더라도 크게 인식하지 못하므로 UDP를 사용해도 된다.
이때, TCP와 UDP는 Protocol의 일종이다. 그렇다면 Protocol란 무엇인지 알아보도록 하자.
What is a protocol?
메세지를 주고받기 위한 준비동작정도로 이해하면 된다.
All communication in Internet coordinated by protocols
Network core
router : 데이터를 받아서 전송해주는 역할을 수행한다
💡
그림 상으로는 원판에 X 모양으로 표기된다
network of networks
그렇다면 정확히 어떤 방식으로 data가 network를 통해 transfer되는 것일까? 이에는 2가지 방식이 존재한다.
circuit switching
→ dedicated circuit per call : telephone net
💡
출발지에서 목적지까지 길을 예약하고 특정 사용자만을 위해 사용할 수 있게끔 한 것
packet switching
→ data sent through net in discrete “chunks”
💡
그때 끄때 올바른 방향으로 packet을 forwarding만 수행
Compare Packet switching versus Circuit switching
다음과 같은 상황을 생각해보자
Link의 bandwidth는 1Mbps이다. (즉, 1초에 1Mb를 전송할 수 있는 능력이 있는 것이다.) 추가적으로 각 유저는 100kb/s를 active상태일 때 필요로 하며, 전체 시간의 10%만큼만 active상태이다.
Circuit switch : 10명의 유저까지만 지원해줄 수 있다.
Packet switch : 제약이 크게 없음. 하지만 몰리면 문제가 발생할 수는 있다. 하지만, 35명이 유저라고 했을 때 10명 이상이 몰릴 가능성이 0.004보다 작다.
💡
잘 생각해보면 매 순간 data를 요구하는게 아니다. 네이버에서 기사를 누른다고 하면, 해당 데이터를 받고 한참 있다가 데이터를 요구하는 것이다. 즉 각자의 리듬에 맞춰서 누르게끔해도 크게 문제가 없다는 것이다.
💡
만약 동시에 접속하려고 하는 경우에는 문제가 발생할 수 있다.
즉 이러한 이유때문에 packet switch는 delay가 발생하게 되는 것이다.
How to loss and delay occur?
기본적으로 router가 packet를 받으면,
정상적인 packet인지 목적지가 어딘지에 대한 정보를 확인한다.
→ 이게 processing delay이다.
check bit errors
determine output link
💡
packet를 검사하는 단계라고 생각하면 된다
💡
router를 좋은 것으로 바꾸면 processing dealy를 줄일 수 있다.
현재 유저가 몰려서 link의 bandwidth보다 더 많은 양의 packet이 들어온 경우 router/switch안에 있는 queue (buffer 라고도 불린다)에 머무르게 된다. (안그러면 loss가 발생할 것이기 때문이다.)
→ 이게 queueing delay이다.
💡
주의할 점은 host에서 router로 보내는 경우에는 queueing dealy와 processing dealy가 존재하지 않는다는 것이다.
💡
queueing delay는 client에 의해서 지배되는 영역이다. 직접적으로 줄이기는 어렵다.
💡
만약 정말로 너무 몰려서 buffer의 크기보다 더 많은 packet이 들어오게 되면 유실이 발생하게 된다. 대부분 인터넷에서 유실이 발생하는 이유는 queueing delay 때문이다.
💡
이러한 유실이 발생하게 되면 TCP는 아예 처음부터 재전송을 하게 된다. 기본적으로 기능적인 mechanism은 network edge에 몰아넣고, 사이에 있는 router들은 단순히 packet 전달만 진행하게 된다.
2번 단계를 지나서 queue의 맨 앞에 섰다고 가정하자. 이때, 결국 packet은 bit로 구성되어 있기 때문에, 첫번째 bit부터 마지막 bit까지 link로 뿜어져 나가는데 시간이 걸린다.
→ 이게 transmission delay 이다.
💡
첫번째 bit가 뿜어져 나가는 시각부터 마지막 bit가 link로 뿜어져 나가는 시간까지의 간격을 transmission delay라고 하는 것이다.
R : link bandwidth (bps) : data rate이라고도 부름
L : packet length (bits)
Transmission delay=RL
💡
bandwidth가 클수록 transmission delay가 작을 것이다. bandwidth는 일종의 파이프의 크기라고 생각해주면 된다. 당연히 파이프의 크기가 클수록 붓는게 걸리는 시간이 줄 것이기 때문이다.
💡
bandwidth를 늘림으로써 transmission delay를 줄일 수 있다.
3번을 지나서 마지막 bit가 link에 올라온 상황이다. 이 상황에서 마지막 bit가 다음 router까지 도달하는데까지 시간이 걸린다.
→ 이게 propagation delay이다.
d : length of physical link
s : propagation speed in medium (빛의 속도라고 가정)
Propagation delay=sd
💡
해당 값은 link의 물리적 소자의 특성에 의해서 결정된다. 여기서는 빛의 속도라고 가정한다.