CS

[네트워크] TCP/IP 프로토콜

김디니 2023. 1. 3. 13:51

오늘날의 인터넷 통신의 대부분은 패킷통신을 기본으로 하고 있다. 

TCP/IP는 이러한 패킷 통신을 위한 인터넷 규약이다. 

IP는 데이터의 조각들을 최대한 빨리 목적지로 보내는 역할을 한다. 

(조각들의 순서가 바뀌거나 누락되어도 보내는 것에 집중 ▶ 신뢰성이 없음)

 

TCP는 IP보다 느리지만 이를 보완하고자 도착한 데이터의 조각을 점검한다. (다시 순서를 확인하고 누락된 데이터는 다시 요청한다.)

 

두 방식을 조합하여 통신하는 것을 묶어서 TCP/IP라고 부른다. 

 

 IP
▶ 복잡한 네트워크 망을 통해 데이터 조각들을 빨리 보내도록 한다. 

TCP
▶도착한 데이터 조각들을 점검하여 순서가 맞지 않거나 누락된 부분을 다시 요청하는 일을 담당한다.

출처:https://brunch.co.kr/@wangho/6

 

TCP

서버와 클라이언트의 함수 호출 순서

서버
▶ socket() 생성 → bind() 소켓 주소할당 → listen() 연결요청 대기상태 → accept() 연결허용 → read/write() 데이터 송수신 → close() 연결종료

클라이언트
▶ socket() 생성 → connect() 연결요청 → read/write() 데이터 송수신 → close() 연결종료

클라이언트 소켓을 생성한 후, 서버로 연결을 요청하는 과정에서 차이가 존재한다.

 

서버는 listen() 호출 이후부터 연결요청 대기 큐를 만들어 놓고, 그 이후에 클라이언트가 연결 요청을 할 수 있다. 이때 서버가 바로 accept()를 호출할 수 있는데, 연결되기 전까지 호출된 위치에서 블로킹 상태에 놓이게 된다.

연결지향적인 TCP는 신뢰성 있는 데이터 전송이 가능함 (3-way handshaking)

 

흐름제어와 혼잡제어를 지원해서 데이터 순서를 보장해줌

  • 흐름제어 : 송신 측과 수신 측의 데이터 처리 속도 차이를 조절해주는 것
  • 혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것

 

3-way handshaking


TCP 소켓은 연결 설정과정 중에 총 3번의 대화를 주고 받는다.

(SYN : 연결 요청 플래그 / ACK : 응답)

  • 클라이언트는 서버에 접속 요청하는 SYN(M) 패킷을 보냄
  • 서버는 클라이언트 요청인 SYN(M)을 받고, 클라이언트에게 요청을 수락한다는 ACK(M+1)와 SYN(N)이 설정된 패킷을 발송함
  • 클라이언트는 서버의 수락 응답인 ACK(M+1)와 SYN(N) 패킷을 받고, ACK(N+1)를 서버로 보내면 연결이 성립됨
  • 클라이언트가 연결 종료하겠다는 FIN 플래그를 전송함
  • 서버는 클라이언트의 요청(FIN)을 받고, 알겠다는 확인 메시지로 ACK를 보냄. 그 이후 데이터를 모두 보낼 때까지 잠깐 TIME_OUT이 됨
  • 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송함
  • 클라이언트는 FIN 메시지를 확인했다는 ACK를 보냄
  • 클라이언트의 ACK 메시지를 받은 서버는 소켓 연결을 close함
  • 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해서, 일정 시간동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거침 ( TIME_WAIT )

 

TCP 프로토콜(Transmission Control Protocol) (OSI 전송계층)

  • IP의 비신뢰적인 최선형 서비스에 신뢰적인 연결지향성 서비스를 제공하게 됨
  • 신뢰적인 전송을 보장함으로써, 어플리케이션 구현이 한층 쉬워지게 됨

 

  • 신뢰성(Reliable)
    • 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
  • 연결지향적(Connection-oriented)  
    • UDP가 비연결성(connectionless)인 것과는 달리, TCP는 연결지향적
    • 느슨한 연결(Loosly Connected)을 갖으므로 강한 연결을 의미하는 가상회선이라는 표현 보다는 연결지향적이라고 표현
    • 연결 관리를 위한 연결설정 및 연결해제 필요
      • TCP 연결설정, TCP 연결종료
    • 양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 서로 통신

 

TCP/IP 프로토콜 스택 4계층

LINK 계층

  • 물리적인 영역의 표준화에 대한 결과
  • 가장 기본이 되는 영역으로 LAN, WAN과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역

IP 계층

  • 경로를 검색해주는 계층
  • IP 자체는 비연결지향적이며 신뢰할 수 없는 프로토콜
  • 데이터를 전송할 때마다 거쳐야할 경로를 선택해주지만, 경로가 일정하지 않음
  • 데이터 전송 중에 경로상 문제가 발생할 때 데이터가 손실되거나 오류가 발생할 수 있는 문제 발생 가능성이 있음
  • 따라서 IP계층은 오류 발생에 대한 대비가 되어있지 않은 프로토콜이다.

TCP/UDP (전송) 계층

  • 데이터의 실제 송수신을 담당
  • UDP는 TCP에 비해 상대적으로 간단하고, TCP는 신뢰성이 있는 데이터 전송을 담당
  • TCP는 데이터 전송 시 IP 프로토콜이 기반이다. 
    • IP의 문제 (오류발생 대비X)를 해결해 주는 것이 TCP이다. 
    • 데이터의 순서가 올바르게 전송되었는지 확인하며 대화를 주고받음
    • 이처럼 확인 절차를 거치며 신뢰성이 없는 IP에 신뢰성을 부여한 프로토콜이 TCP이다.

애플리케이션 계층

  • 서버와 클라이언트를 만드는 과정에서 프로그램 성격에 따라 데이터 송수신에 대한 약속들이 정해지는 것

 

'CS' 카테고리의 다른 글

도메인 Domain  (0) 2023.01.04
중앙처리장치 CPU  (0) 2023.01.04
[네트워크] 라우터 Router (feat. 스위치)  (0) 2023.01.01
동기와 비동기  (0) 2022.12.30
[네트워크] OSI 7 계층  (2) 2022.12.30