TCP와 UDP

2017. 10. 7. 20:59카테고리 없음

#TCP와 UDP 작동 Layer


Transport Layer에서 host들 간에 TCP로 작동할지, UDP로 작동할지 결정을 한다.

그다음, OS에서 process들 간에 logical communication을 가능하도록 Network Layer가 작동된다.



# TCP vs UDP


#UDP

 -Unreliable, unordered delivery

 -No connection set up

 -No congestion control, flow control

 -Socket에서 dest IP 주소랑 port number만 확인함.

 -No handshaking 

 -Error 발생시, checksum으로 확인하고 true면 올리고 false면 그냥 버림


#TCP

 -Reliable, In-order delivery

 -Congestion control, flow control

 -Connection setup

 -Socket에서 source IP,dest IP, source port number, dest port number 4개로 확인함. 왜냐면 ACK을 보내줘야하기 때문에.


-Reciver는 여태까지 잘받아온 ACK를 나타낼 수 있는 Cumulative ACK을 사용한다.


-TCP Connection을 위해서 TCP 3-way handshake를 거쳐야함. Connection 종료도 마찬가지 FIN msg형태로

Client 

Server 

 1.TCP SYN msg를 보낸다.

 SYNbit =1, Seq num=x

 

 

2.TCP SYNACK을 보낸다.

SYNbit = 1, Seq num =y

ACKbit = 1, ACKnum=x+1

 3.SYNACK를 위한 ACK를 보내준다.

ACKbit=1, ACKnum=y+1

 

 

 4.Connection Established

 

  +) 왜 3 handshaking이 필요할까?

    결론적으로 TCP는 양방향성 connection이다. 즉, sender와 receiver간의 data를 주고 받고 하는 것이다.

    Client -> Server :  Server야. 내가 data를 작은 거 보낼껀데, 잘 받을 수 있어?

    Server -> Client :  응. 잘 받았어. 여기 너가보낸 거에 대한 ACK. 근데, 넌 내꺼 받을 수 있어? (현재, client->server로만 확인한 상황)

    Client -> Server :  응. 너껏도 잘 왔드라. 여기 잘 왔다는 표시로 ACK줄게 (server->client도 잘 전송되었다는 걸 확인할 수 있음)


   만약 2 handshaking이면, server가 client한테 잘 줄 수 있는지 확인이 불가능하다. 

   또한 4 handshaking이면, 3-handshaking으로도 충분히 가능하는 데, cost가 올라간다.

     


-Congestion Control

 Sender가 지금 Congestion이 많다는 것을 어떻게 알 수 있을까?

 1)Timeout - 일정시간 동안 ACK이 날라오지 않는다면, 심각하게 Network상황이 안좋다는 것을 알 수 있음.

 2)Three duplicate ACKs - Timeout상황보다는 아니지만, 현재 Network상황이 좋지 않아서 순서대로 data가 오지 않는 상황


slow start : 초기에는 ACK당 MSS를 1씩 증가시켜서, 2^n으로 cwnd사이즈를 증가시킨다.

congestion avoidance : 일정 ssthresh를 지나면, ACK당 1/cwnd를 증가시켜 cwnd=cwnd+1/cwnd로 만든다.


Fast Recovery :

만약 Timeout 발생시,  cwnd=0 ssthresh는 이전 값의 1/2로 만들고,

만약 Three duplicate ACKs 발생시, cwnd와 ssthresh는 이전 cwnd의 1/2로 만든다.