230 likes | 401 Views
chapter 17 TCP : 전송 제어프로토콜 chapter 18 TCP : 연결확립과 종료. 200530032 김영준. TCP 의 신뢰성 있는 서비스. 응용 데이터는 TCP 가 전송하기에 적합한 크기로 나뉘어 진다 . TCP 는 세그먼트를 보낼 때 타이머를 설정하고 , 상대편으로부터 세그먼트를 수신했다는 것을 알리는 확인응답을 기다린다 . TCP 가 연결의 상대 편으로부터 데이터를 받으면 확인응답을 보낸다 . TCP 는 헤더와 데이터에 검사 합을 이용한다 .
E N D
chapter 17 TCP : 전송 제어프로토콜chapter 18 TCP : 연결확립과 종료 200530032 김영준
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
정상적인 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 Kind=2 Len=4 MSS 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을 무시하고, 아무것도 되돌려 주지 않는다.