인천대학교 이공관

분류없음 | 2008/07/13 01:03 | antiwa

인천대학교 본관

인천대학교 본관 20080712

인천대학교 이공관

인천대학교 이공관



곧 송도로 이사를 가게될 인천대학교 건물입니다.


본관건물과 건너편 인천전문대 앞에 이공관입니다.


날이 흐려서 사진도 우중충 하네요...




벚꽃피는 봄엔 그래도 화사하기만 한 인천대 캠퍼스 인데 말이죠 ^ ^


조교형 ^ ^

조교형 ^ ^


오늘이 생일이라는 조교형 ...; ㅋㅋ


금연건물인데...?? ㅋ


TCP(Transmission Control Protocol)

분류없음 | 2008/07/13 00:30 | antiwa

교수님께서 지난번 네트워크 기본 스트럭쳐와 OSI 7 Layer에 관해 강의하신것에 이어서 직접 TCP(Transmission Control Protocl)의 특징과 Flow Control(흐름제어), Congestion Control(혼잡제어)에 관하여 강의를 해주셨습니다.


Ⅰ. 기본적인 TCP 프로토콜의 특징입니다.

  1. Process 간의 통신
  2. Stream 배달 서비스
  3. Full-Duplex 서비스
  4. 연결이 계속 유지되는 서비스
  5. 신뢰성 보장 서비스

너무 간단한가요??


풀어서 설명하자면...


1. 프로세스간의 통신이란?

 컴퓨터는 여러채널, 즉 2^16=65 536개의  포트를 통해 프로세스마다 개별적인 TCP 통신을 하게 된다는 뜻입니다. 네이트온, MSN, 익스플로러등을 동시에 사용한다고 하면 이해가 빠르겟죠?

 

2. Stream 배달 서비스란?

 SendProcess <<---(Buffer)TCP===Stream of Bytes===TCP(Buffer)--->> ReceivingProcess

데이터 전송시에 기본 단위는(Byte)입니다. Byte Stream이란 데이터 전송시 효율을 위해서 이 Byte(정보)들을 (링형의)Buffer에 모았다가(송수신 프로세스간의 속도차를 완충하기 위함도 있지만) Segment(=Packet=Datagram)단위로 묶어서 전송하는 것을 말합니다. 캡슐약정도를 생각해 보면 되겠습니다. Ethernet(일반적으로 사용하는)의 경우에는 Datagram의 크기가 1500byte입니다. Header정보가 40byte, 나머지 1460byte는 실제 데이터가 들어갑니다. ATM이나 다른 망을 사용할 경우에는 크기에 차이가 있긴 합니다만 헤더와 데이터 구조는 별반 다르지 않습니다. (라우팅쪽을 자세히 공부하지 않는다면 일단은 패스) 즉, MSS(Maximum Segment Size)는 제한되어 있다! 정도만 기억하시면 됩니다.


3. 이건 무전기(half)와 전화기(full)로 쉽게 설명이 가능하겠죠?


4. 연결지향 프로토콜이란? (Connection-Oriented)

 Connection Established -> 송수신 -> 종료(FIN)

위와같은 구조를 뜻합니다. 그러나, 물리적으로 계속적인 연결은 아닙니다. Virtual 연결? 이라고 보면 되겠습니다. (탭브라우징을 예로 들면 될까요? 세션??)


5. TCP프로토콜에서는 데이터 송수신에 있어 송신측에 확인응답을 보냅니다. 그렇기 때문에 신뢰성 서비스라 할 수 있죠.


Ⅱ. 흐름제어(Flow Control)

여러가지 방법이 있지만 가장 보편적 방법인(라우팅 단이 아닌 송수신측에서) Sliding Window 방식의 흐름제어가 있습니다. Byte단위 전송에 있어서 Datagram으로 묶어서 전송한다고 했었죠? 이 크기를 송신측에서 수신측의 상태를 보고 조절(수신측의 확인응답 없이도 보낼 수 있는 데이터 크기)하여 흐름을 제어하는 방식입니다. 이 크기는 윈도우라고도 하는데 미니멈으로 Rwnd(Receiver), Cwnd(Congestion) 사이에서 결정 됩니다.

= Sent & Acknowledged, Recycled †〔Can be sent immediately † Sent, Not Acknowledge〕†  =

수신측의 상태에 따라 〔윈도우크기〕가 가변적인 것을 Shrinking(송신자 윈도우 위축)이라고도 합니다.

 

◎Silly Window Syndrome(증상)

 잘못된 흐름제어로 인해서 생기는 증상입니다. 쉽게 말하면 과도한 흐름제어(Shrinking)로 인해서 Datagram은 1byte인데 Header만 40byte인 멍청한 패킷이 탄생하는 겁니다. 이렇게 되면 효율은 1/41이 되겠죠? 여기에도 해결책은 있습니다.

 (송신측에서의) Nagle Algorithm : 데이터 스트림이 찰때까지 전송하지 않고 대기합니다.

 (수신측에서의) Clark Solution : 여유가 있을때 가지 송신측에 수신에 대한 확인을 지연시킵니다.

 

Ⅲ. 혼잡제어(Congestion Control)

 TCP 세그먼트는 송신측에서 수신측으로 갈때까지 수많은 길을 거쳐가는데 여기에서 손실이 생기게 됩니다. (대부분 Router에서의 혼잡 때문이죠) 아무리 광랜이 대한민국 사방에 다 깔려도 대역폭은 제한되어 있고, 라우터를 거쳐가는 길목도 제한되어 있습니다. "Bottle Neck(병목현상)"이라고도 하는것이지요. 라우터는 사람처럼 그렇게 감성적이지 않습니다. 지극히 기계적이지요. 자신에게 부담이 되는 순간 아무리 중요한 패킷이라도 버려버립니다. 그래서 이러한 망의 혼잡은 송수신측에서 대처해야 합니다. 이것이 Cwnd값입니다. 제어 방법은 3단계로 요약할 수 있습니다.

 ① Slow Start : Expotential Increase (Cwnd 임계값을 설정합니다. 최대의 반정도로)

 ② Congestion Avoidance : Addictive Increase (슬로우슬로우킥킥? 이정도면 쉽죠?)

 ③ Congestion Detection : Multiplicative Decrease (임계점에 도달했다 싶으면 확▽)

보통 일반적인(Typical) SS Thresh(Slow Start Threshold)는 65535(2^16)입니다(통제된 Sliding Window값이라고 수 있겠죠).

 

이상입니다. 어느정도 지식이 있는 분들이나 알아들을 법한 설명입니다. 역으로 제 자신이 부족한 부분이 많기 때문에, 딱딱하게 격식을 차리지도 않았고, 대화체로 간략하게 설명한 것입니다. 궁금하신게 있다거나 잘못된부분은 댓글남겨주세요. 전문적인걸 원하신다면이야 끝까지 도와는 드려도 레퍼런스를 보면서 같이 공부하는 수준이 될지 모르겠습니다.