전송 계층의 역할
혼잡 제어 (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대의 서버에서 여러 대의 서버로 늘리는 것
※ 로드 밸런싱 : 부하를 분산시켜주는 작업
분산 방법
- 라운드 로빈
- 가장 기본적인 방식
- 각 서버 별로 돌아가며 연결 처리함
- 가중 라운드 로빈
- 각 서버 별로 돌아가며 연결을 처리하지만, 일부 서버는 큰 트래픽을 몰아 받음
- 랜덤
- 무작위 분배 방식
- 해시
- 특정 클라이언트는 특정 서버에서만 처리하는 방식
포트 번호 기준으로도 부하 분산 가능
이미지 출처 :
'Programming > STUDY' 카테고리의 다른 글
[인강/CS 지식의 정석] 1. 개발자 필수 지식 (0) | 2024.11.30 |
---|---|
[모두의 네트워크 기초] 7장 응용 계층 : 애플리케이션에 접속하는 단계 (0) | 2024.07.08 |
[모두의 네트워크 기초] 5장 네트워크 계층 : 목적지를 찾는 단계 (0) | 2024.06.21 |
[모두의 네트워크 기초] 4장 데이터 링크 계층 : MAC 주소로 통신하는 단계 (1) | 2024.06.10 |
[CS] 메모리의 구조 (0) | 2024.06.03 |