Transport 계층
- OSI 7 계층 분류에서 엔드 투 엔드 유저들이 신뢰성 잇는 데이터를 주고 받을 수 있도록 함.
- 그위 세션, 프레젠테이션, 어플리케이션 레벨이 데이터 전달의 걱정을 안하게 해줌
- 어플리케이션 프로세스 사이의 논리적 통신 제공 -> 데이터를 어떻게 전송할까 결정
- host(라우터) 간의 논리적 통신을 제공한다? -> 네트워크 계층
TCP
- OSI 7 계층 중 4층, 전송 계층
- 연결 지향적, 신뢰성, 데이터 전송 보장
- udp 보다 속도 느림
- point to point
- 웹, 이메일, 파일 전송 등에 사용
- 흐름 제어, 혼잡 제어
- 3-way handshaking 으로 연결, 4-way handshaking 으로 해제 -> tcp 헤더 필드 값 사용
3-way handshaking
- TCP 의 접속 설정
- 네트워크 연결을 설정
- 양쪽의 준비를 보장하고 검증
과정
- SYN: 클라이언트 → 서버
- 클라이언트가 syn segment 서버로 보냄
- 서버는 수신
- SYN+ACK: 서버 → 클라이언트
- 서버가 클라이언트에게 ack segment, 동시에 syn segment 보냄
- 클라이언트가 ack segment 받으면 ESTAB 상태
- ACK: 클라이언트 → 서버
- 클라이언트가 서버에게 ack segment 전송
- 서버도 ack segment 받으면 ESTAB 상태
4-way handshaking
- TCP 의 접속 해제
과정
- FIN: 클라이언트 → 서버
- 클라이언트가 서버에게 fin segment 보냄
- ACK: 서버 → 클라이언트
- 서버는 fin 받고, 확인 ack 를 클라이언트에게 보냄
- 데이터를 모두 전송 후 통신 끝날때 까지 대기
- FIN: 서버 → 클라이언트
- 서버가 데이터 모두 보내고 연결 종료에 합의하는 fin 패킷 클라이언트에게 전송
- ACK: 클라이언트 → 서버
- fin 을 받은 클라이언트가 응답으로 서버에게 ack 전송
- time_wait 상태로 의도치 않은 에러로 연결이 데드락 빠지는 것을방지
- 이후 종료
차이
- fin, 서버가 보낼 데이터가 남았는가를 검증하는 단계
- 단, fin 이후에 유실 및 지연된 데이터가 도착 할 수 있으므로 time_wait 단계가 추가됨
L4 스위치 ( 근데 이제, NLB 이해를 곁들인... )
- 얘가 가상화 된게 AWS NLB
- 로드밸런싱을 처리하는 장비 -> 외부에서 들어오는 모든 요청은 바로 서버로 가지않고 여기서 로드밸런싱함
- TCP/UDP 프로토콜의 헤더를 분석 -> 3-way handshaking과 4-way handshaking를 실시
- IP, port, 세션 정보 필요
- L4 스위치를 기준으로 내외부 망이 나뉨
- 내부 망의 서버가 각자 가지고 있던 공인 IP 사라지고 모든 요청을 L4스위치로 가져가기 때문에 얘만 공인 IP를 가지게 됨 -> NLB가 고정 IP 를 갖는 과정
- 외부에서 내부 서버로 직접 접속할 방도 X -> 장비 자체를 대상으로 공격이 수행되거나 중간 방화벽 리소스 소비하는 방식으로 서비스 중단 일으킴
UDP
- OSI 7 계층 중 4층, 전송 계층
- 비연결형, 신뢰성 낮음
- tcp 보다 빠름
- 데이터 그램 방식으로 패킷 교환
- 전송 순서, 수신여부 확인 x
- 헤더에 checksum 필드로 최소한의 오류 검출
- 1:n 의 스트리밍 서비스에 사용