TCP의 특징

Posted 2012. 10. 16. 14:44

1. 연결 지향적이며 재전송 한다.

연결 지향적이란건 내부적으로 3way hand shake라는 기능이 있기 때문임.

이건 connect 이전에 먼저 실행되어 접속해도 되는지 안되는지 알아보는 작업 입니다.

3번의 패킷을 주고 받음으로 최종 접속여부가 가려지게 된다. 재전송은 hand shake라는게

받았다는 응답이없을면 다시 보내지게 된다.

대기시간과 횟수조절에 옵션으로 설정이 가능하다.


2. 데이터는 스트림으로서 순차성이 있다.

네트워크상에서 목적지까지 다른 방향으로 갈수가 있다.

이 과정에서 데이터가 섞이는 것을 방지하기 위해 TCP는 각 패킷에 순서를 매기낟.


3  흐름제어를 수행한다.

송신자가 수신자가 감당하기 힘들정도로 빨리 보낸다면 수신자의 버퍼는 넘쳐버리게 된다.

이런흐름을 제어하는 기법엔 G-Back-N ARQ가 있고 슬라이딩기법이 있다.

이중 슬라이딩 기법을 사용한다. 슬라이딩 기법은 수신자의 ACK응답 상황에 따라 송신자의 전송버프가

커졌다 줄었다 하면서 송신량을 조절하는 기법이다.


4. 포트를 이용해 서비스를다중화 한다.

TCP는 1:1 통신 방법이다. 포트라는 개념이 있어 우리가 사용하는 어플리케이션용 포트를하나씩 할당

해주면 각각의 어플리케이션에선 자신에게 할당된 포트를 용해 데이터를 주고 받을 수 있다.

OSI 7계층

Posted 2012. 10. 16. 14:35

국제표준기구(OSI)에서 7개의 컴퓨터 통신용 프로토콜층을 설명한 개방형 시스템 상호접속

참조모델을 구성 한 것이다.

각 게층별로 특정 기능이 있고, 이것을 사용하는 이유는 여러 정보통신업체 장비들 간 호환성이

필요하기 때문이다.


7) 응용계층( Application Layer )

: 응용 프로세스간의 정보를 교환한다. 사용자가 응용프로그램을 통해 네트워크 환경을 이용 할 수 있도록 응용프로세스간 정보 교환을 실현해 준다. TELNET, FTP등등 각종네트워크관련 프로그램들이 해당된다.

6) 표현계층( Presentation Layer )

: 데이터 형식 설정 및 코드 변환.

운영체제, 파일시스템과 관련이 있으며 서버와 클라이언트간의 상이한 데이터 표현 방식 및 부호체계를 서로 변환하여 주는 서비스를 제공한다.

또한 데이터의 보안을 유지하기 위해 암호화에 관련한 사항들을 규정함으로써 응용 계층의 통신을 도와주는 계층이다.

5) 세션계층( Session Layer )

:송수신 측에서 표현계층에서 사용할 데이터의 교환을 위한 세션과 대화방식을 결정한다.

즉 통신세션을 구성하는 계층으로 포트연결 이라고도 한다.

4) 전송계층( Transport Layer )

:네트워크 내에서 신뢰성있게 전달하기 위해 가상회로를 구축하고 유지와 종료 그리고 전소 ㅇ오류 검출 과 복.... 즉 4단계 TCP를 사용할지 UDP를 사용할지.. 선택한 것에 대한 작업

3) 네트워크 계층( Network Layer )

:두 시스템간의 연결성과 경로선택을 제공한다. 그리고 패킷을 발신지로부터 목적지로 전달할 책임을 갖는다. 

2) 데이터링크 게층( Data Link Layer )

: 네트워크게층으로 부터의 메시지를 비트로 변환하여 네트워크 바툻

1) 물리계층( Phisical Layer )

: 전기적 신호를 전송한다. 받은프레임을 비트단위의 신호로 바꾸어 하드웨어적인 주소를 사용하여 물리적인 전송매체를 통해 전달하는 일.

즉 데이터링크계층에서 만들어진 데이터를 전기신호나 광신호로 바꾸어 송수신하는 역할.



#pragma pack

Posted 2012. 10. 16. 14:14

기본적인 윈도우 환경에서 데이터정렬은 4바이트를 기준으로 이루어 진다.

cpu가 32바이트인 컴퓨터에서 4바이트씩 처리하는게 가장 빠르기 때문이다.

#pragma pack 은 이 구조체정렬을 몇 바이트씩 pack을 할지 정할수 있는것이다.


예를 들어.

struct AAA

{

int a;

short b;

};

AAA라는 구조체가 있다.

멤버변수로 int형 a와 short형 b가 있다. 두 변수를 합하면 6바이트가 된다.

하지만 sizeof(AAA)를 하면 8바이트가 나오게 된다.

왜냐면 구조체 정렬이 4바이트로 되어 있기 때문이다.

short는 2바이트면 되지만 메모리 구조상 4바이트를 먼저 할당할 다음 2바이트를 사용하게 된다.

그러면 남은 2바이트는 사용하지않는 공간이 되어 버린다.


AAA bbb;

sizeof(bbb.a)  sizeof(bbb.b) 하면 제대로 4바이트 2바이트가나오지만 묶으면 그렇지 않다


그렇게 데이터 교환중에 의도치 않은 현상이 발생 할 수도 있다.

묶었을때도 1바이트씩 처리되게 바꿔 주면 됨.

#pragma pack(1)        // 묶어주고

struct AAA

{

int a;

short b;

};

#pragma pack()        // 원상태로


사용 후 복구 시켜 줘야 한다.

앞서 말했다 싶이 4바이트씩 처리하는게 가장 빠르다고 했다.

복구 시키지않으면 시스템이 저하될수도 있다.



« PREV : 1 : ··· : 58 : 59 : 60 : 61 : 62 : 63 : 64 : ··· : 77 : NEXT »