공부/네트워크2011. 7. 28. 09:52


Transport services and protocols

프로세스간 통신
발신쪽에서는 segments로 쪼개서 network layer에게 전달.
수신쪽에서는 segments를 조합하여 message로 만들어 application layer에 전달
TCP와 UDP 프로토콜이 있다.
TCP : reliable, 보낸 순서대로 도착. 
UDP : 순서가 없이 도착.
Transport layer는 delay를 보장하거나, bandwidth를 보장하지 않는다.

Multiplexing/demultiplexing

demultiplexing : transport layer에 있는 여러 segments를 적절한 socket으로 보내주는 것.
Multiplexing : 여러 소켓으로부터 data chunks를 모아서 각 data chunk마다 header 붙여주고 암호화해서 segment로 만들고, network layer에 전달하는 것.

Connectionless demultiplexing
udp socket들은 destination IP address와 destination port number로 구분된다.
IP datagram이 다른 host에서 왔더라도 dest ip와 dest port가 같으면 같은 소켓으로 들어간다.

Connection-oriented demux
TCP 소켓들은 출처아이피, 출처 포트번호, 목적지 아이피, 목적지 포트번호로 구분된다.
4가지 정보로 적절한 소켓으로 들어간다.
  
UDP

데이터를 읽어버릴 가능성이 있다.
세그먼트들이 순서없이 application layer에 전달된다. 
No connection
덕분에 header size가 작고, 빨리 보낼 수 있다.
reliability는 application layer에게 맡긴다.
에러체크는 한다.(checksum)
transport layer의 기본기능인 multiplexing과 demux 기능을 한다.

Reliable data transfer(RDT)

1.0
bit error, packet 손실 없는 이상적인경우

2.0
bit error가 있는 경우
받은 packet에 문제가 없으면 ACK을 전송
문제가 있으면 NAK 전송
ACK과 NAK에 비트에러가 있다면?

2.1
ACK과 NAK에 비트에러가 있으면
sender가 패킷을 재전송 한다.
패킷에 시퀀스넘버가 있어서  receiver가 이미 ACK을 보낸거면 ACK만 전송한다.

2.2
NAK대신 ACK을 사용.
ACK 패킷에도 시퀀스넘버 포함.

3.0
에러와 loss 둘 다 있을 때
timer 사용.
packet이 loss 되었을 때 – timeout, 패킷 재전송
ACK이 loss 되었을 때 – timeout, 패킷 재전송, 패킷 중복, 시퀀스 넘버로 알 수 있다.
ACK이  delay 될 때 – timeout, 패킷 재전송, 패킷 중복, 시퀀스 넘버로 중복 파악.

Pipelining

한번에 여러개의 패킷을 보낸다. ACK을 안기다린다.
링크 활용률이 올라간다.

Pipelining protocols

1) Go-Back-N
Sender : timeout 발생시 ack을 받지 못한 패킷 모두 재전송
Reciever : 다음번 수신할 패킷의 시퀀스 번호만 알고 있으면 된다. 이 번호가 아닌 패킷이 들어오면 버린다. 그리고 최근에 어디까지 받았다는 걸 알려주려고 시퀀스넘버를 담은 ACK을 보낸다. Cumulative acks(5번 ACK을 보내면 1,2,3,4도 잘 받았다는 것을 내포함)
2) Selective repeat
리시버는 패킷을 받으면 그 패킷에 대한 ACK을 보낸다. 순서대로 오지 않은 패킷은 버퍼에 저장했다가 나중에 순서대로 되면 그 버퍼에 있는 모든 패킷들을 윗 레이어로 보낸다. 센더는 개별 패킷에 대한 타이머를 가지고 있다. 

TCP

Byte stream (message의 경계가 없다.)
Round Trip Time(RTT) and Timeout
Timeout은 RRT보다 크게.
현재 RRT에 새로운 패킷의 RTT를 반영. 그리고 여유분을 둔다.
Cumulative acks
순서대로 오지 않은 segments들을 버퍼에 보관.
재전송 타이머 한개.
timeout이 발생하거나, 중복된 ack을 받으면 패킷재전송이 이루어진다.
Timeout 발생하면 가장 오랫동안 ack을 받지 않은 패킷을 재전송한다.

Fast Retransmit

time-out 까지 안기다리고, 리시버에서 3번 같은 ACK을 보내면 data가 loss되었다는 걸로 생각하고 재전송한다.
 
TCP flow control

sender가 receiver의 버퍼의 spare room 한도 내에서 패킷을 보낸다.
Segment 안에 RcvWindow 값을 넣어서 sender가 spare room를 알 수 있다.
 
Congestion control

네트워크망을 보고 전송속도를 조절한다.
아무리 sender쪽의 데이터 전송률이 높아도 Output link의 data 수용 능력은 한계가 있다.
패킷 loss로 인한 재전송과 delay로 인한 재전송 때문에 보내는 데이터 전송률이 실제로 받은 데이터 전송률보다 크다. 데이터가 적게 들어오는 셈.

Congestion control 두가지 방법

1) end-system에서 control
network로부터의 피드백이 없이, end-system이 loss와 delay를 판단한다.
2) Network-assisted
router가 end-system에게 피드백을 제공한다.

Congestion control 알고리즘

하기 전에 용어정리
MSS(Maximum Segment Size) : 하나의 TCP segment가 가질 수 있는 최대 data size. 
CongWin : Congestion Window (TCP sender가 네트워크에 트래픽을 보낼 수 있는 전송률)
sender는 CongWin의 크기를 조절하면서 Congestion Control을 한다.
sender는 최대 CongWin만큼 수신확인 없이 segments를 보낼 수 있다.
1) Additive Increase Multiplicative Decrease (AIMD)
Loss가 발생할때까지 CongWin을 매 RTT마다 1 MSS 씩 증가한다. (Additive Increase)
Loss가 발생하면 CongWin을 절반으로 줄인다. (multiplicative decreases)
이렇게 linear하게 증가하는 것을 congestion avoidance라고 한다.
2) Slow Start
CongWin이 1MSS부터 시작한다.
첫번째 loss가 발생할 때까지 CongWin이 지수함수를 따른다.

loss 발생했을 때 처리
3개의 duplicate ACKs을 받으면 CongWIn을 절반으로 줄이고, linear하게 증가시킨다.
Timeout이 발생하면 CongWin을 1로 줄이고, 지수함수를 따른다. (상황이 심각하니 과감하게 줄인다.) 그리고 threshold에 이르면 linear하게 증가한다.  threshold는 timeout 발생하기 전 CongWin의 절반.

'공부 > 네트워크' 카테고리의 다른 글

Link layer and LANs  (1) 2011.08.18
Network Layer  (0) 2011.08.15
Application layer  (0) 2011.07.23


Posted by skyjumps