[네트워크] TCP통신

Hyo Kyun Lee·2021년 7월 23일
1

네트워크

목록 보기
9/20

1-1. N4, Transport layer

S/W로 이루어진 단계이며(실물구현이 아닌 논리적 구현 방식),
Data가 Port를 통해 PC로 완전히 전달되는 계층입니다.

일전 Network(IP)통신이 host to host 방식이라면, N4 계층에서 이루어지는 통신은 End to End, TCP 방식입니다.

즉 통신의 말단을 서로 연결하여 관리하고, 패킷(데이터)개념이 아닌 서비스 간의 연결 상태를 관리하는 계층입니다.

TCP와 UDP를 많이 사용하며, 이때 통신하는 데이터는 segment라 일컫습니다.

상위 계층인 application 계층에서 소켓으로 encapsulation하여 프로세스별 통신을 진행합니다(port/IP주소를 참조).

※소켓은 5 tuple(Source IP, Source Port, Destination IP, Destination Port, Protocol) 정보를 가지고 Connection-oriented 통신을 합니다.

1-2. 전송계층분류

데이터 전송계층을 통해 사용자 인터페이스로부터 구현방식이나 논리가 얼마나 차이가 있는지 확인할 수 있습니다.

Process

사용자로부터 가장 가까이 있는 단계는 process 계층이며, cmd나 리눅스 CLI환경을 통해 데이터 전송 상태를 확인할 수 있습니다.

Port > TCP(UDP) > IP

그 후 port 계층(Wireshark를 통해 해당 지점에서의 데이터 전송상태 확인), TCP/UDP 계층, IP계층으로 구분할 수 있습니다.

2-1. TCP 통신

Transmission Control Protocol, 전송제어 프로토콜로 인터넷을 구성하는 핵심 프로토콜입니다.

위 전송계층 중, Transport layer에서 가장 많이 활용하는 통신규약은 TCP(&UDP)입니다.

IP통신의 상위 단계이며, 신뢰성을 기반으로 데이터를 에러없이 1:1 전송할 수 있는 연결지향(Connection-oriented)방식입니다.

통신하는 패킷(데이터)의 상태정보를 확인하고 유지하며, 경로를 통해 전송할 수 있습니다.

TCP통신을 통해 전달되는 Segment는 TCP HEADER와 Data로 이루어져 있으며, TCP HEADER에는 출발지/목적지 Port, Sequence Number(순서번호, 중복방지), ACK Number(Server의 패킷 인지신호), TCP Control flag(TCP통신의 통신,회선, 제어관리를 위한 신호), checksum(데이터무결성 확인) 등으로 구성되어 있습니다.
(*Segment는 최소 20byte 이상의 크기).

※ UDP : 실시간 스트리밍 서비스에 적합한 통신으로, 신뢰도는 낮지만 데이터 전송속도가 TCP 통신보다 빠른 프로토콜입니다.

2-2. TCP Control flag

TCP통신을 제어할 수 있는 신호이며, 6가지로 구성되어 있습니다.

  • URG : urgent, 긴급데이터로 우선순위를 높여 먼저 통신합니다.

  • ACK : acknowledge, 수신자가 송신자측에서 보내온 패킷을 정상적으로 전달받았음을 알려줍니다.

  • PSH : push, window size(data처리가 가능한 buffer size)를 기반으로 data를 분할하여 보낼 때, 버퍼링 없이 바로 데이터를 전달합니다.

  • RST : reset, 비정상적인 상황을 인지하고 연결을 끊습니다.

  • SYN : synchronize, 가장 많이 활용되는 패킷으로 서로 연결(프로세스 통신)을 하기위해 최초로 connection하는 신호입니다(start packet).

  • FIN : finish, 송신측에서 수신측에 연결을 종료하는 요청입니다. 모든 송수신이 정상적으로 완료되었을 때 요청합니다.

2-3. 3-way handshake : 통신전 연결

통신하기 이전 client와 server 간 연결을 맺기위해 진행하는 송수신이 3번 진행

  1. client가 server에게 연결을 요청하기 위해 최초 SYN 신호와 함께 Sequence number(x) segment를 전달합니다.

  2. server는 client에게 데이터를 전달받기위해 listening 상태입니다. 이때 client에게 연결요청을 받고, 연결을 승낙하기위해 SYN ACK 신호(x+1)와 sequence number(y)를 전달합니다.

  3. client는 ACK신호를 받고 ESTABLISHED 상태가 되어 연결이 이루어집니다. 이때 ACK(y+1) 신호를 전달하면서 server도 ESTABLISHED 상태가 됩니다.

※ 수없이 많은 segment들이 통신하면서 생기는 누락 및 중복을 방지하기 위해 sequence number(식별자)를 포함하여 전송합니다.

2-4. 4-way handshake : 통신후 종료

연결이 종료되는 시점에서 client와 server 간 진행하는 송수신이 4번 진행

  1. client 측에서 FIN신호를 보내어, 연결종료 요청을 합니다. 이후 client는 server가 연결종료를 승낙할 때까지 대기하는 FIN_WAIT 상태가 됩니다.

  2. server는 CLOSE_WAIT 상태에서 연결종료를 승낙하기 위한 ACK 신호를 client에게 전달합니다.

  3. client는 ACK신호를 받은 후 FIN_WAIT_2 상태가 되며, 이때 server 측은 LAST_ACK 상태에서 최종 연결종료 통보인 FIN 신호를 전달합니다.

  4. FIN신호를 전달받은 client는 TIME_WAIT 상태로 전환되어 일정시간 이후 연결을 종료합니다.
    이 시점에서 ACK신호를 server에게 보내고, server는 CLOSED 상태가 되어 두 client와 server 간 연결이 완전히 종료됩니다.

2-5. Additional

TCP는 연결지향 프로토콜이기 때문에, 두 호스트가 통신하기 전에 연결관계를 먼저 수립해야 합니다.

이 연결관계를 수립하기 위해 client와 server 사이에서 진행하는 선행과정을 3-way handshake라 합니다.

3-way handshake를 통해 연결을 구현할 수 있는 권리가 client, server에게 모두 있었다면, 4-way handshake는 server에게 있습니다(client가 종료를 결정할 때까지 client는 대기).

0개의 댓글