앞선 게시물들은 네트워크 엔지니어들이 일을 하는 영역이고 여기부터는 개발자들이 실질적으로 보는 내용이니 더 중요하게 보도록 하자.
컴퓨터간 소통을 위해서 정보를 보내는 컴퓨터와 받는 컴퓨터가 같은 방법을 사용해야 하는데 이를 프로토콜이라고 한다.
앞에서 봤던 ARP, PPP, IP 등등은 모두 프로토콜이다.
다양한 프로토콜들을 구분하기 위해 포트를 가상으로 생성을 한다. 그림의 빨간색 부분이 포트이다.
추가적으로 알아두자면, IP 주소 + 포트를 합쳐 소켓이라고 부른다.
지금까지 인터넷 프로토콜들을 알아보았다. 이러한 인터넷 프로토콜에는 단점이 있는데
등이 있다.
이러한 단점들을 보완하기 위해 나온 프로토콜이 TCP이다.
TCP는 어플리케이션 소통이 끝날때까지 커넥션(연결)이 꺼지지 않고 데이터가 잘 전달되었는지 확인하며 제대로 전달되지 않았으면 다시 보낸다는 특징이 있다.
TCP 세그먼트(TCP를 사용하여 전달되는 데이터 조각)은 다음과 같이 구성된다.
이 TCP 세그먼트는 이러한 구성을 가진다.
클라이언트에서 SYN Flag와 함께 Sequence number(시작하는 숫자 0)를 보내주고 그걸 받은 서버는 ACK(다음 Sequence number로 예상되는 숫자 1)와 SYN flag로 동기화 되었음을 알려준다. 그 후, 클라이언트는 ACK 응답(서버와 동기화가 되었으니 1일것이다)을 보내면서 전에 받은 Sequence number(1)을 보낸다.
위 과정(Three Way Handshake)은 데이터가 아무것도 존재하지 않는다. 이러한 3가지 과정을 거쳐서 TCP가 연결된다.
서버에서 1이라는 Sequence number와 함께 22바이트의 데이터를 클라이언트에 보낸다. 그 후, 클라이언트는 1+22(데이터 바이트 수)인 23이라는 ACK 숫자를 서버로 보내고 TCP 연결을 종료하게 된다.
서버에서 연결을 종료시키기 위해 FIN(Final) flag를 전에 받은 Sequence number(23)과 함께 보낸다.
클라이언트는 잘 받았다는 ACK 메세지와 함께 다음에 오길 바라는 Sequence number는 24다 라고 보낸다.
하지만 서버에서 응답이 없기에 클라이언트도 FIN flag와 함께 Sequence number 1을 보낸다. 여기서 1인 이유는 맨 처음에 TCP 연결 과정에서 클라이언트가 Sequence number 1이라고 마지막에 보냈는데 데이터가 전송되지 않았기에 지금 그대로 1을 보내는 것이다.
마지막으로 서버에서 다음으로 기대되는 숫자는 2라고 보내지만 응답이 없고 종료되게 된다.
동영상이나 웹 스트리밍을 할 때 주로 사용한다. UDP는 데이터가 잘 전달되었는지 확인하지 않는다는 특징이 있다. 그렇기에 TCP보다 빠르고 가볍다. (TCP 헤더 = 20byte, UDP 헤더 = 8byte)