TCP : 전송계층의 대표 프로토콜, 네트워크 계층과 응용 프로그램의 연결을 담당
- 프로그램들은 TCP를 통해서 인터넷 이용 가능
- 여러 프로그램들이 데이터를 보낼 수 있는 인터페이스를 만들어 주는 것
- 인터페이스가 TSAP (Transport Service Access Point)
- 전송계층 데이터의 단위 TPDU (Transport Protocol Data Unit)
- 일련번호와 ACK 사용 : 전송 계층은 목적지에 도착한 데이터가 순서가 뒤바뀌거나 사라진 것은 없는지 확인
- 슬라이딩 윈도우 프로토콜을 사용하여 혼잡 제어
TCP와 IP 차이
- IP: 목적지까지 데이터 전송만 담당하며, 연결 개념이 없음
- TCP: 응용 프로그램 간의 연결 설정과 해제 지원, 데이터를 신뢰성 있게 전송하도록 보장
전송 계층 주요 작업 | 설명 |
분할과 병합 | 데이터가 큰 경우 자르고, 받는 쪽에서 원래 크기로 합쳐줌 |
멀티 인터페이스 제공 | 포트와 소켓 |
데이터의 무결성 | 일련번호와 ACK 사용 |
혼잡제어 | 슬라이딩 윈도우 크기 조절 |
연결 설정 및 연결 해제 | 3방향 핸드쉐이크 |
포트와 소켓
클라이언트 : 서비스를 요청하는 컴퓨터 ex) 웹 브라우저
- 웹브라우저 : HTTP 프로토콜을 사용해 서버에 웹 페이지 요청
- 익스플로러, 크롬, 파이어 폭스 등
서버 : 서비스를 제공하며 클라이언트 요청을 대기
- 데몬(daemon): 항상 작동하며 서비스를 제공하는 프로그램
- 웹 서버의 데몬: HTTPD(Apache, Tomcat, IIS 등)
HTTP: 하이퍼텍스트(웹 페이지) 전송 프로토콜
FTP: 파일 전송 프로토콜
SMTP: 이메일 전송 프로토콜
- 각 프로토콜의 데몬 설치로 서버 구축 가능 (예: HTTPD, FTPD, SMTPD)
- 서버는 특정 하드웨어를 가리키는 단어가 아니라 데몬이 설치된 컴퓨터를 지칭하는 단어
- 서버의 역할을 하기 위해서는 성능이 높은 CPU와 24시간 안정적으로 작동하는 내구성이 필요함. 그래서 고사양의 컴퓨터를 ‘서버급 컴퓨터’라 부름
포트 : 프로그램 간 데이터 통신을 위한 전송 계층의 주소, 전송 계층이 여러 프로그램에게 제공하는 주소인 동시에 멀티 인터페이스
- TSAP (Transport Service Access Point) = 포트
- 범위: 0~65535
Well-known 포트 번호: 자주 사용하는 데몬이나 중요한 프로그램의 포트 번호를 고정
서비스 | 포트번호 | 비고 |
FTP | 21(제어), 20(데이터) | FTP의 경우 21번 포트로 접속하여 작업을 하는데 실제 데이터는 20번 포트로 전송됨 |
telnet | 23 | 원격지 로그인에 사용 |
SMTP | 25 | 이메일 전송 프로토콜 |
DNS | 53 | 도에민 이름 - 주소 변환 |
DHCP(BOOTP) | 67, 68 | 동적 IP 주소 할당 |
HTTP | 80 | 웹 시스템 |
HTTPS | 443 | HTTP의 암호 프로토콜 |
- URL 형식은 ‘프로토콜://도메인 이름:포트 번호’
- http://naver.com:80이 정확한 주소 ➔ http:// 및 포트번호 :80은 생략가능
소켓(Socket) : 멀티탭, 같은 포트에 연결되어 여러 명을 동시에 처리할 수 있는 소프트웨어적인 접속장치
- 80번 포트에 소켓을 연결해 여러 사용자를 동시 처리
- 소켓 프로그래밍 : 네트워크를 시용한 프로그래밍
- 소켓과 서버 부하:
- 동시 접속자 수는 준비된 소켓의 개수로 결정
- 소켓이 부족하면 서비스 지연, 과도하면 서버 성능 저하
- 서버 다운 사례: 갑작스런 트래픽 증가로 소켓 부족
연결설정의 어려움
연결설정 : CR(Connection Request)를 보냄으로서 이루어짐
문제 : CR을 보냈다고 해서 호스트 B가 연결을 허락한 것은 아님 이런 상태에서 데이터가 도착하게 되면, 호스트 B는 해당 데이터를 무시
CR_ACK : 호스트 A는 CR을 보내고, 호스트 B는 연결을 승낙한다는 뜻으로 CR에 대한 응답 메시지
문제 : 호스트 B가 보낸 CR_ACK가 정상적으로 전송되었는지를 호스트 B는 알 수 없음 ➔ 호스트 B가 CR_ACK를 보낸 직후에 도착하는 데이터가 호스트 A가 보낸 데이터라는 보장이 없음
3방향 핸드쉐이크 : 호스트 A는 CR을 보내고, 호스트 B는 CR에 대한 허락의 의미로 CR_ACK를 보냄 ➔ 호스트 A는 CR_ACK를 받았다는 증거로, CR_ACK_ACK를 보냄, CR ➔ CR_ACK ➔ CR_ACK_ACK, 3번의 합의를 거쳐 연결
DR : 연결을 해제할 때 서로간의 합의
문제 1: 호스트 A는 계속적으로 호스트 B에게 데이터를 보내는 중간에 호스트 B가 일방적으로 DR을 보냄, 해당 데이터 처리 못함
문제 2: 호스트 A가 연결해제를 위해 보낸 DR이 사라진 경우, 이때 악의적인 사용자로부터 위조된 데이터가 호스트 B에 도착 ➔ 호스트 B는 호스트 A가 보낸 DR이 사라졌다는 것을 알지 못하기 때문에 데이터를 처리 할 수 밖에 없음
TCP에서 실제로 연결 설정이 이루어지는지 과정
CR = SYN
DR = FIN
- SYN 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비함
- SYN + ACK 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비
- ACK 세그먼트는 데이터를 전달하지는 않는 경우에는 순서 번호를 소비 하지 않음
'망 (Network)' 카테고리의 다른 글
[네트워크] TCP와 소켓 프로그래밍 (1) | 2024.12.05 |
---|---|
[네트워크] 네트워크 계층 작업과 프로토콜 (0) | 2024.12.04 |
[네트워크] 인터넷 프로토콜(IP) (0) | 2024.12.03 |
[네트워크] 라우팅 알고리즘 (1) | 2024.11.30 |
[네트워크] IP 주소 (1) | 2024.11.30 |