반응형

TCP/IP에 대한 이론적인 부분은 깊이에 따라 복잡할 수도 있고 그렇지 않을 수도 있습니다만,

상세한 이론적인 부분은 다른 글들을 검색하거나 책을 보고 별도로 공부하시고 실제로 개발에 필요한 부분만 정리하도록 하겠습니다.

 

기본용어

IP : Internet Protocol의 약자로서 "너희집에 인터넷되나?" 하고 물어보면 "된다"라고 말하는 이것입니다.
    쉽게 얘기해서 IP의 역할은 상대 컴퓨터까지 찾아가는 통신규약입니다. 
    즉, 내 컴퓨터에서 내가 접속하려는 컴퓨터까지 찾아가는 역할을 합니다.
    이 IP를 기반으로 TCP, UDP가 있습니다. 

TCP : Transmission Control Protocol의 약자입니다.
    TCP는 port번호를 가지는 프로토콜입니다. 
    TCP가 하는 역할은 특정 port번호를 가진 프로그램을 찾는 것입니다.

   따라서, TCP/IP라고 함은 
   내가 접속하려는 컴퓨터를 찾아서(IP) 나에게 서비스를 제공해줄 프로그램을 찾아주는 
   통신규약(TCP)이라고 생각하면 됩니다.

UDP : User Datagram Protocol의 약자입니다.
   UDP도 port번호를 가지는 프로토콜입니다. 
   UDP가 하는 역할도 특정 port번호를 가진 프로그램을 찾는 protocol입니다.
   마찬가지로 UDP/IP도 내가 접속혀려는 컴퓨터를 찾아서(IP)
   나에게 서비스를 제공해줄 프로그램을 찾아주는 통신규약(UDP)입니다.

다시 처음으로 돌아가서
"너희집에 인터넷되나?"라고 물었다면, "TCP/IP, UDP/IP되나?"입니다.
이들 기반하에 HTTP, FTP를 사용하는 응용 프로그램이 실행됩니다.

 

TCP와 UDP의 차이

TCP와 UDP는 IP기반 protocol이며, 또한 port번호를 가집니다.
  그러나, TCP와 UDP간의 port번호를 같은 것 사용해도 상관이 없습니다. 
  서로 다른 protocol이기 때문입니다.

 TCP
  - 연결지향형 protocol로서 접속상태를 지속적으로 유지합니다. 
  - 데이터 전송[send(2)]이 성공했다고 하면 
   
   반드시 상대시스템으로 데이터 전송이 오류 없이 순서대로 전송되었다는 것을 보장할 수 있습니다.


 UDP
   - 비연결형 protocol로서 접속상태를 유지하지 않습니다.
   - 데이터 전송[sendto(2)]이 정상적이었다고 해서 반드시 데이터가 전송된 것을 알 수 없습니다. 
     즉, 유실될 수 있습니다. 

   - server socket이 open되어 있지 않아도 전송시에 오류가 발생하지 않습니다.
   - 또한 먼저 보낸 데이터가 먼저 도달한다는 보장도 없습니다.
   - 그렇지만, 데이터량이 짧고 빠른 전송을 요구할 때에, 유실되어도 크게 문제가 없는 경우에 사용합니다.
   - 예를들면, 데이터를 전송하고, 응답이 안오면 다시 보내는 등의 업무에서 사용할 수 있습니다.

 정리하면,
   - TCP는 send(2)함수가 정상이면, 반드시 상대시스템에 순서대로 전달이 되는 믿을 수 있는 protocol입니다.
   - UDP는 sendto(2)함수가 정상이더라도, 상대가 준비되었는 지, 전송은 되었는 지, 
     순서대로 갔는 지 모르는 무책임한 protocol입니다. 개발자간에 잘 체크해서 알아서 맞춰야합니다.

 

TCP/IP로 접속했다고 함은?

이쪽 컴퓨터(IP)의 프로그램(port)에서 상대시스템(IP)의 특정 프로그램(port)과 연결되었다는 의미입니다.
일반적으로 server의 port는 bind(2)를 통하여 정합니다. 
그래야 client가 접속할 port번호를 알고 접속할 수 있기 때문입니다.

 - 물론 server socket도 bind(2)를 하지 않으면, port번호를 동적할당받을 수 있습니다. 
 - 그러면, client가 접속할 port번호를 몇번으로 해야할지 알지 못하여 접속할 수 없게됩니다. 
   다른 방법으로 port번호를 client에 전달할 수 있는 방법이 있으면 가능합니다.

일반적으로 client의 port는 connect(2)를 통해서 접속할 때에 동적으로 할당됩니다.
 - 물론 client socket도 bind(2)로 port번호를 정해줄 수 있습니다.
 - client의 port번호를 정하면, 동시에 두개의 client 프로그램을 실행시키게 되면 
   port번호가 dup나서 오류가 발생합니다.

정리하면,
  TCP/IP로 접속되었으면, local IP : local port <--> remote IP : remote port가 
  network에 연결된 모든 시스템에서 unique(IP:port:IP:port)하다는 의미입니다.

 


 

see also :  TCP/IP 통신 프로그램   Socket 통신 관련 Library  

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,