TCP 개요
스트림 기반 프로토콜
(TCP에서의 패킷 - 세그먼트)
연결 지향 서비스
- 두 TCP간 가상 연결 설정
- 양방향으로 데이터 교환
- 연결 종료
흐름 제어
오류 제어
혼잡 제어
TCP 연결
크게 3가지 단계로 볼 수 있다.
1. 연결 설정
- 3-way handshake
2. 데이터 전송
3. 연결 종료
- 3-way handshake
- 4-way handshake(half-close)
각각의 단계에 대하여 구체적으로 알아보도록 하자.
1. 연결 설정
UDP의 경우 포트 번호만 사용하여 응용프로그램을 식별하지만 TCP의 경우 연결 사용하여 응용프로그램을 식별한다.
- SYN=1인 플래그, 시작 순차 번호(Initial Sequence Number) 가지는 SYN 세그먼트 전송
- 서버는 SYN=ACK=1로 된 플래그, 자신의 Seq와 Ack=사용자의 seq+1 값 전송
- ACK=1인 플래그, 서버로부터 받은 Seq, Ack=서버의 Seq+1 값 전송
SYN: Synchronize sequence number
ACK: Acknowledgement valid
FIN: Terminate the connection
(제어 필드의 flag 값)
Sequence number- 신뢰성 있는 연결 보장하기 위하여 전달되는 각 바이트마다 번호 부여
Acknowledge number
- 수신한 노드가 상대 노드로부터 Seq number X 수신시 확인응답으로 X+1 수신
(참고 사항)
➮ SYN flooding 공격(3-way handshake를 이용한 공격)
서버가 모든 SYN 패킷에 대해 세션을 생성하고 응답 대기하도록 하여 부하가 걸린다.
SYN flooding 공격을 경감하기 위한 방법
- 정해진 시간동안 들어오는 연결 수 제한
- 원하지 않는 발신지 주소로부터 들어오는 데이터그램을 여과해서 제거
- 쿠키를 사용하여 전체 연결이 설정되기 전까지는 자원 할당을 연기(SCTP에서 인증시 사용)
3. 연결 종료
- FIN=1로 설정한 FIN 세그먼트 전송
- 서버는 FIN=ACK=1로 설정한 FIN+ACK 세그먼트 전송
- ACK=1인 플래그
서버는 사용자에게 데이터 전송 후에 FIN 전송하여 연결을 종료한다.
흐름제어
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
오류제어
전송된 세그먼트가 손실, 훼손, 순서가 뒤바뀐 경우 재전송을 통한 오류제어
순서가 어긋난 세그먼트
순서 다르게 들어오는 세그먼트 일시적으로 저장, 프로세스로는 순서에 맞게 전달
손실 세그먼트
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
확인응답 손실
이전 Ack 못받아도 누적 확인응답을 통해 다음 확인응답은 자동으로 이전 확인응답 손실 보정
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
수신 버퍼 공간이 순서대로
다 채워지기 전까지는
응용프로세스에게 전달하지 않음
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
빠른 재전송
타이머 만료되지 않아도 3개의 중복응답 수신시 확인응답에 따른 세그먼트 재전송
혼잡 제어
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
- 혼잡 윈도우(cwnd: congestion window) 크기는 하나의 최대 세그먼트 크기에서 시작
- ACK 도착 시 cwnd 크기 2의 승수 형태로 증가
- 윈도우 크기가 느린 시작 임계치(ssthresh: slow start threshold)에 도달하면 느린시작 중지
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
혼잡 회피: 가산 증가(Additive Increase)
- 느린 시작 임계치에 도달하면 가산 단계 시작
- 혼잡 감지되기 전까지 윈도우 크기 가산적으로 증가
혼잡 감지: 지수 감소(Multiplicative Decrease)
혼잡 발생시 혼잡 위도우 크기 줄이고 임계치 값을 현재 윈도우의 반으로 설정
1.시간 초과
2.세 개의 중복 ACK 수신
UDP(User Datagram Protocol)
비연결형 서비스
- UDP 패킷은 동일한 응용 프로그램으로부터 전송되는 다른 패킷들과 독립적
- 클라이언트 응용이 서버에게 짧은 요청을 전송하고 짧은 응답을 수신하고자 하는 경우 효율적
혼잡제어 미제공
- UDP는 비연결형 프로토콜이므로 혼잡제어를 제공하지 않음
오류제어 미제공
- 오류 제어를 제공하지 않기 때문에 비신뢰성 서비스 제공
(선택적으로 검사합은 사용 가능)
메시지 전달 시 지연이나 재전송이 발생하면 안되는 실시간 응용들에 의해 사용
Ex) 실시간 스트림 영상
전송 계층 훼손되거나 손실된 프레임 재전송 시 전체 전송 동기 맞지 않게 됨
UDP 상에서 동작하는 스트리밍 오디오, 영상, 음성 등은 순서에 어긋난 프레임들을 수정하지 않고 재순서화 하거나 버려야 함
SCTP(Stream Control Transport Protocol)
신뢰성 있는 메시지 지향적인 프로토콜
- SCTP의 데이터 단위는 데이터 청크(chunk)
연결 지향 서비스
- Association 통해 상호 연결 후 데이터 전송
신뢰성 있는 서비스
- 오류제어, 흐름제어, 응답확인
다중 스트림(실시간 지원 가능)
- 다중스트림 서비스 제공
- 스트림 중 하나가 블록되어도 다른 스트림이 데이터 전송
멀티호밍 (multihoming)
- 각 단말의 다중 IP 주소 정의현재 SCTP 구현에서는 IP 주소 한 쌍만이 선택됨
- 다른 경로는 주 경로가 연결 실패하면 사용
SCTP association & termination
TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010) |
Asscoiation 과정
INIT
Client에서 connect 시도
INIT ACK
서버의 상태 정의하는 cookie 전송
COOKIE ECHO
서버로부터 받은 쿠키 되돌려보냄
COOKIE ACK
수신에 확인응답 전송. 리소스 할당
Asscoiation Termination 과정
- SHUTDOWN
- SHUTDOWN ACK
- SHUTDOWN COMPLETE