https://www.youtube.com/watch?v=X73Jl2nsqiE&list=PLcXyemr8ZeoSGlzhlw4gmpNGicIL4kMcX&index=4

 

영상에서 다룰 내용

(프로토콜 스펙에서 정의한)

socket

port

tcp Connection

에 대해서 알게된다.

 

 

Network 계층 구조 표현 방식 (OSI 7 Layer, TCP/IP Stack)

OSI 7 Layer는 네트워크 시스템 구성을 위한 범용적이고 개념적인 모델이다.

  • ISO/IEC에서 OSI 모델관리

 

TCP/IP stack은 인터넷이 발명되면서 함께 개발된 프로토콜 스택이다.

  • IETF에서 인터넷 표준을 관리한다.(RFC)
  • TCP, UDP, IP.. 스펙은 RFC에서 정의한다.
  • TCP, UDP 스펙은 TCP/IP stack의 transport Layer.에 속한 프로토콜이다.
  • IP 스펙은 TCP/IP stack의 Internet Layer에 속한 프로토콜이다.

OSI 7 Layer와 TCP/IP stack은 서로 공존하는 개념이기에

TCP, UDP, IP 스펙 및 프로토콜은 은 OSI 7Layer에도 속한다고할 수 있다.

 

 

TCP/IP Stack

4개의 Layer로 나눌 수 있다. 이것을 크게 2가지로 나눠본다. application 과 System으로 나눈다.

최상단의 Application Layer (APPLICATION)

  • 애플리케이션 레벨에서 구현/관리되는 레이어이다.
  • 네트워크 기능을 사용하는데 목적이다.

 

transport layer, internet layer, link layer (SYSTEM)

  • 하드웨어/펌웨어, OS레벨에서 구현/관리
  • 네트워크 기능을 지원하는데 목적이다.

 

Socket(소켓), Port(port), TCP connection에 대해 알아보고자 application 과 System으로 크게 나눈다.

 

TCP/UDP/IP 스펙이 활발하게 개발되던 1970년 ~ 1980 년의 상황을 본다.

 

만약 Application에서 A Process가 실행되고 있다고 가정한다.

A Process는 System의 네트워크 기능을 통해 다른 인터넷의 정보를 받거나 전송하고자 한다.

이떄 A Process는 System과 통신하기 위한 Process와 연결된 data path 혹은 data channel이 필요하다.즉, Port 이다.

 

PORT 개념

process와 연결된 data path 혹은 data channel 이다.

RFC 공식문서를 종합해보면, 해당 당시에 개념은 data path, data channel로 볼 수 있다.

(우리가 일반적으로 Port는 숫자로 알고잇다.)

 

하나의 Application Layer에서 동작하는 여러 종류의 Process는 모두 네트워크 동작이 필요하다.

이떄 각각의 Process는 Port를 통해 통신한다.

한 컴퓨터 시스템 안에서 여러개의 포트가 존재할 수 있기 때문에, 이 Port를 어떻게 Unique하게 식별할것인가?

보통 Port name을 통해 식별한다. 그런데, 각각의 포트에 대해서 어떻게 지정할지는 각 OS, 시스템마다 방법이 다르다.

지금은 Process 하나에 port한개를 연결시켰지만, Process 하나에 2개의 Port 이상이 연결될 수도 있다. (설명을 위해 간단하게 Process 1개에 Port 1개로 가정한다.)

 

프로세스 간의 통신과 인터넷 프로토콜

1970년 ~1980년대로 돌아가 TCP/UDP/ IP 프로토콜에 대해 알아보자.

컴퓨터 A와 컴퓨터 B가 서로 통신하려고한다.

Internet Protocol 을 통해 최적의 경로로 컴퓨터 A와 컴퓨터 B가 통신한다.

internet protocol은 Unreliable, 신뢰할 수 없는( data loss, out-of-order) 프로토콜이다.

하나의 Host에서 다른 Host로 보낼때 Internet은 안전성을 보장할 수 없고, 순서대로 받는것을 보장할 수 없다.

Internet Protocol은 기본적으로 신뢰할 수 없다.

 

어떤 부분이 중요해지냐는, 정확하게 데이터를 받는것이 중요해진다.

프로세스 간의 통신에서는 데이터를 안정적(reliable)으로 주고받을 수 있는 프로토콜이 필요하다.

TCP(transmission control Protocol) 이 생기게 되었다.

 

TCP Connection 의 개념

1. 프로세스 간의 안정적이고 논리적(물리적인과 반대)인 통신 통로  물리적인것이 아닌 논리적임.

2. Connection 을 열고, (3 way handshake), 데이터를 주고받고, connection (4 way handshake) 을 닫는다.

TCP에서 데이터를 주고받기 위해서는 connection을 열고, 주고받고, 닫는다라고 이해하면 된다.

데이터를 주고받기 전에 Connection을 여는 이유는 프로세스 간의 안정적인 통신을 위해서는 몇가지 SET UP이 필요하기에 Connecton을 여는동안 해당 과정이 실행된다. COnnection을 닫느동안 받아온 자원을 반환한다.

이 과정을 connection-oriented 라고한다. connection 에 기반으로 동작하는 프로토콜을 의미하는구나. 이런 과정을 통해 데이터를 주고받는다고 이해한다.

 

Port 식별 : port number의 개념

프로세스 간의 통신을 위해서는 상대방 프로세스의 Port를 식별할 수 있어야한다.

인터넷 상에서 어떻게 Port를 유니크하게 식별할까?

1. port(number)를 정의한다. OS/시스템마다 다를 수 있는데 이것을 number로 정의한다

                                               16bits 로 이루어진 숫자 ( 0 ~ 65535 ) 이다.

Port라는 개념은 Port 자체로도 쓰이고 숫자로도 쓰이기에 여러가지를 의미한다.

Port number 만으로는 유니크하게 식별할 수 없다.

값의 범위가 0~65535 이기에 부족하다.

2. Internet Address(IP Address)로 각 host를 유니크하게 식별할 수 있다.

각 호스트안에서 포트넘버는 고유하게 지정하고, 각 호스트는 Internet Address로 식별이 가능하니 Internet address + port number로 유니크하게 조합한다.

이것이 바로 Socket 이다.

 

Socket 개념

Internet Address + port number로 인터넷상의 모든 포트를 Unique하게 식별할 수 잇다.

이러한 개념이 Socket이다.

Socket 이라는 개념은 인터넷 상에 존재하는 각 port를 유니크하게 식별하기 위한 주소이다.

TCP IP Stack이라는 것은, 엄밀히 말하면 주소, namespace를 의미하는 공간이다. Socket이 곧 Internet Address + Port라고 할 수 있다.

각 Socket은 인터넷 상에서 유니크해야한다. 고유해야한다.

 

TCP Connection과 Socket의 관계

각 Connection은 유니크하게 식별되어야한다.

Unique하게 식별되기 위해 한 쌍의 Socket은 connection을 유니크하게 식별한다.

컴퓨터 A의 IP + Port로 Socket A가 생성된다.

컴퓨터 B의 IP + Port로 Socket B가 생성된다.

 

그리고 이 각각의 Socket은 인터넷 공간에서 유니크하다.

< src socket  , dest socket  >

커넥션 요청한 쪽이 src, 받는쪽이 dest이다.

한쌍의 Socket이 커넥션을 이루고, 한쌍의 Socket으로 커넥션이 유일하다.

 

Ip Address와 Port Number가 Socket인데 각각을 풀어보면,

< src internet addr, src port, dest internet addr, dest port >

 

여기서 Socket의 관점에서 Connection과의 관계를 확인한다.

- 하나의 Socket은 동시에 여러 connection 들에서 사용될 수 있다.

지금은 예를들기 위해 컴퓨터 A와 컴퓨터 B를 기준으로만 진행했지만, 만약 컴퓨터 B에서 제공하는 여러 서비스를 다른 컴퓨터들에서 이용할 수 있어야하기에, 인터넷의 다른 프로세스들도 컴퓨터 B Process에 연결이 되어야하기에 이떄  Socket B는 다른 COnnection들에서도 사용될 수 있기에 그렇다. 즉, 하나의 Socket은 여러 Connection 들에서 사용될 수 있다. 

 

지금까지 TCP에 대해서 알아봤다. 이번에는 UDP에 대해 알아보자.

 

UDP개념

같은 transport layer에 TCP와 UDP 가 존재한다.

UDP는 user datagram protocol이다. connectionless 프로토콜이다.

TCP는 연결 기반의 프로토콜인데

UDP는 연결을 맺지않고 바로 데이터를 주고받는다.

UDP는 unreliable한 프로토콜이다. 

internet protocol 위에서 사용되는 거의 그대로 사용하는 프로토콜이기에 unreliable이다.

단지, 한 호스트 내에 존재하는 다양한 프로세스들이 UDP 통신을 할 수 있도록 하는 기능을 제공하고, 간단한 에러체크만 제공한다.

 

UDP 표준(RFC 768)을 보면 socket 단어가 등장하지 않는다.

Socket이라는 개념 자체는 처음에 TCP에서 connection을 정의하기 위해 사용한 개념이다.

이 Socket이라는 개념은 별게 아니고, ip address  + Port를 합친 개념인 것 뿐이다.

UDP에서도 자연스럽게 UDP에도 socket 개념을 쓰기 시작한다.

 

 

TCP/IP stack에서 Socket의 개념

Socket은 Port를 식별하기 위한 주소인것인데,

<protocol, ip address, port number>로 Socket을 유니크하게 식별한다.

원래 TCP에서만 사용된다면 Ip address와 port number로만 식별되었지만,

TCP와 UDP를 동시에 사용하면서 protocol도 추가되어 socket을 식별한다.

 

표준에서 정의한 개념을 바탕으로 예제이다.

한개의 컴퓨터와 프로세스 A, 프로세스 B가 존재한다.

프로세스 A는 네트워크 통신을 하고자 Port를 연결한다.

<TCP, 50.50.50.50, 8081>

프로세스 B는 네트워크 통신을 하고자 Port를 연결하고 Socket을 생성한다. 이후에Connection에 Socket이 사용된다.

<UDP, 50.50.50.50, 8081>

 

반드시 둘이 달라야한다.총 6가지의 경우의 수가 나온다.

(하나의 컴퓨터에서 여러 IP를 가질 수도 있음)

 

 

이제 인터넷상의 다른 Host C 가 프로세스 A의 서비스를 이용하고자한다.

프로세스 C

Socket < TCP, 77.77.77.77, 3001> -> Socket A <TCP, 50.50.50.50., 8081>

각각의 TCP 커넥션은 Socket의 쌍으로 유니크하게 표현된다.

Connection은 <77.77.77.77, 3001, 50.50.50.50, 8282> 로 커넥션이 연결된다.

각각의 커넥션들은 유니크해야한다.

 

이떄, Connection 은 반드시 Unique해야한다.

만약 같은 Host C에서 같은 IP이지만, Port가 다르다면 또 Unique한 Connection을 생성할 수 잇다.

Connection은 <77.77.77.77, 3000, 50.50.50.50, 8282> 로 커넥션이 연결된다.

 

하나의 socket이 여러 connection에서 사용가능하다. 이렇게 프로토콜 스펙에서 정의한다.

 

주의사항

실제로 네트워크 프로그래밍을 할때는 소켓의 개념과 의미가 미묘하게 다르다.

특히 소켓을 식별하는 방법에서 큰 차이가 있다.

+ Recent posts