728x90
반응형
23 전송 계층의 역할
전송 계층의 역할
- 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요 → 물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있지만, 데이터가 손상되거나 유실될 경우의 대비책은 없음
- 오류를 점검하는 기능 (오류가 있을 경우 데이터를 재전송 하도록 요청)
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
연결형 통신
- 상대편과 확인해가면서 통신 → 신뢰성/정확성
- TCP 프로토콜 사용 (Transmission Control Protocol : 전송 제어 프로토콜)
비연결형 통신
- 상대편을 확인하지 않고 일방적으로 데이터를 전송 → 효율성
- 효율성이 더 중요한 동영상 시청 시 사용 (데이터가 약간 유실되더라도 버벅이지 않고 원할하게 영상을 보는 것이 더 중요하기 때문)
- UDP 프로토콜 사용 (User Datagram Protocol : 사용자 데이터그램 프로토콜)
24 TCP의 구조
TCP
- 신뢰성과 정확성을 우선으로 하는 연결형 통신
- TCP 헤더 : TCP로 전송할 때 붙이는 헤더
- 출발지 포트 번호 (16비트)
- 목적지 포트 번호 (16비트)
- 일련번호 (32비트)
- 확인 응답 번호 (32비트)
- 헤더 길이 (4비트)
- 예약 영역 (6비트)
- 코드 비트 (6비트)
- 윈도우 크기 (16비트)
- 체크섬 (16비트)
- 긴급 포인터 (16비트)
- 옵션
- 세그먼트 (segment) : TCP 헤더가 붙은 데이터 = [ TCP헤더 + 데이터 ]
- 데이터 전송 전에 연결 (connection)이라는 가상의 독점 통신로를 확보해야함 → 연결 확립 후 데이터 전송
- 코드비트
- 연결의 제어 정보가 기록되는 곳 (각 1비트씩 총 6비트)
- URG
- ACK : 확인 응답
- PSH
- RST
- SYN : 연결 요청
- FIN
- 초깃값은 0, 비트 활성화 시 1
- 연결을 확립하기 위해서는 이 중 SYN과 ACK 필요
- 연결의 제어 정보가 기록되는 곳 (각 1비트씩 총 6비트)
3-way 핸드셰이크
- 연결을 확립하기 위해 패킷 요청을 3번 교환하는 것, 컴퓨터 간에 연결을 맺기 위한 초기화 과정
- 연결은 SYN과 ACK를 사용하여 확립
- 신뢰할 수 있는 연결을 위해, 데이터를 전송하기 전 패킷 교환
- 패킷 교환 과정
- C1 → 연결 확립 요청 SYN → C2
- C1 ← 연결 확립 응답 + 연결 확립 요청 SYN + ACK ← C2
- C1 → 연결 확립 응답 ACK → C2
- 패킷 교환 과정 이후 코드비트의 SYN과 ACK가 1로 활성화
- 데이터 전송 후에는 연결을 끊기 위한 요청 공유 필요
- 연결 종료에는 FIN과 ACK를 사용
- 연결 종료를 위한 과정
- C1 → 연결 종료 요청 FIN → C2
- C1 ← 연결 종료 응답 ACK ← C2
- C1 ← 연결 종료 요청 FIN ← C2
- C1 → 연결 종료 응답 ACK → C2
- 연결 종료 후에는 코드비트의 FIN과 ACK가 1로 활성화
25 일련번호와 확인 응답 번호의 구조
3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련번호와 확인 응답 번호가 필요하다
일련번호
- TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할
확인 응답 번호
- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
- 다음 번호의 데이터를 요청할 때 사용
과정
- 데이터 전송 전 단계인 3-way 핸드셰이크로 연결 수립이 이루어질 때, 통신에 사용하는 일련번호 3001과 확인응답번호 4001이 결정
ex. 200바이트의 데이터 송신
- C1 → [일련번호-3001][확인응답번호-4001] → C2
- C1 ← [일련번호-4001][확인응답번호-3201] ← C2 (3001 + 200바이트 = 3201)
- C1 → [일련번호-3201][확인응답번호-4001] → C2
- C1 ← [일련번호-4001][확인응답번호-3401] ← C2 (3201 + 200바이트 = 3401)
- 위 과정을 데이터 전송이 완료될 때까지 반복
재전송 제어
- 데이터가 항상 올바르게만 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해 데이터가 손상되거나 유실된 경우 데이터를 재전송
- 데이터 전송 도중 오류 발생 시 일정 시간 동안 대기 후 재전송
윈도우 크기
: TCP헤더의 window size, 오버플로를 방지하기 위해 헤더에 버퍼의 한계 크기를 미리 알려줌
(얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타내는 것)
- 3-way 핸드셰이크를 할 때 윈도우 크기를 판단
- C1 → SYN 연결 확립 요청, 윈도우크기 3000 → C2
- C1 ← ACK 연결 확립 응답, 윈도우크기 2000 ← C2
- C1 → ACK 연결 확립 응답 → C2
- 서로의 윈도우 크기를 알게되어 오버플로 되지 않도록 세그먼트를 전송
- 위와 같은 방식은 세그먼트(데이터)를 하나 보낼 때마다 확인 응답을 한번 반환하는 형식이라 효율이 높지 않음
- 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높음
- 수신 측에서 버퍼(buffer)에 세그먼트들을 일시적으로 보관하는 장소가 있음
- 하지만, 버퍼에 대량으로 세그먼트가 쌓이면 오버플로(overflow)가 발생
- 따라서, 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 함
- 연속으로 세그먼트를 전송하는 예시
- C1 → 세그먼트 송신 → C2
- C1 → 세그먼트 송신 → C2
- C1 → 세그먼트 송신 → C2 (C2의 윈도우 크기 이내라면 연속해서 전송 가능)
- C1 ← 확인 응답 ← C2
- C1 ← 확인 응답 ← C2
- C1 ← 확인 응답 ← C2 (연속해서 확인 응답 수신)
- C1 → 세그먼트 송신 → C2
- C1 → 세그먼트 송신 → C2
- C1 → 세그먼트 송신 → C2
- C1 ← 확인 응답 ← C2
- C1 ← 확인 응답 ← C2
- C1 ← 확인 응답 ← C2
26 포트 번호의 구조
포트 번호(port number)
- 어플리케이션을 구분하기 위한 번호 → 전송된 데이터의 목적지를 구분하기 위해 TCP 헤더의 출발지 포트 번호와 목적지 포트 번호가 필요 (데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되는지 구분하려면 TCP는 포트 번호 필요)
- 0 ~ 65535번 사용 가능
- 잘 알려진 포트(well-known-port) = 0 ~ 1023번은 주요 프로토콜이 사용하도록 예약
(일반적으로 서버측 애플리케이션)- SSH - 22
- SMTP - 25
- DNS - 53
- HTTP - 80
- POP3 - 110
- HTTPS - 443
- 예약되어 있지만 사용하지 않는 포트 = 1024
- 랜덤 포트 = 1025번 이상, 클라이언트 측의 송신 포트
- 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동 할당
(서버와 다르게 클라이언트는 포트번호를 지정하지 않아도 됨)
27 UDP의 구조
UDP
- 비연결형 통신, 데이터를 효율적으로 빠르게 보내는 장점
→ 스트리밍 방식으로 전송하는 동영상 서비스에서 사용 - UDP 헤더 : UDP로 전송할 때 붙이는 헤더
- 출발지 포트 번호 (16비트)
- 목적지 포트 번호 (16비트)
- 길이 (16비트)
- 체크섬 (16비트)
- UDP 데이터그램 : UDP헤더가 붙은 데이터 = [데이터 + UDP 헤더]
- 컴퓨터나 네트워크 장비에 데이터를 일괄로 보내는 브로드캐스트(broadcast) 가능 (일괄 통신 가능)
→ 데이터를 전송할 때도 확인 응답을 보내야하는 TCP 통신으로는 불가능, 목적지를 지정해야하기 때문에 불가능
728x90
반응형
'CS' 카테고리의 다른 글
[네트워크] 모두의 네트워크 : 무선 랜 이해하기 (0) | 2024.08.11 |
---|---|
[네트워크] 모두의 네트워크 : 응용 계층 - 애플리케이션에 데이터 전송하기 (0) | 2024.08.11 |
[네트워크] 모두의 네트워크 : 네트워크 계층 - 목적지에 데이터 전달하기 (0) | 2024.08.07 |
[네트워크] 모두의 네트워크 : 데이터 링크 계층 - 랜에서 데이터 전송하기 (0) | 2024.08.07 |
[네트워크] 모두의 네트워크 : 물리계층 - 데이터를 전기 신호로 변환하기 (0) | 2024.08.06 |