donaricano-btn

레이어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 세그먼트는 재전송할 필요가 없기 때문에 송신용 버퍼에서 삭제하고 송신 윈도우를 다음으로 이동한다

- 윈도우를 이동하는 방식


블로그 이미지

리딩리드

,
donaricano-btn

레이어4(Layer4) - 전송계층프로토콜 TCP

- 소켓기록된 애플리케이션 데이터 커널 내에서 통신 대상에게 전달하기 위한 준비를 시작한다

- 첫번 째 임무 수행하는 것이 전송 계층 프로토콜인 TCP이다


1. TCP의 역할

1) 애플리케이션이 보낸 데이터를 그형태 그대로 상대방에게 확실히 전달한다

2) 담당

- 서버가 송신할 때와 서버가 수신한 후 애플리케이션에게 전달할 때로, 상대 서버까지 전송하는 부분은 하위 계층인 IP에게 모두 위임한다

- IP만으로 통신 할 수 있지만, IP에는 데이터가 상대방에게 확실히 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능이 없다

3) 기능

- 포트 번호를 이용해서 데이터 전송

- 연결생성

- 데이터 보증과 재전송 제어

- 흐름 제어와 폭주 제어


2. OS의 커널안에서 TCP 처리 흐름

1) 애플리케이션 프로세스가 소켓에 데이터를 기록한다

2) 소켓에 기록된 데이터는 큐를 경유해서 커널 내 네트워크 처리 부분에 전달된다

3) 커널에 전달된 데이터는 '소켓 버퍼'라는 메모리 영역에서 처리된다

4) 데이터에 TCP 헤더를 붙여 TCP 세그먼트를 생성한다

5) 하나의 TCP 세그먼트로 전송할 수 있는 최대 크기를 MMS라고 한다


3. TCP 세그먼트(TCP segment)

1) TCP Segment(TCP Packet) : 데이터(data) + TCP 헤더

2) TCP 헤더(TCP Header)

- 도착 지점 포트 번호, TCP 기능을 표현하기 위한 정보


3) MSS(Maximum Segment Size) 

- 하나의 TCP 세그먼트로 전송 할 수 있는 최대 데이터 크기

- 링크 계층으로 사용해서 데이터를 전송 하기 때문에 MSS는 링크 계층에서 전송 할 수 있는 최대 크기에 의존하며, 환경이나 설정에 따라 달라진다

4) MTU(Maximum Transfer Unit)

- 링크 계층에서 전송 할 수 있는 최대 데이터 크기

5) 세그먼트 분할

- 예로 2000byte의 데이터가 애플리케이션에 등록된다면 MSS의 크기가 1460byte이기 때문에 세그먼트는 1460과 540으로 분할 된다



블로그 이미지

리딩리드

,
donaricano-btn

세션을 남겨두는 기능 Keep-Alive


1. 문제

- HTTP는 한 번 요청/응답 관계가 끝나면 세션 종료

- 한 화면에 많은 이미지가 포함돼 있으면 몇 번이고 세션을 만들고 닫아야한다

- 하위 계층인 TCP에서 3way-handshaking의 오버헤드 발생, 전체 화면에 응답에 영향일 끼치게 된다


2. Keep-Alive

- 화면 하나를 표시할 정도의 세션을 유지하면 오버헤드을 줄일 수있다

- Keep-Alive : 단 시간 동안만 세션을 남겨 두는 기능

- 웹 서버 측에서 세션 잔존 시간등을 설정한다



블로그 이미지

리딩리드

,
donaricano-btn

레이어7(Layer7) - 애플리케이션 계층의 프로토콜 HTTP(applicationLayer)


1. 정의

- 애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라 부른다

- 애플리케이션 계층 프로토콜은 직접 통신하는 것이 아니라 모두 TCP/IP에 맡긴다

- HTTP 사양은 RFC2616으로 정하고있다

- 브라우저에 URL을 입력해서 요청하면 웹 서버는 응답으로 HTML파일이 반환된다

- HTTP를 통해 몇 번이고 요청과 응답을 주고 받는다


2. 요청과 응답의 구체적 내용

1) 요청(Request)

- 요청 : GET은 파일 요구이고, POST는 데이터 전송을 의미

- 헤더: 다양한 부가 정보가 있으며 세밀한 제어를 위해 사용(브라우저에 상세한 정보)

- 바디 : 브라우저에 입력한 내용이 포함

2) 응답(Response)

- 상태 : 결과가 정상인지 에러인지 등의 상태 정보를 가진다

- 헤더 : 브라우저 상세 정보

- 바디 : HTML 데이터 등, 실제 데이터 저장


3. 애플리케이션 계층 프로토콜  HTTP 요청 통신과 소켓(Socket)

- 애플리케이션이 통신을 할 때 사용하는 통로를 소켓이라 한다

- 소켓에 기록된 데이터는 다른 한쪽의 소켓으로 전달된다

1) 소켓 구성

a. 애플리케이션 프로세스가 네트워크 통신하는 경우, 커널에 'TCP/IP통신을 위한 회선을 요청한다'

b. OS의 커널은 소켓을 만든다(데이터 보내기위한 회선이 만들어짐)

c. 애플리케이션은 TCP를 사용한다는 것과 IP주소 및 포트 번호 정보를 시스템 콜 경유로 커널에 전달, 접속 대상 서버와 연결이 생성

d. 상대방 서버에서도 소켓이 만들어 지며 가상 경로(virtual circuit)이 생성된다

e. 실제 데이터물리적인 통신 케이블로 전달 되지만 프로세스 관점에서는 소켓이라는 구멍에 넣은 데이터가 가상 경로를 통해서 상대 통신 소켓 구멍으로 나오는 것이다


블로그 이미지

리딩리드

,