서적/모두의 네트워크 기초
06 - 전송 계층, 오류 없이 데이터를 전달하는 단계
kelly09
2025. 2. 9. 11:06
*<모두의 네트워크 기초>를 정리한 내용입니다.
전송 계층의 역할
- 오류 점검
- 컴퓨터가 데이터를 제대로 받았을 때 어떤 애플리케이션으로 전달해야 하는지 식별
오류 점검 방식
혼잡 제어(Congestion Control)
- 네트워크로 들어가는 정보량을 조절하여 네트워크가 혼잡해지지 않게 조절
- Time Out - 프로그램이 특정 시간 내에 성공적으로 수행되지 않아서 진행이 자동적으로 중단되는 것.
흐름 제어
- 데이터 링크 계층의 정지-대기 방식과 동일
- 송신자가 하나의 데이터 전송 후 다음 데이터 전달 전에 확인 응답 기다리는 방법
오류 제어
- 확인 응답 - 수신자 측으로부터 ACK 응답을 받아야 함, ACK가 없으면 오류로 판단
- 시간 초과 - 특정 시간 내에 ACK가 없으면 세그먼트에 오류가 있다고 판단
오류 발션 시 데이터를 재전송해야 하는데, 재전송이 필요한 상황은?
- 데이터가 중간에 손실될 때
- 데이터 순서가 바뀌었을 때
- 데이터가 훼손되었을 때
데이터를 다음 계층으로 전달 ⇒ 포트(port) 번호 필요
3방향 핸드셰이크
데이터 전달 목적에 따라 나뉨
- 연결형 통신 - 정확하게 데이터를 전달하는 것이 목표, TCP 프로토콜 사용
- 비연결형 통신 - 효율적으로 데이터를 보내는 통신, UDP 프로토콜 사용
TCP 프로토콜
- 데이터를 세그먼트라는 단위로 쪼갠 후 순서를 부여하여 전송
- 3 Way Handshake 방법으로 통신
- 상대방이 내 신호를 받을 수 있는 상태인지 확인하고 전송
⇒ TCP 통신을 하는 장치 간에 서로 통신할 준비가 됐는지를 확인하는 과정
1. 송신자 -> 수신자에게 SYN(Synchronize Sequence Number)라는 임의의 숫자 전송
"내 말 들려?"
2. 수신자 - ACK("잘 들려"), SYN("너도 내 신호 잘 받고 있지?")
=> ACK는 SYN + 1, SYN은 임의의 숫자
3. 송신자 - ACK("잘 들려!")
=> ACK는 SYN + 1
TCP(Transmission Control Protocol)의 구조
헤더
포트 번호
- 프로그램의 주소
- 65,536개 존재
- 0 ~ 1023: well-known port, 특정한 쓰임을 위해 사용됨. ex) HTTP: 80
- 1024 ~ 49151: 기관이나 기업이 사용, registered port
- 49152 ~ 65535: 일반 사용자들이 사용, dynamic port
일련번호와 확인 응답 번호
- 일련번호 - 송신자가 수신자에게 보내려는 데이터가 몇 번째인지 알려줌
- 확인 응답 번호 - 수신자가 몇 번째 데이커를 받았는지 송신자에게 알려줌
윈도우 크기
- 송신자가 한 번에 보낼 수 있는 데이터의 최대 크기
- 어떻게 알아냄? → 3방향 핸드셰이크 과정에서 Window_Size 정보 주고받음
코드 비트
- 기본값 0, 비트 활성화 시 1
⇒ 코드 비트를 이용하여 연결 제어
TURG 긴급 처리 데이터가 있음
ACK | 확인 응답 번호 사용 |
RSH | TCP가 받은 데이터를 상위 계층에 전달 |
RST | 연결 재설정 |
SYN | 연결을 초기화하기 의해 순서 번호 동기화 |
FIN | 데이터 송신 종료 |
UDP(User Datagram Protocol)의 구조
- 오류에 상관없이 데이터를 보내기만 함.
- 신뢰성을 보장하지 않는 만큼 전송 속도가 빠름.
ex) 실시간 방송
- 브로드캐스트에 사용되는 프로토콜.
헤더
- 송/수신자의 포트 번호
- 헤더 길이
- 검사합(Checksum)
전송 계층에서 사용하는 로드 밸런서(Load Balancer)
- 여러 대의 서버를 두고 사용자가 한 쪽으로 몰리는 것을 분산 시켜 주는 장치
- 스케일 아웃(Scale Out) - 한 대의 서버에서 여러 대로 늘리는 것
- 로드 밸런싱(Load Balancing) - 부하를 분산시켜주는 작업
- http://www.nari.com을 서비스하는 서버는 1대, 동시 접속자가 만 명 ⇒ 서버 멈춤
- 서버를 여러 대 구성해도 사용자들이 특정 서버 1대에만 접속하는 문제 발생 ⇒ 로드 밸런서 필요
부하를 분산시키는 방법
- Round Robin - 각 서버별로 돌아가명서 연결 처리
- Weighted Round Robin - 각 서버별로 돌아가면서 연결 처리, 일부 서버는 큰 트래픽을 몰아 받음.
- Random - 무작위로 분배
- Hash - 특정 클라이언트는 특정 서버에서만 처리
- 포트 번호를 이용한 분산도 가능