본문 바로가기
Network

Network 기초 2

by 뇌 속의 통 2024. 11. 17.

IP주소의 할당

앞서 우리는 MAC주소 대신 IP 주소를 이용하여 WAN에서 정보를 전달할 주소를 찾는다고 했었다.

그렇다면 IP주소는 누가 어떻게 할당을 해주는가?

 

IP 주소는 기본적으로 자동할당(DHCP), 수동할당(Static) 두가지중 하나로 할당된다.

 

DHCP(Dynamic Host Configuration Protocol) : IP주소가 자동으로 할당되며, DHCP Server를 가지고 있는 Device를 연결하면 자동으로 IP주소를 할당받는다. DHCP Server를 가지고 있는 기기는 대표적으로 공유기가 있다.

 

Static : 사람이 직접 할당한 IP 주소

Router의 IP 주소는 Static. Router의 IP 주소가 정해져 있어야 한다. 그래야 이 IP 주소를 이용하여 접근이 가능하기 때문이다.

 

DHCP Protocol

  1. 연결을 원하는 Device에서 DHCP Discover Message를 보낸다. DHCP Server가 있는지 확인. Ethernet Frame으로 전달하며 전달 시 Broadcasting MAC 주소를 이용하여 전달한다.
  2. 전달 받은 DHCP 기기는 DHCP Offer Message를 회신한다. 사용 가능한 IP 주소를 안내. 이때 마찬가지로 Broadcasting MAC 주소로 모든 기기에게 전달한다.
  3. DHCP Request 전달. 전달 받은 IP 주소를 사용하겠다고 DHCP Server의 기기에게 전달한다.
  4. DHCP Acknowledgment : 안내한 IP 주소를 사용하기 위한 정보들을 전달(IP 주소, Subnetmask, Defalt Gateway, Lease Time(사용 가능한 시간))
  5. 해당 IP 주소를 이용하여 Packet 전송 및 수신.

 

DHCP Message의 구조

Ethernet Frame( IP Packet ( UDP Segment ( DHCP Message ) ) ) )

 

Protocol And Port

Protocol : 컴퓨터 간 소통을 위해 정보를 보내는 컴퓨터와 받는 컴퓨터가 같은 방법을 사용해야 하는데 이 방법을 일컫는다. ARP, PPP 등 Frame도 Protocol의 일종이다.

 

Port : 논리적 접속 위치

여러 기기가 한 기기와 각기 다른 Protocol을 이용하여 통신하려고 하는 경우.

어떤 기기가 어떤 Protocol을 이용하여 소통하려고 하는지 알기 어렵다.

 

구별하기 위하여 사용하는 것이 바로 Port다.

가상으로 Port를 생성하여 해당 Protocol은 해당 Port를 통해서 통신한다.

HTTP Port, SSH Port, FTP Port 등등

 

Port는 실제로 존재하는 것이 아니라 가상으로 우리가 생성해서 Protocol을 구별하는데 사용한다.

 

IP 주소Port를 합친 것을 Socket이라고 한다.

183.25.100.15 : 80 → Socket

 

그리고 이렇게 생성된 Socket을 통해 기기 간의 통신이 이루어지게 된다.

 

자주 사용되는 Protocol과 Port

Port Number Protocol 용도
20 FTP 데이터 전송
22 SSH Secure Shall
22 SFTP 데이터 전송
25 SMTP 이메일 전송
53 DNS Domain Name System
80 HTTP Web Page 전송
443 HTTPS Web Page 전송

 

Port Numbers에 따라 Protocol이 나누어져 있는데 0 ~ 1023까지는 잘 알려진 Protocol(Well Known Ports), 1024 ~ 49151은 잘 알려지지 않았지만 등록된 Protocol(Registered Ports), 49152 ~ 65535 누구나 사용 가능한 Port(Dynamic Port)로 사용된다.

 

Steam 기반의 게임에서는 주로 27015를 TCP, UDP Protocol로 사용한다.

 

Transport Layer Protocol

 

1. Transmission Control Protocol (TCP)

IP Packet과 같은 Internet Protocol은 데이터 전달이 제대로 안 이뤄질 수 있고, Routing 과정에서 Packet이 버려질 수 있는 단점들을 가지고 있다. Data를 보내기만 하고 전달 여부를 확인하지 않아서 그렇다.

 

이를 보완하기 위한 것이 TCP다. 어플리케이션 소통이 끝날때까지 Connection을 끊지 않는다.(Connection-Oriented)

즉, Socket이 계속 연결되어 있는 것이다.

 

그리고 Data가 잘 전달되었는지 확인하고 잘 전달되지 않았다면 다시 전송한다.

Frame 안의 IP Packet 안에 TCP Segment 넣어서 전송한다.

 

IP Packet의 Protocol Number는 6(TCP)

 

TCP Segment

 

Source Port : Data를 전송하는 컴퓨터의 Port Number

Destination Port : Data를 수신하는 컴퓨터의 Port Number

Sequence Number : Data를 어디까지 전송했는지 나타내는 Number

너무 커서 쪼개서 전송하는 경우 이 순서에 맞춰서 다시 합친다.

IP Packet의 Fragment Offset을 생각하면 된다.

Acknowledgment Number : 기대하고 있는 Sequence Number가 무엇인지 기재하는 것

CheckSum : 앞의 Header들이 잘 전달되었는지 Checking하는 Pattern.

Window : Data의 Size를 맞추는 값.

Data를 보내고 나서 더 큰 Data를 보내도 괜찮다고 판단된다면 이 값이 커진다.

Data : 실제로 보낼 Data.

 

TCP 연결(Three Way Handshake)

총 세 번에 걸쳐 Segment를 주고 받는다.

 

1) SYN(Synchronize) Flags가 들어간 TCP Segment을 만들어 Client가 Server로 전송한다.

 - Server로 전달 시에 Sequence Number는 0이다. 정상적으로 전달되었다면 Server에서 Client로 다시 Segment가 올텐데, 이 Segment의 Sequence Number는 0일 것이다. 답장을 0의 값으로 기대하고 있기 때문에 Acknowledgment Number는 0로 기재하여 Client가 Server에게 전달한다.

 

2) 전송 받은 Server는 잘 받았다고 SYN Flags가 들어간 TCP Segment를 Client에게 전송한다.

 -  Server가 Client에게 답장을 보낼때 Sequence Number는 0이다. 그리고 이제 답장 올 Sequence Number는 1일 것이라 기대하므로 ACK(Acknowledgment Number : 1)를 넣는다.

 

3) 그리고 상호 연결(SYN)이 잘 되었음을 최종적으로 확인한 Client는 Server의 SYN에 대한 답장으로 Sequence Number : 1, ACK도 1을 갖는 Segment를 전송하게 된다.

 

 * Data 전송

연결이 되면 이제 Server에서 Data를 전송한다.

Client가 기대하는 Sequence 값이 1이므로, Server에서 보내는 Segment의 Sequence Number는 1이다.

 

Clinet는 Server에서 준 Data를 받고 잘 받았다는 뜻으로 Server에게 Segment를 보낸다.

이때 Acknowledgment Number는 전달 받은 Data의 Byte를 더한 값으로 기재한다.

(예를 들어 Data의 Byte가 22인 경우 22 + 1)

 

 * TCP 연결 종료

Server에서 FIN(Finish)의 Flags를 갖는 Segment를 Client에게 전달한다. ACK는 직전 Client가 기대하던 값인 23을 넣는다. Client는 잘 받았다는 뜻으로 Segment를 다시 Server에게 전송한다. 이때 ACK는 24.

 

Server는 이미 종료 안내를 했기 때문에 회신이 없고, Client는 FIN Flags가 담긴 Segment를 마지막으로 한번 더 전송한다.

이때 Sequence Number는 1이다. 왜냐하면 초반에 연결 시 Server에서 기대하는 Sequence Number가 1이었기 때문.

(중간에 Client가 Server로 Segment를 보내면서 Sequence Number를 1로 설정하긴 했지만, Count가 변경되지 않은 이유는 그때 Data를 보내지 않아서 그렇다.)

 

그리고 이를 전달 받은 Server는 최종적으로 끝났음을 인지하고 마지막으로 Client에게 ACK 2인 Segment를 전송한다.

 

2. User Datagram Protocol(UDP)

동영상이나 Web Streaming을 할때 주로 사용. Connectionless. 어플리케이션 소통이 안전하지 않다.

TCP와 달리 Data가 잘 전달되었는지 확인하지 않기 때문에 일방적인 Data 전송만 있다.

 

대신, TCP Header(20Byte)에 비해 매우 가벼우며(8Byte), Data 전달 여부를 확인하지 않아서 매우 빠르다.

 

UDP Segment

 

 

 

 

'Network' 카테고리의 다른 글

Network 기초  (1) 2024.11.09
C언어로 서버 만들기  (3) 2024.11.08