728x90
TCP 서비스
프로세스-대-프로세스 통신
- End-to-End
- 포트 번호를 이용한 프로세스간 통신 제공
스트림 배달 서비스
- 스트림 기반 프로토콜
- 두 개의 프로세스가 가상의 튜브로 연결
- 바이트 스트림 형태로 데이터 송수신
- 송신 버퍼와 수신 버퍼: 송수신이 동일한 속도로 이루어지지 않을 때 필요
- 세그먼트(segment): 일련의 바이트를 패킷으로 그룹화 -> IP 계층에 전달
전이중 통신
- 양방향 전송
- 송신 데이터와 수신 데이터에 대한 확인 응답을 함께 보내는 piggybacking
- 송신측은 다중화, 수신측은 역다중화 수행
다중화와 역다중화
- 송신측은 다중화, 수신측은 역다중화 수행
연결형 서비스
- TCP는 연결지향 프로토콜
- 물리적 연결이 아닌 가상의 연결
- 요청 -> 승인 -> 데이터 교환 -> 해제 순
신뢰성 서비스
- 확인응답 메커니즘 이용
TCP 특징
번호화 시스템
- 바이트 번호: 모든 데이터 바이트에 번호 부여
- 송신 순서번호: 세그먼트에 있는 첫 번째 바이트에 순서번호 할당
- 확인 응답 번호: 수신한 다음 바이트 번호
- 흐름제어
- 오류 제어
- 혼잡 제어
세그먼트
- 순서 번호(sequence number): 세그먼트에 포함된 데이터의 첫 번째 바이트에 부여된 번호
- 확인응답 번호(acknowledgement number): 상대방 노드로부터 수신하고자 하는 바이트의 번호
- 제어: 6bits 플래그
- URG: 긴급 포인터
- RST: 연결 재설정
- ACK: 확인 응답
- SYN: 순서번호 동기화
- PSH: 푸시 요청
- FIN: 연결 종료
- 창 크기(window size): 상대방이 유지해야 하는 바이트 단위의 윈도우 크기
TCP 연결
- 연결형 프로토콜
- 모든 세그먼트는 가상 경로를 통하여 전송
- 하나의 단일 가상 경로를 이용함으로써 손상되거나 손실된 프레임의 재전송뿐만 아니라 확인 응답 등의 처리도 가능
- TCP 연결 설정
- 3-way handshake
- 서버부터 시작(수동 개방 - passive open)
- 클라이언트부터 시작(능동 개방 - active open)
- 클라이언트는 SYN 플래그가 1인 SYM 세그먼트 전송
- 서버는 SYN와 ACK가 1인 세그먼트 전송
- 단순한 ACK 세그먼트 전송
- 동시 개방
- SYN 플러딩 공격(DDos)
- 클라이언트가 SYN 패킷만 계속 보내고 ACK를 보내지 않으면 서버는 메모리 공간을 점점 더 많이 확보해둔 상태에서 대기
- 서버의 RAM이 꽉 차면 서비스를 계속할 수 없음.
- 연결 종료
- 3-way handshake 이용
- 절반 닫기: 어느 쪽이든 요청 가능
- 연결 재설정
- RST 비트를 1로 설정
- 연결 거절, 연결 중단, 휴지 연결의 종료
- RST 비트를 1로 설정
상태 천이 다이어그램
- 연결 설정, 연결 종료, 데이터 전송 동안 발생하는 여러 가지 이벤트를 관리하기 위하여 유한 상태 기기(FSM)를 이용하여 구현
- 시나리오
- 서버 프로세스: 수동 개방(open)과 수동 닫기(close)를 실행
- 클라이언트 프로세스: 능동 개방과 능동 닫기를 실행
- 절반-닫기에 의한 연결 종료
TCP 창(채널)
- 데이터 전송을 위한 각 방향에 대해 두 개의 창을 사용
- 양방향 통신을 위하여 네 개의 채널이 필요
- 바이트로 표현
- open, close, shrink 동작
- 1개의 타이머 이용
- 수신자가 광고한 버퍼(큐)만큼의 크기만큼 보냄
흐름 제어
- 송신자가 데이터를 보내는 속도와 수신자가 데이터를 받는 속도의 균형을 맞추는 것
- 슬라이딩 윈도우 프로토콜 이용 - 바이트 중심
오류 제어
- 훼손 세그먼트 감지 및 재전송
- 손실 세그먼트 재전송
- 순서가 어긋난 세그먼트 저장
- 중복 세그먼트 감지 및 폐기
- 오류 제어 도구
- 검사합: 훼손 여부 확인
- 확인 응답: ACK 이용
- 타임 아웃: 타임 아웃 전까지 확인응답 되지 않으면 훼손 또는 손실 간주
- 재전송
- 오류 제어 메커니즘의 핵심
- 재전송 타이머(RTO)가 만료된 경우
- 왕복 시간을 기반으로 갱신
- 3개의 중복 ACK를 수신하는 경우
- 타임아웃을 기다리는 것보다 더 빨리 전송하기 위해
- 3개의 중복 ACK 규칙에 따라 손실로 간주하고 즉시 재전송
혼잡 제어
- 라우터가 패킷을 처리할 수 있는 속도보다 더 빨리 패킷을 수신하는 경우
- 재전송은 원인을 더욱 악화시킴
- 혼잡 제어 원칙
- 느린 시작
- 혼잡 회피
- 혼잡 감지