본문 바로가기

OSI Model

13. TCP에 대한 첫번째 (4계층 Transport Layer전송 계층)

(4계층 Transport Layer전송 계층)



TCP(Transmission Control Protocol)

프로토콜중 하나인 TCP(Transmission Control Protocol)는 주소를 가지고 있으며 이를 포트(port)라고 한다. MAC 주소가 네트워크 카드의 고유 식별자이고 IP가 시스템의 주소라면, 포트는 시스템에 도착한 후 패킷이 찾아갈 응용 프로그램과 통하는 통로 번호라 생각할 수 있다.

 

시스템에서 구동되는 응용 프로그램들은 네트워킹을 하기 위해 자신에게 해당되는 패킷을 식별할 필요가 있는데, 이때 사용하는 것이 포트이다. 포트는 0번부터 65,535(216)번까지 존재하며, IP나 MAC 주소처럼 출발지와 목적지의 응용 프로그램별 포트 번호를 가지고 통신을 한다.

 

패킷구조

 

0번부터 1,023번까지의 1,024개의 포트를 '잘 알려진 포트(Well Known port)'라고 부른다. 보통 0번은 사용하지 않으며, 1023번 포트까지는 대부분 고유의 사용 용도가 있다.

 

 

이것은 대부분 목적지 포트이다

출발지 포트는 보통 1,025번부터 65,535번 사이의 포트 중에서 사용하지 않는 임의의 포트를 응용 프로그램별로 할당하여 사용한다.

 

클라이언트가 인터넷에 존재하는 웹 서버에 접속한다고 가정하면, 웹 서버의 서비스 포트는 보통 80번이다

 

출발지 포트는 시스템에서 임의로 정해지게 되므로 알 수가 없지만 만약 3,000번대의 임의 포트가 할당된다고 가정한다면

 

*TCP에서 연결 설정 과정

1단계 : 두 시스템이 통신을 하기 전에, 클라이언트는 포트가 닫힌 Closed 상태, 서버는 해당 포트로 항상 서비스를 제공할 수 있는 Listen 상태이다.

 

2단계 : 처음 클라이언트가 통신을 하고자 하면, 임의의 포트 번호가 클라이언트 프로그램에 할당되고 클라이언트는 서버에 연결하고 싶다는 의사 표시로 SYN Sent 상태가 된다.

 

3 단계 : 클라이언트의 연결 요청을 받은 서버는 SYN Received 상태가 되고 클라이언트에게 연결을 해도 좋다는 의미로 SYN(SYNSynchronize) + ACK(Acknowledge)패킷을 보낸다.

 

4단계 : 마지막으로 클라이언트는 연결을 요청한 것에 대한 서버의 응답을 확인했다는 표시로 ACK 패킷을 서버에 보낸다.

 

 

3 handshake 개념

3-웨이 핸드셰이킹은 주로 전화를 받는 과정에 많이 비유한다. 전화 통화에서 서로를 확인하는 절차와 유사하기 때문이다.

1단계 : 전화가 끊겨진 상태이다.

2단계 : 수화기를 들고 전화번호를 누른다. "여보세요. 저는 철수인데요. 거기 영희 있어요?"가 SYN 패킷이다. 하지만 요즘은 휴대폰의 발신자 표시를 통해 철수가 전화를 걸어온 것을 영희가 알 수 있으므로 발신자 표시를 SYN 패킷으로 볼 수 있다.

3단계 : 과거에는 "철수니(ACK)? 나 영희야(SYN)."가 SYN+ACK 패킷이었겠지만, 발신자 표시 기능이 있는 현재에는 2단계의 발신자 표시를 보고 사용자가 스스로 인지하는 과정에서 통화 버튼을 누르는 동작 자체가 ACK패킷이 되고, "나 영희야"가 SYN 패킷이 된다. 즉 3단계는 SYN+ACK 패킷이다.

4단계 : SYN+ACK 패킷을 받고 철수가 "응, 그래."하는 단계가 ACK 패킷이다. 이 단계가 끝난 뒤 이야기를 시작한다.

3 handshake은 연결 지향형(Connection Oriented) 프로토콜인 TCP를 이해하는 데 가장 기본적인 개념이다.

 

 

-TCP에서 연결 해제 과정

연결 해제 과정은 4 handshake로 연결을 끊는다

1단계 : 통신을 하는 중에는 클라이언트와 서버 모두 Established 상태이다.

2 단계 : 통신을 끊고자 하는 클라이언트가 서버에 FIN(Finish)패킷을 보낸다. 이때 클라이언트는 Close Wait 상태가 된다(철수가 "영희야 잘자."하는 과정)

3단계 : 서버는 클라이언트의 연결 종료 요청을 확인하고 클라이언트에게 응답으로 ACK 패킷을 보낸다. 서버도 클라이언트의 연결을 종료하겠다는 의미로 FIN 패킷을 보내고 Close Wait 상태가 된다(영희가 "응, 철수야 너도 잘자"하는 과정)

4단계 : 마지막으로 클라이언트는 연결 종료를 요청한 것에 대한 서버의 응답을 확인했다는 의미로 ACK 패킷을 서버에 보낸다(철수가 "응."하고 전화를 끊는 과정)

 

좀더 자세한 설명링크(TCP에 대한 두번째)

https://leejoongwon.blogspot.com/2019/06/14-tcp-2-4-transport-layer.html