본문 바로가기

네트워크

[네트워크] 전송계층 프로토콜

전송계층 프로토콜

 - End to End 연결서비스 제공

 - TCP - 연결형 서비스 – stream Data

 - UDP -비 연결형 서비스 – Small Data

 

TCP 특징 

 - 연결형(Connection-Oriented)

   - IP 계층 위에 가상의 회선을 설정

   - 종단간 데이터 송수신 서비스 제공

 - 신뢰성(Reliability)

   - 확인을 통한 신뢰성 있는 통신서비스 제공

 - 흐름제어(Flow Control)

   - 혼잡 현상을 방지하거나 제어하는 기능

 - 스트림 통신

   - 데이터를 바이트 단위로 나눠서 전송

 

TCP 포트

 - 프로세스를 구분

 - 16비트로 표현( 0~65,535)

 - 잘 알려진 포트(well-known port)와 임시 포트(ephemeral port)로 구분

 - 잘 알려진 포트

   - 응용 프로그램에 따라 정해진 포트

   - 보통 서비스를 제공하는 서버에서 사용

   - 범위 : 1~1,023

 - 임시 포트

   - 1024~65,535 값 중 운영체제로부터 할당 받음

   - 서비스 사용 중에만 유효

 - 시스템에 동작하는 TCP

   - ① : 203.252.53.47 호스트의 임시 포트 2059

   - ② : 211.50.255.226의 80번 포트인 HTTP로의 연결

   - ③ : ①가 ②와 연결 성립

TCP 잘 알려진 포트 (1)
TCP 잘 알려진 포트 (2)

TCP 소켓

 - TCP/IP 통신 인터페이스 중의 하나

 - 소켓 주소 : <프로토콜, 로컬 IP주소, 로컬 프로세스 번호>

 - 두 프로세스간에 전이중 바이트 스트림 연결 제공

 - TCP 소켓 주소

소켓 시스템 함수 (1)
소켓 시스템 함수 (2)

 

TCP 헤더 포맷

 - TCP 헤더 형식

   - 소스 포트번호

     - 세그먼트를 전송하는 응용 프로그램의 포트번호

   - 목적지 포트번호

     - 세그먼트를 수신하는 응용 프로그램의 포트번호

   - 순서번호

     - 데이터 스트림의 내부적인 순서를 구분

     - 32비트의 부호 없는 번호

     - 232-2 값을 초과하면 다시 0부터 시작

 

 - 확인응답번호

   - 앞으로 받고자 하는 바이트의 순서번호

 - 헤더 길이

   - 4바이트 단위로, 기본 헤더는 20 바이트

   - 최대 길이는 60바이트

플래그 비트

 - 윈도우 크기

   - 흐름 제어를 위해 사용

   - 수신측은 수신 가능한 데이터 양을 바이트 단위로 송신측에 통지

   - 16비트로 최대 크기는 65,636바이트

   - 옵션 필드에 스케일 팩터(scale factor)를 이용하여 더 크게 지정 가능

 

 - 체크섬(Checksum)

   - TCP 헤더와 데이터에 수행

   - 수신측에서 에러를 검출

   - TCP 체크섬 범위

체크섬

 - 긴급포인터

   - URG 플래그가 설정되어 있을 때만 유효

   - 사용 목적은 주로 응용 프로그램에 달려 있음

   - 송신측

     - 먼저 전해져야 하는 데이터를 URG 플래그를 설정

     - 긴급포인터로 긴급 데이터의 마지막을 지정하여 전송

   - 수신측

     - 긴급 포인터에 데이터까지 “긴급 모드(urgent mode)”로 응용 프로그램에 알림

   - 긴급포인터에 사용의 예

     - FTP 전송 중에 송신자가 <Ctrl+C>를 눌러 전송을 중지시켰을 경우

 

TCP 연결 및 해제

TCP 연결동작

 - 능동적 열림(Active Open)

   - 클라이언트 서버가 열고 있는 포트로 응용을 요청

   - 보통 처음에 SYN을 보내는 쪽

 - 수동적 열림(Passive Open)

   - 보통 서버는 네트워크 응용을 수행하기 위해 정해진 포트를 열고 클라이언트의 요청을 기다림

 - 서버 측면

  ① 서버는 CLOSE 상태에서 응용프로그램으로부터 수동적 열림 요청 시 LISTEN 상탱

  ② LISTEN 상태에서 클라이언트로부터 SYN를 받으면 이것에 대한 SYN와 ACK를 보내고 SYN RCVD 상태

  ③ 서버가 보낸 SYN에 대한 ACK가 오면 양방향 연경이 성립되어 ESTABLISTHED 상태

  ④ ESTABLISTHED 상태 중 클라이언트로부터 FIN을 받고 이것에 대한 확인응답을 보내면 CLOSE WAIT 상태

  ⑤ 서버의 응용 프로그램으로부터 연결 종료 요구를 받으면 클라이언트로 FIN을 보내고 LAST-ACK 상태

  ⑥ 서버의 연결 종료 요청에 대한 ACK를 클라이언트로부터 수신하면 모든 연결과정이 종료

 - 클라이언트 측면

  ① 클라이언트는 응용 프로그램으로부터 능동적 열림을 받으면 SYN를 송신하고 SYN SENT 상태

  ② SYN SENT상태에서 서버로부터 SYN와 ACK를 받으면 이것에 대한 ACK를 송신하고 양방향 연결이 성립되어 ESTABLISTHED 상태

  ③ 연결 상태에서 응용 프로그램으로부터 연결 종료 요청을 받으면 서버에 FIN을 전송하고 FIN WAIT -1 상태

  ④ 서버로부터 FIN에 대한 ACK를 수신하면 서버의 FIN을 기다리는 FIN WAIT-2 상태

  ⑤ 서버로부터 FIN을 수신하면 이것에 대한 ACK를 송신하고 TIME WAIT 상태

  ⑥ 타임아웃 시간이 경과하면 연결이 종료되어 CLOSED 상태

 

서버 측면 동작
TCP 연결 설정 - 세방향 핸드쉐이크

 

TCP 연결 해제 - 네방향 핸드쉐이크
존재하지 않는 포트에 연결 요청 시

 - 비정상적인 종료를 요청

   - 비정상적으로 종료를 해야 하는 경우 FIN 대신 RST 비트를 이용 연결 중단

   - 클라이언트과 서버의 텔넷 연결 상태에서 클라이언트측의 텔넷 프로세스를 [ALT+E]하여 강제 종료

 

TCP 제어 절차

TCP 흐름제어

 - 슬라이딩 윈도우(Sliding Window)

   - 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답 없이 전송할 수 있게 하여 흐름을 동적으로 조절하는 제어 기법

   - TCP 송신윈도우 크기 : 수신측으로 부터 확인 응답 없이 전송할 수 있는 데이터의 크기

     - 윈도우 크기 : 전송했으나 아직 확인응답 받지 못한 데이터 + 지연 없이 전송할 수 있는 데이터

     - 송신 버퍼의 범위는 수신측의 여유 버퍼 공간 반영 동적으로 바뀜

 - 비정상 윈도우 신드롬(Silly Window Syndrome)

   - 슬라이딩 윈도우 사용에 있어 부적절한 결과

   - 송신 응용프로그램이 전송하는 데이터 크기가 작은 경우

   - 수신측의 처리 속도가 늦은 경우

   - 1바이트의 데이터를 전송하기 위해 40바이트 프로토콜 헤더를 붙이게 되어 최악의 전송 효율을 나타냄

 

 - Nagle 알고리즘

   - 전송할 데이터를 어느 정도 모아 한 번에 전송

   - Nagle 알고리즘에서 송신측은 다음의 경우에만 전송

     - 응용 프로그램으로부터 받은 데이터가 최대 세그먼트 크기가 될 경우

     - 수신측으로 부터 확인 응답을 받을 경우

     - 타이머가 완료된 경우

   - 네트워크와 응용 프로그램의 데이터 처리 요구를 동시에 고려

     - 네트워크 속도가 빠르면 크기가 작은 세그먼트가 생기더라도 네트워크가 처리 가능

     - 네트워크 속도가 늦은 경우 데이터를 모아서 전송하므로 네트워크에 불필요한 오버헤드를 줄일 수 있음

 

 - Clark의 해결책

   - 수신측 윈도우 크기가 0이 되었을 경우

     - 윈도우가 최대 세그먼트 크기만큼 남았을 때 또는 버퍼의 여유 공간이 절반이 될 때 까지 수신 윈도우 크기를 계속 0으로 전송

 - 지연 확인응답(Delayed Acknowledgment)

   - 확인응답은 데이터와 함께 하나의 세그먼트에 전송하기 위해 지연될 수 있음

   - 수신측은 여분의 버퍼 공간을 확보할 수 있게 됨

   - 재전송을 증가시킬 수 있으므로 그 시간을 보통 200ms로 제한

 

 - 지연된 확인응답의 예

   - ⓑ : A는 B 정보의 확인응답을 보내기 전에 일정한 시간을 기다림

   - ⓒ 타이머가 끝날 때 A는 확인응답만을 담은 패킷을 보내게 되어 확인 응답이 지연됨

 

TCP 재전송

 - TCP 송신측은 수신측으로부터 긍정 확인응답만을 받음

   - 확인응답 메시지를 받기 전에 타이머가 종료되면 해당 세그먼트가 손실되었거나 손상되었다고 가정하고 재전송

 - 재전송 알고리즘은 전송시간이 네트워크 상황에 따라 매우 가변적이기 때문에 복잡

   - 적응적(adaptive) 재전송 알고리즘을 사용

 

TCP 혼잡제어

 - TCP세그먼트 수가 네트워크 장비의 큐 용량보다 더 많이 도착했을 때 큐는 오버플로우가 발생하게 되어 세그먼트를 폐기하는 상황을 혼잡이라 함

 - 송신측과 수신측은 혼잡을 지연의 증가로써 인식하게 됨

   - 혼잡으로 인한 전송 지연 때문에 세그먼트를 재전송한다면 혼잡을 더 악화

 - TCP는 네트워크 혼잡 상황을 반영하기 위한 혼잡 윈도우를 사용

 - TCP 전송은 혼잡 윈도우와 수신측 윈도우 크기 중 작은 값을 반영하여 조절

 

TCP persist 타이머

 - 수신측으로부터 0의 윈도우 크기를 받은 경우에는, 수신측 버퍼에 여유가 생겨 윈도우 크기를 새로 전송할 때 까지

송신측의 전송이 중단

 - 수신측으로부터 윈도우 크기를 나타내는 확인응답 세그먼트가 손실될 경우

   - 송신측은 계속해서 수신측의 윈도우 크기를 0으로 간주하여 전송을 중단

   - 수신측은 송신측이 보낼 데이터가 없다고 생각

   - TCP persist 타이머는 이 경우를 방지하기 위해 사용

 

 - TCP의 송신측은 수신측으로부터 0의 윈도우 크기를 받으면 Persist 타이머를 시작

   - Persist 타이머가 타임아웃 되면

     - 송신측은 한 바이트로 이루어진 탐색(probe) 세그먼트를 주기적으로 전송하여 수신측의 윈도우 크기를 파악

 - 송신측은 윈도우 크기를 나타내는 세그먼트가 손실되었다 하더라도 대처

 

TCP Keepalive 타이머

 - 일정기간 동안 데이터를 전송하지 않는 연결의 해제를 위해 TCP keepalive 타이머를 사용

   - 클라이언트가 TCP 연결을 맺은 후 어떤 이유로 중지한 경우에도 TCP 서버쪽은 연결을 계속 유지

 - 유휴 연결을 감지하기 위해 TCP는 각 연결에 대해 keepalive 타이머를 사용하고 타이머 종료마다 탐색 세그먼트를

전송

 - 탐색 세그먼트에도 응답이 없을 때 서버는 TCP 연결을 종료

 

TCP Time-Waited 타이머

 - TCP 연결 종료 세그먼트를 송신하였다고 해서 연결이 완전히 종료 된 것은 아님

 - Time-waited 타이머 기간 동안 연결을 유지하여 중복된 FIN 세그먼트 처리

 - 종료되는 연결의 잔여 세그먼트가 향후 생성될 연결을 영향을 미치는 것을 방지하기 위해 보통 세그먼트의 예상 생존시간의 두 배로 설정

 

UDP 프로토콜

UDP 특징

 - 비연결형(Connectionless)

   - VS. TCP는 데이터를 전송하기 전에 연결을 설정

 - 비상태정보(Non-state)

   - VS. TCP 종단 시스템에서는 각각의 연결에 대한 상태정보를 유지

 - 비정규적인 송신률(Unregulated Send Rate)

   - 일부 패킷 손실이 발생하더라도 지속적인 최소 전송률을 요구하는 실시간 영상서비스에 적합

 - 최선형 서비스(Best Effort service)

   - 수신확인 및 재전송 기능 無

 - 작은 오버헤드

   - TCP : 20byte

   - UDP : 8byte

 

UDP 헤더

 - 송신 포트번호

   - 송신측 프로세스에서 사용되는 포트번호

 - 수신 포트번호

   - 수신측 프로세스에서 사용되는 포트번호

 - 전체 길이

   - 헤더 길이 + 사용자 데이터 그램의 전체 길이

 - 체크섬

   -  검출을 위해 사용

 

UDP 포트

 - 활성화되어 있는 포트 목록

 - Netstat 명령어

   - 특정 전송 제어 프로토콜 포트를 사용하거나 UDP 포트를 사용하는 프로그램을 확인하는 방법을 제공

UDP 포트

UDP 동작

 - 캡슐화/역캡슐화

   - 캡슐화 : 전송할 데이터에 필요한 정보를 덧붙이는 과정

   - 역캡슐화 : 캡슐화된 데이터의 정보를 하나씩 제거하여 순수한 데이터를 추출하는 과정

다중화 / 역다중화

UDP SNMP동작 예

클라이언트가 프린터를 찾기 위해 SNMP를 사용하여 통신하는 과정

'네트워크' 카테고리의 다른 글

[네트워크] DNS  (0) 2023.03.21
[네트워크] 라우팅  (0) 2023.03.19
[네트워크] 모바일 IP  (0) 2023.03.18
[네트워크] IPv6 주소  (0) 2023.03.17
[네트워크] IPv4 프로토콜  (0) 2023.03.16