본문 바로가기
Study/Network

[Network] OSI 참조모델 (TCP/UDP와 handshake)

by jamiehun 2023. 4. 3.

<네트워크개론_한빛아카데미>를 정리, 요약한 내용입니다.

문제가 있을 시 글 내리겠습니다.


1. 개요

전송계층은

수신지에 신뢰할 수 있는 데이터를 전송하기 위해 필요한 계층이다.

오류 복구와 흐름 제어 등을 담당하며 오류를 점검하는 기능이 있어 데이터에 오류 발생시 재전송을 요청할 수 있다.

네트워크에서 전송한 데이터와 실제 운영체제의 프로그램이 연결되는 통신 경로라고 할 수 있다.

 

전송계층은 전송하려는 데이터를 여러 개의 패킷으로 나누어 네트워크 계층으로 보내고,

패킷을 독립적으로 전송하기 때문에 송신하는 순서와 수신하는 순서가 달라질 수 있다.

 

따라서 전송계층에서 데이터의 순서를 재설정하고 오류가 있는 패킷을 재전송할 수 있다.

(패킷별로 헤더가 있는데 헤더에 순서를 표시함)

 

 

주요 기능으로는,

1. 연결 제어 : 패킷을 하나의 경로로 보낼 것인지 결정

2. 수신지로 데이터 전송 : 수신지에서 데이터의 모든 패킷 전송과 도착을 검사

3. 단편화 : 세션계층에서 받은 데이터를 전송 가능한 단편(세그먼트)로 나누고 순서를 기록

4. 재조립 : 수신지의 전송 계층에서 순서 번호에 따라 데이터를 올바르게 재조립

위와 같은 기능을 수행한다.

 

 

연결형 통신과 비연결형통신

TCP연결형 통신이라고 할 수 있는데 수신측과 확인해가며 신뢰할 수 있고 데이터를 정확하게 전송하려는 통신이다.

 

반면에 UDP비연결형 통신이라고 할 수 있는데 

빠르고 효율적으로 전송하며 수신측의 확인을 거치지 않고 일방적으로 데이터를 전송하는 방식이다.

 

2. TCP

Transmission Control Protocol의 약자로

연결 지향형 프로토콜인 TCP는 신뢰성 있는 바이트 스트림 서비스를 제공한다.

여기서 '연결지향'은 응용 프로그램이 데이터를 교환하기 전에 서로 TCP 연결을 확립해야함을 의미하고

'신뢰성 있는'은 데이터를 성공적으로 수신했거나 오류가 발생했음을 알려주는 것을 의미한다.

 

작동과정

  1. 상대방과 통신시 송신측 컴퓨터는 수신 측 컴퓨터까지의 연결상태 확인 후 데이터 전송을 시작
  2. 통신을 종료할 때까지 연결상태를 유지
  3. 또한 전송한 데이터가 제대로 전송되었는지 확인하는 작업도 수행
  4. 신뢰성 있는 데이터 전송 보장하며, 오류가 발생하면 수신자에게 알려줌

 

TCP 세그먼트

TCP 프로토콜은 전송을 위해 바이트 스트림을 세그먼트 단위로 나눈다.

  • 송신지 포트 번호 : 송신지 호스트에 있는 응용 프로그램의 포트번호
  • 수신지 포트 번호 : 수신지 호스트에서 수행하는 프로세스가 사용하는 포트번호
  • 순서 번호 : 세그먼트의 순서를 기록
  • 확인응답번호 : 수신하기를 기대하는 다음 번호
  • 헤더길이 : TCP 헤더의 길이 (20 ~ 60바이트)
  • 코드비트 : 연결의 제어정보가 기록되는 비트

  • 윈도우 크기 : 상대방이 유지해야하는 바이트 단위의 윈도우 크기를 정의
  • 검사합 : 헤드부분의 오류를 검출하는 검사합 계산
  • 긴급포인터 : URG 플래그가 설정된 긴급한 데이터의 순서번호
  • 옵션 : 송신지에서 수신하고자 하는 세그먼트의 최대 크기

 

3. UDP

User Datagram Protocol의 약자로

비연결 지향형 프로토콜로 TCP보다 적은 기능 제공한다.

 

상대적으로 통신 과부하가 적고, 신뢰성 떨어지나 속도적인 측면에서는 우수하다.

UDP 헤더 크기 (8바이트)는 TCP 헤더 크기 (20바이트)에 비해 작다.

  • 송신지 포트 번호 : 송신지 호스트에 있는 응용 프로그램의 포트번호
  • 수신지 포트 번호 : 수신지 호스트에서 수행하는 프로세스가 사용하는 포트번호
  • 전체 길이: UDP 헤더와 데이터의 길이를 표현
  • 검사합 : UDP 헤더와 데이터 및 IP 헤더의 오류를 검사

 

4. 3-way-handshake (연결 확립 과정)

1. 네트워크 통신하기 위해 Server에게 허락을 받기 위해 ClientServer에게 연결 확립 요청

2. ServerClient에게 연결을 허가한다는 ACK를 보냄

   + 동시에 Client에게 데이터 전송 허가를 받기 위해 연결 확립 요청인 SYN을 보냄

3. ClientServer에게 허가한다는 응답으로 ACK를 보냄

 

3-way-handshake를 통해 서로의 윈도우크기 (한번에 전송할 수 있는 전체 패킷의 크기)를 파악한다.

 

5. 4-way-handshake (연결 종료 과정)

1. ClientServer에게 연결 종료 요청(FIN)을 보냄

2. ServerClient에게 연결 종료 응답(ACK)을 반환 (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)

3. ServerClient에게 연결 종료 요청(FIN)을 보냄

4. ClientServer에게 연결 종료 응답(ACK)을 반환

   (아직 Server로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다림)

  • CLOSE_WAIT : Server는 ACK를 받은 이후 소켓을 닫는다 (Closed)
  • TIME_WAIT : Client는 TIME_WAIT 시간이 끝나면 닫는다 (Closed)

 

 

'Study > Network' 카테고리의 다른 글

[Network] SSL/TLS  (0) 2023.04.03
[Network] HTTP와 HTTPS  (0) 2023.04.03
[Network] OSI 참조 모델 (OSI 7계층)  (0) 2023.04.03