수업/Network Programming

[Network Programming] TCP/IP

hw-ani 2023. 5. 22. 22:05

Addressing

Logical address = IP address / Physical address = MAC address

 

(위 그림은 TCP/IP model 이다. 원래는 4계층으로 나뉘었는데, 요즘 저렇게 5계층으로 나누기도 한다고 함.)

각 계층마다 사용하는 address의 종류가 다르다. 예를들어 Data link layer에선 같은 Network 내 통신을 위해 랜 카드에 부여된 주소인 Mac address를 사용한다.

 

 

 

IP Address Classes

 

IP Address의 앞부분은 어떤 네트워크인지 나타내는데 쓰이고, 뒷부분은 해당 네트워크 내의 어떤 host인지 나타내는데 쓰일 수 있다. 그 영역의 크기에 따라 Class A/B/C로 구분한다. Class A의 네트워크가 가장 많은 host를 보유할 수 있다. 교수님께서 말씀하시길 경북대는 Class B라고 하셨다.

하지만 이런 방식은 공간 낭비와 유연성 부족이라는 문제가 있어서 요즘엔 이런 Class 구분 없는 Classless를 사용한다. classless 방식에선 어디까지가 network ID인지 나타내기위해 서브넷 마스크(subnet mask)라는 것 사용한다.

Multicast address인 Class D는 할당하는게 아니라 잠깐 쓰는 용도이다.

 

Class A/B/C의 첫번째 바이트에는 제한이 걸려 있어서, 특정 IP 주소의 첫번째 바이트만 보고도 해당 IP 주소가 어떤 class에 속하는지 알 수 있다.
Class A의 첫번째 바이트에는 0이상 127이하, Class B의 첫번째 바이트에는 128이상 191이하, Class C의 첫번째 바이트에는 192이상 223이하의 값이 올 수 있다.
즉, 첫번째 비트가 0으로 시작하면 Class A이고, 10으로 시작하면 Class B, 110으로 시작하면 Class C이다.

 

 

 

Special IP Addresses

Loopback(lo) address : 127.X.Y.Z  (system 내에서 테스트 위해 사용)

Local broadcast address : 255.255.255.255

Directed boradcast address : (ex)155.230.255.255 (network ID + 255)

Multicast Address : 224.X.Y.Z ~ 239.X.Y.Z  -> multicast group에 dynamically assigned된다.

 

 

 


IP Datagram(IP Packet)의 구조

: IP에서 사용하는 패킷을 IP Datagram이라고 한다. 혹은 IP Packet.

 

 

TTL이나 protocol, IP 주소 정도 포함된다고만 일단 알고 있으면 될 듯..

protocol에는 어떤 종류의 protocol을 사용하는지에 대한 정보가 있다. 예를들어 ICMP면 1, IGMP면 2, TCP면 6, UDP면 17, IPv6면 41, ...

 

 

 

대부분 ARP는 Datalink 계층으로 보는 것 같긴하다.

 

 

ICMP (Internet Control Message Protocol)

: IP 패킷 처리시 발생하는 문제를 진단하거나 알리는 등 추가 역할을 위해 IP(Internet Protocol)와 함께 쓰이는 protocol이다.

 

 

IGMP (Internet Group Management Protocol)

: Multicasting을 위한 protocol이다.

 

 

ARP & RARP

ARP는 Datalink 계층으로 보는게 대부분인 것 같긴한데,,, 일단 뭔지 보자면 이럼

 

ARP는 IP address를 이용해 MAC address를 가져오기 위해서 사용한다. Broadcast로 요청함.

 

 

IPv6

IPv4 주소는 32비트(4바이트)지만, IPv6 주소는 128비트(16바이트)이다.
주로 IPv4 address는 10진수로 나타내고, IPv6 address는 16진수로 나타낸다.

 

 

 


Transport Layer

 

Network Layer의 IP는 host간 통신을 지원한다. by IP address

Transport Layer의 TCP/UDP는 Transport Layer로 Process간 통신을 지원한다. by Port number

 

Process간 통신을 위해 Port 번호를 이용하는데, 0~65,353(2^16 - 1) 범위의 값을 사용한다.

0~1,023 : Well-known port로 IANA(Internet Assigned Numbers Authority)가 할당하고 관리한다.

1,024~49,151 : 할당된건 아닌데, IANA에 등록은 돼있는 Registered port이다.

49,152~65,535 : Dynamic port로 Ephemeral port 라고도 하며 말 그대로 별도로 지정된게 아니라 그냥 임시로 잠깐 사용하는 port 인 듯!

 

 

 

TCP (Transmission Control Protocol)

Segment 구조(TCP)

 

UDP보다 복잡하며 Reliable process-to-process communication을 지원한다.

1. Flow control : receiver buffer 기반의 overflow를 피한다. (Window size 값 이용)

2. Error control : ACK & Retransmission

3. Congestion control : network 기반의 overflow를 피한다.

이를 위해 Three-way handshaking으로 connection을 설립하고, Four-way handshaking으로 connection을 종료한다.

 

 

각 Control Flags의 의미

 

ACK, SYN, FIN가 어떻게 쓰이는지 간단하게 보자.

 

좌측은 connection을 만들기 위한 three-way handshaking의 예시이고, 우측은 connection을 종료하기 위한 four-way handshaking의 예시이다.

SYN으로 연결 요청을 보내면, ACK는 알겠다는 대답의 의미이다. FIN은 연결 종료 요청이다.

 

Q. 왜 종료할 땐 ACK와 FIN을 동시에 안 보내나?

A. 기술적으로 둘을 한 패킷에 한번에 보내는건 어려운 일이 아니다. 하지만 TCP protocol에선 둘을 따로 보내도록 한다. 그렇게 함으로써 Asynchronous termination이 가능하다. 연결할 땐 양쪽이 한번에 동의해서 성립하지만, 종료할 땐 먼저 한쪽만 보내는 것을 종료할 수도 있다. "연결"과 "종료"의 다른 점은, 종료는 한쪽이 더 이상 상대에게 보낼게 없다면 종료 요청을 보낸다는 것이다. 이때 반대편은 아직 보내야할게 남아있을 수 있다. 연결은 둘이 동시에 동의해서 이루어지지만, 종료는 한쪽이 종료 요청을 보내고 나머지 한쪽도 종료 요청을 보내야 완전히 끝나는 것이다. 따라서 일단 종료 요청을 다 받았다는 신호인 ACK를 보내고, 본인도 보낼게 없다면 따로 FIN을 보내주도록 한 것이다.

 

 

 

UDP (User Datagram Protocol)

Datagram 구조(UDP)

 

TCP에 비하면 크게 복잡한건 없다. 그냥 잘 갔는지 확인도 안하고 도착지로 무조건 쏘는거라서, 출발/도착 port 번호 정도 잘 기술해주면 된다.

 

 

 

SCTP (Stream Control Transmission Protocol)

UDP와 TCP의 장점만 따와서 만든 protocol이다.

요즘은 뭐 망이 좋아서 에러가 잘 안생기기도 하고, 실시간 서비스는 신뢰성보다 속도가 중요한 경우가 많기때문에 TCP보단 UDP를 주로 쓴다.