TCP/IP란?
TCP(Transmission Control Protocol)는 네트워크 상 두 호스트의 연결 지향 통신을 위한 프토토콜이다. OSI 7 계층 중 4계층에 속한다. 여기서 연결 지향이란, 말 그대로 서로의 통신 연결이 유지되는 것을 지향하는 프로토콜을 이야기한다. (이에 반대되는 비 연결 지향 프로토콜으로 UDP가 존재한다) TCP는 연결 지향 프로토콜이기때문에 두 호스트 간의 데이터를 신뢰성 있게 전달할 수 있다.
네트워크망 속에서 호스트 간의 통신을 위한 데이터는 엄청나게 많은 노드를 거쳐가게 된다. 이러한 과정 속에서 먼저 전송한 데이터가 나중에 전달되거나, 데이터가 중간에 유실되는 등 다양한 문제가 발생할 수 있다. IP는 패킷이 제대로 전달되었는지를 확인하지 않기 때문에 IP 위에서 동작하는 TCP는 흐름제어, 오류제어, 혼잡제어를 통해 이러한 문제들을 해결하고 신뢰할 수 있는 통신을 가능하게 해준다. 이렇게 TCP와 IP를 함께 사용하는 구조를 TCP/IP 라고 부른다.
TCP/IP 모델
이전에 OSI 7 계층에 대하여 공부하면서 글을 작성했었는데, 사실 현대의 인터넷은 TCP/IP 모델을 따르고 있다고 한다. 이는 OSI 7 계층 모델이 TCP/IP 모델과의 경쟁에서 졌기 때문이라고 한다.
또한 처음에 나온 TCP/IP 모델은 OSI 7 계층 모델에서 1,2 계층을 Link(Network Access)계층, 5,6,7계층을 Application 계층으로 합쳐 총 4계층 모델이었다고 한다. 그러나 시간이 지남에 따라 TCP/IP 모델은 기존 Link 계층에서 다시 Data Link와 Physical 계층으로 나뉘어졌다고 한다.
TCP 3-way-handshaking
TCP는 연결 지향 프로토콜이기 때문에 데이터 통신을 하기 전에 서로 연결되었음을 확인해야 한다. 여기서 주의할 점은 TCP에서의 연결은 물리적 연결이 아닌 개념적, 논리적인 연결이다. TCP에서 handshaking을 했다고 해도 실제로 전선이 두 컴퓨터를 연결해놓은것은 아니기 때문이다. 어쨌든 이를 통해 두 호스트는 서로 데이터를 전송할 준비가 되었다는 것을 보장한다.
먼저 클라이언트에서 서버에 SYN 요청을 보낸다. 여기서 SYN은 Syncronize Sequence Number의 준말이다. SYN과 함께 임의의 Sequence Number를 서버로 보내게 된다. 여기서 보내는 Sequence Number는 클라이언트의 것이다.
클라이언트가 SYN 요청을 보낸 뒤 SYN-SENT 상태가 된다.
서버에서는 해당 SYN 요청을 받은 뒤 SYN-RECEIVED 상태가 된다. 그리고 SYN을 잘 받았다는 의미인 ACK(acknowledgment) 와 함께 자신(서버)의 Sequence Number를 SYN으로 보낸다. 여기서 ACK에는 SYN으로 받았던 Sequence Number에 1을 더한 값을 싣는다.
클라이언트에서는 해당 SYN+ACK 패킷을 수신하면 연결이 성립되었다는 의미인 ESTABLISHED 상태가 된다.
마지막으로 클라이언트에서 서버의 SYN을 잘 받았다는 의미의 ACK 요청을 전송하게 된다. 여기서 ACK또한 서버에서 전송한 Sequence Number에 1을 더한 값을 싣게 된다. 이제 서버도 해당 요청을 수신하면 ESTABLISHED 상태가 되면서 연결이 성립된다.
참고자료
https://www.youtube.com/watch?v=1pfTxp25MA8
https://www.hostingadvice.com/blog/tcpip-make-internet-work/
'Study > OS & Network' 카테고리의 다른 글
[OS] 뮤텍스와 세마포어 (0) | 2021.12.23 |
---|---|
[Network] 대칭/비대칭 암호화와 HTTPS (0) | 2021.12.11 |
[OS] (멀티)프로세스와 (멀티)스레드, 그리고 동시성 (0) | 2021.12.10 |
[Network] OSI 7계층 (0) | 2021.12.08 |
댓글