본문으로 바로가기
반응형

오늘은 TCP에 대해서 정리 해보겠습니다.

네트워크를 4계층으로 나눌때 네트워크인터페이스 계층 ,인터넷 계층, 트렌스포트 계층, 어플리케이션 계층 으로 나눕니다.

여기서 오늘 설명드릴 TCP는 트랜스 포트 계층의 대표적인 프로토콜은 TCP, UDP 중 하나입니다.

TCP는 웹이나 이메일과 같이 데이터가 정확하게 전달되어야 하는 통신에서 사용됩니다. 

통신을 맺고 끊는 과정에서 클라이언트와 서버간 확인 절차를 거치는데, 이러한 특징으로 연결지향 프로토콜이라고 합니다.

UDP는 VolIP나 동영상 스트리밍과 같이 전송 속도가 빨라야 하는 통신에서 사용합니다. TCP와 다르게 연결을 맺지 않고 한쪽에서 일방적으로 데이터를 보냅니다. 따라서 이러한 특징을 비연결지향 프로토콜 이라고 부릅니다.

TCP가 어떻게 수신지의 통신 상태를 확인하고 데이터를 정확하게 전달하는지에 대해 살펴보겠습니다.

TCP는 위에서 설명드린바와 같이 데이터의 정확한 전달을 중시하는 프로토콜입니다. TCP는 데이터 전송에 신뢰성을 더하기 위해서 데이터를 세그먼트 단위로 분할하고, 전송 속도를 조절하며, 데이터가 제대로 전달되지 않았을 경우 재전송을 합니다.

TCP의 세그먼트는 데이터 본체에 TCP헤더가 붙은 형태로 구성이 됩니다. 

TCP헤더에는 포트번호나 일련번호와 같은 정보가 포함되어 있습니다.

 

 

TCP통신은 커넥션을 맺는 단계는 3단계로 진행되며 이를 3방향 핸드셰이크 라고 부릅니다. 

커넥션이 맺어지면 데이터를 전송할 수 있는 상태가 되고, 데이터 전송이 끝나면 커넥션을 끊게 됩니다.

TCP가 통신을 맺는 과정은 아래와 같습니다.

 

 

TCP 소켓으로 클라이언트와서버가 연결되는 과정을 3 way hand shake 라고함

1)     클라이언트는 서버에 접속요청(sync) 하고 클라이언트는 sync_sent 상태가

2)     서버는 요청수락(sync+ack)하고 서버는 sync_received 상태가

3)     클라이언트는 서버에 수락확인(ack) 보내고 서버는 established 상태가됨

 

 

TCP가 연결을 끊는 과정은 아래와 같습니다.

TCP소켓 연결을 종료하는 과정을 4 way hand shake 라고함

1)     클라이언트가 서버에 연결을 종료 (fin)플래그를 전송, 클아이언트는 종료신호를 기다리는 상태 fin_wait1

2)     서버는 일단 확인(ack) 했다는 메시지를 보내고 자신의 통신이 끝날때 까지 기다리게함. 서버는 close wait 상태 클라이언트는 종료신호를 기다리겠다는 fin_wait2 상태 전환

3)     서버가 통신이 끝나면 이제 종료해도된다는 (fin) 플래그를 클라이언트에 전달. 서버는 last_ack 상태로 전환, 클라이언트는 time_wait 상태 전환

4)     클라이언트는 연결종료를 확인했다는 응답(ack) 플래그를 보냄. 서버 상태 closed

 

 

TCP가 어떻게 통신을 맺는지, 어떻게 연결을 끊는지를 알면 TCP의 통신의 특징인 연결지향성 프로토콜 이라는 것을 더 확실히 알 수 가 있겠죠.

이런 네트워크 개념이 AWS를 사용할때 도움이 될 수 있습니다.

그 이유는 AWS를 사용할때 VPC, Subnet 그리고 security group과 같이 네트워크 설정을 해줘야 하기 때문입니다.

간혹 AWS security group에서 해당 TCP가 통신이 되도록 설정해놓았는데 통신이 안되는 경우를 경험할 수 있습니다. 이럴 경우 가장 먼저 확인해볼것이 실제 OS에서 해당 TCP에 대한 연결상태 확인입니다.

연결상태를 확인해볼때 TCP의 특성을 잘알고 있으면 문제를 더 쉽게 해결 할 수 있겠죠.

오늘은 TCP에 대해 알아보았습니다. 이어서 이후 블로그에 UDP에 대해서 알아보도록 하겠습니다. 

 

 

 

 

 

 

 

 

 

반응형

댓글을 달아 주세요

  1. 코딩왕초보 2020.11.24 21:03

    설명 감사합니다! CIDR 설명도 TCP 설명도, 전혀 모르는 사람이 봐도 도움될만큼 쉽게 적어주신 것 같아요
    UDP 설명도 있었으면 좋았을텐데, 또 블로그 업로드 해주세요 !