2008년 05월 13일
5월13일 복습내용
TCP의 선택
* 신뢰성있는 전송서비스
- IP는 데이터그램별로 전송에 최선을 다함
- TCP는IP가 가지고 있지 않는 이런 기능들을 제공함
* TCP의 기능 및 특성
- 연결설정: 3-way(3단계) 핸드셰이크
- 일련번호: 데이터크기 및 송수신할 데이터의 위치를 알림
- 수신확인 및 타임아웃: 오류/분실 데이터의 재전송을 가능하게 함
- 연결종료:4-way(4단계) 연결종료절차
- 흐름제어: 통신상대방의 처리능력에 맞춘 유연한 전송성능 보장
- 혼잡제어: 네트워크에서 발생하는 혼잡에 대응하는 전송 가능
*TCP의 헤더
- 신뢰성있는 전송을 하기 위해서 여러가지 기술들이 도입되었기 때문에 UDP보다 매우 복잡한 모습을 보익 있다.
*송신자 포트와 수신자 포트
- 첫 필드는 송신자 포트와 수신자 포트이다.
- 송신자 포트와 수신자 포트는 UDP의 경우와 같은 개념이다.
*송신측 일련번호
- 전송의 신뢰성을 확보하기 위해 일련번호 사용
- 3단계로 이루어지는 TCP연결의 첫 단계는 클라이언트가 서버에게 일련번호를 보내는 것이다.
- 첫 일련번호를 정하는 방법은 시스템마다 다르다.
- 첫 일련번호 후 일련번호는 데이터 한 바이트당 1씩 증가한다.
- 일련번호는 수신확인 및 수신 세그먼트 순서정렬 등에 사용된다.
*수신확인 일련번호
- 다음 전송에 받기를 기대하는 데이터의 일련번호
- 3단계로 이루어지는 TCP연결의 첫 단계에서는 서버가 보낼 데이터의 첫 일련번호를 알지 못하므로 0으로 설정한다.
*TCP헤더 길이
- TCP헤더길이를 나타내는 4비트의 필드
- 헤더의 크기를 4바이트 단위로 표현
- 기본값은 5이다.
- 다음 4비트는 향후 사용을 위해 예약된 것이다.
*세션 플래그
- 처음 2비트는 예약, 나머지 6비트가 세션 플래그이다.
- 각 비트마다 고유의 기능을 가지고 있다.
*세션 플래기 - 긴급 포인터
- 이 비트가 1이면 그 세그먼트는 긴급데이터
- 그 세그먼트를 우선적으로 처리되야 한다는 의미
*세션 플래그 - 수신확인 유효비트
- 이 비트가 1이면 수신확인 일련번호가 유효하다는 의미
- 수신확인 일련번호가 의미없는 값이라면 이 비트는 0이어야 한다.
*세션 플래그 - 푸쉬 요청
- 이 비트가 1이면 버퍼가 찰 때까지 기다리지 말고 데이터를 즉시 전달하라고 요구하는 것임
- Telnet 등 짧은 데이터이지만 즉시 보내야 하는 경우에 1로 세팅함
*세션 플래그 - 세션 강제 종료
- 문제가 생겨서 세션을 계속 유지하지 못 할 경우에 이 비트를 1로 하여 상대에게 전송한다.
- 상대는 세션을 종료하게 된다.
*세션 플래그 - 일련번호 동기화
- TCP연결을 시작할 때는 서로 상대방의 첫 일련번호를 알아야 한다. 이를 일련번호의 동기화라고 한다.
- 따라서 TCP연결에서 클라이언트 그리고 서버가 처음 송신하는 세그먼트에는 각자의 첫 일련번호가 들어있으며, 따라서 이 비트는 1로세팅된다.
- 이를 수신한 측은 이 일련번호에 1을 더한 값을 다음 세그먼트의 수신확인 일련번호로 하여 전송하다.
*세션 플래그 - 종료 데이터
- 종료 플래그를 1로 하여 송신하면 상대방에게 세션의 종료절차에 들어가자고 요청하는 것이다.
- 상대는 종료요청에 대한 수신확인을 보낸다.
- 상대는 종료 플래그를 1로 하여 송신한다.
- 이를 수신하면 이에 대한 ACK를 보내고 연결이 종료된다.
*송신측 윈도우 크기
- 수신 확인을 기다리지 않고 전송할 수 있는 데이터의 크기
- 즉, 데이터를 수신하여 저장해 둘 수 있는 버퍼크기를 의미
- 이 필드의 값이 0x1000이라는 것은 이 세그먼트를 보낸 측에 4096바이트의 사용 가능한 버퍼용량이 있다는 의미
- 이 필드의 값이 0이면 더 이상의 수신이 불가능하다.
*TCP검사합
- TCP헤더 필드와 전송되는 데이터에 대해 검사를 수행
*옵션필드
- IP의 경우와 같이 TCP도 헤더길이필드 값이 5보다 크면 옵션이 존재하다.
- 헤더길이필드의 값이 6일 경우는 4바이트의 옵션필드가 존재함을 알 수 있다.
*최대 세그먼트 크기와 윈도우 크기
- 전송하는 세그먼트의 크기는 수신측의 윈도우 크기보다 클 수 없다.
- 또한 각 TCP장치에 설정된 MSS를 초과할 수 없다.
- MSS = 최대 세그먼트 크기 = Maximum Segment Size = 한 세그먼트에 담아 보낼 수 있는 데이터의 최대 크기
- 한마디로, 전송하는 세그먼트의 최대크기는 MSS와 윈도우 크기 중 최소값이 된다.
*핸드셰이크 - 그 3단계중 1단계(클라이언트-->서버)
- ACK 일련번호 값이 0
- 세션플래그필드의 값이 0x02
- 대개 헤더길이필드는 0x6, 옵션에서 MSS를 알려 줌
- MSS를 알려주지 않으면 기본값은 536바이트
*핸드셰이크 - 그 3단계중 2단계(서버-->클라이언트)
- ACK 번호 값이 1단계 일련번호+1
- 세션플래그필드의 값이 0x12
- 대개 헤더길이필드는 0x6, 옵션에서 MSS를 알려 줌
- MSS를 알려주지 않으면 기본값은 536바이트
*핸드셰이크 - 그 3단계중 3단계(클라이언트-->서버)
- ACK 번호 값이 2단계 일련번호+1
- 일련번호 값은 1단계 일련번호+1
- 핸드셰이크3단계라는 특징적인 값은 없음
*혼잡 TCP
- 혼잡은 수용능력 이상의 데이터를 수신하였을 때 발생하는 장애상태이다.
- TCP는 혼잡이 발생했을 때 대응하는 여러 기능을 가지고 있다.
<질문>
버퍼의 역할은 단순히 수신된 데이터를 임시 저장하는 것 인가요?
버퍼가 왜 꼭 필요한 것인지 잘 모르겠습니다.
그냥 수신측에서 바로 받으면 어떤 문제가 생기는 건가요?
# by | 2008/05/13 21:36 | 학습블로그(20042117 조성진) | 트랙백 | 덧글(1)



