iamkanguk.dev

[Network] TCP와 UDP 그리고 PORT와 DNS 본문

CS지식/Network

[Network] TCP와 UDP 그리고 PORT와 DNS

iamkanguk 2023. 11. 29. 22:05
해당 포스팅은 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 토대로 작성되었습니다.

개요

이전 포스팅의 IP 프로토콜을 통해 데이터를 전송하는 과정에서는 여러가지 한계점이 있다고 설명했었다. 연결성 보장이 안되고, 패킷 전달에서 순서 문제가 발생할 수도 있었고 심지어 전달 도중 패킷이 손실될 수도 있는 문제점이 있었다.

 

그리고 이런 한계점들을 해결하기 위해 나온 프로토콜이 TCP 프로토콜이라고 마지막에 언급하였다.

 

 

인터넷 프로토콜의 4계층

인터넷 프로토콜의 4계층 사진

 

제일 위에는 HTTP나 FTP등 애플리케이션 측면에서 많이 사용하는 계층이 있고, 그 밑에 TCP와 UDP인 전송 계층이 있으며 아래에는 이전 포스팅에서 설명드렸던 IP 프로토콜인 인터넷 계층이 있고 마지막으로는 랜카드 등을 포함해서 실제 네트워크 랜 드라이버 등을 포함해서 네트워크 인터페이스 계층이 있다.

 

그래서 IP라는 것에서 위에 살짝 TCP라는 걸 올려서 IP의 한계점들을 보완해준다고 생각하면 좋다.

 

 

예를 들어, 채팅 프로그램을 통해서 Hello라는 메세지를 전송하는 상황이 있다고 가정해보자. 채팅 프로그램에서 메세지는 보통 Socket 라이브러리를 통해서 OS 계층으로 전달을 하고, OS계층에서는 전달 받은 Hello라는 메세지에다가 TCP 정보를 씌운다.

 

TCP로 씌워진 메세지에다가 IP정보를 마찬가지로 씌워준다. 그리고 마지막으로 LAN카드를 통해서 물리적인 정보들을 포함해서 인터넷을 통해 또 다른 서버에 전달하게 된다.

 

TCP/IP Packet

 

TCP/IP 패킷에서는 IP에서 제공했었던 출발지와 목적지의 IP주소에 출발지/목적지의 PORT, 전송제어, 순서 등의 정보가 추가로 담겨있다.

그래서 IP에서 가지고 있던 한계점(패킷 전달 순서문제, 검증 등)을 해결할 수 있었던 것이다.

 

물론 이전 포스팅과 마찬가지로 패킷은 이렇게 생기지 않았을 것이다. 더욱 복잡한 구조로 되어있을 것이다!

 

TCP의 특징

- 전송 제어 프로토콜 (Transmission Control Protocol)

- 연결 지향 (3-way handshake) --> 실제로 연결이 되는 것은 아님!

- 데이터 전달 보증

- 순서 보장

- 신뢰할 수 있는 프로토콜 (신뢰성 보장)

- 현재는 90% 이상이 TCP를 사용하고 있다.

 

(1) 3-way handshake

 

3-way handshake는 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고 실제로 데이터 전달이 시작되기 전에 다른 한쪽이 준비되었다는 것을 알 수 있도록 해준다.

 

- Client -> SYN -> Server (전화 들려?) : Client에서 Server에게 접속을 요청하는 SYN(X)을 보낸다. 송신자가 최초로 데이터를 전송할 때 Sequence-Number(X)를 난수로 지정한다.

- Server -> SYN + ACK -> Client (응 난 들려 너는?): Server는 Client로부터 SYN(X)가 들어온 것을 확인하고 요청을 수락한다는 ACK(X+1)과 SYN(Y)을 보내고 Client로부터 ACK이 오기를 기다린다.

- Client -> ACK -> Server (나도 들려! 이제 말할게): Client에서는 Server로부터 SYN(Y) + ACK(X+1)을 받고 Server로 ACK(Y+1)을 보내게 된다.

 

위와 같이 3번의 연결 과정을 통해 서로를 인식하게 되면 그 다음에 데이터를 전송하게 된다. 이렇게 되면 중간에 서버에서 응답이 없으면 연결이 되지 않게 하면서 데이터를 보내지 않게 된다.

 

참고로, 4-way handshake도 있는데 이거는 나중에 한번 쭉 다뤄보도록 하겠다.

 

(2) 데이터 전달 보증

TCP에서는 데이터를 전송하면 서버에서 잘 받았다는 메세지를 전달해준다. ACK이랑 동일하다고 생각하면 된다.

따라서, 전송이 제대로 되지 않았다면 서버에 문제가 있음을 인지할 수 있다.

 

(3) 순서 보장

만약 패킷의 순서가 1,2,3 순서로 보냈는데 받았을 때 1,3,2 순서로 도착했다면 잘못 보내진 2번 패킷부터 다시 보내라고 요청을 한다.

 

UDP (User Datagram Protocol)

- 하얀 도화지에 비유 (기능이 거의 없음)

- TCP 3-way handshake 지원 안함

- 데이터 순서 전달 보증 X

- 순서 보장 X

- 데이터 전달 및 순서가 보장되지는 않지만 단순하고 빠르다.

 

- IP와 거의 동일하다 ( + PORT, CheckSum 정도 추가 )

- 애플리케이션에서 추가 작업이 필요하다.

 

PORT

간단하게 말해서, IP는 아파트 하나의 동이다. PORT는 호수라고 생각하면 아주 편하다.

더샵아파트 192.159.111.1동 8080호!

 

참고로 포트는 번호를 통해 할당이 되는데 0부터 65535까지 할당이 가능하다. 하지만 보통 0번에서 1023번까지는 잘 알려진 포트들이기 때문에 사용하지 않는 것이 좋다.

 

대표적인 포트번호 몇개 언급하자면!

- FTP: 20,21번

- TELNET: 23번

- SSH: 22번

- HTTP: 80번

- HTTPS: 443번

 

DNS (Domain Name System)

DNS를 간단하게 알아보도록 하려고 한다. 물론 더욱 깊게 알면 좋겠지만! 일단은 이정도로만 알아도 괜찮을 것 같다.

 

IP주소는 진짜 기억하기 너무 어렵다. 그리고 IP는 변경될 가능성이 충분하다. 만약에 네이버의 IP가 바뀐다면 지금 우리는 네이버 사이트로 접근할 수 있을까? 그렇지 않다. 네이버한테 물어봐야한다!

 

 

DNS는 전화번호부 같은 서버라고 생각하면 된다. DNS 서버에 도메인을 등록을 할 수 있는데 예를 들어 구글의 주소와 IP를 쌍으로 등록을 해두었다고 하면 클라이언트에서 먼저 DNS로 접근을 해서 도메인이 있는지 확인한다. 있으면 서버를 거치지 않고 바로 DNS 서버에서 응답해서 Google로 접근할 수 있다.

 

그리고 IP주소가 변경된다면 DNS Table에서 수정을 하게 된다면 간단하게 IP주소를 수정할 수 있게 된다.

 


참고자료

- https://dreamcoding.tistory.com/37

 

TCP, UDP 개념

기존의 IP프로토콜을 통해 데이터를 전송하는 과정에서는 몇가지의 문제가 있었습니다. 패킷 전달에서의 순서 문제가 발생한다거나 연결성을 보장할 수 없고 패킷이 소실되어 버리는 등의 문제

dreamcoding.tistory.com