레이어4(Layer4) - TCP의 기능
1. 포트 번호를 이용한 데이터 전송
- TCP에서는 포트 번호를 사용해서 어떤 어플리케이션에 데이터를 전달 할 지 판단한다
- TCP 포트 번호는 0~65535 까지 있다
2. 연결(Connection) 생성
- TCP는 소켓을 생성 할 때도 중요한 역할을 한다
1) 가상 경로(Virtual circuit)
- TCP는 연결형 프로토콜로, 연결이라 불리는 가상 경로를 생성한다
- 연결 = 가상 경로 생성
* 포트 리슨(LISTEN)
- 애플리케이션 서버측이 미리 통신 준비를 하고 있는 상태
- 서버 프로세스는 OS에게 포트번호 00에게 통신 의뢰가 오면 나에게 연결해라고 하는 것
2) 3-way handshaking
a. 통신 상대인 서버측 OS에게 가상 경로를 열도록 의뢰한다
b. 서버측에서는 리슨 하고 있는 포트 번호로 통신 요구가 온다, 서버는 문제가 없으면 열어도 된다는 응답을 한다
c. 클라이언트 측도 확인 했다는 메시지를 보내며, 이 떄 처음으로 가상 경로가 열린다
- 이 연결(3 way hand-shaking)은 애플리케이션, 즉 두개의 소켓 사이에 전용 회선이 있는 것처럼 통신한다?
- 단지 TCP 통신을 시작 할 때 상대 서버에 포트 번호와 연결을 열어달라고 부탁만 할 뿐, 특별한 일을 안한다. 데이터 전송 자체는 IP에 위임한다
- 물리적인 경로가 막혀도 가상 경로인 TCP 연결은 끊어 지지 않는다
3. 데이터 보증과 재전송 제어
- 연결이 생성된 후에야 데이터 송수신이 시작된다
1) 데이터 손실 방지
* 확인 응답 + 재전송에 의해 구현
a. 수신 측에 TCP 세그먼트가 도착하면 수신 측은 송신 측에게 도착 했다는 ACK를 반환(TCP 세그먼트)
b. 송신 측은 ACK가 돌아 오는 것을 보고 전송한 세그먼트가 무사히 도착한 것을 알 수 있다
c. ACK가 오지 않으면 TCP 세그먼트가 사라질 가능 성이 있으므로 언제든지 재전송이 가능하도록 전송이 끝난 TCP 세그먼트라도 ACK 돌아오기 까지 소켓 버퍼에 남겨둔다
* 데이터 순서 보증
- 각 TCP 세그먼트에 시퀀스 번호 부여
- TCP헤더에 기록된다
2) 재전송 제어
* 재전송 하는 시점은?
- 타임아웃: 일정 시간 내에 ACK가 없으면 재전송
- 중복 ACK : 송신 측이 같은 ACK를 받으면 재전송(수신 측에서 사라진 세그먼트를 계속 요구)
: 3회 까지 기다렸다가 전송한다(가끔 전송지연으로 늦게가는 세그먼트 때문에)
4. 흐름 제어와 폭주 제어
- ACK를 기다리면서 데이터를 보증하면 시간이 오래 걸려서 효율이 나쁘다
- ACK를 기다리지 않고 전송하는 것이 좋다
1) 윈도우(Window)
- TCP는 어느 정도의 세그먼트 수 라면 ACK를 기다리지 않고 전송하는 개념
* 윈도우 크기(Window size)
- ACK를 기다리지 않고 전송 가능한 데이터 크기
* 슬라이딩 윈도우(sliding window)
- 수신 측의 수신 윈도우, 송신 측의 폭주 윈도우
- 수신 측이 폭주 윈도우 크기를 조정해서 폭주 윈도우와 수신 윈도우 중 작은 쪽을 송신 윈도우로 채택하며, 이 범위 내에서는 ACK를 기다리지 않고 전송
- ACK 가 오면 해당 TCP 세그먼트는 재전송할 필요가 없기 때문에 송신용 버퍼에서 삭제하고 송신 윈도우를 다음으로 이동한다
- 윈도우를 이동하는 방식
'IT_Infra > WebFlow' 카테고리의 다른 글
[IT_Infra] 레이어2(Layer2) - 데이터 링크 계층의 프로토콜 이더넷(ethernet) (0) | 2016.11.20 |
---|---|
[IT_Infra] 레이어3(Layer3) - 네트워크 계층의 프로토콜 IP(network) (0) | 2016.11.20 |
[IT_Infra] 레이어4(Layer4) - 전송 계층 프로토콜 TCP (0) | 2016.11.19 |
[IT_Infra] 세션을 남겨두는 기능 Keep-Alive (0) | 2016.11.18 |
[IT_Infra] 레이어7(Layer7) - 애플리케이션 계층의 프로토콜 HTTP(applicationLayer) (0) | 2016.11.18 |