본문 바로가기

Programming/STUDY

[모두의 네트워크 기초] 6장 전송 계층 : 오류 없이 데이터를 전달하는 단계

전송 계층의 역할
혼잡 제어 (Congestion Control)

: 네트워크로 들어가는 정보량을 조절 => 네트워크가 혼잡해지지 않게 조절하는 방법

 

 

송신자 => 하나의 데이터를 보내고 수신자 측에서 ACK 전송 시 전송량을 2배씩 증가시켜감

Time Out 발생하거나 동일한 ACK 여러 번 수신 시 데이터를 줄여서 보냄

 

 

 

흐름 제어

(≒ 데이터 링크 계층의 정지-대기 방식)

 

송신자 => 하나의 데이터 전송 후 ACK 응답을 받은 후에야 다음 데이터 보냄

 

 

 

오류 제어

 

  • 오류 검출 방법
    • 확인 응답
      • 송신 후 수신자로부터 ACK를 받지 않으면 오류로 판단함
    • 시간 초과
      • 특정 시간 내에 ACK를 받지 않으면 세그먼트에 오류 발생한 것으로 판단함

 

 

  • 데이터 재전송 필요한 상황
    • 데이터가 중간에 손실될 때
    • 데이터 순서가 바꼈을 때
    • 데이터가 훼손됐을 때

 

 

 

3방향 핸드셰이크
  • 목적에 따른 통신 방식
    • 연결형 통신
      • 데이터를 정확하게 전달함
      • TCP 프로토콜 사용
    • 비연결형 통신 
      • 데이터를 효율적으로, 빠르게 전달함
      • UDP 프로토콜 사용

 

 

  • TCP 프로토콜 - 3 Way Handshake

TCP 프로토콜의 목적은 데이터를 정확하게 전달하는 것 => 상대방이 내 신호를 받을 수 있는 상태인지 확인 후 전송

 

3 Way Handshake => TCP 통신을 하는 장치들이 서로 통신할 준비가 됐는지 확인하는 과정

 

 

1. 송신자 => 연결 요청 위해 수신자에게 SYN (임의 숫자) 전송

2. 수신자 => 요청을 잘 받았다는 의미로 ACK (앞의 SYN+1) & 연결 요청 의미로 SYN 전송  

3. 송신자 => 연결 수립 의미로 ACK 전송 (SYN+1) 

 

 

 

TCP의 구조

 

 

포트 번호

 

어떤 애플리케이션과 통신하는지 정의함

ex) 컴퓨터의 주소 = IP 주소 / 프로그램의 주소 = 포트 번호

 

포트 번호 총 개수 : 65,536개

 

0~1023번 : 잘 알려진 포트(well-known port), 특정 쓰임을 위해 사용되는 포트 

1024~49151번 : 사전 등록된 포트(registered port), 기관/기업들이 사용하는 포트

49152~65535번 : dynamic port, 일반 사용자들이 자유롭게 사용하는 포트

 

포트 프로토콜 용도
20 FTP FTP로 데이터 전송 프로토콜
22 SSH SSH, SFTP와 같은 프로토콜
23 Telnet 암호화되지 않은 텍스트 통신 프로토콜
25 SMTP 이메일 전송 프로토콜
53 DNS IP주소, 도메인 이름 변환 프로토콜
80 HTTP 웹페이지 전송 프로토콜
123 NTP 시간 동기화 프로토콜
443 HTTPS 암호화된 웹페이지 전송 프로토콜

 

  • ex

송신자 => 192.168.2.34 IP 주소의 수신자에게 이메일 전달 (헤더: 25번 포트)

수신자 => 25번 포트를 통해 이메일 열어 확인

 

 

 

일련번호 & 확인 응답 번호

 

 

일련번호 : 송신자가 수신자에게 보내려는 데이터가 몇번째인지 알려줌

확인 응답 번호 : 수신자가 몇번째 데이터를 받았는지 송신자에게 알려줌 ("다음에는 x번째부터 보내줘")

 

 

 

윈도우 크기

 

: 송/수신자가 한 번에 송/수신할 수 있는 데이터 최대 크기

 

3방향 핸드셰이크 과정에서 송, 수신자의 윈도우 크기를 확인할 수 있음 (Window_Size)

 

 

 

 

코드 비트

 

코드 비트 항목 (SYN, ACK, ..)을 통해 연결 제어함 (기본값 : 0)

 

항목 설명
TURG 긴급 처리 데이터가 있음
ACK 확인 응답 번호 사용
RSH TCP가 받은 데이터를 상위 계층에 전달
RST 연결 재설정
SYN 연결 초기화 위해 순서 번호를 동기화
FIN 데이터 송신 종료

 

 

  • 연결 수립할 때 코드 비트 (확립 응답 + 확립 요청)
TURG 0
ACK 1
RSH 0
RST 0
SYN 1
FIN 0

 

 

 

UDP의 구조
UDP (User Datagram Protocol)

 

: 수신자 측이 받는 오류에 대해 신경쓰지 않고 데이터를 보냄

 

장점 : 데이터 전송 속도가 빠름

단점 : 신뢰성을 보장하지 않음

 

ex) 실시간 방송, 브로드 캐스트

 

cf) TCP : 데이터를 세그먼트 단위로 쪼개 순서 부여하여 전송함 (+ 오류 제어 등) => 신뢰성 있는 통신

 

 

 

UDP 헤더

 

TCP에 비해 매우 축약된 정보만 포함함

 

 

길이 : UDP 헤더, 데이터를 합한 총길이

검사합 : 데이터 무결성 검사(오류 검사) 용도

 

 

 

전송 계층에서 사용하는 로드 밸런서
로드 밸런서

: 여러 서버를 두고 사용자가 한 쪽으로 몰리는 것을 분산해주는 장치

 

※ Scale Out : 1대의 서버에서 여러 대의 서버로 늘리는 것

※ 로드 밸런싱 : 부하를 분산시켜주는 작업

 

 

 

분산 방법
  • 라운드 로빈
    • 가장 기본적인 방식
    • 각 서버 별로 돌아가며 연결 처리함
  • 가중 라운드 로빈
    • 각 서버 별로 돌아가며 연결을 처리하지만, 일부 서버는 큰 트래픽을 몰아 받음
  • 랜덤
    • 무작위 분배 방식
  • 해시
    • 특정 클라이언트는 특정 서버에서만 처리하는 방식

 

포트 번호 기준으로도 부하 분산 가능

 

 

 

 

이미지 출처 :