본문 바로가기
CS/Network

6-2. 트랜스포트 계층 : TCP와 UDP

by pizzz 2023. 1. 6.

TCP (Transmission Control Protocol)

- 연결 지향 서비스

- 송신측과 수신측이 연결을 동의하면 tcp는 연결 확립 -> 신뢰적인 양방향(full-duplex) 데이터 전송 서비스

- 대표적으로 HTTP : Web 서비스 (+ FTP, Telnet, SMTP 등등)

 

TCP 세그먼트 형식

- TCP 데이터 단위 : Segment

- 이 세그먼트는 IP로 보내지고, IP데이터그램에 포함되어 전송

 TCP의 하위계층은 IP , 데이터링크계층에선 헤더 붙여서 최종적인 데이터프레임 만듦

- TCP 세그먼트 = TCP헤더 + TCP데이터

- IP데이터그램 = IP헤더 + TCP세그먼트

- 데이터프레임 = 헤더 + IP데이터그램

- 송신 포트/수신포트 : 각 프로세스를 구분하기 위한 고유주소로 송수신 포트번호

- 수신번호 : 송신측 TCP가 지정하는 순서 번호, 각 바이트마다 순서 번호 존재

- 확인번호 : 수신측 TCP가 다음에 수신을 기대하는 데이터의 순서 번호 표시, ACK플래그 비트가 지정된 경우에만 유효 (1로 지정된 경우에만)

- 헤더번호 : 데이터 어디에서 시작하는지 확인 가능

- 플래그 필드 : ACK - 확인번호, URG - 긴급포인터 필드가 유효한지, FIN - 연결 종료, PSH - 상위계층에 데이터 전달 지시, RST - 연결리셋으로 버퍼 비우거나 유효하지 않은 세그먼트에 대한 응답, SYN - 최초 연결설정

- 윈도우 크기 : 슬라이딩 윈도우 크기에 해당, 수신측 TCP가 수신할 수 있는 바이트 수 표시, 흐름제어 가능

- 첵섬 : TCP 세그먼트의 오류 검출

- 긴급포인터 : 급하게 상위계층에 전달

- 옵션/패딩 : 옵션 - 최대 크기 세그먼트 지정 , 패딩 - 헤더의 마지막이 32비트 단위로 끝날 수 있도록 함  (생략가능)

- 데이터 : 상위계층 데이터

 

TCP 기능

- 연결설정 3단계 핸드쉐이킹

1) 송신 -> 수신 연결 요청 세그먼트 : SYN, 순서번호 = X

2) 수신 -> 송신 ACK 확인 세그먼트 : SYN, 순서번호 = Y, ACK, 확인번호 = X+1 (그 다음의 번호)

3) 송신 -> 수신 연결 설정 확인 세그먼트 : ACK, 확인번호 = Y+1

* SYN = 1, ACK = 1이어야 전송 가능

 

순서번호, 확인번호

- 순서번호(seq) : 세그먼트 데이터의 첫번째 바이트 번호

- 확인번호(ack) : 상대방에게서 받게될 다음 바이트의 순서번호, 누적 ack (다음에 기대되는 번호)

 

데이터 전송

- 양쪽에서 동시에 데이터 전송할 수 있는 양방향 데이터 전송 지원

 

오류 탐지 및 재전송

- 하위 계층에서 일어날 수 있는 IP데이터그램의 손실, 중복, 파괴 그리고 순서의 흐트러짐을 탐지, 회복 기능 제공

- 순서번호와 확인번호, 재전송타이머, 첵섬 사용

- 재전송 타이머 사용 : 각 세그먼트 송신될 때 송신측 TCP가 작동, 수신받기 전에 종료되면 송신측은 해당 세그먼트 재전송

 

흐름제어

- TCP헤더의 윈도우 크기 필드 사용

- 수신측 TCP는 자신의 처리 능력에 맞는 값으로 윈도우 크기 지정, 송신측 TCP의 전송속도 제어

 

혼잡제어

- 인터넷 과부하, 트래픽에 문제 있을 때 혼잡 제어

- 과부하 줄이는 메커니즘 제공

 

연결 해제

- 연결해제하는 측에서 FIN플래그 지정하여 요청 

- 연결해제 3단계 핸드쉐이킹

1) FIN, 순서번호 = X

2) ACK, 확인번호 = X+1, FIN, 순서번호 = Y

3) ACK, 확인번호 = Y+1

 

TCP FSM(Finite State Machine: 유한상태 기계)

 

UDP (User Datagram Protocol)

- UDP 비연결 서비스 : 데이터보내기 전에 연결설정X, 핸드쉐이킹 절차 없음

- DNS의 하위계층으로 이용됨

- 신뢰성있는 서비스 제공 못함 : 오류제어나 흐름제어 불가능

- 신뢰성 제어필요 없기에 신속하게 전달 가능

- 데이터 전송단위 : UDP 사용자 데이터그램

 

UDP 첵섬필드

- IP프로토콜에서는 헤더만 첵섬을 계산하지만 UDP에서는 데이터 까지 첵섬 계산

- 송신측 UDP데이터그램 16비트 정수로 분리, 1의 보수 수행 : 첵섬 필드

- 수신측에서 UDP사용자 데이터그램에 오류가 없다면 수신측 합은 모두 1

- 하나라도 0이 있다면 오류 존재