Transport Layer Protocols, TCP

Joohyung Park·2024년 1월 28일
0

네트워크

목록 보기
4/5

앞선 게시물들은 네트워크 엔지니어들이 일을 하는 영역이고 여기부터는 개발자들이 실질적으로 보는 내용이니 더 중요하게 보도록 하자.

Protocol

컴퓨터간 소통을 위해서 정보를 보내는 컴퓨터와 받는 컴퓨터가 같은 방법을 사용해야 하는데 이를 프로토콜이라고 한다.

앞에서 봤던 ARP, PPP, IP 등등은 모두 프로토콜이다.

Port

다양한 프로토콜들을 구분하기 위해 포트를 가상으로 생성을 한다. 그림의 빨간색 부분이 포트이다.

추가적으로 알아두자면, IP 주소 + 포트를 합쳐 소켓이라고 부른다.

자주 쓰이는 프로토콜

자주 쓰이는 포트

TCP(Transmission Control Protocol)

지금까지 인터넷 프로토콜들을 알아보았다. 이러한 인터넷 프로토콜에는 단점이 있는데

  1. 데이터 전달이 제대로 안이루어질 가능성
  2. 데이터가 잘 전달되었는지 확인 x
  3. 라우팅 과정에 패킷이 버려지기도 한다.
  4. framing(프레임 씌우기)이 제대로 안 이루어져 데이터 손상 가능성

등이 있다.

이러한 단점들을 보완하기 위해 나온 프로토콜이 TCP이다.

TCP는 어플리케이션 소통이 끝날때까지 커넥션(연결)이 꺼지지 않고 데이터가 잘 전달되었는지 확인하며 제대로 전달되지 않았으면 다시 보낸다는 특징이 있다.

TCP 세그먼트(TCP를 사용하여 전달되는 데이터 조각)은 다음과 같이 구성된다.

이 TCP 세그먼트는 이러한 구성을 가진다.

  • 소스 포트 : 데이터를 전송하는 컴퓨터의 포트
  • 목적지 포트 : 데이터를 보내는 컴퓨터(도착지)의 포트
  • 시퀀스 넘버 : 데이터를 어디까지 전송했는지를 나타냄
  • Acknowledgment 넘버 : 시퀀스 넘버를 받고 난 다음에 기대하고 있는 시퀀스 넘버가 무엇인지
  • Checksum : 제대로 전달이 되었는지 체크
  • Window : 보내는 컴퓨터와 받는 컴퓨터 간의 데이터 사이즈를 얼마로 해서 보낼지 맞추는 부분
  • Data : 보내고 싶은 메세지

자세한 TCP 통신 과정

  1. TCP 연결하기

클라이언트에서 SYN Flag와 함께 Sequence number(시작하는 숫자 0)를 보내주고 그걸 받은 서버는 ACK(다음 Sequence number로 예상되는 숫자 1)와 SYN flag로 동기화 되었음을 알려준다. 그 후, 클라이언트는 ACK 응답(서버와 동기화가 되었으니 1일것이다)을 보내면서 전에 받은 Sequence number(1)을 보낸다.

위 과정(Three Way Handshake)은 데이터가 아무것도 존재하지 않는다. 이러한 3가지 과정을 거쳐서 TCP가 연결된다.

  1. 데이터 전송하기

서버에서 1이라는 Sequence number와 함께 22바이트의 데이터를 클라이언트에 보낸다. 그 후, 클라이언트는 1+22(데이터 바이트 수)인 23이라는 ACK 숫자를 서버로 보내고 TCP 연결을 종료하게 된다.

  1. TCP 연결 종료시키기

서버에서 연결을 종료시키기 위해 FIN(Final) flag를 전에 받은 Sequence number(23)과 함께 보낸다.

클라이언트는 잘 받았다는 ACK 메세지와 함께 다음에 오길 바라는 Sequence number는 24다 라고 보낸다.

하지만 서버에서 응답이 없기에 클라이언트도 FIN flag와 함께 Sequence number 1을 보낸다. 여기서 1인 이유는 맨 처음에 TCP 연결 과정에서 클라이언트가 Sequence number 1이라고 마지막에 보냈는데 데이터가 전송되지 않았기에 지금 그대로 1을 보내는 것이다.

마지막으로 서버에서 다음으로 기대되는 숫자는 2라고 보내지만 응답이 없고 종료되게 된다.

UserDatagram Protocol

동영상이나 웹 스트리밍을 할 때 주로 사용한다. UDP는 데이터가 잘 전달되었는지 확인하지 않는다는 특징이 있다. 그렇기에 TCP보다 빠르고 가볍다. (TCP 헤더 = 20byte, UDP 헤더 = 8byte)


출처

https://www.youtube.com/watch?v=dsoAkoxZ13o&t=5123s

profile
익숙해지기 위해 기록합니다

0개의 댓글