티스토리 뷰

스트림 1,2는 문제 없음. 스트림3은 1,2,3,4는 전송 됬으나 5가 오지 않고 6,7,8이 먼저온 상황

5번이 오면 5,6,7,8을 스트림3에 보냄. 

스트림4에 5번까지는 갔으나 6번이 와야되는데 7번이 왔음.그림이 좀 잘못 됬는데 7번이 버퍼 안에 있는게 정상이다.

5번까지 스트림4로 전송 됬으니까 두번째 버퍼의 위치에 7번이 위치하고 6번이 도착하면 스트림4로 전송한다.


SCTP를 사용하는 에코 서버 프로그램

sctp에서는 데이터를 주고받으면서 어떤 이벤트가 발생하는지를 유저프로세스에서 알게끔 해놓았다고 했다. sctp소켓을 만들고 나서 소켓 옵션을 설정하면 된다.


 또한 연결 지향형이지만 udp소켓처럼 동작한다고 했으므로, 클라이언트에 대한 정보를 담기 위해서 sctp_recvmsg의 시스템콜의 매개변수에 그 정보를 담기 위한 구조체 정보도 넘겨야 한다.


서버와 클라이언트 사이의 같은 스트림 번호를 사용해야지 원하는 데이터를 얻을수 있다.


8번 줄 sctp_sndrcvinfo sri; -> send receive info -> 프로토콜 상태에 대해 어떤지 나한테 알려줘라고 소켓옵션 설정.

 default는 8개의 종류중에 1개만빼고 나머지는 disable되어 있다. 하나는 항상 enable되어 있다고 해도 소켓옵션으로 지정해야한다.


receive가 된 이벤트가 발생하면 그것과 관련된 정보를 나한테 알려줘라고 세팅.


상대방이 스트림 몇번을 사용해서 데이터를 보냈는지에 대한 이 구조체에 정보를 적어 놓는다.


sctp_recvmsg 시스템콜에서 sri가 매개변수로 넘어간다.


22번째줄 evnts.sctp_data_io_event = 1;

sctp_evenet_subscribe형인 evnts변수는 내부에 8개의 변수를 가지는데, 그 8개에 구조체가 또 포함되어있고 이런식으로 구성됨.

io_event만 신경쓰고 다른 이벤트는 신경쓰지 않겠다는 의미이다.


23. setsockopt(sock_fd,IPPROTO_SCTP,SCTP_EVENTS,&evnts,sizeof(evnts));

내가 원하는 이벤트에 관한 것이 발생하면 유저 프로세스에 통보하도록 소켓 옵션 설정.



27번줄. sctp_recvmsg가 성공하면 읽은 데이터의 바이트 수를 리턴함.

클라이언트의 아이피주소와  sctp포트번호를 알기 위해서 cliaddr에 들어감.


i/o이벤트가 발생하면 그것에 관한 정보를 sri에 저장.(가장 중요한것이 스트림 번호)

msg_flags -> 어떤 메시지를 통해서 보내왔는지. 우리는 그냥 0을 넣어서 사용하지 않겠다.


위의 예는 스트림번호를 유저프로세스가 읽어서 증가시킬수 있다는걸 보이기 위해서 sri.sinfo_stream++;를 넣었다.

스트림번호를 우리가 바꿀수 있지만 default는 0~9까지이다.


9번 스트림으로 받아왔으면 우리가 1증가시키면 0번 스트림으로 되돌려준다.


37번줄 ppid = protocol id

32bit의 프로토콜 id가 데이터 청크 헤더에 정의 되어 있다. 상대방이 사용한 프로토콜을 사용해서 그대로 다시 되돌려주겠다는 의미.




[3] hello 라고 입력한 경우 3번 스트림을 사용해서 hello를 보내겠다는 클라이언트 프로그램.

25번 서버가 보내온 스트림 번호와 시퀀스 넘버와 association번호를 출력해보아라.


클라이언트는 0번 스트림을 사용해서 보냈지만 에코 서버 프로그램에서는 1번 스트림 번호를 사용해서 보냈을것이다. 또한 시퀀스 번호는 0.

그 다음은 [4]Message two를 했을때 서버가 1증가 시키므로 스트림번호 5에 시퀀스 번호 0이 올것이다. assoc넘버까지 찍혔는데, 3개다 같은 assoc넘버가 찍혔으므로 같은 연결이라는 의미이다.


서버는 5번 스트림에 대한 두번째 메세지인 Message three를 되돌려 줄때 시퀀스 번호를 1로 설정해서 보낸다.







댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함