Transcript 연결확립과 종료
TCP/IP Illustrated, Volume I
chapter 17 TCP : 전송 제어프로토콜
chapter 18 TCP : 연결확립과 종료
200530032 김영준
TCP 의 신뢰성 있는 서비스
응용 데이터는 TCP가 전송하기에 적합한 크기로
나뉘어 진다.
TCP는 세그먼트를 보낼 때 타이머를 설정하고,
상대편으로부터 세그먼트를 수신했다는 것을 알리는
확인응답을 기다린다.
TCP가 연결의 상대 편으로부터 데이터를 받으면
확인응답을 보낸다.
TCP는 헤더와 데이터에 검사 합을 이용한다.
TCP 세그먼트는 순서에 맞게 도착하지 않아도 된다.
수신 측 TCP는 중복된 데이터를 버려야 한다.
TCP는 흐름 제어를 제공한다.
TCP 헤더
URG - 긴급 포인터가 유효함
ACK – 확인응답 번호가 유효함
PSH – 수신 측은 데이터를 가능한 빨리 App.에 보내야
한다.
RST – 연결을 재설정
SYN – 연결을 초기화, 순서 번호를 동기화
FIN – 데이터 전송을 종료함
연결 확립과 종료
실제 테스트 결과
연결 확립의 타임아웃
1번째 – client의 LAN 선을 뽑은 상태로 대기시간 13초
2번째 – server의 LAN 선을 뽑은 상태로 대기시간 24초
2번째 상황에서 다시 같은 테스트 결과 대기시간은 약 3초
최대 세그먼트 크기
MSS는 TCP가 다른 연결된 host에게 보낼 수
있는 가장 큰 데이터 덩어리
MSS 옵션은 SYN 세그먼트에서 부가
서로간에 MSS 옵션을 받지 못한다면, default로
536 bytes
Ether net의 경우 MSS 최대 값은 1460 bytes
TCP 절반 종료
TCP는 연결의 한 쪽 종단이 데이터를 전송 받고
있는 상태에서 출력을 종료하는 기능을 제공
프로그래밍 인터페이스가 제공해야 함
close()
close는 지정 번호의 참조 계수를 1씩 감소, 계수가
0에 이르면 소켓을 닫는다.
close는 양방향의 데이터 전송 모두를 종료
int shutdown(int sockfd, int howto)
SHUT_RD
SHUT_WR
SHUT_RDWR
TCP 상태 천이도
정상적인 client
정상적인 server
일반적인 연결 확립과 종료에 대한 TCP 상태
TIME_WAIT 상태
2MSL(Maximum Segment Lifetime) 대기 상태
TCP가 ACK를 잃어버린 경우에 ACK 재전송 하기
위해서
2MSL 대기 상태에 있는 동안, socket pair 재사용 X
SO_REUSEADDR 옵션을 사용해서 재사용
같은 socket pair는 연결 X
Quiet time
TCP가 재 가동 후 MSL 시간 동안 어떠한 연결도
확립할 수 없도록 한다.
FIN_WAIT_2 상태
FIN을 보내고(FIN_WAIT_1 상태), 상대편 종단은
이에 ACK를 보내고(FIN_WAIT_2 상태), 다시 FIN을
보낸다. FIN_WAIT_2 상태에서 TIME_WAIT 상태로
바뀐다.
재설정 세그먼트 (RST)
존재하지 않는 포트에 대한 연결 요구
연결 중단
대기중인 모든 데이터를 폐기하고 즉시 재설정
신호를 전송
RST의 수신 측은 상대방에게 일반적인 연결 종료가
아닌 중단(abort)을 했다고 알릴 수 있다.
동시 개방과 동시 종료
Simultaneous open
Simultaneous close
TCP 옵션
32 bits
MSS
Kind=2
Len=4
Kind=1
Kind=3
Len=3
Shift count
Kind=1
Kind=1
kind=8
Len=10
Timestamp value
Timestamp echo reply
Kind=0
TCP 서버 설계
수신연결 요구 큐
대기 중인 종단점은 TCP에 의해 받아들여지지만
(three-way 핸드쉐이크), 응용에는 아직 수신되지
않은 연결의 고정 길이의 큐를 갖는다.
응용은 이 큐에 대해서 한계를 설정, 이것을 backlog
라고 부른다.
새로운 연결에 대한 큐에 공간이 있다면 TCP 모듈은
SYN에 대해서 ACK를 보내고 연결을 완성
공간이 없으면, SYN을 무시하고, 아무것도 되돌려
주지 않는다.