1. TCP란
TCP란 Transmission Control Protocol의 약자로서 애플리케이션 간의 신뢰성 높은 데이터 전송을 하기 위한 프로토콜이다.
2. 데이터 전송 절차 - TCP는 무엇을하고 어떻게 동작을 할까
TCP로 애플리케이션간 데이터 전송을 할 때에는 3가지 단계가 있다.
- TCP 커넥션 맺기
우선 데이터를 송수신하는 애플리키에션 간의 통신이 정상적으로 이루어져 있는지 확인한다.
- 애플리케이션간 데이터 송수신
TCP 를 송신하기 위해서는 어플리케이션의 데이터에 프로토콜 헤더와 TCP헤더를 추가해야 된다. 이렇게 다 추가되어 송신을 할 수 있는 데이터를 세그먼트라고 한다. 만약 세그먼트가 너무 클 것같다 하면 세그먼트를 분할하여 여러개의 세그먼트로 전송한다. 그리고 분할된 세그먼트들은 목적지에서 차례대로 조립한다. 조립을 위한 차례의 정보는 TCP헤더에 기록된다.
또한 데이터가 도착하면 받았다는 확인을 해주고, 만약 전송이 제대로 되지 않았다면 데이터를 재전송한다. 또 네트워크가 혼잡하면 데이터의 전송속도를 제한하기도 한다.
- TCP 커넥션 끊기
이렇게 전송까지 다 하면 TCP의 커넥션을 끊는다.
3. TCP 헤더
데이터 + TCP헤더 = TCP 세그먼트이다. 그럼 TCP 헤더는 무엇이고 어떻게 생겼을까. 간단히 살펴보자
가장 중요한것은 포트번호이다. 포트번호로 전송을 하는 두 애플리케이션 간의 주소를 알고 데이터를 전달, 배분하기 때문이다. 위의 그림에서는 Source Port 와 Destination Port가 된다.
- sequence Number 와 ACK
신뢰성 높은 데이터 전송을 위해선 Sequence Number 와 ACknowledgment Number 이하 ACK번호라고 하는 것이 있다. 시퀸스 번호는 TCP로 전송하는 데이터의 순서를 나타내는 것이다. 데이터가 너무 커서 데이터를 분할해야되는 경우에 다시 조립을 해야하는데, 그때 시퀸스 번호로 분할의 순서를 알 수 있다. ACK번호 역시 시퀸스 번호의 일종이지만 데이터를 바르게 수신했음을 확인하기 위해 이용한다고 알아두자.
- data Offset
TCP 헤더 크기의 값이다. 최소크기는 20byte이며, 최대값은 60byte이다.
- window size
송신측이 현재 수신하고자 하는 측의 윈도우 크기를 나타내며 기본 단위는 바이트이다. 최대크기는 64byte가 된다. 1Gbps 이상의 속도가 되면 이 값을 크게 변형시켜 사용한다.
- checksum
헤더 및 데이터의 에러 확인을 위해 사용되는 16비트의 존재이다. 송신자측에서 checksum 계산 알고리즘을 사용한 어떤 값을 TCP checksum에 담아 송신을 한다. 그리고 수신자가 데이터를 받을때 동일한 알고리즘으로 수신받은 데이터를 검사하면 전송과 데이터의 오류여부를 판단할 수 있다고 한다.
- urgent point
일반 데이터 내에서 긴급데이터가 시작되는 위치 정보를 가지고 있다.
- options
TCP 헤더의 정보를 좀 더 확장시킬 때 사용한다.
4. UDP란
UDP는 PC나 서버 등에 도달한 데이터를 적절한 애플리케이션에 전달하는 기능만 있는 프로토콜이다. TCP와의 차이점은 TCP와 같은 데이터 무결성 검사같은 확인작업을 하지 않는다는 것이다.
UDP역시 데이터에 UDP헤더를 추가한다. TCP헤더가 붙은 데이터를 세그먼트라는 이름이 있듯이, UDP헤더가 붙은 데이터를 데이터그램이라는 이름으로 부른다.
5.UDP의 특징
그럼 TCP가 있는데 굳이 UDP를 써야되는 이유가 뭘까? UDP는 TCP 보다 데이터 무결성 검사를 하지 않아서 데이터 전송 효율이 좋다. 대신에 그만큼 신뢰성은 떨어진다. UDP에는 크기가 큰 데이터를 분할하는 기능도 없다. 때문에 전송해야 할 애플리케이션의 데이터가 크다면 애플리케이션에서 분할을 제어해야한다.
그럼 굳이 쓸 필요가 있는 프로토콜인가 싶다. 하지만 의외로 쓰인다고 한다. 한 예로 IP전화는 IP전화측에서 데이터를 쪼개고 그걸 UDP로 전송한다고 한다. 데이터의 신뢰성보다도 전달이 더 필요한 분야는 TCP보다 UDP가 더 좋은 선택이 될 수도 있다.
6. TCP/IP 와 DNS
우리는 인터넷 웹사이트를 들어갈때 ip를 입력하는 경우는 거의 없을것이다. 서버는 클라이언트가 이해하고 쓰기 쉬운 호스트명을 사용한다. 호스트명이란, 사용자가 의식할 수 있는 주소이다. tistory.com 과 같은 url이나 메일 주소 등을 예로 들 수 있다.
웹사이트를 접속한다고 가정을 해보자. google.com이라는 url을 통해 구글페이지를 보고싶다. url은 문자일뿐이고, 진짜로 필요한건 google.com 이라는 호스트명을 쓰는 서버의 IP 주소이다. 하지만 우리는 url만 주소창에 치면 구글 페이지를 볼 수 있다.
이는 DNS 때문이다. DNS는 호스트명을 가지고 해당 호스트명에 대한 IP주소를 해석한다. TCP/IP 통신도 IP의 주소가 필요하기 때문에, DNS에 문의하여 전송하려는 측의 IP를 조사한다. 이런 조사의 기능은 윈도우 등의 OS에 내장되어 있고, 이렇게 내장되어 있는 존재를 DNS 리졸버라고 부른다.
참고
그림으로 배우는 네트워크 원리
'웹 > 네트워크 기본' 카테고리의 다른 글
연결 지향 통신이란 무엇일까? TCP 와 connection Oriented (0) | 2023.10.01 |
---|---|
IP란 무엇일까? - IP의 특징(2) (0) | 2022.03.30 |
IP란 무엇일까? - IP의 특징(1) (0) | 2022.03.20 |
네트워크의 구성 (0) | 2022.03.16 |
네트워크란? , 통신의 종류는? (0) | 2022.03.10 |