티스토리 뷰

2020/03/22 - [분류 전체보기] - 네트워크 프로그래밍 - 윈속 디자인(시스템 구조)

불러오는 중입니다...

메시지 중심

메시지 중심의 프로토콜에서는 하나의 메시지를 주고 받으며 각각의 메시지들은 분리되어 전송된다.

또한 수신측에서는 분리된 메시지로 데이터를 받게 됨을 의미한다.

수신측은 하나 이상의 데이터를 이어 받을 수 없다.

위 그림에서 보면 왼쪽(전송) 컴퓨터에서 128, 64, 32bytes의 데이터를 송신했고

수신측은 256byte의 버퍼를 사용해 3번의 recv를 호출한다.

첫번째 recv 호출 시 모든 패킷을 수신해도 첫번째 recv 호출은 모든 패킷을 리턴하지 않는다.

이러한 로직을 "Preserving message boundary" 라고 한다.

이 로직은 구조적 데이터(structured data/ 구조체 같은 데이터)를 주고받는데 많이 이용된다.

네트워크 게임에서 각 플레이어가 위치 정보를 다른 플레이어에게 전달할 때 사용.

 

스트림 중심

메시지 경계를 가지지 않는 프로토콜을 스트림 기반의 프로토콜이라고 한다.

연속적인 데이터를 전송하는 것. 수신측은 메시지 경계가 없이 읽을 수 있을 만큼 데이터를 읽는다.

송신측에서 메시지가 작은 조각으로 나뉘거나 다른 메시지와 병합되어 더 큰 패킷들로 전송될 수 있다.

수신측은 시스템의 Network stack에 데이터가 도착하는대로 데이터를 읽어서 버퍼에 저장을 한다.

수신측의 프로세스가 일정양의 데이터를 요구하게 되면 시스템은 프로세스가 호출 시에

제공한 버퍼의 크기를 넘지 않는 선에서 가능한 많은 양의 데이터를 리턴해준다.

그림에서는 2번째 3번째 데이터가 합쳐져서 전송이 되었다. 수신 단에서는 이 프로세스를 위해

들어오는 모든 데이터를 스택에 모아둔다. 256byte 버퍼로 recv를 호출하면 모든 224 바이트가 한번에

리턴이 된다. 20byte 버퍼면 20byte만 리턴을 하게된다.

합쳐지는 단위는 시스템의 MTU와 Nagle 알고리즘에 의해 결정된다.

 

TCP에서 데이터의 전송은 Nagle 알고리즘에 의해 결정이 된다.

알고리즘에 의해 전송할 데이터의 누적된 크기가 일정 크기 이상이 되거나, 일정 시간이 경과된 뒤에 전송된다.

또한 수신 측에서도 데이터 도착을 확인하는 ACK 패킷을 전송하는 것을

특정 시간 동안 지연시켜서 이 패킷과 같이 전송할 데이터를 기다리게 된다.

패킷을 작게 여러번 전송하는 것은 비효율적이고 에러 체크나 전송 확인도 여러번 해서 부하가 증가하는 원인이된다.

Pseudo Stream

송신측은 독립된 패킷으로 데이터를 전송하고 수신측은 어떤 크기든 원하는 크기로 합쳐서 수신한다.

대부분은 Pseudo Stream을 스트림 중심의 프로토콜로 취급하기도 한다.

연결지향/ 비연결

 연결지향

 데이터 교환에 앞서 두 지점간의 데이터를 송수신하기 위한 경로가 설정된다.

 이런 연결통로로 인해 데이터 라우팅이 가능할 뿐만 아니라 서로가 살아있는지, 응답 가능한지 알 수 있다.

 연결통로를 유지하기 위해 오버헤드도 존재할 수 있고 연결지향은 데이터의 무결성을 보장해주는데

 이러한 것들도 오버헤드를 증가시키는 요인이기도 하다.

 

 비연결형 

 상대방이 데이터를 기다리고 있는지 검사하지 않는다.

 송신측이 데이터를 전송해도 데이터가 이동하는 도중에 문제가 생겨 수신측에서 받지 못해도

 그것을 송신측에서 알지 못한다.

 

신뢰성과 Ordering

특정 프로토콜을 사용해 응용프로그램을 디자인 할 때 프로토콜의 신뢰성과 Ordering은

프로토콜을 선택하기 위한 가장 중요한 특성일 것이다.

       신뢰성이란? 송신측에서 송신한 데이터 전부가 수신측에 도착한다

신뢰성을 보장하지 않는 프로토콜은 모든 데이터가 도착하는 것을 보장하지 않는다.

데이터의 무결성을 보장하지 않는다는 말이다.

       Ordering이란? 송신측에서 송신한 순서대로 수신측에 도착하는 것을 보장한다.

 

Graceful Close

연결지향 프로토콜에만 해당되는 사항이다.

graceful close에서는 한쪽에서 연결을 종료하기 위하여 시도할 때

다른 한쪽에서는 아직 네트워크의 전송선이나 네트워크 스택에 남아있는 데이터를 수신할 수 있다.

TCP에 경우 연결을 끊기 원하는 쪽에서는 FIN flag를 설정한 데이터그램을 전송한다.

상대방은 응답으로 ACK flag를 설정한 데이터그램을 전송한다.

이 상태에서 상대방은 데이터를 계속 전송할 수 있다.

왜냐면 상대방은 아직 FIN flag 데이터그램을 응답하지 않았기 때문이다.

상대방이 FIN을 보내고 연결을 끊기 원하는 쪽이 ACK로 응답하면 연결이 종료되게 된다.

 

브로드캐스트(Broadcast Data)

브로드캐스트란 하나의 워크스테이션에서 전송한 데이터가 LAN상의 모든 워크스테이션에 전달되는 것을 말한다.

이러한 기능은 비연결형 프로토콜에서 가능하다.

단점은 모든 장치들이 데이터를 수신하게 된다는 것이다.

 1. 사용자가 메시지를 브로드캐스트해 LAN상에 장치에 전달.

 2. LAN 상 장치들은 메시지를 수신해 네트워크 스택까지 전달

 3. 네트워크 스택은 이 메시지를 수신해야하는 프로세스가 있는지 매번 검색

필요 없는 데이터들도 이렇게 매번 수신할 프로세스가 있는지 검색하면 시간을 허비하게 된다.

결과적으로 많은 양의 브로드캐스트 데이터 전송은 LAN의 모든 장치를 traffinc의 수렁에 빠지게 한다.

일반적으로 라우터는 네트워크간의 브로드캐스트 패킷을 전파하지 않는다.

 

멀티캐스트(Multicast)

멀티캐스트는 하나의 프로세스에서 전송한 데이터를 하나 이상의 수신측이 수신할 수 있도록 하는 기술이다.

멀티캐스트 세션에 참각하는 방법은 각 프로토콜별로 다르다.

IP프로토콜에서는 브로드캐스트의 변형으로, 멀티캐스트 데이터를 송수신하기를 원하느 호스트가

특별한 그룹에 참가를 해야 한다. 하나의 프로세스가 멀티캐스트 그룹에 참가하면

네트워크 카드에 필터가 추가되어 그룹에 해당하는 주소만을 수신하여 네트워크 스택에 전달할 것이다.

 

QOS(Quality of Service)

응용프로그램이 사용할 특정한 네트워크 대역폭을 배타적으로 사용할 수 있게 하는 기술

실시간 비디오 스트리밍 프로그램에 사용이 된다.

비디오를 수신하는 응용프로그램은 제한된 대역폭을 사용하면서 부드럽고 깨끗한 화면을 보여줘야 한다.

QOS는 네트워크 대역폭을 예약하여 프레임을 전송선으로부터 직접 읽게 할 수 있다.

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함