TCP의 특징은 굉장히 많고, 버전에 따라 서로 다른 특징을 가지기도 한다. 이러한 점을 모두 소개할 수는 없고... (우선 난 천재가 아니기 때문에...) 아래의 도서에서 나온 내용을 위주로 주요 특징을 소개하고자 한다. 이 포스팅에서 사용된 이미지는 아래의 도서에서 제공되는 강의용 ppt를 이용한 것임을 밝힌다.

컴퓨터 네트워킹 - 하향식 접근
국내도서>컴퓨터/인터넷
저자 : JAMES F.KUROSE / 강현국역
출판 : 교보문고(교재) 2007.12.14
상세보기


우선 Figure를 보기 전에 TCP의 주요 특징을 살펴보고 넘어가도록 하겠다.
* Point to Point
* Reliable
* In - order byte stream
* pipelined
* send & receive buffer
* full duplex data
* connection oriented
* flow control
* congestion control

위의 특징 중 설명할만한 것들은 이번 포스팅에서 모두 설명을 하고자 한다.


위의 Figure는 TCP 소켓의 구조이다.


우선 sequence number와 acknowledgement number의 필요 이유부터 설명을 하도록 하겠다.
임의의 데이터를 서로 전송하고 있는 중인 Host A와 B의 헤더에는 Seq 번호와 ACK 번호가 붙어서 전송이 된다 여기서 보아야 할 것은 우선 Seq이 42로 전송이 되고 ACK이 79로 전송이 된다는 것이다. 여기서 ACK의 번호는 다음에 전송할 데이터 패킷의 Seq 번호를 의미한다 따라서 Host B는 해당 패킷을 받고 전송하는 패킷의 Seq 번호가 79가 된다는 것을 알 수 있다. 그리고 Host A는 다음에 보내는 패킷의 번호가 43인 것으로 확인할 수 있다.

Seq번호와 ACK 번호를 이렇게 두는 이유는 Duplicate 되는 데이터가 없이 전송을 안정적으로 하기 위함이다. 위의 도서에서는 UDP에서 rdt라는 프로토콜을 설명하면서 reliable 한 데이터 전송을 하기 위해서 seq 번호를 두는 것을 설명을 하였는데, Seq 번호와 ACK 번호를 두면 어떻게 reliable한 데이터 전송에 도움이 되는 것인지 생각을 조금 더 해보기를 바란다. 아마 관련 자료도 굉장히 많으리라 생각한다.


위의 Figure는 Flag를 이용하는 한 예이다. Three way handshake는 아마 다들 한번이라도 들어보셨을 것이다. 서로 데이터 통신을 시작하기 위해서 SYN - SYNACK - ACK의 구조로 데이터를 전송하는 것이다. 위의 Figure는 일단 전송 종료를 하는 FIN을 보내는 것이고 ACK와 FIN을 따로 보내는 것을 가정하였지만, 다시 제일 위의 TCP 구조를 보시길 바란다. 해당 Figure에서도 그렇고 보통 다른 곳에서 사용되는 flag도 마찬가지이지만 보통 bit 단위로 set을 한다. 따라서 2개의 패킷을 전송할 필요 없이, 하나의 패킷에서 ACK Valid에 대한 bit을 set 하고, FIN 도 set을 하면 두개를 보내는 것과 동일한 역할을 하는 것이다.


Receive 윈도우의 사용 용도를 알아보도록 하겠다. 이는 Flow control과도 연계가 되는데, flow 컨트롤은 Receive하는 상대방의 Receive buffer의 크기를 넘지 못하도록 전송하여 데이터 손실을 막는 것이다. 이는 TCP 구조의 Receive Window에 현재 남아있는 크기를 전송한다.


Congestion이란 네트워크가 부하가 걸린 상태를 의미한다. 위의 Figure는 무작정 전송 속도를 높였을 때, 도착하는 패킷의 수를 의미한다. 오히려 특정한 임계치를 넘어서면 그만큼 Packet loss가 많아진다는 것을 알 수 있다. 네트워크가 congestion 상태라는 것을 어떻게 알 수 있을까? ATM의 경우에는 이를 컨트롤을 할 수 있다고 한다. 하지만 전세계가 ATM 망으로 깔려있는 것도 아니고, IP에서는 이러한 것을 지원하지 않는다. 따라서, 네트워크가 어떠한 상태인지 추측을 할 뿐이다. 추측을 하는 근거는 Time out으로 추측을 한다.


위의 Figure를 보면 천천히 증가시키고 떨어질 때에는 급격하게 감소한다는 것을 볼 수 있다. 이를 Additive Increas Multiplicative Decrease 라고 한다. 처음 1에서 시작을 할 때에는 1을 보내고 그 다음에는 2, 4, 8의 형식으로 증가를 시킨다. 이 방법은 ACK가 하나 도착할 때마다 2개의 패킷을 보내면 된다. 그리고 Threshold. 즉, 임계치를 넘어서면 1씩 증가시킨다. 이러한 방법으로 Congestion을 회피하는 것이다. 여기서 Series 1의 경우 바로 1로 떨어지지만 2의 경우에는 마지막 최대치에서 절반으로 떨어트리고 Threshold를 변경한다.

간략한 설명을 하고자해서 적은 포스팅이기 때문에 이 정도로 설명을 마치도록 하겠다. 문제가 있는 부분은 댓글을 달아주시면, 수정하도록 하겠다.
저작자 표시 비영리 변경 금지
신고

'Theory > Network' 카테고리의 다른 글

멀티미디어 네트워크  (0) 2011.12.20
GSM - Handoff  (0) 2011.12.16
Transport Layer - TCP  (0) 2011.12.16
GBN (Go Back N)  (0) 2011.12.16
Transport Layer - UDP  (0) 2011.12.16
지연 시간  (0) 2011.10.21
by 가우초 2011.12.16 21:06