충분히 쌓여가는
TCP / UDP 본문
Transport Layer(전송 계층)
- 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해주면서 종단 간(End Point)의 사용자들에게 신뢰성 있는 데이터를 전달하는 계층
- 순차 번호 기반의 오류 제어 방식을 사용
- 종단 간 통신을 다루는 최하위 계층으로 종단 간 신뢰성 있고 효율적인 데이터 전송
- 전송 계층 프로토콜: TCP, UDP
- 종단 간 신뢰성 있는 데이터 전송을 담당하는 계층
더보기
신뢰성: 데이터를 순차적, 안정적인 전달
전송: 포트 번호에 해당하는 프로세스에 데이터 전달
Transport Layer가 없을 경우
데이터의 순차 전송이 원활하지 않음 | 송신자(1 2 3) -> 수신자(2 3 1) |
Flow(흐름 문제) | 수신자가 처리할 수 있는 데이터량 초과 원인: 송수신자 간의 데이터 처리 속도 차이 |
Congestion(혼잡 문제) | 네트워크가 혼잡할때 원인: 네트워크의 데이터 처리속도(ex. 라우터) |
- Hello Nice to meet you -> 데이터 손실 -> Hell to you
TCP(Transmission Control Protocal)
- 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- Connection 연결(3 way-handshake)- 양방향 통신
- 데이터의 순차 전송 보장
- Flow Control(흐름 제어), Congestion Control(혼잡 제어), Error Detection(오류 감지)
- 애플리케이션에게 신뢰적이고 연결지향형 서비스 제공
- TCP(패킷 추적 관리)와 IP(배달)는 함께 사용됨
- 신뢰적 전송을 보장하기 위해 handshake하기 때문에 TCP의 속도가 느림
- 3-way handshake 과정을 통해 연결 설정, 4-way handshake를 통해 해제함
- 전송제어 프로토콜은 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나
Segment(세그먼트)
- TCP로 연결된 세션간의 전달되는 데이터 단위
- 전송계층의 패킷(컴퓨터 간 데이터를 주고 받을때 네트워크를 통해 전송되는 데이터 조각)
TCP 특징
특징 | 설명 |
신뢰성 보장 | - 패킷 손실, 중복, 순서 바뀜 등이 없도록 보장 - TCP 하위 계층인 IP 계층의 신뢰성 없는 서비스를 보완하여 신뢰성 제공 |
연결 지향적 특징 | - 같은 전송의 UDP가 비연결성인 것과는 달리 ,TCP는 연결 지향적 - 양단간 애플리케이션/프로세스는 TCP가 제공하는 연결성 회신을 통하여 서로 통신 |
흐름제어 (Flow Control) |
- 흐름 제어 기능을 활용하여 송신(송신 전송률) 및 수신(수신 처리율) 속도를 일치시킴 |
혼잡 제어 (Congestion Control) |
- 네트워크가 혼잡하다고 판단될 때는 혼잡에서 기법을 사용하여 송신율을 감속함 |
TCP 헤더 구조
필드 | 설명 | |
Source/Destination Port(각 16비트) | - 송신지 Port 번호, 목적지 Port 번호 - 양쪽 호스트 내 종단 프로세스 식별 |
|
Sequence Number(32비트) | - 바이트 단위로 구분되어 순서화되는 번호 - 이를 통해, TCP 에서는 신뢰성 및 흐름 제어 기능 제공 |
|
Acknowledgement Number(32비트) | - 확인응답번호/승인번호 - 수신하기를 기대하는 다음 바이트 번호 - 마지막 수신 성공 순서번호 + 1 |
|
HLEN(Header Length, 4비트) | - TCP 헤더 길이를 4바이트(32비트) 단위로 표시 | |
Flag Bit(6개) | - 플래그는 URG, ACK, PSH, RST, SYN, RIN으로 구성 - TCP 연결 설정과 연결 해제 메시지를 구분하는 것이 제어 필드의 기능(제어 필드는 1Bit로 구성) |
|
URG(Urgent) | - 긴급 포인터 필드의 값이 유효한지 여부 표시 | |
ACK(Acknowledgment) | - ACK 필드의 값이 유효한지 여부 표시 | |
PSH(Push) | - 수신 애플리케이션에 버퍼링된 데이터를 상위 계층으로 푸쉬해줄지 여부를 질의하는 역할 | |
RST(Reset) | - 강제 연결 초기화 | |
SYN(Synchronize) | - 동기화 시퀀스 번호 | |
FIN(Finish) | - 남은 송신 측 데이터 없음 | |
Window Size(16비트) | - 해당 세그먼트의 송신측이 현재 수신하고자 하는 윈도의 크기(기본 단위는 바이트) - acknowledgement 필드의 시퀀스 번호보다 큰 값이어야 함 |
|
Checksum(16비트) | - 헤더 및 데이터의 에러 확인을 위해 사용되는 16비트 체크 섬 필드 | |
Urgent Pointer(16비트) | - URG 플래그가 설정된 경우, 이 16비트 필드는 시퀀스 번호로부터의 오프셋을 나타냄 - 이 오프셋이 마지막 긴급 데이터 바이트를 가리킴 |
|
Options and Padding | - 최대 40 바이트까지 옵션 데이터 포함 가능 |
UDP(User Datagram Protocol)
- 비연결성, 신뢰성이 낮음
- 순서화되지 않은 데이터그램 서비스를 제공하는 전송(4계층)계층의 통신 프로토콜
- 데이터그램(독립적인 관계를 지니는 패킷) 단위로 처리
- 연결 설정 및 해제하는 과정 없음
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류 검출
- 흐름제어 및 혼잡제어를 수행하지 않기 때문에 속도가 빠르고 네트워크 부하가 적음(데이터 전송의 신뢰성 낮음)
- 연속성이 중요한 서비스, 스트리밍 서비스에 부합함
특징 | 설명 |
비신뢰성 | - 데이터 그램 지향의 전송계층용 프로토콜(논리적인 가상회선 연결이 필요 없음) - 메시지가 제대로 도착했는지 확인되지 않음(확인 응답 없음) - 검사 합을 제외한 특별한 오류 검출 및 제어 없음(오류 제어 거의 없음) - 할당되는 논리적 경로가 없음 - 각각의 패킷이 다른 경로로 전송됨 |
순서화되지 않은 데이터그램 서비스 제공 |
- 수신된 메시지의 순서를 맞추지 않음 - 흐름 제어를 위한 피드백을 제공하지 않음 |
실시간 응용 및 멀티캐스팅 가능 |
- 빠른 요청과 응답이 필요한 실시간 응용에 적합 - 여러 다수 지점에 전송 가능 |
단순 헤더 | - 헤더는 고정 크기의 8바이트(TCP는 20바이트)만 사용 - 헤더 처리에 시간과 노력을 필요하지 않음 |
UDP 헤더 구조
필드 | 설명 |
Source Port Number | 송신 포트번호(포트번호를 사용해서 상위 단계 프로그램 식별) |
Destination Port Number |
- 수신 포트번호 - 선택 항목, 사용하게 되면 응답받게 될 포트 표시함 |
UDP Length | - 바이트 단위의 길이 - 최솟값 8(헤더만 포함될 때) |
UDP Checksum | 선택 항목, 체크 섬 값이 0이면 수신 측은 체크 섬 계산 안 함 |
Data(가변) | 가변 길이 데이터 |
TCP/UDP
- UDP와 TCP는 각각 별도의 포트 주소 공간을 관리하므로 같은 포트 번호를 사용해도 무방함
- -> 두 프로토콜에서 동일한 포트 번호를 할당해도 서로 다른 포트로 간주함
- 같은 모듈(UDP / TCP) 내에서도 클라이언트 프로그램에서 동시에 여러 커넥션을 확립한 경우
- -> 서로 다른 포트 번호를 동적으로 할당함(동적할당에 사용되는 포트번호: 49,152~65,535)
프로토콜 종류 | TCP | UDP |
연결 방식 | 연결형 서비스 | 비연결형 버시브 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 전송 순서 보장 | 전송 순서 바뀔 수 있음 |
수신 여부 확인 | 확인함 | 확인하지 않음 |
통신 방식 | 1:1 | 1:1 / 1:N / N:N |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
더보기
3-way handshake / 4-way handshake는 다음에..
이해가 잘 안감
참고자료
수제비 정보처리기사 실기 11-46 ~ 11-49
averycode, [네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake
우아한Tech, [10분 테코톡] 👨🏫르윈의 TCP UDP
'IT > Computer Science' 카테고리의 다른 글
Git / GitHub (1) | 2023.01.13 |
---|---|
Transaction 트랜잭션 (0) | 2023.01.12 |
SOLID 5가지 설계 원칙 (2) | 2023.01.10 |
Design Pattern 디자인 패턴 (1) | 2023.01.09 |
Compiler 컴파일러 (0) | 2023.01.06 |