본문 바로가기

프로그래밍/Server

TCP/IP 네트워크 기초 - TCP

TCP

1. 양방향성의 바이트 스트림 채널 제공  ( 전송/수신 버퍼가 있다 )

2. 연결 지향적

3. 안정적


TCP 데이터는 세그먼트로 분리 된다.

각 세그먼트는  에러검출에 사용할 검사 합계를 포함하며, 하나의 IP데이터그램으로 전송 된다.


답신, 재전송, 시간초과

수신부가 패킷을 받으면 발신자에게 답신을 보내 성공을 알린다.

발신자는 세그먼트를 전송하며 타이머를 수행하므로 폐기되거나, 도착하지 못할 경우를 대비 한다. ( 트래픽 부하와 네트워크 범위에 따라 달라 질 수 있으므로 동적으로 RTO 크기를 조절 한다 )


순서

각 바이트에 논리적 순서 번호를 할당하여 데이터스트림의 위치를 알 수 있다. (이를 이용하여, 조립, 중복 제거, 답신 확인등.. )

스트림의 ISN(initial sequence number)은 0부터 시작하지 않는다 (이전 연결에 사용한 세그먼트와 혼동을 방지하기 위해) 순서 번호는 32비트값이며 최대값에 이르면 0이 된다.


흐름제어

수신자의 속도가 느릴 경우를 대비해  각 TCP는 연결을 맺는 과정에서 서로 버퍼 크기 정보를 교환한다.

수신자는 패킷을 받은뒤 답신을 통해 남은 공간을 전송자에게 알린다.

TCP 흐름제어 알고리즘은 슬라이딩 윈도우(sliding window)기법을 적용 한다.


슬라이딩 윈도우

수신-전송 사이에 전송중인 세그먼트의 총합을 N바이트 이내가 되게 한다.

수신자의 TCP버퍼가 가득 찬 경우, 윈도우가 닫히고 전송자는 전송을 중단한다.


혼잡제어

발신의 속도가 빨라 네트워크 흐름을 방해하지 않도록 congestion control 알고리즘 사용

발신자 TCP가 중간 라우터 처리보다 빠르면 라우터에서 패킷을 누락 할 수 있다. (이로인해 재전송 하게 되면 심각한 성능 저하가...)

혼잡 제어 시스템은 slow-start와 congestion-avoidance 두가지 알고리즘을 사용 한다.

slow-start는 처음 세그먼트 전송률을 낮추고, 수신자가 답신을 하며, 기하급수적으로 전송률을 올린다.

이렇게 기하급수 적으로 올릴때 네트워크 데이터 처리량을 초과 할 수 있기 때문에 congestion-avoidance 사용하여 제어 한다.






'프로그래밍 > Server' 카테고리의 다른 글

DNS  (0) 2013.03.21
소켓 실행파일  (0) 2013.03.21
TCP/IP 네트워크 기초 - UDP  (0) 2013.03.21
TCP/IP 네트워크 기초 - 포트  (0) 2013.03.21
TCP/IP 네트워크 기초 - IP  (0) 2013.03.21