C언어로 소켓 프로그래밍을 공부했던 것을 정리하는 차원에서 포스팅을 해볼까 합니다. 개인적으로 이 부분은 주로 웹상 문서들을 검색하면서 공부한 부분이기 때문에 그리 정확하지는 않을지도 모릅니다. 혹시 검색해서 찾아오신 분들은 이점 유념해주시기 바랍니다.

소켓(socket)이란 application에 transport계층과 network(IP계층)의 인터페이스 역할을 담당하는 것입니다. 소켓의 이런 역할 덕분에 프로그래머는 간단한 설정만으로도 네트워크 통신이 가능하게 해주는 아주 편리하죠. 만약 소켓이 없다면 전송 계층과 네트워크 계층간의 이런 설정도 세세하게 다뤄줘야합니다. 매번 네트워크 관련 프로그래밍할 때마다 이런 복잡한 설정을 다뤄줘야하면 상당히 귀찮죠. 

소켓관련 함수들은 리눅스와 윈도우와는 함수들의 매개변수 사용에 있어서 약간의 차이가 있습니다. 그래도 역할은 동일하게 수행하는 것으로 알고 있습니다.

패킷 전송방식에 있어서 크게 TCP방식과 UDP 방식이 있는데 TCP는 기본적으로 하나의 패킷을 보내고 그에 대한 전송이 제대로 전달되었는지 확인하는 응답신호를 받습니다. 기본적으로 패킷을 보내고 응답을 받을 때까지 다음 패킷을 보내지는 않습니다. 물론 UDP의 장점을 받아서 한꺼번에 패킷을 몰아서 보내고 다시 한꺼번에 몰아서 응답 받는 방식도 있습니다만 기본적인 TCP 패킷 전송방식은 패킷 전달에 대한 응답을 받는다는 것입니다.

그래서 일반적으로 TCP 방식은 속도가 느린편입니다만 요즘 한국에서는 인터넷 인프라가 너무 잘 되어 있어서 속도면에서도 그렇게 느린건 아닙니다.

어쨋든 TCP 방식은 보낸 패킷에 대한 응답 신호를 꼭 챙겨 받습니다. 만약 제대로 받지 못했다는 응답 신호가 온다면 해당하는 패킷을 재전송을 해줍니다. 이러한 처리는 프로그래머가 신경쓸 필요가 없습니다. 왜냐하면 IP계층에서 알아서 처리해주니까요. 그렇기에 프로그래머는 이점을 신경쓸 필요가 없죠.

만약 응답 신호가 일정시간 이후로도 도착하지 않으면 통신이 끊긴걸로 간주하고 연결을 끊어버립니다. 응답이 올 때까지 무작정 기다리지 않습니다.

어쨋든 이렇게 패킷 전송을 매번 확인하기 때문에 TCP는 패킷전송에 있어서 신뢰성을 가지는 겁니다. 어떤 자료를 정확하게 전송해야하는 상황에서는 속도면에서는 조금 손해를 보더라도 TCP처럼 정확하게 전달되도록 네트워크 프로그래밍을 하는게 좋습니다.

UDP는 TCP에 비해서 보낸 패킷에 대한 응답 신호를 받지 않습니다. 즉 패킷을 보내고나면 그에 대한 처리는 나몰라라 하는겁니다. 그래서 신뢰성이 TCP에 비해서 떨어지는거고 대신 응답 신호를 안기다리고 순서대로 패킷을 바로 보내버리니깐 속도가 빠른겁니다.

간단한 예를 들어서...

A라는 컴퓨터가 있고 B라는 컴퓨터가 서로 네트워크로 통신한다고 합시다.

한 패킷을 보내는데 1초가 걸리고 응답 신호를 받는데 1초가 걸린다고 합시다. 그리고 총 3개의 패킷을 보낸다고 합시다.

TCP방식이라면 패킷 전송 완료에 얼마나 걸릴까요?
1초 : A가 패킷 하나 B에게 보냅니다.
2초 : B는 패킷 받아서 A에게 패킷 받았다고 응답 신호를 보냅니다.
3초 : A가 B의 응답 신호를 받았습니다.
4초 : A는 패킷 하나를 B에게 보냅니다.
5초 : B는 패킷 받아서 A에게 응답 신호를 보냅니다.
6초 : A는 응답 신호를 받았습니다.
7초 : A는 마지막 패킷을 B에게 보냈습니다.
8초: B는 패킷 받아서 A에게 응답 신호를 보냅니다.
9초 : A는 응답 신호를 받고 패킷 전송을 종료합니다.

B가 패킷을 제대로 받았다고 가정하에 9초란 시간이 걸리네요. 만약 중간에 패킷을 못받았다면 시간은 더 걸리겠죠?

그럼 UDP방식을 생각해볼까요?
1초 : A는 B에게 패킷 하나를 보냅니다.
2초 : A는 B에게 두 번째 패킷을 보냅니다.
3초 : A는 B에게 마지막 패킷을 보냅니다. 그리고 패킷 전송을 종료합니다.

달랑 3초 걸립니다. UDP는 패킷을 받았다는 응답 신호를 안받기 때문에 그만큼 속도가 빠른겁니다. 전송하는 컴퓨터는 전송만 하면 되거든요.

그래서 전송 속도가 중요시될 때 UDP방식을 씁니다만 요즘은 대부분 TCP방식을 이용합니다. 앞서 계속 얘기한 부분이지만 이미 인터넷 속도가 충분히 빠르기 때문입니다. 빠른 속도가 보장된 환경에서는 아무래도 약간 느리더라도 확실한게 좋겠죠?
저작자 표시 비영리 변경 금지

TRACKBACK :: http://tasia.tistory.com/trackback/70 관련글 쓰기

댓글을 달아 주세요

1  ... 124 125 126 127 128 129 130 131 132  ... 198 

카테고리

분류 전체보기 (198)
이런저런 이야기 (33)
컴퓨터관련 (57)
C/C++/MFC (24)
OS Platform (16)
AutoHotkey (24)
스마트폰 (6)
Games (22)
티스토리 초대장 배포 (15)

달력

«   2014/09   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
get rsstistory! Tistory Tistory 가입하기!

티스토리 툴바